blob: d0d0bbcfa9f423a684ae4a0793341689f1e26d8e [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * Copyright (c) 2012-2014 Qualcomm Atheros, Inc.
24 * All Rights Reserved.
25 * Qualcomm Atheros Confidential and Proprietary.
26 *
27 */
28
Jeff Johnson295189b2012-06-20 16:38:30 -070029
30/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070031 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070032 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070033 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070034 The functions externalized by this module are to be called ONLY by other
35 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070036 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070037 Are listed for each API below.
38
Jeff Johnson295189b2012-06-20 16:38:30 -070039 Copyright (c) 2010-2011 QUALCOMM Incorporated.
40 All Rights Reserved.
41 Qualcomm Confidential and Proprietary
42===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070043/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070044 EDIT HISTORY FOR FILE
45
Jeff Johnson295189b2012-06-20 16:38:30 -070046 This section contains comments describing changes made to the module.
47 Notice that changes are listed in reverse chronological order.
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 $Header$$DateTime$$Author$
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 when who what, where, why
52---------- --- -------------------------------------------------
5310/05/2011 haparna Adding support for Keep Alive Feature
542010-12-30 smiryala UMAC convergence changes
552010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
56===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070057#include "vos_mq.h"
58#include "vos_api.h"
59#include "vos_packet.h"
60#include "vos_nvitem.h"
61#include "sirApi.h"
62#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053063#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070064#include "wlan_qct_wda.h"
65#include "wlan_qct_wda_msg.h"
66#include "wlan_qct_wdi_cfg.h"
67#include "wlan_qct_wdi.h"
68#include "wlan_qct_wdi_ds.h"
69#include "wlan_hal_cfg.h"
70/**********************/
71#include "wniApi.h"
72#include "cfgApi.h"
73#include "limApi.h"
74#include "wlan_qct_tl.h"
75#include "wlan_qct_tli_ba.h"
76#include "limUtils.h"
77#include "btcApi.h"
78#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079#include "pttMsgApi.h"
80#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070081/* Used MACRO's */
82/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080083#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
85#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070086#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define CONVERT_WDI2SIR_STATUS(x) \
88 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
89
90#define IS_WDI_STATUS_FAILURE(status) \
91 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070092#define CONVERT_WDI2VOS_STATUS(x) \
93 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
94
95/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070096#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_GET_BA_TXFLAG(a, b, c) \
99 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
100
101#define WDA_SET_BA_TXFLAG(a, b, c) \
102 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
103
104#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
105 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700106#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
107 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108/* timer related Macros */
109#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
110 tx_timer_create(a, b, c, d, e, f, g)
111#define WDA_START_TIMER(a) tx_timer_activate(a)
112#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
113#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700114#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700115
116#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
117 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800122#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700125
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700126#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700127#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
128 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
129 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
130
131#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
132#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800133#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
134
Jeff Johnson295189b2012-06-20 16:38:30 -0700135/* extern declarations */
136extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700137extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
138
Jeff Johnson295189b2012-06-20 16:38:30 -0700139/* forward declarations */
140void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
141 void *pBodyptr, tANI_U32 bodyVal) ;
142VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
143 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700144VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
145VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
146
147extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
148 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
149void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
150 tANI_U32 *pConfig) ;
151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
211VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
212 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700213#ifdef WLAN_FEATURE_11AC
214VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
215 tUpdateVHTOpMode *pData);
216#endif
Leo Chang9056f462013-08-01 19:21:11 -0700217
218#ifdef FEATURE_WLAN_LPHB
219VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
220 tSirLPHBReq *pData);
221#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700222/*
223 * FUNCTION: WDA_open
224 * Allocate the WDA context
225 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530226VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700227 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;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530279 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 &wdiDevCapability, pMacParams->driverType))
281 {
282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
283 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800284 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700285 }
286 else
287 {
288 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
289 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
290 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 /* update max STA in WDA used for BA */
292 wdaContext->wdaMaxSta = pMacParams->maxStation;
293 /* store the frameTransRequired flag in wdaContext, to send this to HAL
294 * in WDA_Start
295 */
296 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
297 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700298 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800299
300error:
301 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
302 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700303}
304
Jeff Johnson295189b2012-06-20 16:38:30 -0700305/*
306 * FUNCTION: WDA_preStart
307 * Trigger DAL-AL to start CFG download
308 */
309VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
310{
311 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
312 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700313 /*
314 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
315 */
316 wdaMsg.type = WNI_CFG_DNLD_REQ ;
317 wdaMsg.bodyptr = NULL;
318 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 /* post the message.. */
320 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
321 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
322 {
323 vosStatus = VOS_STATUS_E_BADMSG;
324 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 return( vosStatus );
326}
Jeff Johnson295189b2012-06-20 16:38:30 -0700327/*
328 * FUNCTION: WDA_wdiStartCallback
329 * Once WDI_Start is finished, WDI start callback will be called by WDI
330 * to indicate completion of WDI_Start.
331 */
332void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
333 void *pVosContext)
334{
335 tWDA_CbContext *wdaContext;
336 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700337 if (NULL == pVosContext)
338 {
339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700340 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 return;
342 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
344 if (NULL == wdaContext)
345 {
346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700347 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 return;
349 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700350 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
351 {
352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700353 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 }
355 else
356 {
357 wdaContext->wdaState = WDA_START_STATE;
358 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* extract and save version information from the Start Response */
360 wdaContext->wcnssWlanCompiledVersion.major =
361 wdiRspParams->wlanCompiledVersion.major;
362 wdaContext->wcnssWlanCompiledVersion.minor =
363 wdiRspParams->wlanCompiledVersion.minor;
364 wdaContext->wcnssWlanCompiledVersion.version =
365 wdiRspParams->wlanCompiledVersion.version;
366 wdaContext->wcnssWlanCompiledVersion.revision =
367 wdiRspParams->wlanCompiledVersion.revision;
368 wdaContext->wcnssWlanReportedVersion.major =
369 wdiRspParams->wlanReportedVersion.major;
370 wdaContext->wcnssWlanReportedVersion.minor =
371 wdiRspParams->wlanReportedVersion.minor;
372 wdaContext->wcnssWlanReportedVersion.version =
373 wdiRspParams->wlanReportedVersion.version;
374 wdaContext->wcnssWlanReportedVersion.revision =
375 wdiRspParams->wlanReportedVersion.revision;
376 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
377 wdiRspParams->wcnssSoftwareVersion,
378 sizeof(wdaContext->wcnssSoftwareVersionString));
379 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
380 wdiRspParams->wcnssHardwareVersion,
381 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700382 /* Notify WDA_start that WDI_Start has completed */
383 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700384 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 {
386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700387 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 return;
390}
391
Jeff Johnson295189b2012-06-20 16:38:30 -0700392/*
393 * FUNCTION: WDA_start
394 * Prepare TLV configuration and call WDI_Start.
395 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700396VOS_STATUS WDA_start(v_PVOID_t pVosContext)
397{
398 tWDA_CbContext *wdaContext;
399 VOS_STATUS status;
400 WDI_Status wdiStatus;
401 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 if (NULL == pVosContext)
403 {
404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700405 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 return VOS_STATUS_E_FAILURE;
407 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700408 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
409 if (NULL == wdaContext)
410 {
411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700412 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 return VOS_STATUS_E_FAILURE;
414 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700415 /* Non-FTM mode, WDA status for START must be INIT
416 * FTM mode, WDA Status for START can be INIT or STOP */
417 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
418 (WDA_STOP_STATE != wdaContext->wdaState) )
419 {
420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
421 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700422 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 return VOS_STATUS_E_FAILURE;
424 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 /* initialize the wdiStartParam. Note that we can create this on
426 the stack since we won't exit until WDI_Start() completes or
427 times out */
428 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /* prepare the config TLV for the WDI */
431 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
432 if ( !VOS_IS_STATUS_SUCCESS(status) )
433 {
434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700435 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 return VOS_STATUS_E_FAILURE;
437 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 /* note from here onwards if an error occurs we must
439 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
441 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
442 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 /* initialize the WDA-WDI synchronization event */
444 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 /* call WDI start */
446 wdiStatus = WDI_Start(&wdiStartParam,
447 (WDI_StartRspCb)WDA_wdiStartCallback,
448 (v_VOID_t *)pVosContext);
449 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700452 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 vos_mem_free(wdiStartParam.pConfigBuffer);
454 return VOS_STATUS_E_FAILURE;
455 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* wait for WDI start to invoke our callback */
457 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
458 WDA_WDI_START_TIMEOUT );
459 if ( !VOS_IS_STATUS_SUCCESS(status) )
460 {
461 if ( VOS_STATUS_E_TIMEOUT == status )
462 {
463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700464 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 }
466 else
467 {
468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
469 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700470 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 }
472 vos_mem_free(wdiStartParam.pConfigBuffer);
473 return VOS_STATUS_E_FAILURE;
474 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* we no longer need the config TLV */
477 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* if we are not in the START state then WDI_Start() failed */
479 if (WDA_START_STATE != wdaContext->wdaState)
480 {
481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700482 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 return VOS_STATUS_E_FAILURE;
484 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* FTM mode does not need to monitor BA activity */
486 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
487 {
488 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800489 if(VOS_STATUS_SUCCESS == status)
490 {
491 wdaContext->wdaTimersCreated = VOS_TRUE;
492 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 }
Leo Chang9d76f622013-08-23 16:34:52 -0700494 else
495 {
496 vos_event_init(&wdaContext->ftmStopDoneEvent);
497 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 return status;
499}
500
Jeff Johnson295189b2012-06-20 16:38:30 -0700501/*
502 * FUNCTION: WDA_prepareConfigTLV
503 * Function to prepare CFG for DAL(WDA)
504 */
505VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
506 WDI_StartReqParamsType *wdiStartParams )
507{
508 /* get pMac to acess CFG data base */
509 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
510 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
511 tHalCfg *tlvStruct = NULL ;
512 tANI_U8 *tlvStructStart = NULL ;
513 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
514 v_PVOID_t *configParam;
515 tANI_U32 configParamSize;
516 tANI_U32 *configDataValue;
517 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700518 tANI_U8 i;
519
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 if ((NULL == pMac)||(NULL == wdaContext))
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 VOS_ASSERT(0);
525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
528 WNI_CFG_STA_ID_LEN +
529 WNI_CFG_EDCA_WME_ACBK_LEN +
530 WNI_CFG_EDCA_WME_ACBE_LEN +
531 WNI_CFG_EDCA_WME_ACVI_LEN +
532 WNI_CFG_EDCA_WME_ACVO_LEN +
533 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 /* malloc memory for all configs in one shot */
535 configParam = vos_mem_malloc(configParamSize);
536
537 if(NULL == configParam )
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 VOS_ASSERT(0) ;
542 return VOS_STATUS_E_NOMEM;
543 }
544 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 tlvStruct = (tHalCfg *)configParam;
547 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 /* TODO: Remove Later */
549 /* QWLAN_HAL_CFG_STA_ID */
550 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
551 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
552 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
553 eSIR_SUCCESS)
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
556 "Failed to get value for WNI_CFG_STA_ID");
557 goto handle_failure;
558 }
559 tlvStruct->length = strLength ;
560 /* calculate the pad bytes to have the CFG in aligned format */
561 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
562 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
564 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
566 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
567 tlvStruct->length = sizeof(tANI_U32);
568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
569 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
570 != eSIR_SUCCESS)
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
573 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
574 goto handle_failure;
575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
577 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
579 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
580 tlvStruct->length = sizeof(tANI_U32);
581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
582 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
583 eSIR_SUCCESS)
584 {
585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
586 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
587 goto handle_failure;
588 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
590 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
592 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
593 tlvStruct->length = sizeof(tANI_U32);
594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
595 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
596 != eSIR_SUCCESS)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
599 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
600 goto handle_failure;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
603 + sizeof(tHalCfg) + tlvStruct->length)) ;
604
605 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
606 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
610 configDataValue ) != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CAL_PERIOD */
619 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
623 != eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CAL_PERIOD");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_CAL_CONTROL */
632 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_CAL_CONTROL");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 /* QWLAN_HAL_CFG_PROXIMITY */
645 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
646 tlvStruct->length = sizeof(tANI_U32);
647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
648 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
649 != eSIR_SUCCESS)
650 {
651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
652 "Failed to get value for WNI_CFG_PROXIMITY");
653 goto handle_failure;
654 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
656 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
658 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
659 tlvStruct->length = sizeof(tANI_U32);
660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
661 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
662 != eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
666 goto handle_failure;
667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
669 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
671 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
672 tlvStruct->length = sizeof(tANI_U32);
673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
674 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
675 eSIR_SUCCESS)
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
679 goto handle_failure;
680 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
682 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
684 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
688 configDataValue ) != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
692 goto handle_failure;
693 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
697 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
701 eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
705 goto handle_failure;
706 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
708 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
710 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
714 eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
718 goto handle_failure;
719 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
721 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
723 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
724 tlvStruct->length = sizeof(tANI_U32);
725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
726 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
727 eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
731 goto handle_failure;
732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
734 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
736 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
740 configDataValue ) != eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
744 goto handle_failure;
745 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
747 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
749 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
753 configDataValue ) != eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length));
761
762 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
763 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
767 configDataValue ) != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
776 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length));
788
789 /* QWLAN_HAL_CFG_FIXED_RATE */
790 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_FIXED_RATE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length));
802
803 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
804 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
816
817 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
818 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
831 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
832 tlvStruct->length = sizeof(tANI_U32);
833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
834 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
835 configDataValue ) != eSIR_SUCCESS)
836 {
837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
838 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
839 goto handle_failure;
840 }
841 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
842 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
844 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
848 configDataValue ) != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
857 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
858 tlvStruct->length = sizeof(tANI_U32);
859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
860 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
861 configDataValue ) != eSIR_SUCCESS)
862 {
863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
864 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
865 goto handle_failure;
866 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
868 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700869 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
882
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
884 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
897 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
901 configDataValue ) != eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
910 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
914 eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
922
923 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
924 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
925 tlvStruct->length = sizeof(tANI_U32);
926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
927 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
928 configDataValue ) != eSIR_SUCCESS)
929 {
930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
931 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
932 goto handle_failure;
933 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
935 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
937 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
950 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
963 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length);
975
976 /* QWLAN_HAL_CFG_STATS_PERIOD */
977 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
981 eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_STATS_PERIOD");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
990 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
994 eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1003 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1007 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001008 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1009 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1011 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1012 tlvStruct->length = sizeof(tANI_U32);
1013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1014 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1015 != eSIR_SUCCESS)
1016 {
1017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1018 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1019 goto handle_failure;
1020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1022 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1024 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1025 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1027 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1028 &strLength) != eSIR_SUCCESS)
1029 {
1030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1031 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1032 goto handle_failure;
1033 }
1034 tlvStruct->length = strLength;
1035 /* calculate the pad bytes to have the CFG in aligned format */
1036 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1037 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1039 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1041 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1042 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1043 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1044 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1045 &strLength) != eSIR_SUCCESS)
1046 {
1047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1048 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1049 goto handle_failure;
1050 }
1051 tlvStruct->length = strLength;
1052 /* calculate the pad bytes to have the CFG in aligned format */
1053 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1054 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001055 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1056 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1058 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1059 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1060 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1061 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1062 &strLength) != eSIR_SUCCESS)
1063 {
1064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1065 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1066 goto handle_failure;
1067 }
1068 tlvStruct->length = strLength;
1069 /* calculate the pad bytes to have the CFG in aligned format */
1070 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1071 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001072 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1073 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001074 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1075 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1076 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1077 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1078 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1079 &strLength) != eSIR_SUCCESS)
1080 {
1081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1082 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1083 goto handle_failure;
1084 }
1085 tlvStruct->length = strLength;
1086 /* calculate the pad bytes to have the CFG in aligned format */
1087 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1088 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001089 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1090 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1092 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1093 tlvStruct->length = sizeof(tANI_U32);
1094 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1095 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1096 != eSIR_SUCCESS)
1097 {
1098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1099 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1100 goto handle_failure;
1101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1103 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1105 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1106 tlvStruct->length = sizeof(tANI_U32);
1107 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1108 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1109 != eSIR_SUCCESS)
1110 {
1111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1112 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1113 goto handle_failure;
1114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1116 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1118 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1119 tlvStruct->length = sizeof(tANI_U32);
1120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1121 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1122 != eSIR_SUCCESS)
1123 {
1124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1125 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1126 goto handle_failure;
1127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1129 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1131 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1132 tlvStruct->length = sizeof(tANI_U32);
1133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1134 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1135 != eSIR_SUCCESS)
1136 {
1137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1138 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1139 goto handle_failure;
1140 }
1141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1142 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1144 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1145 tlvStruct->length = sizeof(tANI_U32);
1146 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1147 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1148 != eSIR_SUCCESS)
1149 {
1150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1151 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1152 goto handle_failure;
1153 }
1154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1157 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1158 tlvStruct->length = sizeof(tANI_U32);
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1161 != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1165 goto handle_failure;
1166 }
1167 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1168 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001169 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1170 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1171 tlvStruct->length = sizeof(tANI_U32);
1172 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1173 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1174 != eSIR_SUCCESS)
1175 {
1176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1177 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1178 goto handle_failure;
1179 }
1180 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1181 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001182 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1183 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1184 tlvStruct->length = sizeof(tANI_U32);
1185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1186 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1187 != eSIR_SUCCESS)
1188 {
1189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1190 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1191 goto handle_failure;
1192 }
1193 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1194 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1196 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1204 goto handle_failure;
1205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1209 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1222 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1226 != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1230 goto handle_failure;
1231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1233 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1235 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1236 * into FW, so the parameters are added here.
1237 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001238 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1239 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1240 tlvStruct->length = sizeof(tANI_U32);
1241 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1242 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1243 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1244 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1246 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1247 tlvStruct->length = sizeof(tANI_U32);
1248 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1249 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1250 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1251 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1253 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1254 tlvStruct->length = sizeof(tANI_U32);
1255 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1256 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001259 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1260 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1261 tlvStruct->length = sizeof(tANI_U32);
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1264 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1265 + sizeof(tHalCfg) + tlvStruct->length) ;
1266
1267 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1268 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1269 tlvStruct->length = sizeof(tANI_U32);
1270 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1271 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length) ;
1274
1275 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1276 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1277 tlvStruct->length = sizeof(tANI_U32);
1278 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1279 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1280 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1281 + sizeof(tHalCfg) + tlvStruct->length) ;
1282
1283 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1284 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1285 tlvStruct->length = sizeof(tANI_U32);
1286 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1287 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1288 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1289 + sizeof(tHalCfg) + tlvStruct->length) ;
1290
1291 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1292 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1296 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1297 + sizeof(tHalCfg) + tlvStruct->length) ;
1298
1299 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1300 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1301 tlvStruct->length = sizeof(tANI_U32);
1302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1303 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
1306
1307 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1308 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1309 tlvStruct->length = sizeof(tANI_U32);
1310 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1311 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1313 + sizeof(tHalCfg) + tlvStruct->length) ;
1314
1315 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1316 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1321 + sizeof(tHalCfg) + tlvStruct->length) ;
1322
1323 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1324 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1325 tlvStruct->length = sizeof(tANI_U32);
1326 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1327 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
1330
1331 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1332 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1333 tlvStruct->length = sizeof(tANI_U32);
1334 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1335 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1336 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1337 + sizeof(tHalCfg) + tlvStruct->length) ;
1338
1339 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1340 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1341 tlvStruct->length = sizeof(tANI_U32);
1342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1343 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1344 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1345 + sizeof(tHalCfg) + tlvStruct->length) ;
1346
1347 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1348 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1349 tlvStruct->length = sizeof(tANI_U32);
1350 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1351 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
1354
1355 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1356 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1357 tlvStruct->length = sizeof(tANI_U32);
1358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1359 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1360 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1361 + sizeof(tHalCfg) + tlvStruct->length) ;
1362
Wilson Tsaof8b37942013-09-06 10:49:00 -07001363 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1364 {
1365 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1366 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1370 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1371 + sizeof(tHalCfg) + tlvStruct->length) ;
1372
1373 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1374 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1375 tlvStruct->length = sizeof(tANI_U32);
1376 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1377 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1379 + sizeof(tHalCfg) + tlvStruct->length) ;
1380
1381 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1382 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1383 tlvStruct->length = sizeof(tANI_U32);
1384 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1385 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1386 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1387 + sizeof(tHalCfg) + tlvStruct->length) ;
1388
1389 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1390 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1391 tlvStruct->length = sizeof(tANI_U32);
1392 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1393 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1394 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1395 + sizeof(tHalCfg) + tlvStruct->length) ;
1396 }
1397
1398 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1399 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1400 tlvStruct->length = sizeof(tANI_U32);
1401 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1402 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
1405
1406 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1407 {
1408 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1409 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1413 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1414 + sizeof(tHalCfg) + tlvStruct->length) ;
1415 }
1416
1417 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1418 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1419 tlvStruct->length = sizeof(tANI_U32);
1420 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1421 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1422 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1423 + sizeof(tHalCfg) + tlvStruct->length) ;
1424
Jeff Johnson32d95a32012-09-10 13:15:23 -07001425 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001426 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1427 tlvStruct->length = sizeof(tANI_U32);
1428 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1429 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1430 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1431 wcnssCompiledApiVersion.minor,
1432 wcnssCompiledApiVersion.version,
1433 wcnssCompiledApiVersion.revision);
1434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
1436
Jeff Johnsond13512a2012-07-17 11:42:19 -07001437 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1438 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1439 tlvStruct->length = sizeof(tANI_U32);
1440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1441 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1442 configDataValue ) != eSIR_SUCCESS)
1443 {
1444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1445 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1446 goto handle_failure;
1447 }
1448
1449 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1450 + sizeof(tHalCfg) + tlvStruct->length) ;
1451 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1452 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1456 configDataValue ) != eSIR_SUCCESS)
1457 {
1458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1459 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1460 goto handle_failure;
1461 }
1462
1463 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1464 + sizeof(tHalCfg) + tlvStruct->length) ;
1465
1466 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1467 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1468 tlvStruct->length = sizeof(tANI_U32);
1469 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1470 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1471 != eSIR_SUCCESS)
1472 {
1473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1474 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1475 goto handle_failure;
1476 }
1477
1478 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1479 + sizeof(tHalCfg) + tlvStruct->length) ;
1480
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001481 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1482 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1483 tlvStruct->length = sizeof(tANI_U32);
1484 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1485 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1486 != eSIR_SUCCESS)
1487 {
1488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1489 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1490 goto handle_failure;
1491 }
1492
1493 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1494 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001495#ifdef WLAN_SOFTAP_VSTA_FEATURE
1496 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1497 tlvStruct->length = sizeof(tANI_U32);
1498 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1499 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1500 != eSIR_SUCCESS)
1501 {
1502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1503 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1504 goto handle_failure;
1505 }
1506
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
1509#endif
1510
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001511 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1512 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1513 tlvStruct->length = sizeof(tANI_U32);
1514 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1515
1516 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1517 != eSIR_SUCCESS)
1518 {
1519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1520 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1521 goto handle_failure;
1522 }
1523
1524 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1525 + sizeof(tHalCfg) + tlvStruct->length) ;
1526
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301527/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1528 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1529 tlvStruct->length = sizeof(tANI_U32);
1530 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1531 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1532 configDataValue ) != eSIR_SUCCESS)
1533 {
1534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1535 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1536 goto handle_failure;
1537 }
1538
1539 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1540 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301541#ifdef FEATURE_WLAN_TDLS
1542 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1543 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1544 tlvStruct->length = sizeof(tANI_U32);
1545 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1546 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1547 configDataValue ) != eSIR_SUCCESS)
1548 {
1549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1550 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1551 goto handle_failure;
1552 }
1553 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1554 + sizeof(tHalCfg) + tlvStruct->length) ;
1555
1556 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1557 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1558 tlvStruct->length = sizeof(tANI_U32);
1559 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1560 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1561 configDataValue ) != eSIR_SUCCESS)
1562 {
1563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1564 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1565 goto handle_failure;
1566 }
1567 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1568 + sizeof(tHalCfg) + tlvStruct->length) ;
1569 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1570 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1578 goto handle_failure;
1579 }
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301595 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1596 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1600 configDataValue ) != eSIR_SUCCESS)
1601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1603 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1604 goto handle_failure;
1605 }
1606 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1607 + sizeof(tHalCfg) + tlvStruct->length) ;
1608
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301609#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301610
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001611 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1612 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1613 tlvStruct->length = sizeof(tANI_U32);
1614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1615 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1616 configDataValue ) != eSIR_SUCCESS)
1617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1620 goto handle_failure;
1621 }
1622
1623 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1624 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001625
1626 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1627 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1628 tlvStruct->length = sizeof(tANI_U32);
1629 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1630 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1631 != eSIR_SUCCESS)
1632 {
1633 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1634 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1635 goto handle_failure;
1636 }
1637 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1638 + sizeof(tHalCfg) + tlvStruct->length));
1639
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301640 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1641 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1642 tlvStruct->length = sizeof(tANI_U32);
1643 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1644 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1645 configDataValue ) != eSIR_SUCCESS)
1646 {
1647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1648 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1649 goto handle_failure;
1650 }
1651
1652 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1653 + sizeof(tHalCfg) + tlvStruct->length) ;
1654
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301655 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1656 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1657 tlvStruct->length = sizeof(tANI_U32);
1658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1659 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1660 configDataValue ) != eSIR_SUCCESS)
1661 {
1662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1663 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1664 goto handle_failure;
1665 }
1666 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1667 + sizeof(tHalCfg) + tlvStruct->length) ;
1668
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301669 /* QWLAN_HAL_CFG_ATH_DISABLE */
1670 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1671 tlvStruct->length = sizeof(tANI_U32);
1672 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1673 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1674 configDataValue ) != eSIR_SUCCESS)
1675 {
1676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1677 "Failed to get value for WNI_CFG_ATH_DISABLE");
1678 goto handle_failure;
1679 }
1680 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1681 + sizeof(tHalCfg) + tlvStruct->length) ;
1682
c_hpothu6d7dc922013-12-02 12:36:41 +05301683 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1684 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1685 tlvStruct->length = sizeof(tANI_U32);
1686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1687 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1688 configDataValue ) != eSIR_SUCCESS)
1689 {
1690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1691 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1692 goto handle_failure;
1693 }
1694 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1695 + sizeof(tHalCfg) + tlvStruct->length) ;
1696
1697 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1698 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1699 tlvStruct->length = sizeof(tANI_U32);
1700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1701 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1702 configDataValue ) != eSIR_SUCCESS)
1703 {
1704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1705 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1706 goto handle_failure;
1707 }
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length) ;
1710
1711 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1712 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1716 configDataValue ) != eSIR_SUCCESS)
1717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1719 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1720 goto handle_failure;
1721 }
1722 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1723 + sizeof(tHalCfg) + tlvStruct->length) ;
1724
1725 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1726 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1727 tlvStruct->length = sizeof(tANI_U32);
1728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1729 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1730 configDataValue ) != eSIR_SUCCESS)
1731 {
1732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1733 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1734 goto handle_failure;
1735 }
1736 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1737 + sizeof(tHalCfg) + tlvStruct->length) ;
1738
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301739 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1740 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1741 tlvStruct->length = sizeof(tANI_U32);
1742 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1743 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1744 configDataValue ) != eSIR_SUCCESS)
1745 {
1746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1747 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1748 goto handle_failure;
1749 }
1750 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1751 + sizeof(tHalCfg) + tlvStruct->length) ;
1752
1753 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1754 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1755 tlvStruct->length = sizeof(tANI_U32);
1756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1757 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1758 configDataValue ) != eSIR_SUCCESS)
1759 {
1760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1761 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1762 goto handle_failure;
1763 }
1764 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1765 + sizeof(tHalCfg) + tlvStruct->length) ;
1766
1767 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1768 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1769 tlvStruct->length = sizeof(tANI_U32);
1770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1771 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1772 configDataValue ) != eSIR_SUCCESS)
1773 {
1774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1775 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1776 goto handle_failure;
1777 }
1778 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1779 + sizeof(tHalCfg) + tlvStruct->length) ;
1780
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001781 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1782 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1783 tlvStruct->length = sizeof(tANI_U32);
1784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1785 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1786 configDataValue ) != eSIR_SUCCESS)
1787 {
1788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1789 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1790 goto handle_failure;
1791 }
1792 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1793 + sizeof(tHalCfg) + tlvStruct->length) ;
1794
c_hpothu5bd1ae42014-03-07 20:28:22 +05301795 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1796 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1797 tlvStruct->length = sizeof(tANI_U32);
1798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1799
1800 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1801 configDataValue ) != eSIR_SUCCESS)
1802 {
1803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1804 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1805 goto handle_failure;
1806 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301807 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1808 + sizeof(tHalCfg) + tlvStruct->length) ;
1809
1810 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1811 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1812 tlvStruct->length = sizeof(tANI_U32);
1813 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1814
1815 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1816 configDataValue ) != eSIR_SUCCESS)
1817 {
1818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1819 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1820 goto handle_failure;
1821 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301822 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1823 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301824
c_hpothu2d0f1c42014-04-01 18:38:51 +05301825 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1826 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1827 tlvStruct->length = sizeof(tANI_U32);
1828 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1829
1830 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1831 configDataValue ) != eSIR_SUCCESS)
1832 {
1833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1834 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1835 goto handle_failure;
1836 }
1837 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1838 + sizeof(tHalCfg) + tlvStruct->length) ;
1839
1840 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1841 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1842 tlvStruct->length = sizeof(tANI_U32);
1843 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1844
1845 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1846 configDataValue ) != eSIR_SUCCESS)
1847 {
1848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1849 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1850 goto handle_failure;
1851 }
1852 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1853 + sizeof(tHalCfg) + tlvStruct->length) ;
1854
1855 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1856 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1857 tlvStruct->length = sizeof(tANI_U32);
1858 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1859
1860 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1861 configDataValue ) != eSIR_SUCCESS)
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1864 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1865 goto handle_failure;
1866 }
1867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1868 + sizeof(tHalCfg) + tlvStruct->length) ;
1869
1870 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1871 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1872 tlvStruct->length = sizeof(tANI_U32);
1873 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1874
1875 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1876 configDataValue ) != eSIR_SUCCESS)
1877 {
1878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1879 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1880 goto handle_failure;
1881 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301882 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1883 + sizeof(tHalCfg) + tlvStruct->length) ;
1884
Jeff Johnson295189b2012-06-20 16:38:30 -07001885 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001886#ifdef WLAN_DEBUG
1887 {
1888 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1890 "****** Dumping CFG TLV ***** ");
1891 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1892 {
1893 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1894 "%02x %02x %02x %02x %02x %02x %02x %02x",
1895 tlvStructStart[i],
1896 tlvStructStart[i+1],
1897 tlvStructStart[i+2],
1898 tlvStructStart[i+3],
1899 tlvStructStart[i+4],
1900 tlvStructStart[i+5],
1901 tlvStructStart[i+6],
1902 tlvStructStart[i+7]);
1903 }
1904 /* Dump the bytes in the last line*/
1905 for (; i < wdiStartParams->usConfigBufferLen; i++)
1906 {
1907 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1908 "%02x ",tlvStructStart[i]);
1909 }
1910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1911 "**************************** ");
1912 }
1913#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001914 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001915handle_failure:
1916 vos_mem_free(configParam);
1917 return VOS_STATUS_E_FAILURE;
1918}
Jeff Johnson295189b2012-06-20 16:38:30 -07001919/*
1920 * FUNCTION: WDA_wdiCompleteCB
1921 * call the voss call back function
1922 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001923void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001924{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001925 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1926 tWDA_CbContext *wdaContext;
1927
1928 if(NULL == pWdaParams)
1929 {
1930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001931 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001932 VOS_ASSERT(0) ;
1933 return ;
1934 }
1935
1936 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1937
Jeff Johnson295189b2012-06-20 16:38:30 -07001938 if (NULL == wdaContext)
1939 {
1940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001941 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001942 return ;
1943 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001944
Jeff Johnson295189b2012-06-20 16:38:30 -07001945 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001946 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001947 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001948 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001949 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001950 vos_mem_free(pWdaParams);
1951
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 if(WDI_STATUS_SUCCESS != status)
1953 {
1954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1955 "WDI stop callback returned failure" );
1956 VOS_ASSERT(0) ;
1957 }
1958 else
1959 {
1960 wdaContext->wdaState = WDA_STOP_STATE;
1961 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001962
Leo Chang9d76f622013-08-23 16:34:52 -07001963 /* FTM Driver stop procedure should be synced.
1964 * Stop and Close will happen on same context */
1965 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1966 {
1967 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1968 {
1969 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1970 "%s: FTM Stop Event Set Fail", __func__);
1971 VOS_ASSERT(0);
1972 }
1973 }
1974
Jeff Johnson295189b2012-06-20 16:38:30 -07001975 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001976 vos_WDAComplete_cback(wdaContext->pVosContext);
1977
Jeff Johnson295189b2012-06-20 16:38:30 -07001978 return ;
1979}
Jeff Johnson295189b2012-06-20 16:38:30 -07001980/*
1981 * FUNCTION: WDA_stop
1982 * call WDI_stop
1983 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001984VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1985{
1986 WDI_Status wdiStatus;
1987 VOS_STATUS status = VOS_STATUS_SUCCESS;
1988 WDI_StopReqParamsType *wdiStopReq;
1989 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001990 tWDA_ReqParams *pWdaParams ;
1991
Jeff Johnson295189b2012-06-20 16:38:30 -07001992 if (NULL == pWDA)
1993 {
1994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001995 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001996 VOS_ASSERT(0);
1997 return VOS_STATUS_E_FAILURE;
1998 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001999 if (pWDA->wdiFailed == true)
2000 {
2001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002002 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002003 return VOS_STATUS_E_ALREADY;
2004 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002005
Jeff Johnson295189b2012-06-20 16:38:30 -07002006 /* FTM mode stay START_STATE */
2007 if( (WDA_READY_STATE != pWDA->wdaState) &&
2008 (WDA_INIT_STATE != pWDA->wdaState) &&
2009 (WDA_START_STATE != pWDA->wdaState) )
2010 {
2011 VOS_ASSERT(0);
2012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 wdiStopReq = (WDI_StopReqParamsType *)
2014 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2015 if(NULL == wdiStopReq)
2016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002018 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002019 VOS_ASSERT(0);
2020 return VOS_STATUS_E_NOMEM;
2021 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002022
Jeff Johnson295189b2012-06-20 16:38:30 -07002023 wdiStopReq->wdiStopReason = reason;
2024 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002025
2026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2027 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002028 {
2029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 VOS_ASSERT(0);
2032 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002033 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002035
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002036 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2037 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002038 {
2039 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002040 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002041 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002042
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002043 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2044 pWdaParams->wdaMsgParam = NULL;
2045 pWdaParams->pWdaContext = pWDA;
2046
Jeff Johnson295189b2012-06-20 16:38:30 -07002047 /* call WDI stop */
2048 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002049 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2050
Jeff Johnson295189b2012-06-20 16:38:30 -07002051 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2052 {
2053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2054 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2056 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002057 status = VOS_STATUS_E_FAILURE;
2058 }
Leo Chang9d76f622013-08-23 16:34:52 -07002059
2060 /* FTM Driver stop procedure should be synced.
2061 * Stop and Close will happen on same context */
2062 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2063 {
2064 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2065 WDI_RESPONSE_TIMEOUT);
2066 if (status != VOS_STATUS_SUCCESS)
2067 {
2068 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2069 "%s: FTM Stop Timepoout", __func__);
2070 VOS_ASSERT(0);
2071 vos_event_reset(&pWDA->ftmStopDoneEvent);
2072 }
2073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002074 return status;
2075}
Jeff Johnson295189b2012-06-20 16:38:30 -07002076/*
2077 * FUNCTION: WDA_close
2078 * call WDI_close and free the WDA context
2079 */
2080VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2081{
Jeff Johnson43971f52012-07-17 12:26:56 -07002082 VOS_STATUS status = VOS_STATUS_SUCCESS;
2083 WDI_Status wstatus;
2084 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002085 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002086 if (NULL == wdaContext)
2087 {
2088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002089 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002090 return VOS_STATUS_E_FAILURE;
2091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2093 (WDA_STOP_STATE != wdaContext->wdaState))
2094 {
2095 VOS_ASSERT(0);
2096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002097 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002098 wstatus = WDI_Close();
2099 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002100 {
2101 status = VOS_STATUS_E_FAILURE;
2102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002103 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002104 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002105 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2106 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002107 {
2108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002109 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 status = VOS_STATUS_E_FAILURE;
2111 }
2112
Jeff Johnson43971f52012-07-17 12:26:56 -07002113 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002114 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 {
2116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002117 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002118 status = VOS_STATUS_E_FAILURE;
2119 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002120 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002121 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002122 {
2123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002124 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002125 status = VOS_STATUS_E_FAILURE;
2126 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002127 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002128 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 {
2130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002131 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002132 status = VOS_STATUS_E_FAILURE;
2133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002134 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002135 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002136 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 {
2138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2139 "error in WDA close " );
2140 status = VOS_STATUS_E_FAILURE;
2141 }
2142 return status;
2143}
Jeff Johnson295189b2012-06-20 16:38:30 -07002144/*
2145 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2146 * returns 1 if the compiled version is greater than or equal to the input version
2147 */
2148
2149uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2150{
2151 VOS_STATUS status = VOS_STATUS_SUCCESS;
2152 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2153 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002155 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2156 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2157 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2158 (compiledVersion.revision >= revision)))
2159 return 1;
2160 else
2161 return 0;
2162}
Jeff Johnson295189b2012-06-20 16:38:30 -07002163/*
2164 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2165 * returns 1 if the compiled version is greater than or equal to the input version
2166 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002167uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2168{
2169 VOS_STATUS status = VOS_STATUS_SUCCESS;
2170 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2171 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002172 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002173 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2174 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2175 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2176 (reportedVersion.revision >= revision)))
2177 return 1;
2178 else
2179 return 0;
2180}
Jeff Johnson295189b2012-06-20 16:38:30 -07002181/*
2182 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2183 * Returns the version of the WCNSS WLAN API with which the HOST
2184 * device driver was compiled
2185 */
2186VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2187 tSirVersionType *pVersion)
2188{
2189 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 if ((NULL == pvosGCtx) || (NULL == pVersion))
2191 {
2192 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 VOS_ASSERT(0);
2195 return VOS_STATUS_E_FAILURE;
2196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2198 if (NULL == pWDA )
2199 {
2200 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002201 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002202 VOS_ASSERT(0);
2203 return VOS_STATUS_E_FAILURE;
2204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002205 *pVersion = pWDA->wcnssWlanCompiledVersion;
2206 return VOS_STATUS_SUCCESS;
2207}
Jeff Johnson295189b2012-06-20 16:38:30 -07002208/*
2209 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2210 * Returns the version of the WCNSS WLAN API with which the WCNSS
2211 * device driver was compiled
2212 */
2213VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2214 tSirVersionType *pVersion)
2215{
2216 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002217 if ((NULL == pvosGCtx) || (NULL == pVersion))
2218 {
2219 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002220 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002221 VOS_ASSERT(0);
2222 return VOS_STATUS_E_FAILURE;
2223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2225 if (NULL == pWDA )
2226 {
2227 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002228 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 VOS_ASSERT(0);
2230 return VOS_STATUS_E_FAILURE;
2231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 *pVersion = pWDA->wcnssWlanReportedVersion;
2233 return VOS_STATUS_SUCCESS;
2234}
Jeff Johnson295189b2012-06-20 16:38:30 -07002235/*
2236 * FUNCTION: WDA_GetWcnssSoftwareVersion
2237 * Returns the WCNSS Software version string
2238 */
2239VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2240 tANI_U8 *pVersion,
2241 tANI_U32 versionBufferSize)
2242{
2243 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002244 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002245 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 if ((NULL == pvosGCtx) || (NULL == pVersion))
2247 {
2248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002249 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 VOS_ASSERT(0);
2251 return VOS_STATUS_E_FAILURE;
2252 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002253 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2254 if (NULL == pWDA )
2255 {
2256 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002257 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002258 VOS_ASSERT(0);
2259 return VOS_STATUS_E_FAILURE;
2260 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002261 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2262 return VOS_STATUS_SUCCESS;
2263}
Jeff Johnson295189b2012-06-20 16:38:30 -07002264/*
2265 * FUNCTION: WDA_GetWcnssHardwareVersion
2266 * Returns the WCNSS Hardware version string
2267 */
2268VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2269 tANI_U8 *pVersion,
2270 tANI_U32 versionBufferSize)
2271{
2272 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002273 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002274 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002275 if ((NULL == pvosGCtx) || (NULL == pVersion))
2276 {
2277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002278 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002279 VOS_ASSERT(0);
2280 return VOS_STATUS_E_FAILURE;
2281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002282 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2283 if (NULL == pWDA )
2284 {
2285 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002286 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002287 VOS_ASSERT(0);
2288 return VOS_STATUS_E_FAILURE;
2289 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002290 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2291 return VOS_STATUS_SUCCESS;
2292}
Jeff Johnson295189b2012-06-20 16:38:30 -07002293/*
2294 * FUNCTION: WDA_WniCfgDnld
2295 * Trigger CFG Download
2296 */
2297VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2298{
2299 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 v_VOID_t *pFileImage = NULL;
2302 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 v_VOID_t *pCfgBinary = NULL;
2304 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002305 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002306
Jeff Johnson295189b2012-06-20 16:38:30 -07002307 if (NULL == pMac )
2308 {
2309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002310 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002311 VOS_ASSERT(0);
2312 return VOS_STATUS_E_FAILURE;
2313 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 /* get the number of bytes in the CFG Binary... */
2315 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2316 &cbFileImageSize );
2317 if ( VOS_STATUS_E_NOMEM != vosStatus )
2318 {
2319 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2320 "Error obtaining binary size" );
2321 goto fail;
2322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 // malloc a buffer to read in the Configuration binary file.
2324 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002325 if ( NULL == pFileImage )
2326 {
2327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2328 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2329 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 vosStatus = VOS_STATUS_E_NOMEM;
2331 goto fail;
2332 }
2333
2334 /* Get the entire CFG file image... */
2335 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2336 &cbFileImageSize );
2337 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2338 {
2339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2340 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2341 cbFileImageSize );
2342 goto fail;
2343 }
2344
2345 /*
2346 * Validate the binary image. This function will return a pointer
2347 * and length where the CFG binary is located within the binary image file.
2348 */
2349 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2350 &pCfgBinary, &cbCfgBinarySize );
2351 if ( VOS_FALSE == bStatus )
2352 {
2353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2354 "Error: Cannot find STA CFG in binary image file" );
2355 vosStatus = VOS_STATUS_E_FAILURE;
2356 goto fail;
2357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002358 /*
2359 * TODO: call the config download function
2360 * for now calling the existing cfg download API
2361 */
2362 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002363 vosStatus = VOS_STATUS_SUCCESS;
2364
2365 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002366
2367fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002368 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002369 return vosStatus;
2370}
Jeff Johnson295189b2012-06-20 16:38:30 -07002371/* -----------------------------------------------------------------
2372 * WDI interface
2373 * -----------------------------------------------------------------
2374 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002375/*
2376 * FUNCTION: WDA_suspendDataTxCallback
2377 * call back function called from TL after suspend Transmission
2378 */
2379VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2380 v_U8_t* ucSTAId,
2381 VOS_STATUS vosStatus)
2382{
2383 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002385 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 if (NULL == pWDA )
2387 {
2388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002389 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 VOS_ASSERT(0);
2391 return VOS_STATUS_E_FAILURE;
2392 }
2393 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2394 {
2395 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2396 }
2397 else
2398 {
2399 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002401 /* Trigger the event to bring the WDA TL suspend function to come
2402 * out of wait*/
2403 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2404 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2405 {
2406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002407 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 /* If TL suspended had timedout before this callback was called, resume back
2410 * TL.*/
2411 if (pWDA->txSuspendTimedOut)
2412 {
2413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002414 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 WDA_ResumeDataTx(pWDA);
2416 pWDA->txSuspendTimedOut = FALSE;
2417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 return VOS_STATUS_SUCCESS;
2419}
Jeff Johnson295189b2012-06-20 16:38:30 -07002420/*
2421 * FUNCTION: WDA_suspendDataTx
2422 * Update TL to suspend the data Transmission
2423 */
2424VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2425{
2426 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2427 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002428
2429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002430 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002431 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002432 if (pWDA->txSuspendTimedOut)
2433 {
2434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002435 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 return status;
2437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 /* Reset the event to be not signalled */
2439 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2440 if(!VOS_IS_STATUS_SUCCESS(status))
2441 {
2442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002443 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 return VOS_STATUS_E_FAILURE;
2445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002447 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 WDA_SuspendDataTxCallback);
2449 if(status != VOS_STATUS_SUCCESS)
2450 {
2451 return status;
2452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 /* Wait for the event to be set by the TL, to get the response of
2454 * suspending the TX queues, this event should be set by the Callback
2455 * function called by TL*/
2456 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2457 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2458 if(!VOS_IS_STATUS_SUCCESS(status))
2459 {
2460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2461 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002462 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 /* Set this flag to true when TL suspend times out, so that when TL
2464 * suspend eventually happens and calls the callback, TL can be resumed
2465 * right away by looking at this flag when true.*/
2466 pWDA->txSuspendTimedOut = TRUE;
2467 }
2468 else
2469 {
2470 pWDA->txSuspendTimedOut = FALSE;
2471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2473 {
2474 status = VOS_STATUS_SUCCESS;
2475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002476 return status;
2477}
Jeff Johnson295189b2012-06-20 16:38:30 -07002478/*
2479 * FUNCTION: WDA_resumeDataTx
2480 * Update TL to resume the data Transmission
2481 */
2482VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2483{
2484 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002485
2486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002487 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002488
2489 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 return status;
2491}
Jeff Johnson295189b2012-06-20 16:38:30 -07002492/*
2493 * FUNCTION: WDA_InitScanReqCallback
2494 * Trigger Init SCAN callback
2495 */
2496void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2497{
2498 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2499 tWDA_CbContext *pWDA;
2500 tInitScanParams *pWDA_ScanParam ;
2501 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002503 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002504 if(NULL == pWdaParams)
2505 {
2506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002507 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002508 VOS_ASSERT(0) ;
2509 return ;
2510 }
2511 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2512 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 if(NULL == pWDA_ScanParam)
2514 {
2515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002516 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002517 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2519 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 return ;
2521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 if(WDI_STATUS_SUCCESS != wdiStatus)
2523 {
2524 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002525 if(VOS_STATUS_SUCCESS != status)
2526 {
2527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002528 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 }
2530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002531 /* free WDI command buffer */
2532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002533 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002534
Jeff Johnson295189b2012-06-20 16:38:30 -07002535
2536 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002537 /* without converting the Status to Failure or Success Just
2538 pass the same status to lim */
2539 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 /* send SCAN RSP message back to PE */
2541 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 return ;
2543}
2544
2545/*
2546 * FUNCTION: WDA_ProcessInitScanReq
2547 * Trigger Init SCAN in DAL
2548 */
2549VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2550 tInitScanParams *initScanParams)
2551{
2552 WDI_Status status = WDI_STATUS_SUCCESS ;
2553 WDI_InitScanReqParamsType *wdiInitScanParam =
2554 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2555 sizeof(WDI_InitScanReqParamsType)) ;
2556 tWDA_ReqParams *pWdaParams;
2557 tANI_U8 i = 0;
2558
2559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002560 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 if(NULL == wdiInitScanParam)
2562 {
2563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002564 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 VOS_ASSERT(0);
2566 return VOS_STATUS_E_NOMEM;
2567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2569 if(NULL == pWdaParams)
2570 {
2571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002572 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 VOS_ASSERT(0);
2574 vos_mem_free(wdiInitScanParam);
2575 return VOS_STATUS_E_NOMEM;
2576 }
2577
2578 /* Copy init Scan params to WDI structure */
2579 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2580 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2581 sizeof(tSirMacAddr)) ;
2582 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2583 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2584 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2586 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2588 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2590 {
2591 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2592 initScanParams->scanEntry.bssIdx[i] ;
2593 }
2594
2595 /* if Frame length, copy macMgmtHdr or WDI structure */
2596 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2597 {
2598 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2599 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2600 }
2601 wdiInitScanParam->wdiReqStatusCB = NULL ;
2602
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 /* Store Init Req pointer, as this will be used for response */
2604 pWdaParams->pWdaContext = pWDA;
2605 pWdaParams->wdaMsgParam = initScanParams;
2606 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 /* first try to suspend TX */
2608 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 if(WDI_STATUS_SUCCESS != status)
2610 {
2611 goto handleWdiFailure;
2612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 /* call DAL API to pass init scan request to DAL */
2614 status = WDI_InitScanReq(wdiInitScanParam,
2615 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 if(IS_WDI_STATUS_FAILURE(status))
2617 {
2618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2619 "error in WDA Init Scan, Resume Tx " );
2620 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 VOS_ASSERT(0) ;
2622
2623 goto handleWdiFailure;
2624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002626handleWdiFailure:
2627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2628 "Failure in WDI Api, free all the memory " );
2629 /* free WDI command buffer */
2630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2631 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 /* send Failure to PE */
2633 initScanParams->status = eSIR_FAILURE ;
2634 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002635 return CONVERT_WDI2VOS_STATUS(status) ;
2636}
2637
Jeff Johnson295189b2012-06-20 16:38:30 -07002638/*
2639 * FUNCTION: WDA_StartScanReqCallback
2640 * send Start SCAN RSP back to PE
2641 */
2642void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2643 void* pUserData)
2644{
2645 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2646 tWDA_CbContext *pWDA;
2647 tStartScanParams *pWDA_ScanParam;
2648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002649 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 if(NULL == pWdaParams)
2651 {
2652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002653 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002654 VOS_ASSERT(0) ;
2655 return ;
2656 }
2657 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2658 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002659 if(NULL == pWDA_ScanParam)
2660 {
2661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002662 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002663 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002664 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 return ;
2666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002667 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2668 {
2669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002670 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002672 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002673 return ;
2674 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2676 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002677
Jeff Johnson295189b2012-06-20 16:38:30 -07002678
2679 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002680 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 /* send SCAN RSP message back to PE */
2682 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002683 return ;
2684}
2685
Jeff Johnson295189b2012-06-20 16:38:30 -07002686/*
2687 * FUNCTION: WDA_ProcessStartScanReq
2688 * Trigger start SCAN in WDI
2689 */
2690VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2691 tStartScanParams *startScanParams)
2692{
2693 WDI_Status status = WDI_STATUS_SUCCESS;
2694 WDI_StartScanReqParamsType *wdiStartScanParams =
2695 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2696 sizeof(WDI_StartScanReqParamsType)) ;
2697 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002699 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 if(NULL == wdiStartScanParams)
2701 {
2702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002703 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 VOS_ASSERT(0);
2705 return VOS_STATUS_E_NOMEM;
2706 }
2707 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2708 if(NULL == pWdaParams)
2709 {
2710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002711 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 VOS_ASSERT(0);
2713 vos_mem_free(wdiStartScanParams);
2714 return VOS_STATUS_E_NOMEM;
2715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 /* Copy init Scan params to WDI structure */
2717 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2718 wdiStartScanParams->wdiReqStatusCB = NULL ;
2719
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 /* Store Init Req pointer, as this will be used for response */
2721 /* store Params pass it to WDI */
2722 pWdaParams->pWdaContext = pWDA;
2723 pWdaParams->wdaMsgParam = startScanParams;
2724 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002725 /* call DAL API to pass init scan request to DAL */
2726 status = WDI_StartScanReq(wdiStartScanParams,
2727 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002728 /* failure returned by WDI API */
2729 if(IS_WDI_STATUS_FAILURE(status))
2730 {
2731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2732 "Failure in Start Scan WDI API, free all the memory "
2733 "It should be due to previous abort scan." );
2734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2735 vos_mem_free(pWdaParams) ;
2736 startScanParams->status = eSIR_FAILURE ;
2737 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002739 return CONVERT_WDI2VOS_STATUS(status) ;
2740}
Jeff Johnson295189b2012-06-20 16:38:30 -07002741/*
2742 * FUNCTION: WDA_EndScanReqCallback
2743 * END SCAN callback
2744 */
2745void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2746{
2747 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2748 tWDA_CbContext *pWDA;
2749 tEndScanParams *endScanParam;
2750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002751 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002752 if(NULL == pWdaParams)
2753 {
2754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002755 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002756 VOS_ASSERT(0) ;
2757 return ;
2758 }
2759 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2760 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 if(NULL == endScanParam)
2762 {
2763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002764 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2767 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 return ;
2769 }
2770
2771 /* Free WDI command buffer */
2772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2773 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002775 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 /* send response back to PE */
2777 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2778 return ;
2779}
2780
Jeff Johnson295189b2012-06-20 16:38:30 -07002781/*
2782 * FUNCTION: WDA_ProcessEndScanReq
2783 * Trigger END SCAN in WDI
2784 */
2785VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2786 tEndScanParams *endScanParams)
2787{
2788 WDI_Status status = WDI_STATUS_SUCCESS;
2789 WDI_EndScanReqParamsType *wdiEndScanParams =
2790 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2791 sizeof(WDI_EndScanReqParamsType)) ;
2792 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002794 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002795 if(NULL == wdiEndScanParams)
2796 {
2797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002798 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 VOS_ASSERT(0);
2800 return VOS_STATUS_E_NOMEM;
2801 }
2802 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2803 if(NULL == pWdaParams)
2804 {
2805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002806 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 VOS_ASSERT(0);
2808 vos_mem_free(wdiEndScanParams);
2809 return VOS_STATUS_E_NOMEM;
2810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 /* Copy init Scan params to WDI structure */
2812 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2813 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 /* Store Init Req pointer, as this will be used for response */
2815 /* store Params pass it to WDI */
2816 pWdaParams->pWdaContext = pWDA;
2817 pWdaParams->wdaMsgParam = endScanParams;
2818 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002819 /* call DAL API to pass init scan request to DAL */
2820 status = WDI_EndScanReq(wdiEndScanParams,
2821 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 if(IS_WDI_STATUS_FAILURE(status))
2823 {
2824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2825 "Failure in End Scan WDI API, free all the memory "
2826 "It should be due to previous abort scan." );
2827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2828 vos_mem_free(pWdaParams) ;
2829 endScanParams->status = eSIR_FAILURE ;
2830 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 return CONVERT_WDI2VOS_STATUS(status) ;
2833}
Jeff Johnson295189b2012-06-20 16:38:30 -07002834/*
2835 * FUNCTION: WDA_FinishScanReqCallback
2836 * Trigger Finish SCAN callback
2837 */
2838void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2839{
2840 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2841 tWDA_CbContext *pWDA;
2842 tFinishScanParams *finishScanParam;
2843 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002845 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 if(NULL == pWdaParams)
2847 {
2848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002849 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 VOS_ASSERT(0) ;
2851 return ;
2852 }
2853
2854 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2855 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002856 if(NULL == finishScanParam)
2857 {
2858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002859 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2862 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 return ;
2864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2866 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002867 /*
2868 * Now Resume TX, if we reached here means, TX is already suspended, we
2869 * have to resume it unconditionaly
2870 */
2871 status = WDA_ResumeDataTx(pWDA) ;
2872
2873 if(VOS_STATUS_SUCCESS != status)
2874 {
2875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002876 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002878 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2880 return ;
2881}
Jeff Johnson295189b2012-06-20 16:38:30 -07002882/*
2883 * FUNCTION: WDA_ProcessFinshScanReq
2884 * Trigger Finish SCAN in WDI
2885 */
2886VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2887 tFinishScanParams *finishScanParams)
2888{
2889 WDI_Status status = WDI_STATUS_SUCCESS;
2890 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2891 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2892 sizeof(WDI_FinishScanReqParamsType)) ;
2893 tWDA_ReqParams *pWdaParams ;
2894 tANI_U8 i = 0;
2895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002896 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 if(NULL == wdiFinishScanParams)
2898 {
2899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 VOS_ASSERT(0);
2902 return VOS_STATUS_E_NOMEM;
2903 }
2904 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2905 if(NULL == pWdaParams)
2906 {
2907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002908 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 VOS_ASSERT(0);
2910 vos_mem_free(wdiFinishScanParams);
2911 return VOS_STATUS_E_NOMEM;
2912 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 /* Copy init Scan params to WDI structure */
2914 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2915 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2916 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2918 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2919 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2920 finishScanParams->frameLength ;
2921 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2922 finishScanParams->currentOperChannel ;
2923 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2924 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2925 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2927 {
2928 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2929 finishScanParams->scanEntry.bssIdx[i] ;
2930 }
2931
2932
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 /* if Frame length, copy macMgmtHdr ro WDI structure */
2934 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2935 {
2936 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2937 &finishScanParams->macMgmtHdr,
2938 sizeof(WDI_MacMgmtHdr)) ;
2939 }
2940 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002941 /* Store Init Req pointer, as this will be used for response */
2942 /* store Params pass it to WDI */
2943 pWdaParams->pWdaContext = pWDA;
2944 pWdaParams->wdaMsgParam = finishScanParams;
2945 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 /* call DAL API to pass init scan request to DAL */
2947 status = WDI_FinishScanReq(wdiFinishScanParams,
2948 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002949
Jeff Johnson295189b2012-06-20 16:38:30 -07002950
2951 /*
2952 * WDI API returns failure..
2953 */
2954 if(IS_WDI_STATUS_FAILURE( status))
2955 {
2956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2957 "Failure in Finish Scan WDI API, free all the memory " );
2958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2959 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 finishScanParams->status = eSIR_FAILURE ;
2961 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 return CONVERT_WDI2VOS_STATUS(status) ;
2964}
Jeff Johnson295189b2012-06-20 16:38:30 -07002965/*---------------------------------------------------------------------
2966 * ASSOC API's
2967 *---------------------------------------------------------------------
2968 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002969/*
2970 * FUNCTION: WDA_JoinReqCallback
2971 * Trigger Init SCAN callback
2972 */
2973void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2974{
2975 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2976 tWDA_CbContext *pWDA;
2977 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002979 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 if(NULL == pWdaParams)
2981 {
2982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002983 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 VOS_ASSERT(0) ;
2985 return ;
2986 }
2987 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2988 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2990 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 /* reset macBSSID */
2992 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 /* reset macSTASelf */
2994 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002995 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 return ;
2998}
Jeff Johnson295189b2012-06-20 16:38:30 -07002999/*
3000 * FUNCTION: WDA_ProcessJoinReq
3001 * Trigger Join REQ in WDI
3002 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003003VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3004 tSwitchChannelParams* joinReqParam)
3005{
3006 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003007 WDI_JoinReqParamsType *wdiJoinReqParam =
3008 (WDI_JoinReqParamsType *)vos_mem_malloc(
3009 sizeof(WDI_JoinReqParamsType)) ;
3010 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003012 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 if(NULL == wdiJoinReqParam)
3014 {
3015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003017 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003018 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003019 return VOS_STATUS_E_NOMEM;
3020 }
3021 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3022 if(NULL == pWdaParams)
3023 {
3024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 VOS_ASSERT(0);
3027 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003028 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 return VOS_STATUS_E_NOMEM;
3030 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003031
3032 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3033 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3034 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3035 {
3036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3037 "%s: received join request when BSSID or self-STA is NULL "
3038 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003039 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003040 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3041 VOS_ASSERT(0);
3042 vos_mem_free(wdiJoinReqParam);
3043 vos_mem_free(pWdaParams);
3044 joinReqParam->status = eSIR_FAILURE ;
3045 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3046 return VOS_STATUS_E_INVAL;
3047 }
3048
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 /* copy the BSSID for pWDA */
3050 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3051 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3053 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3055 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003056#ifdef WLAN_FEATURE_VOWIFI
3057 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3058 joinReqParam->maxTxPower ;
3059#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3061 joinReqParam->localPowerConstraint ;
3062#endif
3063 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3064 joinReqParam->secondaryChannelOffset ;
3065 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3066
3067 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003068 /* Store Init Req pointer, as this will be used for response */
3069 /* store Params pass it to WDI */
3070 pWdaParams->pWdaContext = pWDA;
3071 pWdaParams->wdaMsgParam = joinReqParam;
3072 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003073 status = WDI_JoinReq(wdiJoinReqParam,
3074 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003075 if(IS_WDI_STATUS_FAILURE(status))
3076 {
3077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3078 "Failure in Join WDI API, free all the memory " );
3079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3080 vos_mem_free(pWdaParams) ;
3081 joinReqParam->status = eSIR_FAILURE ;
3082 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003084 return CONVERT_WDI2VOS_STATUS(status) ;
3085}
Jeff Johnson295189b2012-06-20 16:38:30 -07003086/*
3087 * FUNCTION: WDA_SwitchChannelReqCallback
3088 * send Switch channel RSP back to PE
3089 */
3090void WDA_SwitchChannelReqCallback(
3091 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3092{
3093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3094 tWDA_CbContext *pWDA;
3095 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003097 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003098 if(NULL == pWdaParams)
3099 {
3100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003101 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 VOS_ASSERT(0) ;
3103 return ;
3104 }
3105 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3106 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3107
3108#ifdef WLAN_FEATURE_VOWIFI
3109 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3110#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3112 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003114 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 return ;
3117}
Jeff Johnson295189b2012-06-20 16:38:30 -07003118/*
3119 * FUNCTION: WDA_ProcessChannelSwitchReq
3120 * Request to WDI to switch channel REQ params.
3121 */
3122VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3123 tSwitchChannelParams *pSwitchChanParams)
3124{
3125 WDI_Status status = WDI_STATUS_SUCCESS ;
3126 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3127 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3128 sizeof(WDI_SwitchChReqParamsType)) ;
3129 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003131 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003132 if(NULL == wdiSwitchChanParam)
3133 {
3134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003136 VOS_ASSERT(0);
3137 return VOS_STATUS_E_NOMEM;
3138 }
3139 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3140 if(NULL == pWdaParams)
3141 {
3142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 VOS_ASSERT(0);
3145 vos_mem_free(wdiSwitchChanParam);
3146 return VOS_STATUS_E_NOMEM;
3147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3149#ifndef WLAN_FEATURE_VOWIFI
3150 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3151 pSwitchChanParams->localPowerConstraint;
3152#endif
3153 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3154 pSwitchChanParams->secondaryChannelOffset;
3155 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 /* Store req pointer, as this will be used for response */
3157 /* store Params pass it to WDI */
3158 pWdaParams->pWdaContext = pWDA;
3159 pWdaParams->wdaMsgParam = pSwitchChanParams;
3160 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003161#ifdef WLAN_FEATURE_VOWIFI
3162 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3163 = pSwitchChanParams->maxTxPower;
3164 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3165 pSwitchChanParams ->selfStaMacAddr,
3166 sizeof(tSirMacAddr));
3167#endif
3168 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3169 pSwitchChanParams->bssId,
3170 sizeof(tSirMacAddr));
3171
3172 status = WDI_SwitchChReq(wdiSwitchChanParam,
3173 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 if(IS_WDI_STATUS_FAILURE(status))
3175 {
3176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3177 "Failure in process channel switch Req WDI API, free all the memory " );
3178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3179 vos_mem_free(pWdaParams) ;
3180 pSwitchChanParams->status = eSIR_FAILURE ;
3181 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 return CONVERT_WDI2VOS_STATUS(status) ;
3184}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003185
3186/*
3187 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3188 * send Switch channel RSP back to PE
3189 */
3190void WDA_SwitchChannelReqCallback_V1(
3191 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3192 void* pUserData)
3193{
3194 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3195 tWDA_CbContext *pWDA;
3196 tSwitchChannelParams *pSwitchChanParams;
3197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3198 "<------ %s " ,__func__);
3199
3200 if (NULL == pWdaParams)
3201 {
3202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3203 "%s: pWdaParams received NULL", __func__);
3204 VOS_ASSERT(0);
3205 return ;
3206 }
3207 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3208 pSwitchChanParams =
3209 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3210 pSwitchChanParams->channelSwitchSrc =
3211 wdiSwitchChanRsp->channelSwitchSrc;
3212#ifdef WLAN_FEATURE_VOWIFI
3213 pSwitchChanParams->txMgmtPower =
3214 wdiSwitchChanRsp->ucTxMgmtPower;
3215#endif
3216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3217 vos_mem_free(pWdaParams);
3218 pSwitchChanParams->status =
3219 wdiSwitchChanRsp->wdiStatus ;
3220 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3221 (void *)pSwitchChanParams , 0);
3222 return;
3223}
3224
3225/*
3226 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3227 * Request to WDI to switch channel REQ params.
3228 */
3229VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3230 tSwitchChannelParams *pSwitchChanParams)
3231{
3232 WDI_Status status = WDI_STATUS_SUCCESS ;
3233 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3234 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3235 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3236 tWDA_ReqParams *pWdaParams ;
3237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3238 "------> %s " ,__func__);
3239 if (NULL == wdiSwitchChanParam)
3240 {
3241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3242 "%s: VOS MEM Alloc Failure", __func__);
3243 VOS_ASSERT(0);
3244 return VOS_STATUS_E_NOMEM;
3245 }
3246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3247 if (NULL == pWdaParams)
3248 {
3249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3250 "%s: VOS MEM Alloc Failure", __func__);
3251 VOS_ASSERT(0);
3252 vos_mem_free(wdiSwitchChanParam);
3253 return VOS_STATUS_E_NOMEM;
3254 }
3255 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3256 pSwitchChanParams->channelSwitchSrc;
3257
3258 wdiSwitchChanParam->wdiChInfo.ucChannel =
3259 pSwitchChanParams->channelNumber;
3260#ifndef WLAN_FEATURE_VOWIFI
3261 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3262 pSwitchChanParams->localPowerConstraint;
3263#endif
3264 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3265 pSwitchChanParams->secondaryChannelOffset;
3266 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3267 /* Store req pointer, as this will be used for response */
3268 /* store Params pass it to WDI */
3269 pWdaParams->pWdaContext = pWDA;
3270 pWdaParams->wdaMsgParam = pSwitchChanParams;
3271 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3272#ifdef WLAN_FEATURE_VOWIFI
3273 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3274 pSwitchChanParams->maxTxPower;
3275 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3276 pSwitchChanParams ->selfStaMacAddr,
3277 sizeof(tSirMacAddr));
3278#endif
3279 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3280 pSwitchChanParams->bssId,
3281 sizeof(tSirMacAddr));
3282
3283 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3284 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3285 pWdaParams);
3286 if (IS_WDI_STATUS_FAILURE(status))
3287 {
3288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3289 "Failure in process channel switch Req WDI "
3290 "API, free all the memory " );
3291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3292 vos_mem_free(pWdaParams) ;
3293 pSwitchChanParams->status = eSIR_FAILURE ;
3294 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3295 (void *)pSwitchChanParams, 0) ;
3296 }
3297 return CONVERT_WDI2VOS_STATUS(status) ;
3298}
3299
Jeff Johnson295189b2012-06-20 16:38:30 -07003300/*
3301 * FUNCTION: WDA_ConfigBssReqCallback
3302 * config BSS Req Callback, called by WDI
3303 */
3304void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3305 ,void* pUserData)
3306{
3307 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3308 tWDA_CbContext *pWDA;
3309 tAddBssParams *configBssReqParam;
3310 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 if(NULL == pWdaParams)
3314 {
3315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003316 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003317 VOS_ASSERT(0) ;
3318 return ;
3319 }
3320 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3321 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3322 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003324 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3326 {
3327 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3328 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3330 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3331 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3332
3333 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3334 {
3335 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3336 {
3337 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3338 staConfigBssParam->staType = STA_ENTRY_BSSID;
3339 }
3340 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3341 (staConfigBssParam->staType == STA_ENTRY_SELF))
3342 {
3343 /* This is the 1st add BSS Req for the BTAMP STA */
3344 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3345 staConfigBssParam->staType = STA_ENTRY_BSSID;
3346 }
3347 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3348 (staConfigBssParam->staType == STA_ENTRY_PEER))
3349 {
3350 /* This is the 2nd ADD BSS Request that is sent
3351 * on the BTAMP STA side. The Sta type is
3352 * set to STA_ENTRY_PEER here.*/
3353 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3354 }
3355 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3356 (staConfigBssParam->staType == STA_ENTRY_SELF))
3357 {
3358 /* statype is already set by PE.
3359 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3360 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3361 staConfigBssParam->staType = STA_ENTRY_BSSID;
3362 }
3363 else
3364 {
3365 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3366 staConfigBssParam->staType = STA_ENTRY_PEER;
3367 }
3368 }
3369 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3370 {
3371 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3372 staConfigBssParam->staType = STA_ENTRY_SELF;
3373 }
3374 else
3375 {
3376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3377 "Invalid operation mode specified");
3378 VOS_ASSERT(0);
3379 }
3380
3381 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3386 sizeof(tSirMacAddr));
3387 staConfigBssParam->txChannelWidthSet =
3388 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3390 staConfigBssParam->htCapable)
3391 {
3392 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3393 wdiConfigBssRsp->ucBSSIdx;
3394 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3395 WDA_VALID_STA_INDEX ;
3396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3398 wdiConfigBssRsp->ucBSSIdx,
3399 wdiConfigBssRsp->ucSTAIdx))
3400 {
3401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003402 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 VOS_ASSERT(0) ;
3404 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003405 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3406 {
3407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003408 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003409 VOS_ASSERT(0) ;
3410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003411#ifdef WLAN_FEATURE_VOWIFI
3412 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3413#endif
3414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3416 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 return ;
3419}
Jeff Johnson295189b2012-06-20 16:38:30 -07003420/*
3421 * FUNCTION: WDA_UpdateEdcaParamsForAC
3422 * Update WDI EDCA params with PE edca params
3423 */
3424void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3425 WDI_EdcaParamRecord *wdiEdcaParam,
3426 tSirMacEdcaParamRecord *macEdcaParam)
3427{
3428 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3429 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3430 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3431 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3432 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3433 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3434}
Jeff Johnson295189b2012-06-20 16:38:30 -07003435/*
3436 * FUNCTION: WDA_ProcessConfigBssReq
3437 * Configure BSS before starting Assoc with AP
3438 */
3439VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3440 tAddBssParams* configBssReqParam)
3441{
3442 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303443 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003444 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003446 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303447 if (NULL == configBssReqParam)
3448 {
3449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3450 "%s: configBssReqParam is NULL", __func__);
3451 return VOS_STATUS_E_INVAL;
3452 }
3453
3454 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3455 sizeof(WDI_ConfigBSSReqParamsType)) ;
3456
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 if(NULL == wdiConfigBssReqParam)
3458 {
3459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003461 VOS_ASSERT(0);
3462 return VOS_STATUS_E_NOMEM;
3463 }
3464 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3465 if(NULL == pWdaParams)
3466 {
3467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 VOS_ASSERT(0);
3470 vos_mem_free(wdiConfigBssReqParam);
3471 return VOS_STATUS_E_NOMEM;
3472 }
Kiran4a17ebe2013-01-31 10:43:43 -08003473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3474 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003475 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3477 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 /* Store Init Req pointer, as this will be used for response */
3479 /* store Params pass it to WDI */
3480 pWdaParams->pWdaContext = pWDA;
3481 pWdaParams->wdaMsgParam = configBssReqParam;
3482 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003483 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3484 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 if(IS_WDI_STATUS_FAILURE(status))
3486 {
3487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3488 "Failure in Config BSS WDI API, free all the memory " );
3489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3490 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003492 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3493 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 return CONVERT_WDI2VOS_STATUS(status) ;
3495}
Jeff Johnson295189b2012-06-20 16:38:30 -07003496#ifdef ENABLE_HAL_COMBINED_MESSAGES
3497/*
3498 * FUNCTION: WDA_PostAssocReqCallback
3499 * Post ASSOC req callback, send RSP back to PE
3500 */
3501void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3502 void* pUserData)
3503{
3504 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3505 tPostAssocParams *postAssocReqParam =
3506 (tPostAssocParams *)pWDA->wdaMsgParam ;
3507 /*STA context within the BSS Params*/
3508 tAddStaParams *staPostAssocParam =
3509 &postAssocReqParam->addBssParams.staContext ;
3510 /*STA Params for self STA*/
3511 tAddStaParams *selfStaPostAssocParam =
3512 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003514 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003516 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3518 {
3519 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3520 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3521 sizeof(tSirMacAddr)) ;
3522 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3523 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3524 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3526 }
3527 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3528 pWDA->wdaWdiApiMsgParam = NULL;
3529 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003530 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 return ;
3532}
Jeff Johnson295189b2012-06-20 16:38:30 -07003533/*
3534 * FUNCTION: WDA_ProcessPostAssocReq
3535 * Trigger POST ASSOC processing in WDI
3536 */
3537VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3538 tPostAssocParams *postAssocReqParam)
3539{
Jeff Johnson295189b2012-06-20 16:38:30 -07003540 WDI_Status status = WDI_STATUS_SUCCESS ;
3541
3542 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3543 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3544 sizeof(WDI_PostAssocReqParamsType)) ;
3545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003546 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003547
Jeff Johnson295189b2012-06-20 16:38:30 -07003548 if(NULL == wdiPostAssocReqParam)
3549 {
3550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003551 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 VOS_ASSERT(0);
3553 return VOS_STATUS_E_NOMEM;
3554 }
3555
3556 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3557 {
3558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003559 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 VOS_ASSERT(0);
3561 return VOS_STATUS_E_FAILURE;
3562 }
3563
Jeff Johnson295189b2012-06-20 16:38:30 -07003564 /* update BSS params into WDI structure */
3565 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3566 &postAssocReqParam->addBssParams) ;
3567 /* update STA params into WDI structure */
3568 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3569 &postAssocReqParam->addStaParams) ;
3570
3571 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3572 postAssocReqParam->addBssParams.highPerformance;
3573 WDA_UpdateEdcaParamsForAC(pWDA,
3574 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3575 &postAssocReqParam->addBssParams.acbe);
3576 WDA_UpdateEdcaParamsForAC(pWDA,
3577 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3578 &postAssocReqParam->addBssParams.acbk);
3579 WDA_UpdateEdcaParamsForAC(pWDA,
3580 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3581 &postAssocReqParam->addBssParams.acvi);
3582 WDA_UpdateEdcaParamsForAC(pWDA,
3583 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3584 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003585 /* Store Init Req pointer, as this will be used for response */
3586 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 /* store Params pass it to WDI */
3588 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3590 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 if(IS_WDI_STATUS_FAILURE(status))
3592 {
3593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3594 "Failure in Post Assoc WDI API, free all the memory " );
3595 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3596 pWDA->wdaWdiApiMsgParam = NULL;
3597 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 return CONVERT_WDI2VOS_STATUS(status) ;
3602}
3603#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003604/*
3605 * FUNCTION: WDA_AddStaReqCallback
3606 * ADD STA req callback, send RSP back to PE
3607 */
3608void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3609 void* pUserData)
3610{
3611 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3612 tWDA_CbContext *pWDA;
3613 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003615 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 if(NULL == pWdaParams)
3617 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 VOS_ASSERT(0) ;
3620 return ;
3621 }
3622 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3623 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003625 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3627 {
3628 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3629 /*TODO: UMAC structure doesn't have these fields*/
3630 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3631 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3632 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3633 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3634 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3635 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003636#ifdef FEATURE_WLAN_TDLS
3637 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3638 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3639#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003641#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 {
3643 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3644 wdiConfigStaRsp->ucBssIdx;
3645 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3646 WDA_VALID_STA_INDEX ;
3647 }
3648 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3649 {
3650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003651 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003652 VOS_ASSERT(0) ;
3653 return ;
3654 }
3655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3657 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 return ;
3660}
Jeff Johnson295189b2012-06-20 16:38:30 -07003661/*
3662 * FUNCTION: WDA_ConfigStaReq
3663 * Trigger Config STA processing in WDI
3664 */
3665VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3666 tAddStaParams *addStaReqParam)
3667{
Jeff Johnson295189b2012-06-20 16:38:30 -07003668 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003669 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3670 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3671 sizeof(WDI_ConfigSTAReqParamsType)) ;
3672 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003674 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003675 if(NULL == wdiConfigStaReqParam)
3676 {
3677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003678 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003679 VOS_ASSERT(0);
3680 return VOS_STATUS_E_NOMEM;
3681 }
3682 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3683 if(NULL == pWdaParams)
3684 {
3685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003686 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003687 VOS_ASSERT(0);
3688 vos_mem_free(wdiConfigStaReqParam);
3689 return VOS_STATUS_E_NOMEM;
3690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003692 /* update STA params into WDI structure */
3693 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3694 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 /* Store Init Req pointer, as this will be used for response */
3696 /* store Params pass it to WDI */
3697 pWdaParams->pWdaContext = pWDA;
3698 pWdaParams->wdaMsgParam = addStaReqParam;
3699 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003700 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3701 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003702 if(IS_WDI_STATUS_FAILURE(status))
3703 {
3704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3705 "Failure in Config STA WDI API, free all the memory " );
3706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3707 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003709 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 return CONVERT_WDI2VOS_STATUS(status) ;
3712}
Jeff Johnson295189b2012-06-20 16:38:30 -07003713/*
3714 * FUNCTION: WDA_DelBSSReqCallback
3715 * Dens DEL BSS RSP back to PE
3716 */
3717void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3718 void* pUserData)
3719{
3720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3721 tWDA_CbContext *pWDA;
3722 tDeleteBssParams *delBssReqParam;
3723 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003725 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 if(NULL == pWdaParams)
3727 {
3728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003729 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003730 VOS_ASSERT(0) ;
3731 return ;
3732 }
3733 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3734 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003735 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003736 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3737 {
3738 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3739 sizeof(tSirMacAddr)) ;
3740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3742 {
3743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003744 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003745 VOS_ASSERT(0) ;
3746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3748 {
3749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003750 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003751 VOS_ASSERT(0) ;
3752 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003753 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3754 {
3755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003756 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 VOS_ASSERT(0) ;
3758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3760 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 /* reset the the system role*/
3762 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3763
3764 /* Reset the BA related information */
3765 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3766 {
3767 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3768 {
3769 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3770 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3771 /* Reset framesTxed counters here */
3772 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3773 {
3774 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3775 }
3776 }
3777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003778 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 return ;
3780}
3781
Jeff Johnson295189b2012-06-20 16:38:30 -07003782/*
3783 * FUNCTION: WDA_ProcessDelBssReq
3784 * Init DEL BSS req with WDI
3785 */
3786VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3787 tDeleteBssParams *delBssParam)
3788{
3789 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003790 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3791 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3792 sizeof(WDI_DelBSSReqParamsType)) ;
3793 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003795 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 if(NULL == wdiDelBssReqParam)
3797 {
3798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003800 VOS_ASSERT(0);
3801 return VOS_STATUS_E_NOMEM;
3802 }
3803 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3804 if(NULL == pWdaParams)
3805 {
3806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003807 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 VOS_ASSERT(0);
3809 vos_mem_free(wdiDelBssReqParam);
3810 return VOS_STATUS_E_NOMEM;
3811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003812 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3813 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3814
3815 /* Store Init Req pointer, as this will be used for response */
3816 /* store Params pass it to WDI */
3817 pWdaParams->pWdaContext = pWDA;
3818 pWdaParams->wdaMsgParam = delBssParam;
3819 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003820 status = WDI_DelBSSReq(wdiDelBssReqParam,
3821 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003822 if(IS_WDI_STATUS_FAILURE(status))
3823 {
3824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3825 "Failure in Del BSS WDI API, free all the memory " );
3826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3827 vos_mem_free(pWdaParams) ;
3828 delBssParam->status = eSIR_FAILURE ;
3829 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003831 return CONVERT_WDI2VOS_STATUS(status) ;
3832}
Jeff Johnson295189b2012-06-20 16:38:30 -07003833/*
3834 * FUNCTION: WDA_DelSTAReqCallback
3835 * Dens DEL STA RSP back to PE
3836 */
3837void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3838 void* pUserData)
3839{
3840 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3841 tWDA_CbContext *pWDA;
3842 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003844 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003845 if(NULL == pWdaParams)
3846 {
3847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003848 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003849 VOS_ASSERT(0) ;
3850 return ;
3851 }
3852 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3853 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003854 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3856 {
3857 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3858 {
3859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003860 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003861 VOS_ASSERT(0) ;
3862 }
3863 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3864 }
3865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3866 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003867 /*Reset the BA information corresponding to this STAIdx */
3868 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3869 WDA_INVALID_STA_INDEX;
3870 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3871
3872 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003873 return ;
3874}
Jeff Johnson295189b2012-06-20 16:38:30 -07003875/*
3876 * FUNCTION: WDA_ProcessDelStaReq
3877 * Init DEL STA req with WDI
3878 */
3879VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3880 tDeleteStaParams *delStaParam)
3881{
3882 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3884 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3885 sizeof(WDI_DelSTAReqParamsType)) ;
3886 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003888 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003889 if(NULL == wdiDelStaReqParam)
3890 {
3891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003893 VOS_ASSERT(0);
3894 return VOS_STATUS_E_NOMEM;
3895 }
3896 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3897 if(NULL == pWdaParams)
3898 {
3899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 VOS_ASSERT(0);
3902 vos_mem_free(wdiDelStaReqParam);
3903 return VOS_STATUS_E_NOMEM;
3904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3906 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 /* Store Init Req pointer, as this will be used for response */
3908 /* store Params pass it to WDI */
3909 pWdaParams->pWdaContext = pWDA;
3910 pWdaParams->wdaMsgParam = delStaParam;
3911 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003912 status = WDI_DelSTAReq(wdiDelStaReqParam,
3913 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003914 if(IS_WDI_STATUS_FAILURE(status))
3915 {
3916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3917 "Failure in Del STA WDI API, free all the memory status = %d",
3918 status );
3919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3920 vos_mem_free(pWdaParams) ;
3921 delStaParam->status = eSIR_FAILURE ;
3922 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 return CONVERT_WDI2VOS_STATUS(status) ;
3925}
Jeff Johnson295189b2012-06-20 16:38:30 -07003926void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3927{
3928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3929 tWDA_CbContext *pWDA;
3930 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003932 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003933 if(NULL == pWdaParams)
3934 {
3935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003936 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003937 VOS_ASSERT(0) ;
3938 return ;
3939 }
3940 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3941 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3943 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003944 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3945 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3946 pwdiAddSTASelfRsp->macSelfSta,
3947 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003948 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003949 return ;
3950}
Jeff Johnson295189b2012-06-20 16:38:30 -07003951/*
3952 * FUNCTION: WDA_ProcessAddStaSelfReq
3953 *
3954 */
3955VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3956{
3957 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003958 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003959 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3960 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3961 sizeof(WDI_AddSTASelfReqParamsType)) ;
3962 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003964 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 if( NULL == wdiAddStaSelfReq )
3966 {
3967 VOS_ASSERT( 0 );
3968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003969 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 return( VOS_STATUS_E_NOMEM );
3971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003972 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 if( NULL == pWdaParams )
3974 {
3975 VOS_ASSERT( 0 );
3976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003977 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 vos_mem_free(wdiAddStaSelfReq) ;
3979 return( VOS_STATUS_E_NOMEM );
3980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003982 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003983 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003984 /* Store Init Req pointer, as this will be used for response */
3985 /* store Params pass it to WDI */
3986 pWdaParams->pWdaContext = pWDA;
3987 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3988 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003989 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003990
Jeff Johnson43971f52012-07-17 12:26:56 -07003991 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 {
3993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3994 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003995 wstatus );
3996 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3998 vos_mem_free(pWdaParams) ;
3999 pAddStaSelfReq->status = eSIR_FAILURE ;
4000 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4001 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004002 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004003}
Jeff Johnson295189b2012-06-20 16:38:30 -07004004/*
4005 * FUNCTION: WDA_DelSTASelfRespCallback
4006 *
4007 */
4008void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4009 wdiDelStaSelfRspParams , void* pUserData)
4010{
4011 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4012 tWDA_CbContext *pWDA;
4013 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004015 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004016 if (NULL == pWdaParams)
4017 {
4018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004019 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004020 VOS_ASSERT(0);
4021 return;
4022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4024 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004026 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004027
4028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4029 vos_mem_free(pWdaParams) ;
4030
4031 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 return ;
4033}
Jeff Johnson295189b2012-06-20 16:38:30 -07004034/*
4035 * FUNCTION: WDA_DelSTASelfReqCallback
4036 *
4037 */
4038void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4039 void* pUserData)
4040{
4041 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4042 tWDA_CbContext *pWDA;
4043 tDelStaSelfParams *delStaSelfParams;
4044
4045 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304046 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004047 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004048
4049 if (NULL == pWdaParams)
4050 {
4051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004052 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004053 VOS_ASSERT(0);
4054 return;
4055 }
4056
4057 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4058 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4059
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004060 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004061
4062 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4063 {
4064 VOS_ASSERT(0);
4065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4066 vos_mem_free(pWdaParams) ;
4067 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4068 }
4069
4070 return ;
4071}
4072
4073/*
4074 * FUNCTION: WDA_DelSTASelfReq
4075 * Trigger Config STA processing in WDI
4076 */
4077VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4078 tDelStaSelfParams* pDelStaSelfReqParam)
4079{
4080 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004081 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 tWDA_ReqParams *pWdaParams = NULL;
4083 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4084 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4085 sizeof(WDI_DelSTASelfReqParamsType)) ;
4086
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004088 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004089 if( NULL == wdiDelStaSelfReq )
4090 {
4091 VOS_ASSERT( 0 );
4092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004093 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 return( VOS_STATUS_E_NOMEM );
4095 }
4096
4097 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4098 if( NULL == pWdaParams )
4099 {
4100 VOS_ASSERT( 0 );
4101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004102 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 vos_mem_free(wdiDelStaSelfReq) ;
4104 return( VOS_STATUS_E_NOMEM );
4105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 pWdaParams->pWdaContext = pWDA;
4107 /* Store param pointer as passed in by caller */
4108 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4109 /* store Params pass it to WDI */
4110 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004111 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4112 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4113
4114 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4115 wdiDelStaSelfReq->pUserData = pWdaParams;
4116
Jeff Johnson43971f52012-07-17 12:26:56 -07004117 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4119
Jeff Johnson43971f52012-07-17 12:26:56 -07004120 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 {
4122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4123 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4124 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004125 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4127 vos_mem_free(pWdaParams) ;
4128 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4129 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4130 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004131 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004132}
4133
Jeff Johnson295189b2012-06-20 16:38:30 -07004134/*
4135 * FUNCTION: WDA_SendMsg
4136 * Send Message back to PE
4137 */
4138void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4139 void *pBodyptr, tANI_U32 bodyVal)
4140{
4141 tSirMsgQ msg = {0} ;
4142 tANI_U32 status = VOS_STATUS_SUCCESS ;
4143 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 msg.type = msgType;
4145 msg.bodyval = bodyVal;
4146 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 if (VOS_STATUS_SUCCESS != status)
4149 {
4150 if(NULL != pBodyptr)
4151 {
4152 vos_mem_free(pBodyptr);
4153 }
4154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004155 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004156 VOS_ASSERT(0) ;
4157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 return ;
4159}
Jeff Johnson295189b2012-06-20 16:38:30 -07004160/*
4161 * FUNCTION: WDA_UpdateBSSParams
4162 * Translated WDA/PE BSS info into WDI BSS info..
4163 */
4164void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4165 WDI_ConfigBSSReqInfoType *wdiBssParams,
4166 tAddBssParams *wdaBssParams)
4167{
4168 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 /* copy bssReq Params to WDI structure */
4170 vos_mem_copy(wdiBssParams->macBSSID,
4171 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4172 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4173 sizeof(tSirMacAddr)) ;
4174 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4175 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4176 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004177 wdiBssParams->ucShortSlotTimeSupported =
4178 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4180 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4181 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4182 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4183 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4184
4185 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4186 wdiBssParams->ucTXOPProtectionFullSupport =
4187 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004188 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4189 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004191 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4192 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4193 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4194 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4195
Chet Lanctot186b5732013-03-18 10:26:30 -07004196 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4197
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 /* copy SSID into WDI structure */
4199 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4200 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4201 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004202 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4203 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004205#ifdef WLAN_FEATURE_VOWIFI
4206 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4207#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004210#ifdef WLAN_FEATURE_VOWIFI_11R
4211 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 if(wdiBssParams->bExtSetStaKeyParamValid)
4213 {
4214 /* copy set STA key params to WDI structure */
4215 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4216 wdaBssParams->extSetStaKeyParam.staIdx;
4217 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4218 wdaBssParams->extSetStaKeyParam.encType;
4219 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4220 wdaBssParams->extSetStaKeyParam.wepType;
4221 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4222 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4224 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004225 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4227 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4228 {
4229 WDA_GetWepKeysFromCfg( pWDA,
4230 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4231 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4232 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4233 }
4234 else
4235 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4237 keyIndex++)
4238 {
4239 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4240 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4241 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4242 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4243 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4244 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004245 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4246 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4247 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4248 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4249 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4250 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4251 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4252 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004254 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4255 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 }
4257 }
4258 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4259 }
4260 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4261 {
4262 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4263 sizeof(wdaBssParams->extSetStaKeyParam) );
4264 }
4265#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004266#ifdef WLAN_FEATURE_11AC
4267 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4268 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4269#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004270
4271 return ;
4272}
Jeff Johnson295189b2012-06-20 16:38:30 -07004273/*
4274 * FUNCTION: WDA_UpdateSTAParams
4275 * Translated WDA/PE BSS info into WDI BSS info..
4276 */
4277void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4278 WDI_ConfigStaReqInfoType *wdiStaParams,
4279 tAddStaParams *wdaStaParams)
4280{
4281 tANI_U8 i = 0;
4282 /* Update STA params */
4283 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4284 sizeof(tSirMacAddr)) ;
4285 wdiStaParams->usAssocId = wdaStaParams->assocId;
4286 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004287 wdiStaParams->staIdx = wdaStaParams->staIdx;
4288
Jeff Johnson295189b2012-06-20 16:38:30 -07004289 wdiStaParams->ucShortPreambleSupported =
4290 wdaStaParams->shortPreambleSupported;
4291 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4292 sizeof(tSirMacAddr)) ;
4293 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4294
4295 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4296
4297 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4298 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4299 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4300 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4301 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4302 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4303 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4304
4305 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4306 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 wdiStaParams->wdiSupportedRates.opRateMode =
4308 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004309 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4310 {
4311 wdiStaParams->wdiSupportedRates.llbRates[i] =
4312 wdaStaParams->supportedRates.llbRates[i];
4313 }
4314 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4315 {
4316 wdiStaParams->wdiSupportedRates.llaRates[i] =
4317 wdaStaParams->supportedRates.llaRates[i];
4318 }
4319 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4320 {
4321 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4322 wdaStaParams->supportedRates.aniLegacyRates[i];
4323 }
4324 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4325 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004326#ifdef WLAN_FEATURE_11AC
4327 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4328 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4329 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4330 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4331#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004332 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4333 {
4334 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4335 wdaStaParams->supportedRates.supportedMCSSet[i];
4336 }
4337 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4338 wdaStaParams->supportedRates.rxHighestDataRate;
4339
4340 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4341
4342 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4343
4344 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4345 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4346 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4347
4348 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4349 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4350 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4351 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004353#ifdef WLAN_FEATURE_11AC
4354 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4355 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004356 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004357#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004358 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4359 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 return ;
4361}
Jeff Johnson295189b2012-06-20 16:38:30 -07004362/*
4363 * -------------------------------------------------------------------------
4364 * CFG update to WDI
4365 * -------------------------------------------------------------------------
4366 */
4367
4368 /*
4369 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4370 * Convert the WNI CFG ID to HAL CFG ID
4371 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004372static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004373{
4374 switch(wniCfgId)
4375 {
4376 case WNI_CFG_STA_ID:
4377 return QWLAN_HAL_CFG_STA_ID;
4378 case WNI_CFG_CURRENT_TX_ANTENNA:
4379 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4380 case WNI_CFG_CURRENT_RX_ANTENNA:
4381 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4382 case WNI_CFG_LOW_GAIN_OVERRIDE:
4383 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4384 case WNI_CFG_POWER_STATE_PER_CHAIN:
4385 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4386 case WNI_CFG_CAL_PERIOD:
4387 return QWLAN_HAL_CFG_CAL_PERIOD;
4388 case WNI_CFG_CAL_CONTROL:
4389 return QWLAN_HAL_CFG_CAL_CONTROL;
4390 case WNI_CFG_PROXIMITY:
4391 return QWLAN_HAL_CFG_PROXIMITY;
4392 case WNI_CFG_NETWORK_DENSITY:
4393 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4394 case WNI_CFG_MAX_MEDIUM_TIME:
4395 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4396 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4397 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4398 case WNI_CFG_RTS_THRESHOLD:
4399 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4400 case WNI_CFG_SHORT_RETRY_LIMIT:
4401 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4402 case WNI_CFG_LONG_RETRY_LIMIT:
4403 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4404 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4405 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4406 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4407 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4408 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4409 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4410 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4411 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4412 case WNI_CFG_FIXED_RATE:
4413 return QWLAN_HAL_CFG_FIXED_RATE;
4414 case WNI_CFG_RETRYRATE_POLICY:
4415 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4416 case WNI_CFG_RETRYRATE_SECONDARY:
4417 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4418 case WNI_CFG_RETRYRATE_TERTIARY:
4419 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4420 case WNI_CFG_FORCE_POLICY_PROTECTION:
4421 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4422 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4423 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4424 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4425 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4426 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4427 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4428 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4429 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4430 case WNI_CFG_MAX_BA_SESSIONS:
4431 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4432 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4433 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4434 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4435 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4436 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4437 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4438 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4439 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4440 case WNI_CFG_STATS_PERIOD:
4441 return QWLAN_HAL_CFG_STATS_PERIOD;
4442 case WNI_CFG_CFP_MAX_DURATION:
4443 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4444#if 0 /*This is not part of CFG*/
4445 case WNI_CFG_FRAME_TRANS_ENABLED:
4446 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4447#endif
4448 case WNI_CFG_DTIM_PERIOD:
4449 return QWLAN_HAL_CFG_DTIM_PERIOD;
4450 case WNI_CFG_EDCA_WME_ACBK:
4451 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4452 case WNI_CFG_EDCA_WME_ACBE:
4453 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4454 case WNI_CFG_EDCA_WME_ACVI:
4455 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4456 case WNI_CFG_EDCA_WME_ACVO:
4457 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4458#if 0
4459 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4460 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4461 case WNI_CFG_TELE_BCN_TRANS_LI:
4462 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4463 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4464 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4465 case WNI_CFG_TELE_BCN_MAX_LI:
4466 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4467 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4468 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4469#endif
4470 case WNI_CFG_ENABLE_CLOSE_LOOP:
4471 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004472 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4473 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 default:
4475 {
4476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004477 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004478 wniCfgId);
4479 return VOS_STATUS_E_INVAL;
4480 }
4481 }
4482}
Jeff Johnson295189b2012-06-20 16:38:30 -07004483/*
4484 * FUNCTION: WDA_UpdateCfgCallback
4485 *
4486 */
4487void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4488{
4489 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4490 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4491 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004493 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 /*
4495 * currently there is no response message is expected between PE and
4496 * WDA, Failure return from WDI is a ASSERT condition
4497 */
4498 if(WDI_STATUS_SUCCESS != wdiStatus)
4499 {
4500 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004501 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4503 }
4504
4505 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4506 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4507 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 return ;
4509}
Jeff Johnson295189b2012-06-20 16:38:30 -07004510/*
4511 * FUNCTION: WDA_UpdateCfg
4512 *
4513 */
4514VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4515{
4516
4517 WDI_Status status = WDI_STATUS_SUCCESS ;
4518 tANI_U32 val =0;
4519 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4520 tHalCfg *configData;
4521 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4522 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004524 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 if (NULL == pMac )
4526 {
4527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004528 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004529 return VOS_STATUS_E_FAILURE;
4530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 if(WDA_START_STATE != pWDA->wdaState)
4532 {
4533 return VOS_STATUS_E_FAILURE;
4534 }
4535
4536 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4537 {
4538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004539 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004540 VOS_ASSERT(0);
4541 return VOS_STATUS_E_FAILURE;
4542 }
4543
4544 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4545 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 if(NULL == wdiCfgReqParam)
4547 {
4548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004550 VOS_ASSERT(0);
4551 return VOS_STATUS_E_NOMEM;
4552 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004553 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4554 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 if(NULL == wdiCfgReqParam->pConfigBuffer)
4556 {
4557 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004558 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 vos_mem_free(wdiCfgReqParam);
4560 VOS_ASSERT(0);
4561 return VOS_STATUS_E_NOMEM;
4562 }
4563
4564 /*convert the WNI CFG Id to HAL CFG Id*/
4565 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4566 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4567
4568 /*TODO: revisit this for handling string parameters */
4569 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4570 &val) != eSIR_SUCCESS)
4571 {
4572 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004573 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004574 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4575 vos_mem_free(wdiCfgReqParam);
4576 return eSIR_FAILURE;
4577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4579 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4580 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4581 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4582 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4583
4584 /* store Params pass it to WDI */
4585 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004586#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4587 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4588 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 if(IS_WDI_STATUS_FAILURE(status))
4590 {
4591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4592 "Failure in Update CFG WDI API, free all the memory " );
4593 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4594 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4595 pWDA->wdaWdiCfgApiMsgParam = NULL;
4596 /* Failure is not expected */
4597 VOS_ASSERT(0) ;
4598 }
4599#else
4600 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4601 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4602 pWDA->wdaWdiCfgApiMsgParam = NULL;
4603#endif
4604 return CONVERT_WDI2VOS_STATUS(status) ;
4605}
4606
Jeff Johnson295189b2012-06-20 16:38:30 -07004607VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4608 v_U8_t *pDefaultKeyId,
4609 v_U8_t *pNumKeys,
4610 WDI_KeysType *pWdiKeys )
4611{
4612 v_U32_t i, j, defKeyId = 0;
4613 v_U32_t val = SIR_MAC_KEY_LENGTH;
4614 VOS_STATUS status = WDI_STATUS_SUCCESS;
4615 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004616 if (NULL == pMac )
4617 {
4618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004619 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 return VOS_STATUS_E_FAILURE;
4621 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004622 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4623 &defKeyId ))
4624 {
4625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4626 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4627 }
4628
4629 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004630 /* Need to extract ALL of the configured WEP Keys */
4631 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4632 {
4633 val = SIR_MAC_KEY_LENGTH;
4634 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4635 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4636 pWdiKeys[j].key,
4637 &val ))
4638 {
4639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004640 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004641 }
4642 else
4643 {
4644 pWdiKeys[j].keyId = (tANI_U8) i;
4645 /*
4646 * Actually, a DC (Don't Care) because
4647 * this is determined (and set) by PE/MLME
4648 */
4649 pWdiKeys[j].unicast = 0;
4650 /*
4651 * Another DC (Don't Care)
4652 */
4653 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4654 /* Another DC (Don't Care). Unused for WEP */
4655 pWdiKeys[j].paeRole = 0;
4656 /* Determined from wlan_cfgGetStr() above.*/
4657 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004658 j++;
4659 *pNumKeys = (tANI_U8) j;
4660 }
4661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004662 return status;
4663}
Jeff Johnson295189b2012-06-20 16:38:30 -07004664/*
4665 * FUNCTION: WDA_SetBssKeyReqCallback
4666 * send SET BSS key RSP back to PE
4667 */
4668void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4669{
4670 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4671 tWDA_CbContext *pWDA;
4672 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004674 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004675 if(NULL == pWdaParams)
4676 {
4677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004678 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004679 VOS_ASSERT(0) ;
4680 return ;
4681 }
4682 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4683 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4685 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004686 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004688 return ;
4689}
Jeff Johnson295189b2012-06-20 16:38:30 -07004690/*
4691 * FUNCTION: WDA_ProcessSetBssKeyReq
4692 * Request to WDI for programming the BSS key( key for
4693 * broadcast/multicast frames Encryption)
4694 */
4695VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4696 tSetBssKeyParams *setBssKeyParams )
4697{
4698 WDI_Status status = WDI_STATUS_SUCCESS ;
4699 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4700 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4701 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4702 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004705 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 if(NULL == wdiSetBssKeyParam)
4707 {
4708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004709 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004710 VOS_ASSERT(0);
4711 return VOS_STATUS_E_NOMEM;
4712 }
4713 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4714 if(NULL == pWdaParams)
4715 {
4716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004717 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004718 VOS_ASSERT(0);
4719 vos_mem_free(wdiSetBssKeyParam);
4720 return VOS_STATUS_E_NOMEM;
4721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004723 /* copy set BSS params to WDI structure */
4724 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4725 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4726 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 if(setBssKeyParams->encType != eSIR_ED_NONE)
4728 {
4729 if( setBssKeyParams->numKeys == 0 &&
4730 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4731 setBssKeyParams->encType == eSIR_ED_WEP104))
4732 {
4733 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004734 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4735 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4736 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4737 }
4738 else
4739 {
4740 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4741 {
4742 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4743 setBssKeyParams->key[keyIndex].keyId;
4744 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4745 setBssKeyParams->key[keyIndex].unicast;
4746 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4747 setBssKeyParams->key[keyIndex].keyDirection;
4748 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4749 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4750 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4751 setBssKeyParams->key[keyIndex].paeRole;
4752 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4753 setBssKeyParams->key[keyIndex].keyLength;
4754 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4755 setBssKeyParams->key[keyIndex].key,
4756 SIR_MAC_MAX_KEY_LENGTH);
4757 }
4758 }
4759 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4761 setBssKeyParams->singleTidRc;
4762 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 /* Store set key pointer, as this will be used for response */
4764 /* store Params pass it to WDI */
4765 pWdaParams->pWdaContext = pWDA;
4766 pWdaParams->wdaMsgParam = setBssKeyParams;
4767 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4769 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4770
4771 if(IS_WDI_STATUS_FAILURE(status))
4772 {
4773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4774 "Failure in Set BSS Key Req WDI API, free all the memory " );
4775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4776 vos_mem_free(pWdaParams) ;
4777 setBssKeyParams->status = eSIR_FAILURE ;
4778 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004780 return CONVERT_WDI2VOS_STATUS(status) ;
4781}
Jeff Johnson295189b2012-06-20 16:38:30 -07004782/*
4783 * FUNCTION: WDA_RemoveBssKeyReqCallback
4784 * send SET BSS key RSP back to PE
4785 */
4786void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4787{
4788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4789 tWDA_CbContext *pWDA;
4790 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004792 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 if(NULL == pWdaParams)
4794 {
4795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004796 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 VOS_ASSERT(0) ;
4798 return ;
4799 }
4800 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4801 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004802 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4803 vos_mem_free(pWdaParams) ;
4804
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004805 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004806 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 return ;
4808}
Jeff Johnson295189b2012-06-20 16:38:30 -07004809/*
4810 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4811 * Request to WDI to remove the BSS key( key for broadcast/multicast
4812 * frames Encryption)
4813 */
4814VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4815 tRemoveBssKeyParams *removeBssKeyParams )
4816{
4817 WDI_Status status = WDI_STATUS_SUCCESS ;
4818 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4819 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4820 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4821 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004823 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004824 if(NULL == wdiRemoveBssKeyParam)
4825 {
4826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 VOS_ASSERT(0);
4829 return VOS_STATUS_E_NOMEM;
4830 }
4831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4832 if(NULL == pWdaParams)
4833 {
4834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004836 VOS_ASSERT(0);
4837 vos_mem_free(wdiRemoveBssKeyParam);
4838 return VOS_STATUS_E_NOMEM;
4839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004840 /* copy Remove BSS key params to WDI structure*/
4841 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4842 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4843 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4844 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4845 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 /* Store remove key pointer, as this will be used for response */
4847 /* store Params pass it to WDI */
4848 pWdaParams->pWdaContext = pWDA;
4849 pWdaParams->wdaMsgParam = removeBssKeyParams;
4850 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4852 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 if(IS_WDI_STATUS_FAILURE(status))
4854 {
4855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4856 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4858 vos_mem_free(pWdaParams) ;
4859 removeBssKeyParams->status = eSIR_FAILURE ;
4860 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004862 return CONVERT_WDI2VOS_STATUS(status) ;
4863}
Jeff Johnson295189b2012-06-20 16:38:30 -07004864/*
4865 * FUNCTION: WDA_SetBssKeyReqCallback
4866 * send SET BSS key RSP back to PE
4867 */
4868void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4869{
4870 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4871 tWDA_CbContext *pWDA;
4872 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004874 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 if(NULL == pWdaParams)
4876 {
4877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004878 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 VOS_ASSERT(0) ;
4880 return ;
4881 }
4882 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4883 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4885 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004886 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 return ;
4889}
Jeff Johnson295189b2012-06-20 16:38:30 -07004890/*
4891 * FUNCTION: WDA_ProcessSetStaKeyReq
4892 * Request to WDI for programming the STA key( key for Unicast frames
4893 * Encryption)
4894 */
4895VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4896 tSetStaKeyParams *setStaKeyParams )
4897{
4898 WDI_Status status = WDI_STATUS_SUCCESS ;
4899 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4900 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4901 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4902 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004903 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004905 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 if(NULL == wdiSetStaKeyParam)
4907 {
4908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 VOS_ASSERT(0);
4911 return VOS_STATUS_E_NOMEM;
4912 }
4913 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4914 if(NULL == pWdaParams)
4915 {
4916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004917 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 VOS_ASSERT(0);
4919 vos_mem_free(wdiSetStaKeyParam);
4920 return VOS_STATUS_E_NOMEM;
4921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 /* copy set STA key params to WDI structure */
4925 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4926 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4927 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4928 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004929 if(setStaKeyParams->encType != eSIR_ED_NONE)
4930 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004931 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4933 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4934 {
4935 WDA_GetWepKeysFromCfg( pWDA,
4936 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4937 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4938 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4939 }
4940 else
4941 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4943 keyIndex++)
4944 {
4945 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4946 setStaKeyParams->key[keyIndex].keyId;
4947 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4948 setStaKeyParams->key[keyIndex].unicast;
4949 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4950 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4952 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4953 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4954 setStaKeyParams->key[keyIndex].paeRole;
4955 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4956 setStaKeyParams->key[keyIndex].keyLength;
4957 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4958 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4959 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4960 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4961 {
4962 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4963 }
4964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4966 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 }
4968 }
4969 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4970 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 /* Store set key pointer, as this will be used for response */
4972 /* store Params pass it to WDI */
4973 pWdaParams->pWdaContext = pWDA;
4974 pWdaParams->wdaMsgParam = setStaKeyParams;
4975 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004976 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4977 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 if(IS_WDI_STATUS_FAILURE(status))
4979 {
4980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4981 "Failure in set STA Key Req WDI API, free all the memory " );
4982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4983 vos_mem_free(pWdaParams) ;
4984 setStaKeyParams->status = eSIR_FAILURE ;
4985 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 return CONVERT_WDI2VOS_STATUS(status) ;
4988}
Jeff Johnson295189b2012-06-20 16:38:30 -07004989/*
4990 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4991 * send SET Bcast STA key RSP back to PE
4992 */
4993void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4994{
4995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4996 tWDA_CbContext *pWDA;
4997 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004999 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005000 if(NULL == pWdaParams)
5001 {
5002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005003 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005004 VOS_ASSERT(0) ;
5005 return ;
5006 }
5007 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5008 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5010 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005011 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 return ;
5014}
5015
Jeff Johnson295189b2012-06-20 16:38:30 -07005016/*
5017 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5018 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5019 * Encryption)
5020 */
5021VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5022 tSetStaKeyParams *setStaKeyParams )
5023{
5024 WDI_Status status = WDI_STATUS_SUCCESS ;
5025 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5026 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5027 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5028 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005029 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005031 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 if(NULL == wdiSetStaKeyParam)
5033 {
5034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005035 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005036 VOS_ASSERT(0);
5037 return VOS_STATUS_E_NOMEM;
5038 }
5039 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5040 if(NULL == pWdaParams)
5041 {
5042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005043 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005044 VOS_ASSERT(0);
5045 vos_mem_free(wdiSetStaKeyParam);
5046 return VOS_STATUS_E_NOMEM;
5047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005049 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005050 /* copy set STA key params to WDI structure */
5051 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5052 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5053 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5054 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005055 if(setStaKeyParams->encType != eSIR_ED_NONE)
5056 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005057 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5058 keyIndex++)
5059 {
5060 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5061 setStaKeyParams->key[keyIndex].keyId;
5062 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5063 setStaKeyParams->key[keyIndex].unicast;
5064 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5065 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5067 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5068 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5069 setStaKeyParams->key[keyIndex].paeRole;
5070 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5071 setStaKeyParams->key[keyIndex].keyLength;
5072 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5073 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5076 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 }
5078 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 /* Store set key pointer, as this will be used for response */
5080 /* store Params pass it to WDI */
5081 pWdaParams->pWdaContext = pWDA;
5082 pWdaParams->wdaMsgParam = setStaKeyParams;
5083 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005084 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5085 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005086 if(IS_WDI_STATUS_FAILURE(status))
5087 {
5088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5089 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5091 vos_mem_free(pWdaParams) ;
5092 setStaKeyParams->status = eSIR_FAILURE ;
5093 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005095 return CONVERT_WDI2VOS_STATUS(status) ;
5096}
Jeff Johnson295189b2012-06-20 16:38:30 -07005097/*
5098 * FUNCTION: WDA_RemoveStaKeyReqCallback
5099 * send SET BSS key RSP back to PE
5100 */
5101void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5102{
5103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5104 tWDA_CbContext *pWDA;
5105 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005107 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005108 if(NULL == pWdaParams)
5109 {
5110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005111 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005112 VOS_ASSERT(0) ;
5113 return ;
5114 }
5115 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5116 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5118 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005119 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005120 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005121 return ;
5122}
5123
Jeff Johnson295189b2012-06-20 16:38:30 -07005124/*
5125 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5126 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5127 */
5128VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5129 tRemoveStaKeyParams *removeStaKeyParams )
5130{
5131 WDI_Status status = WDI_STATUS_SUCCESS ;
5132 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5133 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5134 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5135 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005137 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005138 if(NULL == wdiRemoveStaKeyParam)
5139 {
5140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005141 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005142 VOS_ASSERT(0);
5143 return VOS_STATUS_E_NOMEM;
5144 }
5145 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5146 if(NULL == pWdaParams)
5147 {
5148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005149 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 VOS_ASSERT(0);
5151 vos_mem_free(wdiRemoveStaKeyParam);
5152 return VOS_STATUS_E_NOMEM;
5153 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 /* copy remove STA key params to WDI structure*/
5155 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5156 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5157 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5158 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5159 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 /* Store remove key pointer, as this will be used for response */
5161 /* store Params pass it to WDI */
5162 pWdaParams->pWdaContext = pWDA;
5163 pWdaParams->wdaMsgParam = removeStaKeyParams;
5164 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005165 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5166 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 if(IS_WDI_STATUS_FAILURE(status))
5168 {
5169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5170 "Failure in remove STA Key Req WDI API, free all the memory " );
5171 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5172 vos_mem_free(pWdaParams) ;
5173 removeStaKeyParams->status = eSIR_FAILURE ;
5174 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005176 return CONVERT_WDI2VOS_STATUS(status) ;
5177}
Jeff Johnson295189b2012-06-20 16:38:30 -07005178/*
5179 * FUNCTION: WDA_IsHandleSetLinkStateReq
5180 * Update the WDA state and return the status to handle this message or not
5181 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005182WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5183 tWDA_CbContext *pWDA,
5184 tLinkStateParams *linkStateParams)
5185{
5186 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 switch(linkStateParams->state)
5188 {
5189 case eSIR_LINK_PREASSOC_STATE:
5190 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5191 /*
5192 * set the WDA state to PRE ASSOC
5193 * copy the BSSID into pWDA to use it in join request and return,
5194 * No need to handle these messages.
5195 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005196 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5197 {
5198 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005200 }
5201 else
5202 {
5203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005204 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005205 VOS_ASSERT(0);
5206 }
5207
5208 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5209 {
5210 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005211 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005212 }
5213 else
5214 {
5215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005216 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005217 VOS_ASSERT(0);
5218 }
5219
Jeff Johnson295189b2012-06-20 16:38:30 -07005220 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5221 *channel and after ) so reset the WDA state to ready when the second
5222 * time UMAC issue the link state with PREASSOC
5223 */
5224 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5225 {
5226 /* RESET WDA state back to WDA_READY_STATE */
5227 pWDA->wdaState = WDA_READY_STATE;
5228 }
5229 else
5230 {
5231 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5232 }
5233 //populate linkState info in WDACbCtxt
5234 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005236 default:
5237 if(pWDA->wdaState != WDA_READY_STATE)
5238 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005239 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5240 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5241 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5242 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5243 *the ASSERT in WDA_Stop during module unload.*/
5244 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5245 {
5246 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005247 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005248 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005249 else
5250 {
5251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005252 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005253 status = WDA_IGNORE_SET_LINK_STATE;
5254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 }
5256 break;
5257 }
5258
5259 return status;
5260}
Jeff Johnson295189b2012-06-20 16:38:30 -07005261/*
5262 * FUNCTION: WDA_SetLinkStateCallback
5263 * call back function for set link state from WDI
5264 */
5265void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5266{
5267 tWDA_CbContext *pWDA;
5268 tLinkStateParams *linkStateParams;
5269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005271 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 if(NULL == pWdaParams)
5273 {
5274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005275 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005276 VOS_ASSERT(0) ;
5277 return ;
5278 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005280 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 /*
5282 * In STA mode start the BA activity check timer after association
5283 * and in AP mode start BA activity check timer after BSS start */
5284 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5285 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005286 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5287 ((status == WDI_STATUS_SUCCESS) &&
5288 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005289 {
5290 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005292 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 /*
5294 * No respone required for WDA_SET_LINK_STATE so free the request
5295 * param here
5296 */
5297 if( pWdaParams != NULL )
5298 {
5299 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5300 {
5301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5302 }
5303 vos_mem_free(pWdaParams);
5304 }
5305 return ;
5306}
Jeff Johnson295189b2012-06-20 16:38:30 -07005307/*
5308 * FUNCTION: WDA_ProcessSetLinkState
5309 * Request to WDI to set the link status.
5310 */
5311VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5312 tLinkStateParams *linkStateParams)
5313{
5314 WDI_Status status = WDI_STATUS_SUCCESS ;
5315 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5316 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5317 sizeof(WDI_SetLinkReqParamsType)) ;
5318 tWDA_ReqParams *pWdaParams ;
5319 tpAniSirGlobal pMac;
5320 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5321
5322 if(NULL == pMac)
5323 {
5324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005325 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005327 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 return VOS_STATUS_E_FAILURE;
5329 }
5330
5331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005332 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005333 if(NULL == wdiSetLinkStateParam)
5334 {
5335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005337 VOS_ASSERT(0);
5338 return VOS_STATUS_E_NOMEM;
5339 }
5340 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5341 if(NULL == pWdaParams)
5342 {
5343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005345 VOS_ASSERT(0);
5346 vos_mem_free(wdiSetLinkStateParam);
5347 return VOS_STATUS_E_NOMEM;
5348 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 if(WDA_IGNORE_SET_LINK_STATE ==
5350 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5351 {
5352 status = WDI_STATUS_E_FAILURE;
5353 }
5354 else
5355 {
5356 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5357 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005358 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5359 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5361 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 pWdaParams->pWdaContext = pWDA;
5363 /* Store remove key pointer, as this will be used for response */
5364 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 /* store Params pass it to WDI */
5366 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5367 /* Stop Timer only other than GO role and concurrent session */
5368 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005369 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5371 {
5372 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5375 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005376 if(IS_WDI_STATUS_FAILURE(status))
5377 {
5378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5379 "Failure in set link state Req WDI API, free all the memory " );
5380 }
5381 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005382 if(IS_WDI_STATUS_FAILURE(status))
5383 {
5384 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005385 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 vos_mem_free(pWdaParams);
5387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 return CONVERT_WDI2VOS_STATUS(status) ;
5389}
Jeff Johnson295189b2012-06-20 16:38:30 -07005390/*
5391 * FUNCTION: WDA_GetStatsReqParamsCallback
5392 * send the response to PE with Stats received from WDI
5393 */
5394void WDA_GetStatsReqParamsCallback(
5395 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5396 void* pUserData)
5397{
5398 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5399 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5400
5401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005402 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 pGetPEStatsRspParams =
5404 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5405 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5406
5407 if(NULL == pGetPEStatsRspParams)
5408 {
5409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 VOS_ASSERT(0);
5412 return;
5413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5415 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5416 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5417 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005418
5419 //Fill the Session Id Properly in PE
5420 pGetPEStatsRspParams->sessionId = 0;
5421 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005422 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005423 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5424 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 vos_mem_copy( pGetPEStatsRspParams + 1,
5426 wdiGetStatsRsp + 1,
5427 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 /* send response to UMAC*/
5429 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5430
5431 return;
5432}
5433
Jeff Johnson295189b2012-06-20 16:38:30 -07005434/*
5435 * FUNCTION: WDA_ProcessGetStatsReq
5436 * Request to WDI to get the statistics
5437 */
5438VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5439 tAniGetPEStatsReq *pGetStatsParams)
5440{
5441 WDI_Status status = WDI_STATUS_SUCCESS ;
5442 WDI_GetStatsReqParamsType wdiGetStatsParam;
5443 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005445 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5447 pGetStatsParams->staId;
5448 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5449 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005450 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005451 status = WDI_GetStatsReq(&wdiGetStatsParam,
5452 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 if(IS_WDI_STATUS_FAILURE(status))
5454 {
5455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5456 "Failure in Get Stats Req WDI API, free all the memory " );
5457 pGetPEStatsRspParams =
5458 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5459 if(NULL == pGetPEStatsRspParams)
5460 {
5461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005464 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 return VOS_STATUS_E_NOMEM;
5466 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005467 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5468 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5469 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5470 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5471 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5472 (void *)pGetPEStatsRspParams, 0) ;
5473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 /* Free the request message */
5475 vos_mem_free(pGetStatsParams);
5476 return CONVERT_WDI2VOS_STATUS(status);
5477}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005478
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005479#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005480/*
5481 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5482 * send the response to PE with roam Rssi received from WDI
5483 */
5484void WDA_GetRoamRssiReqParamsCallback(
5485 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5486 void* pUserData)
5487{
5488 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5489 tWDA_CbContext *pWDA = NULL;
5490 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5491 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5493 "<------ %s " ,__func__);
5494 if(NULL == pWdaParams)
5495 {
5496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5497 "%s: pWdaParams received NULL", __func__);
5498 VOS_ASSERT(0) ;
5499 return ;
5500 }
5501 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5502 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5503
5504 if(NULL == pGetRoamRssiReqParams)
5505 {
5506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5507 "%s: pGetRoamRssiReqParams received NULL", __func__);
5508 VOS_ASSERT(0);
5509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5510 vos_mem_free(pWdaParams);
5511 return ;
5512 }
5513 pGetRoamRssiRspParams =
5514 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5515
5516 if(NULL == pGetRoamRssiRspParams)
5517 {
5518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5519 "%s: VOS MEM Alloc Failure", __func__);
5520 VOS_ASSERT(0);
5521 return;
5522 }
5523 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5524 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005525 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005526 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5527 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5528
5529 /* Assign get roam rssi req (backup) in to the response */
5530 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5531
5532 /* free WDI command buffer */
5533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5534 vos_mem_free(pWdaParams) ;
5535
5536 /* send response to UMAC*/
5537 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5538
5539 return;
5540}
5541
5542
5543
5544/*
5545 * FUNCTION: WDA_ProcessGetRoamRssiReq
5546 * Request to WDI to get the statistics
5547 */
5548VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5549 tAniGetRssiReq *pGetRoamRssiParams)
5550{
5551 WDI_Status status = WDI_STATUS_SUCCESS ;
5552 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5553 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5554 tWDA_ReqParams *pWdaParams = NULL;
5555
5556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5557 "------> %s " ,__func__);
5558 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5559 pGetRoamRssiParams->staId;
5560 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5561
5562 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5563 if(NULL == pWdaParams)
5564 {
5565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5566 "%s: VOS MEM Alloc Failure", __func__);
5567 VOS_ASSERT(0);
5568 return VOS_STATUS_E_NOMEM;
5569 }
5570
5571 /* Store Init Req pointer, as this will be used for response */
5572 pWdaParams->pWdaContext = pWDA;
5573
5574 /* Take Get roam Rssi req backup as it stores the callback to be called after
5575 receiving the response */
5576 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5577 pWdaParams->wdaWdiApiMsgParam = NULL;
5578
5579 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5580 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5581 if(IS_WDI_STATUS_FAILURE(status))
5582 {
5583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5584 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5585 pGetRoamRssiRspParams =
5586 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5587 if(NULL == pGetRoamRssiRspParams)
5588 {
5589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5590 "%s: VOS MEM Alloc Failure", __func__);
5591 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305592 vos_mem_free(pGetRoamRssiParams);
5593 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005594 return VOS_STATUS_E_NOMEM;
5595 }
5596 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5597 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5598 pGetRoamRssiRspParams->rssi = 0;
5599 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5600 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5601 (void *)pGetRoamRssiRspParams, 0) ;
5602 }
5603 return CONVERT_WDI2VOS_STATUS(status);
5604}
5605#endif
5606
5607
Jeff Johnson295189b2012-06-20 16:38:30 -07005608/*
5609 * FUNCTION: WDA_UpdateEDCAParamCallback
5610 * call back function for Update EDCA params from WDI
5611 */
5612void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5613{
5614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5615 tEdcaParams *pEdcaParams;
5616
5617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005618 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005619 if(NULL == pWdaParams)
5620 {
5621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005622 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005623 VOS_ASSERT(0) ;
5624 return ;
5625 }
5626 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5628 vos_mem_free(pWdaParams);
5629 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 return ;
5631}
Jeff Johnson295189b2012-06-20 16:38:30 -07005632/*
5633 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5634 * Request to WDI to Update the EDCA params.
5635 */
5636VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5637 tEdcaParams *pEdcaParams)
5638{
5639 WDI_Status status = WDI_STATUS_SUCCESS ;
5640 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5641 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5642 sizeof(WDI_UpdateEDCAParamsType)) ;
5643 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005645 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005646 if(NULL == wdiEdcaParam)
5647 {
5648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005650 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005651 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005652 return VOS_STATUS_E_NOMEM;
5653 }
5654 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5655 if(NULL == pWdaParams)
5656 {
5657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 VOS_ASSERT(0);
5660 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005661 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 return VOS_STATUS_E_NOMEM;
5663 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005664 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005665 /*
5666 Since firmware is not using highperformance flag, we have removed
5667 this flag from wdiEDCAInfo structure to match sizeof the structure
5668 between host and firmware.In future if we are planning to use
5669 highperformance flag then Please define this flag in wdiEDCAInfo
5670 structure, update it here and send it to firmware. i.e.
5671 Following is the original line which we removed as part of the fix
5672 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5673 pEdcaParams->highPerformance;
5674 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5676 &pEdcaParams->acbe);
5677 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5678 &pEdcaParams->acbk);
5679 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5680 &pEdcaParams->acvi);
5681 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5682 &pEdcaParams->acvo);
5683 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 pWdaParams->pWdaContext = pWDA;
5685 /* Store remove key pointer, as this will be used for response */
5686 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 /* store Params pass it to WDI */
5688 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5690 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 if(IS_WDI_STATUS_FAILURE(status))
5692 {
5693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5694 "Failure in Update EDCA Params WDI API, free all the memory " );
5695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5696 vos_mem_free(pWdaParams);
5697 vos_mem_free(pEdcaParams);
5698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 return CONVERT_WDI2VOS_STATUS(status) ;
5700}
Jeff Johnson295189b2012-06-20 16:38:30 -07005701/*
5702 * FUNCTION: WDA_AddBAReqCallback
5703 * send ADD BA RSP back to PE
5704 */
5705void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5706 void* pUserData)
5707{
5708 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5709 tWDA_CbContext *pWDA;
5710 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005712 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 if(NULL == pWdaParams)
5714 {
5715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005716 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005717 VOS_ASSERT(0) ;
5718 return ;
5719 }
5720 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5721 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005722 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5723 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005724 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005725 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 return ;
5727}
5728
Jeff Johnson295189b2012-06-20 16:38:30 -07005729/*
5730 * FUNCTION: WDA_ProcessAddBAReq
5731 * Request to WDI to Update the ADDBA REQ params.
5732 */
5733VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5734 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5735{
Jeff Johnson43971f52012-07-17 12:26:56 -07005736 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005737 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5738 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5739 sizeof(WDI_AddBAReqParamsType)) ;
5740 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005742 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005743 if(NULL == wdiAddBAReqParam)
5744 {
5745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005746 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 VOS_ASSERT(0);
5748 return VOS_STATUS_E_NOMEM;
5749 }
5750 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5751 if(NULL == pWdaParams)
5752 {
5753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005755 VOS_ASSERT(0);
5756 vos_mem_free(wdiAddBAReqParam);
5757 return VOS_STATUS_E_NOMEM;
5758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 do
5760 {
5761 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005762 wdiAddBaInfo->ucSTAIdx = staIdx ;
5763 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5764 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 } while(0) ;
5766 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005767 pWdaParams->pWdaContext = pWDA;
5768 /* store Params pass it to WDI */
5769 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5770 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005771 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5772 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005773
Jeff Johnson43971f52012-07-17 12:26:56 -07005774 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 {
5776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005777 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5778 status = CONVERT_WDI2VOS_STATUS(wstatus);
5779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005780 vos_mem_free(pWdaParams);
5781 pAddBAReqParams->status = eSIR_FAILURE;
5782 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5783 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005784 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005785}
Jeff Johnson295189b2012-06-20 16:38:30 -07005786/*
5787 * FUNCTION: WDA_AddBASessionReqCallback
5788 * send ADD BA SESSION RSP back to PE/(or TL)
5789 */
5790void WDA_AddBASessionReqCallback(
5791 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5792{
5793 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5794 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5795 tWDA_CbContext *pWDA;
5796 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005799 if(NULL == pWdaParams)
5800 {
5801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005802 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005803 VOS_ASSERT(0) ;
5804 return ;
5805 }
5806 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5807 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005808 if( NULL == pAddBAReqParams )
5809 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005811 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005812 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5814 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 return ;
5816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5818 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005819 /*
5820 * if WDA in update TL state, update TL with BA session parama and send
5821 * another request to HAL(/WDI) (ADD_BA_REQ)
5822 */
5823
5824 if((VOS_STATUS_SUCCESS ==
5825 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5826 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5827 {
5828 /* Update TL with BA info received from HAL/WDI */
5829 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5830 wdiAddBaSession->usBaSessionID,
5831 wdiAddBaSession->ucSTAIdx,
5832 wdiAddBaSession->ucBaTID,
5833 wdiAddBaSession->ucBaBufferSize,
5834 wdiAddBaSession->ucWinSize,
5835 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5837 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5838 }
5839 else
5840 {
5841 pAddBAReqParams->status =
5842 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5843
5844 /* Setting Flag to indicate that Set BA is success */
5845 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5846 {
5847 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5848 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5849 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005851 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005853 /*Reset the WDA state to READY */
5854 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005855 return ;
5856}
5857
Jeff Johnson295189b2012-06-20 16:38:30 -07005858/*
5859 * FUNCTION: WDA_ProcessAddBASessionReq
5860 * Request to WDI to Update the ADDBA REQ params.
5861 */
5862VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5863 tAddBAParams *pAddBAReqParams)
5864{
5865 WDI_Status status = WDI_STATUS_SUCCESS ;
5866 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5867 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5868 sizeof(WDI_AddBASessionReqParamsType)) ;
5869 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005870 WLANTL_STAStateType tlSTAState = 0;
5871
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005873 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 if(NULL == wdiAddBASessionReqParam)
5875 {
5876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005877 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 VOS_ASSERT(0);
5879 return VOS_STATUS_E_NOMEM;
5880 }
5881 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5882 if(NULL == pWdaParams)
5883 {
5884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005885 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005886 VOS_ASSERT(0);
5887 vos_mem_free(wdiAddBASessionReqParam);
5888 return VOS_STATUS_E_NOMEM;
5889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 /*
5891 * Populate ADD BA parameters and pass these paarmeters to WDI.
5892 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5893 * the state to track if these is BA recipient case or BA initiator
5894 * case.
5895 */
5896 do
5897 {
5898 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5899 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5900 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5901 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5902 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5903 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5904 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005905 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5907 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5908 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5909 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5910 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 /* check the BA direction and update state accordingly */
5912 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5913 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5914 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5915
5916 }while(0) ;
5917 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 pWdaParams->pWdaContext = pWDA;
5919 /* Store ADD BA pointer, as this will be used for response */
5920 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5921 /* store Params pass it to WDI */
5922 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005923
5924 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5925 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5926 */
5927 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5928 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5929 {
5930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005931 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005932 status = WDI_STATUS_E_NOT_ALLOWED;
5933 pAddBAReqParams->status =
5934 CONVERT_WDI2SIR_STATUS(status) ;
5935 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5936 /*Reset the WDA state to READY */
5937 pWDA->wdaState = WDA_READY_STATE;
5938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5939 vos_mem_free(pWdaParams);
5940
5941 return CONVERT_WDI2VOS_STATUS(status) ;
5942 }
5943
Jeff Johnson295189b2012-06-20 16:38:30 -07005944 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5945 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 if(IS_WDI_STATUS_FAILURE(status))
5947 {
5948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005949 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005951 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005952 pAddBAReqParams->status =
5953 CONVERT_WDI2SIR_STATUS(status) ;
5954 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005955 /*Reset the WDA state to READY */
5956 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 vos_mem_free(pWdaParams);
5959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005961}
Jeff Johnson295189b2012-06-20 16:38:30 -07005962/*
5963 * FUNCTION: WDA_DelBANotifyTL
5964 * send DEL BA IND to TL
5965 */
5966void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5967 tDelBAParams *pDelBAReqParams)
5968{
5969 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5970 //tSirMsgQ msg;
5971 vos_msg_t vosMsg;
5972 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005973 if(NULL == pDelBAInd)
5974 {
5975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005976 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005977 VOS_ASSERT(0) ;
5978 return;
5979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005980 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5981 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5982 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5983 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005984
Jeff Johnson295189b2012-06-20 16:38:30 -07005985
5986 vosMsg.type = WDA_DELETEBA_IND;
5987 vosMsg.bodyptr = pDelBAInd;
5988 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5989 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5990 {
5991 vosStatus = VOS_STATUS_E_BADMSG;
5992 }
5993}
Jeff Johnson295189b2012-06-20 16:38:30 -07005994/*
5995 * FUNCTION: WDA_DelBAReqCallback
5996 * send DEL BA RSP back to PE
5997 */
5998void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5999{
6000 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6001 tWDA_CbContext *pWDA;
6002 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006004 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006005 if(NULL == pWdaParams)
6006 {
6007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006008 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 VOS_ASSERT(0) ;
6010 return ;
6011 }
6012 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6013 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006014 /* Notify TL about DEL BA in case of recipinet */
6015 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6016 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6017 {
6018 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006020 /*
6021 * No respone required for WDA_DELBA_IND so just free the request
6022 * param here
6023 */
6024 vos_mem_free(pDelBAReqParams);
6025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6026 vos_mem_free(pWdaParams);
6027 return ;
6028}
6029
Jeff Johnson295189b2012-06-20 16:38:30 -07006030/*
6031 * FUNCTION: WDA_ProcessDelBAReq
6032 * Request to WDI to Update the DELBA REQ params.
6033 */
6034VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6035 tDelBAParams *pDelBAReqParams)
6036{
6037 WDI_Status status = WDI_STATUS_SUCCESS ;
6038 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6039 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6040 sizeof(WDI_DelBAReqParamsType)) ;
6041 tWDA_ReqParams *pWdaParams ;
6042 tANI_U16 staIdx = 0;
6043 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006045 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006046 if(NULL == wdiDelBAReqParam)
6047 {
6048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006049 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006050 VOS_ASSERT(0);
6051 return VOS_STATUS_E_NOMEM;
6052 }
6053 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6054 if(NULL == pWdaParams)
6055 {
6056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 VOS_ASSERT(0);
6059 vos_mem_free(wdiDelBAReqParam);
6060 return VOS_STATUS_E_NOMEM;
6061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006062 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6063 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6064 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6065 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 pWdaParams->pWdaContext = pWDA;
6067 /* Store DEL BA pointer, as this will be used for response */
6068 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 /* store Params pass it to WDI */
6070 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006071 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6072 * maintained in WDA, so that WDA can retry for another BA session
6073 */
6074 staIdx = pDelBAReqParams->staIdx;
6075 tid = pDelBAReqParams->baTID;
6076 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006077 status = WDI_DelBAReq(wdiDelBAReqParam,
6078 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006079 if(IS_WDI_STATUS_FAILURE(status))
6080 {
6081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6082 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6084 vos_mem_free(pWdaParams->wdaMsgParam);
6085 vos_mem_free(pWdaParams);
6086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006088}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006089
6090/*
6091 * FUNCTION: WDA_UpdateChReqCallback
6092 *
6093 */
6094void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6095{
6096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6097 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam =
6098 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6099 WDI_UpdateChannelReqType *pwdiUpdateChanReqType =
6100 &pwdiUpdateChReqParam->wdiUpdateChanParams;
6101 WDI_UpdateChannelReqinfoType *pChanInfoType =
6102 pwdiUpdateChanReqType->pchanParam;
6103 tSirUpdateChanList *pChanList =
6104 (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
6105
6106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6107 "<------ %s " ,__func__);
6108 if(NULL == pWdaParams)
6109 {
6110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6111 "%s: pWdaParams received NULL", __func__);
6112 VOS_ASSERT(0);
6113 return;
6114 }
6115
6116 /*
6117 * currently there is no response message is expected between PE and
6118 * WDA, Failure return from WDI is a ASSERT condition
6119 */
6120 vos_mem_free(pChanInfoType);
6121 vos_mem_free(pChanList);
6122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6123 vos_mem_free(pWdaParams);
6124
6125 return;
6126}
6127
6128/*
6129 * FUNCTION: WDA_ProcessUpdateChannelList
6130 * Request to WDI to Update the ChannelList params.
6131 */
6132VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6133 tSirUpdateChanList *pChanList)
6134{
6135 WDI_Status status = WDI_STATUS_SUCCESS;
6136 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6137 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6138 WDI_UpdateChannelReqinfoType *pChanInfoType;
6139 tWDA_ReqParams *pWdaParams;
6140 wpt_uint8 i;
6141
6142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6143 "------> %s " ,__func__);
6144 if(NULL == pChanList)
6145 {
6146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6147 "%s: NULL pChanList", __func__);
6148 VOS_ASSERT(0);
6149 return VOS_STATUS_E_INVAL;
6150 }
6151
6152 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6153 {
6154 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6155 "Update channel list capability Not Supported");
6156 vos_mem_free(pChanList);
6157 return VOS_STATUS_E_INVAL;
6158 }
6159
6160 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6161 sizeof(WDI_UpdateChReqParamsType));
6162 if(NULL == pwdiUpdateChReqParam)
6163 {
6164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6165 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6166 __func__);
6167 VOS_ASSERT(0);
6168 vos_mem_free(pChanList);
6169 return VOS_STATUS_E_NOMEM;
6170 }
6171 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6172 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6173 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6174 pChanList->numChan);
6175 if(NULL == pChanInfoType)
6176 {
6177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6178 "%s: VOS MEM Alloc Failure", __func__);
6179 VOS_ASSERT(0);
6180 vos_mem_free(pChanList);
6181 vos_mem_free(pwdiUpdateChReqParam);
6182 return VOS_STATUS_E_NOMEM;
6183 }
6184 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6185 * pChanList->numChan);
6186 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6187
6188 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6189 if(NULL == pWdaParams)
6190 {
6191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6192 "%s: VOS MEM Alloc Failure", __func__);
6193 VOS_ASSERT(0);
6194 vos_mem_free(pChanList);
6195 vos_mem_free(pChanInfoType);
6196 vos_mem_free(pwdiUpdateChReqParam);
6197 return VOS_STATUS_E_NOMEM;
6198 }
6199 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6200
6201 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6202 {
6203 pChanInfoType->mhz =
6204 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6205
6206 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6207 pChanInfoType->band_center_freq2 = 0;
6208
6209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6210 "chan[%d] = %u", i, pChanInfoType->mhz);
6211 if (pChanList->chanParam[i].dfsSet)
6212 {
6213 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6215 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6216 pChanList->chanParam[i].dfsSet);
6217 }
6218
6219 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6220 {
6221 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6222 }
6223 else
6224 {
6225 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6226 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6227 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6228 }
6229
6230 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6231 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6232
6233 pChanInfoType++;
6234 }
6235
6236 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6237 pWdaParams->pWdaContext = pWDA;
6238 pWdaParams->wdaMsgParam = (void *)pChanList;
6239 /* store Params pass it to WDI */
6240 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6241 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6242 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6243 if(IS_WDI_STATUS_FAILURE(status))
6244 {
6245 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6246 "Failure in Update Channel REQ Params WDI API, free all the memory");
6247 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6248 vos_mem_free(pwdiUpdateChReqParam);
6249 vos_mem_free(pWdaParams->wdaMsgParam);
6250 vos_mem_free(pWdaParams);
6251 }
6252 return CONVERT_WDI2VOS_STATUS(status);
6253}
6254
Jeff Johnson295189b2012-06-20 16:38:30 -07006255/*
6256 * FUNCTION: WDA_AddTSReqCallback
6257 * send ADD TS RSP back to PE
6258 */
6259void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6260{
6261 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6262 tWDA_CbContext *pWDA;
6263 tAddTsParams *pAddTsReqParams;
6264
6265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006266 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006267 if(NULL == pWdaParams)
6268 {
6269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006270 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 VOS_ASSERT(0) ;
6272 return ;
6273 }
6274 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6275 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6277 vos_mem_free(pWdaParams);
6278
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006279 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006281 return ;
6282}
6283
Jeff Johnson295189b2012-06-20 16:38:30 -07006284/*
6285 * FUNCTION: WDA_ProcessAddTSReq
6286 * Request to WDI to Update the ADD TS REQ params.
6287 */
6288VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6289 tAddTsParams *pAddTsReqParams)
6290{
6291 WDI_Status status = WDI_STATUS_SUCCESS ;
6292 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6293 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6294 sizeof(WDI_AddTSReqParamsType)) ;
6295 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006297 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006298 if(NULL == wdiAddTSReqParam)
6299 {
6300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006301 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 VOS_ASSERT(0);
6303 return VOS_STATUS_E_NOMEM;
6304 }
6305 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6306 if(NULL == pWdaParams)
6307 {
6308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 VOS_ASSERT(0);
6311 vos_mem_free(wdiAddTSReqParam);
6312 return VOS_STATUS_E_NOMEM;
6313 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6315 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 //TS IE
6317 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6318 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6319 pAddTsReqParams->tspec.length;
6320
6321 //TS IE : TS INFO : TRAFFIC
6322 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6323 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6324 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6325 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6326 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6327 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6328 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6329 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6330 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6331 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6332 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6333 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6334 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6335 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6336 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6337 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6338
6339 //TS IE : TS INFO : SCHEDULE
6340 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6341 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6342 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6343 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 //TS IE
6345 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6346 pAddTsReqParams->tspec.nomMsduSz;
6347 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6348 pAddTsReqParams->tspec.maxMsduSz;
6349 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6350 pAddTsReqParams->tspec.minSvcInterval;
6351 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6352 pAddTsReqParams->tspec.maxSvcInterval;
6353 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6354 pAddTsReqParams->tspec.inactInterval;
6355 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6356 pAddTsReqParams->tspec.suspendInterval;
6357 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6358 pAddTsReqParams->tspec.svcStartTime;
6359 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6360 pAddTsReqParams->tspec.minDataRate;
6361 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6362 pAddTsReqParams->tspec.meanDataRate;
6363 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6364 pAddTsReqParams->tspec.peakDataRate;
6365 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6366 pAddTsReqParams->tspec.maxBurstSz;
6367 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6368 pAddTsReqParams->tspec.delayBound;
6369 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6370 pAddTsReqParams->tspec.minPhyRate;
6371 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6372 pAddTsReqParams->tspec.surplusBw;
6373 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6374 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006375 /* TODO: tAddTsParams doesn't have the following fields */
6376#if 0
6377 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6378 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6379 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6380 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6381#endif
6382 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6383
6384 pWdaParams->pWdaContext = pWDA;
6385 /* Store ADD TS pointer, as this will be used for response */
6386 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 /* store Params pass it to WDI */
6388 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 status = WDI_AddTSReq(wdiAddTSReqParam,
6390 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006391 if(IS_WDI_STATUS_FAILURE(status))
6392 {
6393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6394 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6396 vos_mem_free(pWdaParams);
6397 pAddTsReqParams->status = eSIR_FAILURE ;
6398 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6399 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006401}
6402
Jeff Johnson295189b2012-06-20 16:38:30 -07006403/*
6404 * FUNCTION: WDA_DelTSReqCallback
6405 * send DEL TS RSP back to PE
6406 */
6407void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6408{
6409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006411 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6413 vos_mem_free(pWdaParams->wdaMsgParam) ;
6414 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 /*
6416 * No respone required for WDA_DEL_TS_REQ so just free the request
6417 * param here
6418 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 return ;
6420}
6421
Jeff Johnson295189b2012-06-20 16:38:30 -07006422/*
6423 * FUNCTION: WDA_ProcessDelTSReq
6424 * Request to WDI to Update the DELTS REQ params.
6425 */
6426VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6427 tDelTsParams *pDelTSReqParams)
6428{
6429 WDI_Status status = WDI_STATUS_SUCCESS ;
6430 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6431 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6432 sizeof(WDI_DelTSReqParamsType)) ;
6433 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006435 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 if(NULL == wdiDelTSReqParam)
6437 {
6438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006440 VOS_ASSERT(0);
6441 return VOS_STATUS_E_NOMEM;
6442 }
6443 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6444 if(NULL == pWdaParams)
6445 {
6446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006448 VOS_ASSERT(0);
6449 vos_mem_free(wdiDelTSReqParam);
6450 return VOS_STATUS_E_NOMEM;
6451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6453 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6454 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6455 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6456 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 pWdaParams->pWdaContext = pWDA;
6458 /* Store DEL TS pointer, as this will be used for response */
6459 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 /* store Params pass it to WDI */
6461 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 status = WDI_DelTSReq(wdiDelTSReqParam,
6463 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 if(IS_WDI_STATUS_FAILURE(status))
6465 {
6466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6467 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6469 vos_mem_free(pWdaParams->wdaMsgParam);
6470 vos_mem_free(pWdaParams);
6471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006472 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006473}
Jeff Johnson295189b2012-06-20 16:38:30 -07006474/*
6475 * FUNCTION: WDA_UpdateBeaconParamsCallback
6476 * Free the memory. No need to send any response to PE in this case
6477 */
6478void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6479{
6480 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006482 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 if(NULL == pWdaParams)
6484 {
6485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006486 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006487 VOS_ASSERT(0) ;
6488 return ;
6489 }
6490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6491 vos_mem_free(pWdaParams->wdaMsgParam) ;
6492 vos_mem_free(pWdaParams);
6493 /*
6494 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6495 * param here
6496 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006497 return ;
6498}
Jeff Johnson295189b2012-06-20 16:38:30 -07006499/*
6500 * FUNCTION: WDA_ProcessUpdateBeaconParams
6501 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6502 */
6503VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6504 tUpdateBeaconParams *pUpdateBeaconParams)
6505{
6506 WDI_Status status = WDI_STATUS_SUCCESS ;
6507 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6508 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6509 sizeof(WDI_UpdateBeaconParamsType)) ;
6510 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006512 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006513 if(NULL == wdiUpdateBeaconParams)
6514 {
6515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006516 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006517 VOS_ASSERT(0);
6518 return VOS_STATUS_E_NOMEM;
6519 }
6520 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6521 if(NULL == pWdaParams)
6522 {
6523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006525 VOS_ASSERT(0);
6526 vos_mem_free(wdiUpdateBeaconParams);
6527 return VOS_STATUS_E_NOMEM;
6528 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006529 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6530 pUpdateBeaconParams->bssIdx;
6531 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6532 pUpdateBeaconParams->fShortPreamble;
6533 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6534 pUpdateBeaconParams->fShortSlotTime;
6535 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6536 pUpdateBeaconParams->beaconInterval;
6537 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6538 pUpdateBeaconParams->llaCoexist;
6539 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6540 pUpdateBeaconParams->llbCoexist;
6541 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6542 pUpdateBeaconParams->llgCoexist;
6543 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6544 pUpdateBeaconParams->ht20MhzCoexist;
6545 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6546 pUpdateBeaconParams->llnNonGFCoexist;
6547 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6548 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6549 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6550 pUpdateBeaconParams->fRIFSMode;
6551 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6552 pUpdateBeaconParams->paramChangeBitmap;
6553 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6554
6555 pWdaParams->pWdaContext = pWDA;
6556 /* Store UpdateBeacon Req pointer, as this will be used for response */
6557 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006558 /* store Params pass it to WDI */
6559 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006560 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6561 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6562 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 if(IS_WDI_STATUS_FAILURE(status))
6564 {
6565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6566 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6568 vos_mem_free(pWdaParams->wdaMsgParam);
6569 vos_mem_free(pWdaParams);
6570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006571 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006572}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006573#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006574/*
6575 * FUNCTION: WDA_TSMStatsReqCallback
6576 * send TSM Stats RSP back to PE
6577 */
6578void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6579{
6580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6581 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006582 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6583 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006584
6585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006586 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006587 if(NULL == pWdaParams)
6588 {
6589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006590 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 VOS_ASSERT(0) ;
6592 return ;
6593 }
6594 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006595 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6596
6597 if(NULL == pGetTsmStatsReqParams)
6598 {
6599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6600 "%s: pGetTsmStatsReqParams received NULL", __func__);
6601 VOS_ASSERT(0);
6602 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6603 vos_mem_free(pWdaParams);
6604 return;
6605 }
6606
6607 pTsmRspParams =
6608 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006609 if( NULL == pTsmRspParams )
6610 {
6611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006612 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006613 VOS_ASSERT( 0 );
6614 return ;
6615 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006616 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6617 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6618 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6619
Jeff Johnson295189b2012-06-20 16:38:30 -07006620 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6621 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6622 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6623 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6624 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6625 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6626 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6627 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6628 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6629 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006630
6631 /* Assign get tsm stats req req (backup) in to the response */
6632 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6633
6634 /* free WDI command buffer */
6635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6636 vos_mem_free(pWdaParams);
6637
Jeff Johnson295189b2012-06-20 16:38:30 -07006638 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006639 return ;
6640}
6641
6642
Jeff Johnson295189b2012-06-20 16:38:30 -07006643/*
6644 * FUNCTION: WDA_ProcessTsmStatsReq
6645 * Request to WDI to get the TSM Stats params.
6646 */
6647VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006648 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006649{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006650 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006651 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006652 tWDA_ReqParams *pWdaParams = NULL;
6653 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6654
Jeff Johnson295189b2012-06-20 16:38:30 -07006655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006656 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006657 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6658 sizeof(WDI_TSMStatsReqParamsType));
6659 if(NULL == wdiTSMReqParam)
6660 {
6661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006662 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006663 VOS_ASSERT(0);
6664 return VOS_STATUS_E_NOMEM;
6665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006666 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6667 if(NULL == pWdaParams)
6668 {
6669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 VOS_ASSERT(0);
6672 vos_mem_free(wdiTSMReqParam);
6673 return VOS_STATUS_E_NOMEM;
6674 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006675 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6676 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6677 pTsmStats->bssId,
6678 sizeof(wpt_macAddr));
6679 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6680
6681 pWdaParams->pWdaContext = pWDA;
6682 /* Store TSM Stats pointer, as this will be used for response */
6683 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006684 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006685 status = WDI_TSMStatsReq(wdiTSMReqParam,
6686 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006687 if(IS_WDI_STATUS_FAILURE(status))
6688 {
6689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6690 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006691 vos_mem_free(pWdaParams);
6692
6693 pGetTsmStatsRspParams =
6694 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6695 if(NULL == pGetTsmStatsRspParams)
6696 {
6697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6698 "%s: VOS MEM Alloc Failure", __func__);
6699 VOS_ASSERT(0);
6700 vos_mem_free(pTsmStats);
6701 return VOS_STATUS_E_NOMEM;
6702 }
6703 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6704 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6705 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6706
6707 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006708 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006709 return CONVERT_WDI2VOS_STATUS(status) ;
6710}
6711#endif
6712/*
6713 * FUNCTION: WDA_SendBeaconParamsCallback
6714 * No need to send any response to PE in this case
6715 */
6716void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6717{
6718
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006720 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006721 return ;
6722}
Jeff Johnson295189b2012-06-20 16:38:30 -07006723/*
6724 * FUNCTION: WDA_ProcessSendBeacon
6725 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6726 * start beacon trasmission
6727 */
6728VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6729 tSendbeaconParams *pSendbeaconParams)
6730{
6731 WDI_Status status = WDI_STATUS_SUCCESS ;
6732 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006734 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006735 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6736 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6737 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6738 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6740 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306741 /* p2pIeOffset should be atleast greater than timIeOffset */
6742 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6743 (pSendbeaconParams->p2pIeOffset <
6744 pSendbeaconParams->timIeOffset))
6745 {
6746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6747 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6748 VOS_ASSERT( 0 );
6749 return WDI_STATUS_E_FAILURE;
6750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6752 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 /* Copy the beacon template to local buffer */
6754 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6755 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6756 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6757
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6759 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 if(IS_WDI_STATUS_FAILURE(status))
6761 {
6762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6763 "Failure in SEND BEACON REQ Params WDI API" );
6764 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006765 vos_mem_free(pSendbeaconParams);
6766 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006767}
Jeff Johnson295189b2012-06-20 16:38:30 -07006768/*
6769 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6770 * No need to send any response to PE in this case
6771 */
6772void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6773{
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006775 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 return ;
6777}
6778
Jeff Johnson295189b2012-06-20 16:38:30 -07006779/*
6780 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6781 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6782 * send probe response
6783 */
6784VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6785 tSendProbeRespParams *pSendProbeRspParams)
6786{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006787 WDI_Status status = WDI_STATUS_SUCCESS;
6788 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6789 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006791 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006792
6793 if (!wdiSendProbeRspParam)
6794 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6795
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006797 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006799 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006801 /* Copy the Probe Response template to local buffer */
6802 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006803 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 pSendProbeRspParams->pProbeRespTemplate,
6805 pSendProbeRspParams->probeRespTemplateLen);
6806 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006807 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006808 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6809 WDI_PROBE_REQ_BITMAP_IE_LEN);
6810
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006811 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006812
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006813 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006815 if(IS_WDI_STATUS_FAILURE(status))
6816 {
6817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6818 "Failure in SEND Probe RSP Params WDI API" );
6819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006820 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006821 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006822 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006823}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006824#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07006825/*
6826 * FUNCTION: WDA_SetMaxTxPowerCallBack
6827 * send the response to PE with power value received from WDI
6828 */
6829void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6830 void* pUserData)
6831{
6832 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6833 tWDA_CbContext *pWDA = NULL;
6834 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6835
6836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006837 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 if(NULL == pWdaParams)
6839 {
6840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006841 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 VOS_ASSERT(0) ;
6843 return ;
6844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6846 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 if( NULL == pMaxTxPowerParams )
6848 {
6849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006850 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006851 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6853 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 return ;
6855 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006856
Jeff Johnson295189b2012-06-20 16:38:30 -07006857
6858 /*need to free memory for the pointers used in the
6859 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6861 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006863
Jeff Johnson295189b2012-06-20 16:38:30 -07006864
6865 /* send response to UMAC*/
6866 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6867
6868 return;
6869}
Jeff Johnson295189b2012-06-20 16:38:30 -07006870/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006871 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 * Request to WDI to send set Max Tx Power Request
6873 */
6874 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6875 tMaxTxPowerParams *MaxTxPowerParams)
6876{
6877 WDI_Status status = WDI_STATUS_SUCCESS;
6878 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6879 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006880
Jeff Johnson295189b2012-06-20 16:38:30 -07006881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006882 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006883
Jeff Johnson295189b2012-06-20 16:38:30 -07006884 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6885 sizeof(WDI_SetMaxTxPowerParamsType));
6886 if(NULL == wdiSetMaxTxPowerParams)
6887 {
6888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006889 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 VOS_ASSERT(0);
6891 return VOS_STATUS_E_NOMEM;
6892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6894 if(NULL == pWdaParams)
6895 {
6896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 vos_mem_free(wdiSetMaxTxPowerParams);
6899 VOS_ASSERT(0);
6900 return VOS_STATUS_E_NOMEM;
6901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 /* Copy.Max.Tx.Power Params to WDI structure */
6903 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6904 MaxTxPowerParams->bssId,
6905 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6907 MaxTxPowerParams->selfStaMacAddr,
6908 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006909 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6910 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006911 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 pWdaParams->pWdaContext = pWDA;
6913 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 /* store Params pass it to WDI */
6915 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006916 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6917 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 if(IS_WDI_STATUS_FAILURE(status))
6919 {
6920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6921 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6923 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006924 /* send response to UMAC*/
6925 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 }
6927 return CONVERT_WDI2VOS_STATUS(status);
6928
6929}
Jeff Johnson295189b2012-06-20 16:38:30 -07006930#endif
schang86c22c42013-03-13 18:41:24 -07006931
6932/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006933 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6934 * send the response to PE with power value received from WDI
6935 */
6936void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6937 *pwdiSetMaxTxPowerPerBandRsp,
6938 void* pUserData)
6939{
6940 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6941 tWDA_CbContext *pWDA = NULL;
6942 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6943
6944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6945 "<------ %s ", __func__);
6946 if (NULL == pWdaParams)
6947 {
6948 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6949 "%s: pWdaParams received NULL", __func__);
6950 VOS_ASSERT(0);
6951 return ;
6952 }
6953 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6954 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6955 if ( NULL == pMxTxPwrPerBandParams )
6956 {
6957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6958 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6959 VOS_ASSERT(0);
6960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6961 vos_mem_free(pWdaParams);
6962 return;
6963 }
6964
6965 /*need to free memory for the pointers used in the
6966 WDA Process.Set Max Tx Power Req function*/
6967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6968 vos_mem_free(pWdaParams);
6969 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6970
6971 /* send response to UMAC*/
6972 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6973 pMxTxPwrPerBandParams, 0);
6974
6975 return;
6976}
6977
6978/*
6979 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6980 * Request to WDI to send set Max Tx Power Per band Request
6981 */
6982 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6983 tMaxTxPowerPerBandParams
6984 *MaxTxPowerPerBandParams)
6985{
6986 WDI_Status status = WDI_STATUS_SUCCESS;
6987 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6988 tWDA_ReqParams *pWdaParams = NULL;
6989
6990 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6991 "------> %s ", __func__);
6992
6993 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6994 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6995
6996 if (NULL == wdiSetMxTxPwrPerBandParams)
6997 {
6998 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6999 "%s: VOS MEM Alloc Failure", __func__);
7000 VOS_ASSERT(0);
7001 return VOS_STATUS_E_NOMEM;
7002 }
7003 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7004 if (NULL == pWdaParams)
7005 {
7006 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7007 "%s: VOS MEM Alloc Failure", __func__);
7008 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7009 VOS_ASSERT(0);
7010 return VOS_STATUS_E_NOMEM;
7011 }
7012 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7013 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7014 MaxTxPowerPerBandParams->bandInfo;
7015 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7016 MaxTxPowerPerBandParams->power;
7017 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7018 pWdaParams->pWdaContext = pWDA;
7019 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7020 /* store Params pass it to WDI */
7021 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7022 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7023 WDA_SetMaxTxPowerPerBandCallBack,
7024 pWdaParams);
7025 if (IS_WDI_STATUS_FAILURE(status))
7026 {
7027 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7028 "Failure in SET MAX TX Power REQ Params WDI API,"
7029 " free all the memory");
7030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7031 vos_mem_free(pWdaParams);
7032 /* send response to UMAC*/
7033 WDA_SendMsg(pWDA,
7034 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7035 MaxTxPowerPerBandParams, 0);
7036 }
7037 return CONVERT_WDI2VOS_STATUS(status);
7038}
7039
7040/*
schang86c22c42013-03-13 18:41:24 -07007041 * FUNCTION: WDA_SetTxPowerCallBack
7042 * send the response to PE with power value received from WDI
7043 */
7044void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7045 void* pUserData)
7046{
7047 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7048 tWDA_CbContext *pWDA = NULL;
7049 tSirSetTxPowerReq *pTxPowerParams = NULL;
7050
7051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7052 "<------ %s ", __func__);
7053 if(NULL == pWdaParams)
7054 {
7055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7056 "%s: pWdaParams received NULL", __func__);
7057 VOS_ASSERT(0) ;
7058 return ;
7059 }
7060 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7061 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7062 if(NULL == pTxPowerParams)
7063 {
7064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7065 "%s: pTxPowerParams received NULL " ,__func__);
7066 VOS_ASSERT(0);
7067 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7068 vos_mem_free(pWdaParams);
7069 return ;
7070 }
7071
7072 /*need to free memory for the pointers used in the
7073 WDA Process.Set Max Tx Power Req function*/
7074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7075 vos_mem_free(pWdaParams);
7076
7077 /* send response to UMAC*/
7078 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7079 return;
7080}
7081
7082/*
7083 * FUNCTION: WDA_ProcessSetTxPowerReq
7084 * Request to WDI to send set Tx Power Request
7085 */
7086 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7087 tSirSetTxPowerReq *txPowerParams)
7088{
7089 WDI_Status status = WDI_STATUS_SUCCESS;
7090 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7091 tWDA_ReqParams *pWdaParams = NULL;
7092
7093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7094 "------> %s ", __func__);
7095
7096 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7097 sizeof(WDI_SetTxPowerParamsType));
7098 if(NULL == wdiSetTxPowerParams)
7099 {
7100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7101 "%s: VOS MEM Alloc Failure", __func__);
7102 VOS_ASSERT(0);
7103 return VOS_STATUS_E_NOMEM;
7104 }
7105 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7106 if(NULL == pWdaParams)
7107 {
7108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7109 "%s: VOS MEM Alloc Failure", __func__);
7110 vos_mem_free(wdiSetTxPowerParams);
7111 VOS_ASSERT(0);
7112 return VOS_STATUS_E_NOMEM;
7113 }
7114 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7115 txPowerParams->bssIdx;
7116 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7117 txPowerParams->mwPower;
7118 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7119 pWdaParams->pWdaContext = pWDA;
7120 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7121 /* store Params pass it to WDI */
7122 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7123 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7124 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7125 if(IS_WDI_STATUS_FAILURE(status))
7126 {
7127 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7128 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7130 vos_mem_free(pWdaParams);
7131 /* send response to UMAC*/
7132 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7133 }
7134 return CONVERT_WDI2VOS_STATUS(status);
7135}
7136
Jeff Johnson295189b2012-06-20 16:38:30 -07007137/*
7138 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7139 * Free the memory. No need to send any response to PE in this case
7140 */
7141void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7142{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007143 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7144
Jeff Johnson295189b2012-06-20 16:38:30 -07007145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007146 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007147
7148 if(NULL == pWdaParams)
7149 {
7150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007151 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007152 VOS_ASSERT(0) ;
7153 return ;
7154 }
7155
7156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7157 vos_mem_free(pWdaParams->wdaMsgParam) ;
7158 vos_mem_free(pWdaParams);
7159
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 /*
7161 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7162 * so just free the request param here
7163 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007164 return ;
7165}
7166
Jeff Johnson295189b2012-06-20 16:38:30 -07007167/*
7168 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7169 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7170 */
7171VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7172 tP2pPsParams *pP2pPsConfigParams)
7173{
7174 WDI_Status status = WDI_STATUS_SUCCESS ;
7175 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7176 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7177 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007178 tWDA_ReqParams *pWdaParams = NULL;
7179
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__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 if(NULL == wdiSetP2PGONOAReqParam)
7183 {
7184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007186 VOS_ASSERT(0);
7187 return VOS_STATUS_E_NOMEM;
7188 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007189
7190 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7191 if(NULL == pWdaParams)
7192 {
7193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007194 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007195 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007196 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007197 VOS_ASSERT(0);
7198 return VOS_STATUS_E_NOMEM;
7199 }
7200
Jeff Johnson295189b2012-06-20 16:38:30 -07007201 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7202 pP2pPsConfigParams->opp_ps;
7203 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7204 pP2pPsConfigParams->ctWindow;
7205 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7206 pP2pPsConfigParams->count;
7207 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7208 pP2pPsConfigParams->duration;
7209 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7210 pP2pPsConfigParams->interval;
7211 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7212 pP2pPsConfigParams->single_noa_duration;
7213 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7214 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007215
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7217 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007218 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7219
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007221 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7222 pWdaParams->pWdaContext = pWDA;
7223
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007225 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7226
Jeff Johnson295189b2012-06-20 16:38:30 -07007227 if(IS_WDI_STATUS_FAILURE(status))
7228 {
7229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7230 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7232 vos_mem_free(pWdaParams->wdaMsgParam);
7233 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007235 return CONVERT_WDI2VOS_STATUS(status);
7236
Jeff Johnson295189b2012-06-20 16:38:30 -07007237}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307238
7239#ifdef FEATURE_WLAN_TDLS
7240/*
7241 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7242 * Free the memory. No need to send any response to PE in this case
7243 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307244void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7245 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307246{
7247 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7248 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307249 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307250
7251
7252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7253 "<------ %s " ,__func__);
7254 if(NULL == pWdaParams)
7255 {
7256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7257 "%s: pWdaParams received NULL", __func__);
7258 VOS_ASSERT(0) ;
7259 return ;
7260 }
7261 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7262
7263 if(NULL == pWdaParams)
7264 {
7265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7266 "%s: pWdaParams received NULL", __func__);
7267 VOS_ASSERT(0) ;
7268 return ;
7269 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307270 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7271 if( NULL == pTdlsLinkEstablishParams )
7272 {
7273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7274 "%s: pTdlsLinkEstablishParams "
7275 "received NULL " ,__func__);
7276 VOS_ASSERT(0);
7277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7278 vos_mem_free(pWdaParams);
7279 return ;
7280 }
7281 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7282 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307284 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307285 /* send response to UMAC*/
7286 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7287
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307288 return ;
7289}
7290
7291VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7292 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7293{
7294 WDI_Status status = WDI_STATUS_SUCCESS ;
7295 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7296 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7297 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7298 tWDA_ReqParams *pWdaParams = NULL;
7299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7300 "------> %s " ,__func__);
7301 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7302 {
7303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7304 "%s: VOS MEM Alloc Failure", __func__);
7305 VOS_ASSERT(0);
7306 return VOS_STATUS_E_NOMEM;
7307 }
7308 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7309 if(NULL == pWdaParams)
7310 {
7311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7312 "%s: VOS MEM Alloc Failure", __func__);
7313 vos_mem_free(pTdlsLinkEstablishParams);
7314 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7315 VOS_ASSERT(0);
7316 return VOS_STATUS_E_NOMEM;
7317 }
7318 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307319 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307320 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307321 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307322 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307323 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307324 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307325 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307326 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307327 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307328 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7329 pTdlsLinkEstablishParams->isOffChannelSupported;
7330
7331 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7332 pTdlsLinkEstablishParams->validChannels,
7333 pTdlsLinkEstablishParams->validChannelsLen);
7334
7335 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7336 pTdlsLinkEstablishParams->validChannelsLen;
7337
7338 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7339 pTdlsLinkEstablishParams->validOperClasses,
7340 pTdlsLinkEstablishParams->validOperClassesLen);
7341 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7342 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307343
7344 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7345 /* Store msg pointer from PE, as this will be used for response */
7346 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7347 /* store Params pass it to WDI */
7348 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7349 pWdaParams->pWdaContext = pWDA;
7350
7351 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7352 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7353 WDA_SetTDLSLinkEstablishReqParamsCallback,
7354 pWdaParams);
7355 if(IS_WDI_STATUS_FAILURE(status))
7356 {
7357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7358 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7360 vos_mem_free(pWdaParams->wdaMsgParam);
7361 vos_mem_free(pWdaParams);
7362 }
7363 return CONVERT_WDI2VOS_STATUS(status);
7364}
7365#endif
7366
7367
Jeff Johnson295189b2012-06-20 16:38:30 -07007368#ifdef WLAN_FEATURE_VOWIFI_11R
7369/*
7370 * FUNCTION: WDA_AggrAddTSReqCallback
7371 * send ADD AGGREGATED TS RSP back to PE
7372 */
7373void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7374{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007375 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7376 tWDA_CbContext *pWDA;
7377 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007378 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007380 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007381 if(NULL == pWdaParams)
7382 {
7383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007384 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007385 VOS_ASSERT(0) ;
7386 return ;
7387 }
7388
7389 pWDA = pWdaParams->pWdaContext;
7390 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007391
7392 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7393 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007394 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007396 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007397
7398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7399 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 return ;
7401}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007402/*
7403 * FUNCTION: WDA_ProcessAddTSReq
7404 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7405 */
7406VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7407 tAggrAddTsParams *pAggrAddTsReqParams)
7408{
7409 WDI_Status status = WDI_STATUS_SUCCESS ;
7410 int i;
7411 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007412 tWDA_ReqParams *pWdaParams = NULL;
7413
7414
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007416 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7418 sizeof(WDI_AggrAddTSReqParamsType)) ;
7419 if(NULL == wdiAggrAddTSReqParam)
7420 {
7421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007422 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007423 VOS_ASSERT(0);
7424 return VOS_STATUS_E_NOMEM;
7425 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007426
7427
7428 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7429 if(NULL == pWdaParams)
7430 {
7431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007432 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007433 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007434 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007435 VOS_ASSERT(0);
7436 return VOS_STATUS_E_NOMEM;
7437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7439 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7440 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007441 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7442 {
7443 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7444 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7445 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007446 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7447 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7448 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7449 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7450 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7451 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7452 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7453 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7454 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7455 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7456 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7457 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7458 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7459 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7460 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7461 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007462 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7463 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7465 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7466 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7467 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7468 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7469 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7470 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7471 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7472 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7473 pAggrAddTsReqParams->tspec[i].inactInterval;
7474 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7475 pAggrAddTsReqParams->tspec[i].suspendInterval;
7476 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7477 pAggrAddTsReqParams->tspec[i].svcStartTime;
7478 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7479 pAggrAddTsReqParams->tspec[i].minDataRate;
7480 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7481 pAggrAddTsReqParams->tspec[i].meanDataRate;
7482 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7483 pAggrAddTsReqParams->tspec[i].peakDataRate;
7484 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7485 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7486 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7487 pAggrAddTsReqParams->tspec[i].delayBound;
7488 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7489 pAggrAddTsReqParams->tspec[i].minPhyRate;
7490 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7491 pAggrAddTsReqParams->tspec[i].surplusBw;
7492 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7493 pAggrAddTsReqParams->tspec[i].mediumTime;
7494 }
7495
7496 /* TODO: tAggrAddTsParams doesn't have the following fields */
7497#if 0
7498 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7499 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7500 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7501 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7502#endif
7503 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7504
7505 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007506 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007508 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7509
7510 pWdaParams->pWdaContext = pWDA;
7511
Jeff Johnson295189b2012-06-20 16:38:30 -07007512 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007513 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7514
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 if(IS_WDI_STATUS_FAILURE(status))
7516 {
7517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7518 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7520 vos_mem_free(pWdaParams);
7521
7522 /* send the failure response back to PE*/
7523 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7524 {
7525 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7526 }
7527
7528 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7529 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007531 return CONVERT_WDI2VOS_STATUS(status) ;
7532}
7533#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007534/*
Mihir Shetea4306052014-03-25 00:02:54 +05307535 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007536 * send Enter IMPS RSP back to PE
7537 */
Mihir Shetea4306052014-03-25 00:02:54 +05307538void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007539{
Mihir Shetea4306052014-03-25 00:02:54 +05307540 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7541 tWDA_CbContext *pWDA;
7542
Jeff Johnson295189b2012-06-20 16:38:30 -07007543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307544 "<------ %s status=%d" ,__func__,status);
7545 if(NULL == pWdaParams)
7546 {
7547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7548 "%s: pWdaParams received NULL", __func__);
7549 VOS_ASSERT(0);
7550 return;
7551 }
7552
7553 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7554
7555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7556 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007557 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007558 return ;
7559}
Mihir Shetea4306052014-03-25 00:02:54 +05307560
7561
7562/*
7563 * FUNCTION: WDA_EnterImpsReqCallback
7564 * Free memory and send Enter IMPS RSP back to PE.
7565 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7566 */
7567void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7568{
7569 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7570 tWDA_CbContext *pWDA;
7571
7572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7573 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7574
7575 if(NULL == pWdaParams)
7576 {
7577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7578 "%s: pWdaParams received NULL", __func__);
7579 VOS_ASSERT(0);
7580 return;
7581 }
7582
7583 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7584
7585 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7586 {
7587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7588 vos_mem_free(pWdaParams);
7589 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7590 CONVERT_WDI2SIR_STATUS(wdiStatus));
7591 }
7592
7593 return;
7594}
Jeff Johnson295189b2012-06-20 16:38:30 -07007595/*
7596 * FUNCTION: WDA_ProcessEnterImpsReq
7597 * Request to WDI to Enter IMPS power state.
7598 */
7599VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7600{
7601 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307602 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7603 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007605 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307606
7607
7608 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7609 if (NULL == wdiEnterImpsReqParams)
7610 {
7611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7612 "%s: VOS MEM Alloc Failure", __func__);
7613 VOS_ASSERT(0);
7614 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7615 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7616 return VOS_STATUS_E_NOMEM;
7617 }
7618
7619 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7620 if (NULL == pWdaParams)
7621 {
7622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7623 "%s: VOS MEM Alloc Failure", __func__);
7624 VOS_ASSERT(0);
7625 vos_mem_free(wdiEnterImpsReqParams);
7626 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
7627 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7628 return VOS_STATUS_E_NOMEM;
7629 }
7630
7631 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
7632 wdiEnterImpsReqParams->pUserData = pWdaParams;
7633
7634 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
7635 pWdaParams->wdaMsgParam = NULL;
7636 pWdaParams->pWdaContext = pWDA;
7637
7638 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
7639 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
7640 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 if(IS_WDI_STATUS_FAILURE(status))
7642 {
7643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7644 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05307645 vos_mem_free(wdiEnterImpsReqParams);
7646 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007647 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007649 return CONVERT_WDI2VOS_STATUS(status) ;
7650}
Jeff Johnson295189b2012-06-20 16:38:30 -07007651/*
7652 * FUNCTION: WDA_ExitImpsReqCallback
7653 * send Exit IMPS RSP back to PE
7654 */
7655void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7656{
7657 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007659 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007660 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 return ;
7662}
Jeff Johnson295189b2012-06-20 16:38:30 -07007663/*
7664 * FUNCTION: WDA_ProcessExitImpsReq
7665 * Request to WDI to Exit IMPS power state.
7666 */
7667VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7668{
7669 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007671 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 if(IS_WDI_STATUS_FAILURE(status))
7674 {
7675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7676 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007677 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007679 return CONVERT_WDI2VOS_STATUS(status) ;
7680}
Jeff Johnson295189b2012-06-20 16:38:30 -07007681/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007682 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 * send Enter BMPS RSP back to PE
7684 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007685void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007686{
7687 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7688 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007689 tEnterBmpsParams *pEnterBmpsRspParams;
7690
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007692 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 if(NULL == pWdaParams)
7694 {
7695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007696 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007697 VOS_ASSERT(0) ;
7698 return ;
7699 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007700
7701 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7702 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7703
7704 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007705 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007706
7707 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007708 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007709 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7710
Jeff Johnson295189b2012-06-20 16:38:30 -07007711 return ;
7712}
Jeff Johnson295189b2012-06-20 16:38:30 -07007713/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007714 * FUNCTION: WDA_EnterBmpsReqCallback
7715 * Free memory and send Enter BMPS RSP back to PE.
7716 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7717 */
7718void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7719{
7720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7721 tWDA_CbContext *pWDA;
7722 tEnterBmpsParams *pEnterBmpsRspParams;
7723
7724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7725 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7726
7727 if(NULL == pWdaParams)
7728 {
7729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7730 "%s: pWdaParams received NULL", __func__);
7731 VOS_ASSERT(0);
7732 return;
7733 }
7734
7735 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7736 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7737 pEnterBmpsRspParams->status = wdiStatus;
7738
7739 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7740 {
7741 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7742 vos_mem_free(pWdaParams);
7743 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7744 }
7745
7746 return;
7747}
7748/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007749 * FUNCTION: WDA_ProcessEnterBmpsReq
7750 * Request to WDI to Enter BMPS power state.
7751 */
7752VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7753 tEnterBmpsParams *pEnterBmpsReqParams)
7754{
7755 WDI_Status status = WDI_STATUS_SUCCESS;
7756 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7757 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007759 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007760 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7761 {
7762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007763 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007764 VOS_ASSERT(0);
7765 return VOS_STATUS_E_FAILURE;
7766 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007767 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7768 if (NULL == wdiEnterBmpsReqParams)
7769 {
7770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007772 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007773 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7774 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007775 return VOS_STATUS_E_NOMEM;
7776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7778 if (NULL == pWdaParams)
7779 {
7780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007782 VOS_ASSERT(0);
7783 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007784 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7785 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 return VOS_STATUS_E_NOMEM;
7787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007788 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7789 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7790 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7791 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007792 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7794 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7795 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007796 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7797 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007798
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 /* Store param pointer as passed in by caller */
7800 /* store Params pass it to WDI */
7801 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007802 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007805 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 if (IS_WDI_STATUS_FAILURE(status))
7807 {
7808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7809 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007811 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007813 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 return CONVERT_WDI2VOS_STATUS(status);
7816}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007817
7818
7819static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7820 WDI_Status wdiStatus,
7821 tExitBmpsParams *pExitBmpsReqParams)
7822{
7823 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7824
7825 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7826}
7827
7828
Jeff Johnson295189b2012-06-20 16:38:30 -07007829/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007830 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007831 * send Exit BMPS RSP back to PE
7832 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007833void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007834{
7835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7836 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007837 tExitBmpsParams *pExitBmpsRspParams;
7838
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007840 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007841 if(NULL == pWdaParams)
7842 {
7843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007844 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007845 VOS_ASSERT(0) ;
7846 return ;
7847 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007848
7849 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7850 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7851
7852 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007853 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007854
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7856 vos_mem_free(pWdaParams) ;
7857
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007858 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007859 return ;
7860}
Jeff Johnson295189b2012-06-20 16:38:30 -07007861/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007862 * FUNCTION: WDA_ExitBmpsReqCallback
7863 * Free memory and send Exit BMPS RSP back to PE.
7864 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7865 */
7866void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7867{
7868 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7869 tWDA_CbContext *pWDA;
7870 tExitBmpsParams *pExitBmpsRspParams;
7871
7872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7873 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7874
7875 if(NULL == pWdaParams)
7876 {
7877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7878 "%s: pWdaParams received NULL", __func__);
7879 VOS_ASSERT(0);
7880 return;
7881 }
7882
7883 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7884 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7885 pExitBmpsRspParams->status = wdiStatus;
7886
7887 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7888 {
7889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7890 vos_mem_free(pWdaParams);
7891 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7892 }
7893
7894 return;
7895}
7896/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 * FUNCTION: WDA_ProcessExitBmpsReq
7898 * Request to WDI to Exit BMPS power state.
7899 */
7900VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7901 tExitBmpsParams *pExitBmpsReqParams)
7902{
7903 WDI_Status status = WDI_STATUS_SUCCESS ;
7904 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7905 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7906 sizeof(WDI_ExitBmpsReqParamsType)) ;
7907 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007909 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007910 if(NULL == wdiExitBmpsReqParams)
7911 {
7912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007914 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007915 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 return VOS_STATUS_E_NOMEM;
7917 }
7918 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7919 if(NULL == pWdaParams)
7920 {
7921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 VOS_ASSERT(0);
7924 vos_mem_free(wdiExitBmpsReqParams);
7925 return VOS_STATUS_E_NOMEM;
7926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007927 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007928
7929 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7930
Yue Ma7f44bbe2013-04-12 11:47:39 -07007931 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7932 wdiExitBmpsReqParams->pUserData = pWdaParams;
7933
Jeff Johnson295189b2012-06-20 16:38:30 -07007934 /* Store param pointer as passed in by caller */
7935 /* store Params pass it to WDI */
7936 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7937 pWdaParams->pWdaContext = pWDA;
7938 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007939 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007940 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 if(IS_WDI_STATUS_FAILURE(status))
7942 {
7943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7944 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7946 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007947 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007949 return CONVERT_WDI2VOS_STATUS(status) ;
7950}
Jeff Johnson295189b2012-06-20 16:38:30 -07007951/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007952 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007953 * send Enter UAPSD RSP back to PE
7954 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007955void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007956{
7957 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7958 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007959 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007961 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 if(NULL == pWdaParams)
7963 {
7964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007965 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 VOS_ASSERT(0) ;
7967 return ;
7968 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007969
7970 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7971 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7972
7973 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007974 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007975
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7977 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007978 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 return ;
7980}
Jeff Johnson295189b2012-06-20 16:38:30 -07007981/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007982 * FUNCTION: WDA_EnterUapsdReqCallback
7983 * Free memory and send Enter UAPSD RSP back to PE.
7984 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7985 */
7986void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7987{
7988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7989 tWDA_CbContext *pWDA;
7990 tUapsdParams *pEnterUapsdRsqParams;
7991
7992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7993 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7994
7995 if(NULL == pWdaParams)
7996 {
7997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7998 "%s: pWdaParams received NULL", __func__);
7999 VOS_ASSERT(0);
8000 return;
8001 }
8002
8003 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8004 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8005 pEnterUapsdRsqParams->status = wdiStatus;
8006
8007 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8008 {
8009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8010 vos_mem_free(pWdaParams);
8011 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8012 }
8013
8014 return;
8015}
8016/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 * FUNCTION: WDA_ProcessEnterUapsdReq
8018 * Request to WDI to Enter UAPSD power state.
8019 */
8020VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8021 tUapsdParams *pEnterUapsdReqParams)
8022{
8023 WDI_Status status = WDI_STATUS_SUCCESS ;
8024 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8025 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8026 sizeof(WDI_EnterUapsdReqParamsType)) ;
8027 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008029 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 if(NULL == wdiEnterUapsdReqParams)
8031 {
8032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008033 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 VOS_ASSERT(0);
8035 return VOS_STATUS_E_NOMEM;
8036 }
8037 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8038 if(NULL == pWdaParams)
8039 {
8040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008041 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 VOS_ASSERT(0);
8043 vos_mem_free(wdiEnterUapsdReqParams);
8044 return VOS_STATUS_E_NOMEM;
8045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008046 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8047 pEnterUapsdReqParams->beDeliveryEnabled;
8048 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8049 pEnterUapsdReqParams->beTriggerEnabled;
8050 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8051 pEnterUapsdReqParams->bkDeliveryEnabled;
8052 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8053 pEnterUapsdReqParams->bkTriggerEnabled;
8054 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8055 pEnterUapsdReqParams->viDeliveryEnabled;
8056 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8057 pEnterUapsdReqParams->viTriggerEnabled;
8058 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8059 pEnterUapsdReqParams->voDeliveryEnabled;
8060 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8061 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008062 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008063
Yue Ma7f44bbe2013-04-12 11:47:39 -07008064 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8065 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008066
Jeff Johnson295189b2012-06-20 16:38:30 -07008067 /* Store param pointer as passed in by caller */
8068 /* store Params pass it to WDI */
8069 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8070 pWdaParams->pWdaContext = pWDA;
8071 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008072 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008073 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 if(IS_WDI_STATUS_FAILURE(status))
8075 {
8076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8077 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8078 vos_mem_free(pWdaParams->wdaMsgParam) ;
8079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8080 vos_mem_free(pWdaParams) ;
8081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 return CONVERT_WDI2VOS_STATUS(status) ;
8083}
Jeff Johnson295189b2012-06-20 16:38:30 -07008084/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008085 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 * send Exit UAPSD RSP back to PE
8087 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008088void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008089{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008090
8091 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8092 tWDA_CbContext *pWDA;
8093 tExitUapsdParams *pExitUapsdRspParams;
8094
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008096 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008097 if(NULL == pWdaParams)
8098 {
8099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008100 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008101 VOS_ASSERT(0);
8102 return;
8103 }
8104
8105 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8106 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8107
8108 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008109 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008110
8111 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8112 vos_mem_free(pWdaParams) ;
8113
8114 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008115 return ;
8116}
Jeff Johnson295189b2012-06-20 16:38:30 -07008117/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008118 * FUNCTION: WDA_ExitUapsdReqCallback
8119 * Free memory and send Exit UAPSD RSP back to PE.
8120 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8121 */
8122void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8123{
8124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8125 tWDA_CbContext *pWDA;
8126 tExitUapsdParams *pExitUapsdRspParams;
8127
8128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8129 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8130
8131 if(NULL == pWdaParams)
8132 {
8133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8134 "%s: pWdaParams received NULL", __func__);
8135 VOS_ASSERT(0);
8136 return;
8137 }
8138
8139 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8140 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8141 pExitUapsdRspParams->status = wdiStatus;
8142
8143 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8144 {
8145 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8146 vos_mem_free(pWdaParams);
8147 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8148 }
8149
8150 return;
8151}
8152/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008153 * FUNCTION: WDA_ProcessExitUapsdReq
8154 * Request to WDI to Exit UAPSD power state.
8155 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008156VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8157 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008158{
8159 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008160 tWDA_ReqParams *pWdaParams ;
8161 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8162 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8163 sizeof(WDI_ExitUapsdReqParamsType)) ;
8164
Jeff Johnson295189b2012-06-20 16:38:30 -07008165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008166 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008167
8168 if(NULL == wdiExitUapsdReqParams)
8169 {
8170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008171 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008172 VOS_ASSERT(0);
8173 return VOS_STATUS_E_NOMEM;
8174 }
8175 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8176 if(NULL == pWdaParams)
8177 {
8178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008179 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008180 VOS_ASSERT(0);
8181 vos_mem_free(wdiExitUapsdReqParams);
8182 return VOS_STATUS_E_NOMEM;
8183 }
8184
8185 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008186 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8187 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008188
8189 /* Store param pointer as passed in by caller */
8190 /* store Params pass it to WDI */
8191 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8192 pWdaParams->pWdaContext = pWDA;
8193 pWdaParams->wdaMsgParam = pExitUapsdParams;
8194
Yue Ma7f44bbe2013-04-12 11:47:39 -07008195 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008196 if(IS_WDI_STATUS_FAILURE(status))
8197 {
8198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8199 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008200 vos_mem_free(pWdaParams->wdaMsgParam) ;
8201 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8202 vos_mem_free(pWdaParams) ;
8203
Jeff Johnson295189b2012-06-20 16:38:30 -07008204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008205 return CONVERT_WDI2VOS_STATUS(status) ;
8206}
8207
Jeff Johnson295189b2012-06-20 16:38:30 -07008208/*
8209 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8210 *
8211 */
8212void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8213{
8214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008216 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008217 if(NULL == pWdaParams)
8218 {
8219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008220 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008221 VOS_ASSERT(0) ;
8222 return ;
8223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008224 if( pWdaParams != NULL )
8225 {
8226 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8227 {
8228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8229 }
8230 if( pWdaParams->wdaMsgParam != NULL )
8231 {
8232 vos_mem_free(pWdaParams->wdaMsgParam) ;
8233 }
8234 vos_mem_free(pWdaParams) ;
8235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008236 return ;
8237}
Jeff Johnson295189b2012-06-20 16:38:30 -07008238/*
8239 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8240 * Request to WDI to set the power save params at start.
8241 */
8242VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8243 tSirPowerSaveCfg *pPowerSaveCfg)
8244{
8245 WDI_Status status = WDI_STATUS_SUCCESS ;
8246 tHalCfg *tlvStruct = NULL ;
8247 tANI_U8 *tlvStructStart = NULL ;
8248 v_PVOID_t *configParam;
8249 tANI_U32 configParamSize;
8250 tANI_U32 *configDataValue;
8251 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8252 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008254 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8256 {
8257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008258 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008259 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008260 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 return VOS_STATUS_E_FAILURE;
8262 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8264 if (NULL == wdiPowerSaveCfg)
8265 {
8266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008268 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008269 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008270 return VOS_STATUS_E_NOMEM;
8271 }
8272 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8273 if(NULL == pWdaParams)
8274 {
8275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008276 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008277 VOS_ASSERT(0);
8278 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008279 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 return VOS_STATUS_E_NOMEM;
8281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8283 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 if(NULL == configParam)
8285 {
8286 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008287 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008288 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008289 vos_mem_free(pWdaParams);
8290 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008291 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 return VOS_STATUS_E_NOMEM;
8293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008294 vos_mem_set(configParam, configParamSize, 0);
8295 wdiPowerSaveCfg->pConfigBuffer = configParam;
8296 tlvStruct = (tHalCfg *)configParam;
8297 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8299 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8300 tlvStruct->length = sizeof(tANI_U32);
8301 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8302 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8304 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8306 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8307 tlvStruct->length = sizeof(tANI_U32);
8308 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8309 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8311 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8313 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8314 tlvStruct->length = sizeof(tANI_U32);
8315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8316 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8318 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008319 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8320 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8321 tlvStruct->length = sizeof(tANI_U32);
8322 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8323 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8325 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8327 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8328 tlvStruct->length = sizeof(tANI_U32);
8329 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8330 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8332 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008333 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8334 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8335 tlvStruct->length = sizeof(tANI_U32);
8336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8337 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008338 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8339 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008340 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8341 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8342 tlvStruct->length = sizeof(tANI_U32);
8343 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8344 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8346 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008347 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8348 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8349 tlvStruct->length = sizeof(tANI_U32);
8350 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8351 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8352 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8353 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008354 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8355 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8356 tlvStruct->length = sizeof(tANI_U32);
8357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8358 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8359 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8360 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8362 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8363 tlvStruct->length = sizeof(tANI_U32);
8364 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8365 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008366 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8367 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008368 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8369 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8370 tlvStruct->length = sizeof(tANI_U32);
8371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8372 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8374 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 /* store Params pass it to WDI */
8378 pWdaParams->wdaMsgParam = configParam;
8379 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8380 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8382 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 if(IS_WDI_STATUS_FAILURE(status))
8384 {
8385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8386 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8387 vos_mem_free(pWdaParams->wdaMsgParam);
8388 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8389 vos_mem_free(pWdaParams);
8390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008391 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 return CONVERT_WDI2VOS_STATUS(status);
8393}
Jeff Johnson295189b2012-06-20 16:38:30 -07008394/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008395 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 *
8397 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008398void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008399{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8401
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008403 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008404
8405 if(NULL == pWdaParams)
8406 {
8407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8408 "%s: pWdaParams received NULL", __func__);
8409 VOS_ASSERT(0);
8410 return ;
8411 }
8412
8413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 vos_mem_free(pWdaParams);
8415
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 return ;
8417}
Jeff Johnson295189b2012-06-20 16:38:30 -07008418/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008419 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8420 * Free memory.
8421 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8422 */
8423void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8424{
8425 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8426
8427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8428 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8429
8430 if(NULL == pWdaParams)
8431 {
8432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8433 "%s: pWdaParams received NULL", __func__);
8434 VOS_ASSERT(0);
8435 return;
8436 }
8437
8438 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8439 {
8440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8441 vos_mem_free(pWdaParams);
8442 }
8443
8444 return;
8445}
8446/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 * FUNCTION: WDA_SetUapsdAcParamsReq
8448 * Request to WDI to set the UAPSD params for an ac (sta mode).
8449 */
8450VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8451 tUapsdInfo *pUapsdInfo)
8452{
8453 WDI_Status status = WDI_STATUS_SUCCESS;
8454 tWDA_CbContext *pWDA = NULL ;
8455 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8456 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8457 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8458 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008460 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008461 if(NULL == wdiUapsdParams)
8462 {
8463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008465 VOS_ASSERT(0);
8466 return VOS_STATUS_E_NOMEM;
8467 }
8468 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8469 if(NULL == pWdaParams)
8470 {
8471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008473 VOS_ASSERT(0);
8474 vos_mem_free(wdiUapsdParams);
8475 return VOS_STATUS_E_NOMEM;
8476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008477 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8478 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8479 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8480 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8481 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8482 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008483 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8484 wdiUapsdParams->pUserData = pWdaParams;
8485
Jeff Johnson295189b2012-06-20 16:38:30 -07008486 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008487 pWdaParams->pWdaContext = pWDA;
8488 /* Store param pointer as passed in by caller */
8489 pWdaParams->wdaMsgParam = pUapsdInfo;
8490 /* store Params pass it to WDI */
8491 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008492 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008493 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008494 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 if(IS_WDI_STATUS_FAILURE(status))
8496 {
8497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8498 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8500 vos_mem_free(pWdaParams);
8501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008502 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8503 return VOS_STATUS_SUCCESS;
8504 else
8505 return VOS_STATUS_E_FAILURE;
8506
Jeff Johnson295189b2012-06-20 16:38:30 -07008507}
8508/*
8509 * FUNCTION: WDA_ClearUapsdAcParamsReq
8510 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8511 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8512 * and again enter the UPASD with the modified params. Hence the disable
8513 * function was kept empty.
8514 *
8515 */
8516VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8517{
8518 /* do nothing */
8519 return VOS_STATUS_SUCCESS;
8520}
Jeff Johnson295189b2012-06-20 16:38:30 -07008521/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008522 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008523 *
8524 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008525void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008526{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008527 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8528
Jeff Johnson295189b2012-06-20 16:38:30 -07008529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008530 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008531
8532 if(NULL == pWdaParams)
8533 {
8534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008535 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008536 VOS_ASSERT(0) ;
8537 return ;
8538 }
8539
8540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8541 vos_mem_free(pWdaParams->wdaMsgParam);
8542 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008543
Jeff Johnson295189b2012-06-20 16:38:30 -07008544 //print a msg, nothing else to do
8545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008546 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008547 return ;
8548}
Jeff Johnson295189b2012-06-20 16:38:30 -07008549/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008550 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8551 * Free memory.
8552 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8553 */
8554void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8555{
8556 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8557
8558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8559 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8560
8561 if(NULL == pWdaParams)
8562 {
8563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8564 "%s: pWdaParams received NULL", __func__);
8565 VOS_ASSERT(0);
8566 return;
8567 }
8568
8569 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8570 {
8571 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8572 vos_mem_free(pWdaParams->wdaMsgParam);
8573 vos_mem_free(pWdaParams);
8574 }
8575
8576 return;
8577}
8578/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008579 * FUNCTION: WDA_UpdateUapsdParamsReq
8580 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8581 */
8582VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8583 tUpdateUapsdParams* pUpdateUapsdInfo)
8584{
8585 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008586 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008587 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8588 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8589 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008590 tWDA_ReqParams *pWdaParams = NULL;
8591
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008593 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 if(NULL == wdiUpdateUapsdParams)
8595 {
8596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008598 VOS_ASSERT(0);
8599 return VOS_STATUS_E_NOMEM;
8600 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8602 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8603 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008604 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8605 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008606
8607 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8608 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008609 {
8610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008611 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008613 vos_mem_free(pUpdateUapsdInfo);
8614 vos_mem_free(wdiUpdateUapsdParams);
8615 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008618 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008620 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8621 pWdaParams->pWdaContext = pWDA;
8622
Jeff Johnson43971f52012-07-17 12:26:56 -07008623 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008624 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008625 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008626
Jeff Johnson43971f52012-07-17 12:26:56 -07008627 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008628 {
8629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8630 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008631 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8633 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008634 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008635 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008636 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008637}
Jeff Johnson295189b2012-06-20 16:38:30 -07008638/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008639 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008640 *
8641 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008642void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008643{
8644 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008646 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008647 if(WDI_STATUS_SUCCESS != wdiStatus)
8648 {
8649 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008650 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008652 if(NULL == pWdaParams)
8653 {
8654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008655 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 VOS_ASSERT(0) ;
8657 return ;
8658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8660 vos_mem_free(pWdaParams->wdaMsgParam);
8661 vos_mem_free(pWdaParams);
8662 return ;
8663}
Jeff Johnson295189b2012-06-20 16:38:30 -07008664/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008665 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8666 * Free memory.
8667 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8668 */
8669void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8670{
8671 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8672
8673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8674 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8675
8676 if(NULL == pWdaParams)
8677 {
8678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8679 "%s: pWdaParams received NULL", __func__);
8680 VOS_ASSERT(0);
8681 return;
8682 }
8683
8684 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8685 {
8686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8687 vos_mem_free(pWdaParams->wdaMsgParam);
8688 vos_mem_free(pWdaParams);
8689 }
8690
8691 return;
8692}
8693/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008694 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8695 *
8696 */
8697VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8698 tSirWlanSetRxpFilters *pWlanSuspendParam)
8699{
Jeff Johnson295189b2012-06-20 16:38:30 -07008700 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008701 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008702 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8703 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8704 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8705 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008707 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008708 if(NULL == wdiRxpFilterParams)
8709 {
8710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008711 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008712 VOS_ASSERT(0);
8713 vos_mem_free(pWlanSuspendParam);
8714 return VOS_STATUS_E_NOMEM;
8715 }
8716 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8717 if(NULL == pWdaParams)
8718 {
8719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008721 VOS_ASSERT(0);
8722 vos_mem_free(wdiRxpFilterParams);
8723 vos_mem_free(pWlanSuspendParam);
8724 return VOS_STATUS_E_NOMEM;
8725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8727 pWlanSuspendParam->setMcstBcstFilter;
8728 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8729 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8730
Yue Ma7f44bbe2013-04-12 11:47:39 -07008731 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8732 wdiRxpFilterParams->pUserData = pWdaParams;
8733
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 pWdaParams->pWdaContext = pWDA;
8735 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8736 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008737 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008738 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008739 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008740 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 {
8742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8743 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008744 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8746 vos_mem_free(pWdaParams->wdaMsgParam);
8747 vos_mem_free(pWdaParams);
8748 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008749 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008750}
Jeff Johnson295189b2012-06-20 16:38:30 -07008751/*
8752 * FUNCTION: WDA_WdiIndicationCallback
8753 *
8754 */
8755void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8756 void* pUserData)
8757{
8758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008759 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008760}
Jeff Johnson295189b2012-06-20 16:38:30 -07008761/*
8762 * FUNCTION: WDA_ProcessWlanSuspendInd
8763 *
8764 */
8765VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8766 tSirWlanSuspendParam *pWlanSuspendParam)
8767{
8768 WDI_Status wdiStatus;
8769 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008771 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8773 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8774 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8775 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8778 if(WDI_STATUS_PENDING == wdiStatus)
8779 {
8780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008781 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008782 }
8783 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8784 {
8785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008786 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008788 vos_mem_free(pWlanSuspendParam);
8789 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8790}
8791
Chet Lanctot186b5732013-03-18 10:26:30 -07008792#ifdef WLAN_FEATURE_11W
8793/*
8794 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8795 *
8796 */
8797VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8798 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8799{
8800 WDI_Status wdiStatus;
8801 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8803 "------> %s ", __func__);
8804
8805 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8806 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8807 sizeof(tSirMacAddr));
8808
8809 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8810 wdiExclUnencryptParams.pUserData = pWDA;
8811
8812 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8813 if(WDI_STATUS_PENDING == wdiStatus)
8814 {
8815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8816 "Pending received for %s:%d ", __func__, __LINE__ );
8817 }
8818 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8819 {
8820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8821 "Failure in %s:%d ", __func__, __LINE__ );
8822 }
8823 vos_mem_free(pExclUnencryptParam);
8824 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8825}
8826#endif
8827
Jeff Johnson295189b2012-06-20 16:38:30 -07008828/*
8829 * FUNCTION: WDA_ProcessWlanResumeCallback
8830 *
8831 */
8832void WDA_ProcessWlanResumeCallback(
8833 WDI_SuspendResumeRspParamsType *resumeRspParams,
8834 void* pUserData)
8835{
8836 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008838 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008839 if(NULL == pWdaParams)
8840 {
8841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008842 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 VOS_ASSERT(0) ;
8844 return ;
8845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008846 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8847 {
8848 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008849 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8852 vos_mem_free(pWdaParams->wdaMsgParam);
8853 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008854 return ;
8855}
Jeff Johnson295189b2012-06-20 16:38:30 -07008856/*
8857 * FUNCTION: WDA_ProcessWlanResumeReq
8858 *
8859 */
8860VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8861 tSirWlanResumeParam *pWlanResumeParam)
8862{
8863 WDI_Status wdiStatus;
8864 WDI_ResumeParamsType *wdiResumeParams =
8865 (WDI_ResumeParamsType *)vos_mem_malloc(
8866 sizeof(WDI_ResumeParamsType) ) ;
8867 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008869 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008870 if(NULL == wdiResumeParams)
8871 {
8872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008874 VOS_ASSERT(0);
8875 return VOS_STATUS_E_NOMEM;
8876 }
8877 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8878 if(NULL == pWdaParams)
8879 {
8880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008881 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 VOS_ASSERT(0);
8883 vos_mem_free(wdiResumeParams);
8884 return VOS_STATUS_E_NOMEM;
8885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008886 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8887 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008889 wdiResumeParams->wdiReqStatusCB = NULL;
8890 pWdaParams->wdaMsgParam = pWlanResumeParam;
8891 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8892 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008893 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8894 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8895 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008896 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8897 {
8898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8899 "Failure in Host Resume REQ WDI API, free all the memory " );
8900 VOS_ASSERT(0);
8901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8902 vos_mem_free(pWdaParams->wdaMsgParam);
8903 vos_mem_free(pWdaParams);
8904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008905 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8906}
8907
Jeff Johnson295189b2012-06-20 16:38:30 -07008908/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008909 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008910 *
8911 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008912void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008913{
8914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008916 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008917 if(NULL == pWdaParams)
8918 {
8919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008920 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008921 VOS_ASSERT(0) ;
8922 return ;
8923 }
8924
8925 vos_mem_free(pWdaParams->wdaMsgParam) ;
8926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8927 vos_mem_free(pWdaParams) ;
8928 /*
8929 * No respone required for SetBeaconFilter req so just free the request
8930 * param here
8931 */
8932
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 return ;
8934}
Jeff Johnson295189b2012-06-20 16:38:30 -07008935/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008936 * FUNCTION: WDA_SetBeaconFilterReqCallback
8937 * Free memory.
8938 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8939 */
8940void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8941{
8942 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8943
8944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8945 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8946
8947 if(NULL == pWdaParams)
8948 {
8949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8950 "%s: pWdaParams received NULL", __func__);
8951 VOS_ASSERT(0);
8952 return;
8953 }
8954
8955 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8956 {
8957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8958 vos_mem_free(pWdaParams->wdaMsgParam);
8959 vos_mem_free(pWdaParams);
8960 }
8961
8962 return;
8963}
8964/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008965 * FUNCTION: WDA_SetBeaconFilterReq
8966 * Request to WDI to send the beacon filtering related information.
8967 */
8968VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8969 tBeaconFilterMsg* pBeaconFilterInfo)
8970{
8971 WDI_Status status = WDI_STATUS_SUCCESS;
8972 tANI_U8 *dstPtr, *srcPtr;
8973 tANI_U8 filterLength;
8974 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8975 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8976 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8977 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008979 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008980 if(NULL == wdiBeaconFilterInfo)
8981 {
8982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008984 VOS_ASSERT(0);
8985 return VOS_STATUS_E_NOMEM;
8986 }
8987 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8988 if(NULL == pWdaParams)
8989 {
8990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 VOS_ASSERT(0);
8993 vos_mem_free(wdiBeaconFilterInfo);
8994 return VOS_STATUS_E_NOMEM;
8995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008996 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8997 pBeaconFilterInfo->beaconInterval;
8998 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8999 pBeaconFilterInfo->capabilityInfo;
9000 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9001 pBeaconFilterInfo->capabilityMask;
9002 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009003
9004 //Fill the BssIdx
9005 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9006
Jeff Johnson295189b2012-06-20 16:38:30 -07009007 //Fill structure with info contained in the beaconFilterTable
9008 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9009 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9010 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9011 if(WDI_BEACON_FILTER_LEN < filterLength)
9012 {
9013 filterLength = WDI_BEACON_FILTER_LEN;
9014 }
9015 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009016 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9017 wdiBeaconFilterInfo->pUserData = pWdaParams;
9018
Jeff Johnson295189b2012-06-20 16:38:30 -07009019 /* Store param pointer as passed in by caller */
9020 /* store Params pass it to WDI */
9021 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9022 pWdaParams->pWdaContext = pWDA;
9023 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9024
Jeff Johnson295189b2012-06-20 16:38:30 -07009025 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009026 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 if(IS_WDI_STATUS_FAILURE(status))
9028 {
9029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9030 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9031 vos_mem_free(pWdaParams->wdaMsgParam) ;
9032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9033 vos_mem_free(pWdaParams) ;
9034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009035 return CONVERT_WDI2VOS_STATUS(status) ;
9036}
Jeff Johnson295189b2012-06-20 16:38:30 -07009037/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009038 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009039 *
9040 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009041void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009042{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009043 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9044
Jeff Johnson295189b2012-06-20 16:38:30 -07009045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009046 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009047
9048 if(NULL == pWdaParams)
9049 {
9050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009051 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009052 VOS_ASSERT(0) ;
9053 return ;
9054 }
9055
9056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9057 vos_mem_free(pWdaParams->wdaMsgParam);
9058 vos_mem_free(pWdaParams);
9059
Jeff Johnson295189b2012-06-20 16:38:30 -07009060 //print a msg, nothing else to do
9061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009062 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009063 return ;
9064}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009065/*
9066 * FUNCTION: WDA_RemBeaconFilterReqCallback
9067 * Free memory.
9068 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9069 */
9070void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9071{
9072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9073
9074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9075 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9076
9077 if(NULL == pWdaParams)
9078 {
9079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9080 "%s: pWdaParams received NULL", __func__);
9081 VOS_ASSERT(0);
9082 return;
9083 }
9084
9085 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9086 {
9087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9088 vos_mem_free(pWdaParams->wdaMsgParam);
9089 vos_mem_free(pWdaParams);
9090 }
9091
9092 return;
9093}
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 // TODO: PE does not have this feature for now implemented,
9095 // but the support for removing beacon filter exists between
9096 // HAL and FW. This function can be called whenever PE defines
9097 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009098/*
9099 * FUNCTION: WDA_RemBeaconFilterReq
9100 * Request to WDI to send the removal of beacon filtering related information.
9101 */
9102VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9103 tRemBeaconFilterMsg* pBeaconFilterInfo)
9104{
9105 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009106 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009107 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9108 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9109 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009110 tWDA_ReqParams *pWdaParams ;
9111
Jeff Johnson295189b2012-06-20 16:38:30 -07009112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009113 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 if(NULL == wdiBeaconFilterInfo)
9115 {
9116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009118 VOS_ASSERT(0);
9119 return VOS_STATUS_E_NOMEM;
9120 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009121 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9122 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 {
9124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009127 vos_mem_free(wdiBeaconFilterInfo);
9128 vos_mem_free(pBeaconFilterInfo);
9129 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009130 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009131
9132 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9133 pBeaconFilterInfo->ucIeCount;
9134 //Fill structure with info contained in the ucRemIeId
9135 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9136 pBeaconFilterInfo->ucRemIeId,
9137 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9138 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9139 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009140
9141 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009142 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009143 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009144 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9145
9146 pWdaParams->pWdaContext = pWDA;
9147
Jeff Johnson43971f52012-07-17 12:26:56 -07009148 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009149 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009150 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009151 {
9152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9153 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009154 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9156 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009157 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009158 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009159 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009160}
Jeff Johnson295189b2012-06-20 16:38:30 -07009161/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009162 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 *
9164 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009165void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009166{
9167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009169 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009170 if(NULL == pWdaParams)
9171 {
9172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009173 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 VOS_ASSERT(0) ;
9175 return ;
9176 }
9177
9178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9179 vos_mem_free(pWdaParams) ;
9180
Jeff Johnson295189b2012-06-20 16:38:30 -07009181 return ;
9182}
Jeff Johnson295189b2012-06-20 16:38:30 -07009183/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009184 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9185 * Free memory.
9186 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9187 */
9188void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9189{
9190 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9191
9192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9193 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9194
9195 if(NULL == pWdaParams)
9196 {
9197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9198 "%s: pWdaParams received NULL", __func__);
9199 VOS_ASSERT(0);
9200 return;
9201 }
9202
9203 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9204 {
9205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9206 vos_mem_free(pWdaParams);
9207 }
9208
9209 return;
9210}
9211/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 * FUNCTION: WDA_SetRSSIThresholdsReq
9213 * Request to WDI to set the RSSI thresholds (sta mode).
9214 */
9215VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9216{
9217 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009218 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009219 tWDA_CbContext *pWDA = NULL ;
9220 v_PVOID_t pVosContext = NULL;
9221 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9222 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9223 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9224 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009226 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 if(NULL == wdiRSSIThresholdsInfo)
9228 {
9229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009231 VOS_ASSERT(0);
9232 return VOS_STATUS_E_NOMEM;
9233 }
9234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9235 if(NULL == pWdaParams)
9236 {
9237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009239 VOS_ASSERT(0);
9240 vos_mem_free(wdiRSSIThresholdsInfo);
9241 return VOS_STATUS_E_NOMEM;
9242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009244 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9245 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9246 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009247 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9248 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9249 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009250 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9251 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9252 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009253 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9254 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9256 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9257
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 /* Store param pointer as passed in by caller */
9259 /* store Params pass it to WDI */
9260 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9261 pWdaParams->pWdaContext = pWDA;
9262 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009263 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009264 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009265 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009266 {
9267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9268 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009269 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009270 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9271 vos_mem_free(pWdaParams) ;
9272 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009273 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009274
9275}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009276/*
Yue Madb90ac12013-04-04 13:39:13 -07009277 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009278 *
9279 */
Yue Madb90ac12013-04-04 13:39:13 -07009280void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009281{
9282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9283
9284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009285 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009286 if(NULL == pWdaParams)
9287 {
9288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009289 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009290 VOS_ASSERT(0) ;
9291 return ;
9292 }
9293
9294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9295 vos_mem_free(pWdaParams->wdaMsgParam);
9296 vos_mem_free(pWdaParams) ;
9297
9298 //print a msg, nothing else to do
9299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009300 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009301 return ;
9302}
Jeff Johnson295189b2012-06-20 16:38:30 -07009303/*
Yue Madb90ac12013-04-04 13:39:13 -07009304 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009305 * Free memory.
9306 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009307 */
9308void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9309{
9310 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9311
9312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9313 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9314
9315 if(NULL == pWdaParams)
9316 {
9317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9318 "%s: Invalid pWdaParams pointer", __func__);
9319 VOS_ASSERT(0);
9320 return;
9321 }
9322
9323 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9324 {
9325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9326 vos_mem_free(pWdaParams->wdaMsgParam);
9327 vos_mem_free(pWdaParams);
9328 }
9329
9330 return;
9331}
9332/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009333 * FUNCTION: WDA_ProcessHostOffloadReq
9334 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9335 * to broadcast traffic (sta mode).
9336 */
9337VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9338 tSirHostOffloadReq *pHostOffloadParams)
9339{
9340 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009341 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009342 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9343 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9344 sizeof(WDI_HostOffloadReqParamsType)) ;
9345 tWDA_ReqParams *pWdaParams ;
9346
9347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009348 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009349
9350 if(NULL == wdiHostOffloadInfo)
9351 {
9352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009353 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 VOS_ASSERT(0);
9355 return VOS_STATUS_E_NOMEM;
9356 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009357 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9358 if(NULL == pWdaParams)
9359 {
9360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 VOS_ASSERT(0);
9363 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009364 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009365 return VOS_STATUS_E_NOMEM;
9366 }
9367
9368 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9369 pHostOffloadParams->offloadType;
9370 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9371 pHostOffloadParams->enableOrDisable;
9372
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009373 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9374 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9375
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9377 {
9378 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9379 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9380 pHostOffloadParams->params.hostIpv4Addr,
9381 4);
9382 break;
9383 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9384 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9385 pHostOffloadParams->params.hostIpv6Addr,
9386 16);
9387 break;
9388 case SIR_IPV6_NS_OFFLOAD:
9389 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9390 pHostOffloadParams->params.hostIpv6Addr,
9391 16);
9392
9393#ifdef WLAN_NS_OFFLOAD
9394 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9395 {
9396 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9397 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9398 16);
9399 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9400 }
9401 else
9402 {
9403 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9404 }
9405
9406 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9407 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9408 16);
9409 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9410 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9411 6);
9412
9413 //Only two are supported so let's go through them without a loop
9414 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9415 {
9416 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9417 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9418 16);
9419 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9420 }
9421 else
9422 {
9423 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9424 }
9425
9426 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9427 {
9428 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9429 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9430 16);
9431 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9432 }
9433 else
9434 {
9435 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9436 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309437 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9438 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 break;
9440#endif //WLAN_NS_OFFLOAD
9441 default:
9442 {
9443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9444 "No Handling for Offload Type %x in WDA "
9445 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9446 //WDA_VOS_ASSERT(0) ;
9447 }
9448 }
Yue Madb90ac12013-04-04 13:39:13 -07009449 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9450 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009451
Jeff Johnson295189b2012-06-20 16:38:30 -07009452 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009453 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009454 /* store Params pass it to WDI */
9455 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9456 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009457
Jeff Johnson295189b2012-06-20 16:38:30 -07009458
Jeff Johnson43971f52012-07-17 12:26:56 -07009459 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009460 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009461
Jeff Johnson43971f52012-07-17 12:26:56 -07009462 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009463 {
9464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9465 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009466 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9468 vos_mem_free(pWdaParams->wdaMsgParam);
9469 vos_mem_free(pWdaParams) ;
9470 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009471 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009472
9473}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009474/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009475 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009476 *
9477 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009478void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009479{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009480 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9481
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009483 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009484
9485 if(NULL == pWdaParams)
9486 {
9487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009488 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009489 VOS_ASSERT(0) ;
9490 return ;
9491 }
9492
9493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9494 vos_mem_free(pWdaParams->wdaMsgParam);
9495 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009496
Jeff Johnson295189b2012-06-20 16:38:30 -07009497 //print a msg, nothing else to do
9498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009499 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 return ;
9501}
Jeff Johnson295189b2012-06-20 16:38:30 -07009502/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009503 * FUNCTION: WDA_KeepAliveReqCallback
9504 * Free memory.
9505 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9506 */
9507void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9508{
9509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9510
9511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9512 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9513
9514 if(NULL == pWdaParams)
9515 {
9516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9517 "%s: pWdaParams received NULL", __func__);
9518 VOS_ASSERT(0);
9519 return;
9520 }
9521
9522 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9523 {
9524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9525 vos_mem_free(pWdaParams->wdaMsgParam);
9526 vos_mem_free(pWdaParams);
9527 }
9528
9529 return;
9530}
9531/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009532 * FUNCTION: WDA_ProcessKeepAliveReq
9533 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9534 * wakeup due to broadcast traffic (sta mode).
9535 */
9536VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9537 tSirKeepAliveReq *pKeepAliveParams)
9538{
9539 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009540 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009541 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9542 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9543 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009544 tWDA_ReqParams *pWdaParams;
9545
Jeff Johnson295189b2012-06-20 16:38:30 -07009546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009547 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009548 if(NULL == wdiKeepAliveInfo)
9549 {
9550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009551 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009552 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009553 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009554 return VOS_STATUS_E_NOMEM;
9555 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009556
9557 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9558 if(NULL == pWdaParams)
9559 {
9560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009561 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009562 VOS_ASSERT(0);
9563 vos_mem_free(wdiKeepAliveInfo);
9564 vos_mem_free(pKeepAliveParams);
9565 return VOS_STATUS_E_NOMEM;
9566 }
9567
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9569 pKeepAliveParams->packetType;
9570 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9571 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009572
9573 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9574 pKeepAliveParams->bssId,
9575 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009576
9577 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9578 {
9579 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9580 pKeepAliveParams->hostIpv4Addr,
9581 SIR_IPV4_ADDR_LEN);
9582 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9583 pKeepAliveParams->destIpv4Addr,
9584 SIR_IPV4_ADDR_LEN);
9585 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9586 pKeepAliveParams->destMacAddr,
9587 SIR_MAC_ADDR_LEN);
9588 }
9589 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9590 {
9591 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9592 SIR_IPV4_ADDR_LEN,
9593 0);
9594 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9595 SIR_IPV4_ADDR_LEN,
9596 0);
9597 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9598 SIR_MAC_ADDR_LEN,
9599 0);
9600 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009601 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9602 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009603
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009605 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009607 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9608 pWdaParams->pWdaContext = pWDA;
9609
Jeff Johnson295189b2012-06-20 16:38:30 -07009610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9611 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9612 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9613 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9614 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9616 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9617 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9618 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9619 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9621 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9622 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9623 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9624 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9625 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9626 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9627 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9629 "TimePeriod %d PacketType %d",
9630 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9631 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009632 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009633 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009634
Jeff Johnson43971f52012-07-17 12:26:56 -07009635 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009636 {
9637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9638 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009639 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9641 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009642 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009643 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009644 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009645
9646}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009647/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009648 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009649 *
9650 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009651void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009652 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9653 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009654{
9655 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009657 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009658 if(NULL == pWdaParams)
9659 {
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009661 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009662 VOS_ASSERT(0) ;
9663 return ;
9664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009665 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9666 vos_mem_free(pWdaParams->wdaMsgParam);
9667 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009668 return ;
9669}
Jeff Johnson295189b2012-06-20 16:38:30 -07009670/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009671 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9672 * Free memory.
9673 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9674 */
9675void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9676{
9677 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9678
9679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9680 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9681
9682 if(NULL == pWdaParams)
9683 {
9684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9685 "%s: pWdaParams received NULL", __func__);
9686 VOS_ASSERT(0);
9687 return;
9688 }
9689
9690 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9691 {
9692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9693 vos_mem_free(pWdaParams->wdaMsgParam);
9694 vos_mem_free(pWdaParams);
9695 }
9696
9697 return;
9698}
9699
9700/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9702 * Request to WDI to add WOWL Bcast pattern
9703 */
9704VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9705 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9706{
9707 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009708 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009709 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9710 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9711 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9712 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009714 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 if(NULL == wdiWowlAddBcPtrnInfo)
9716 {
9717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009719 VOS_ASSERT(0);
9720 return VOS_STATUS_E_NOMEM;
9721 }
9722 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9723 if(NULL == pWdaParams)
9724 {
9725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 VOS_ASSERT(0);
9728 vos_mem_free(wdiWowlAddBcPtrnInfo);
9729 return VOS_STATUS_E_NOMEM;
9730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9732 pWowlAddBcPtrnParams->ucPatternId;
9733 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9734 pWowlAddBcPtrnParams->ucPatternByteOffset;
9735 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9736 pWowlAddBcPtrnParams->ucPatternMaskSize;
9737 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9738 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009739 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9740 {
9741 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9742 pWowlAddBcPtrnParams->ucPattern,
9743 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9744 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9745 pWowlAddBcPtrnParams->ucPatternMask,
9746 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9747 }
9748 else
9749 {
9750 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9751 pWowlAddBcPtrnParams->ucPattern,
9752 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9753 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9754 pWowlAddBcPtrnParams->ucPatternMask,
9755 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9756
9757 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9758 pWowlAddBcPtrnParams->ucPatternExt,
9759 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9760 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9761 pWowlAddBcPtrnParams->ucPatternMaskExt,
9762 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9763 }
9764
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009765 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9766 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9767
Yue Ma7f44bbe2013-04-12 11:47:39 -07009768 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9769 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009770 /* Store param pointer as passed in by caller */
9771 /* store Params pass it to WDI */
9772 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9773 pWdaParams->pWdaContext = pWDA;
9774 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009775 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009776 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009777 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009778 {
9779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9780 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009781 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009782 vos_mem_free(pWdaParams->wdaMsgParam) ;
9783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9784 vos_mem_free(pWdaParams) ;
9785 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009786 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009787
9788}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009789/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009790 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009791 *
9792 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009793void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009794 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9795 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009796{
9797 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009799 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009800 if(NULL == pWdaParams)
9801 {
9802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009803 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009804 VOS_ASSERT(0) ;
9805 return ;
9806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9808 vos_mem_free(pWdaParams->wdaMsgParam);
9809 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009810 return ;
9811}
Jeff Johnson295189b2012-06-20 16:38:30 -07009812/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009813 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9814 * Free memory.
9815 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9816 */
9817void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9818{
9819 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9820
9821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9822 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9823
9824 if(NULL == pWdaParams)
9825 {
9826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9827 "%s: pWdaParams received NULL", __func__);
9828 VOS_ASSERT(0);
9829 return;
9830 }
9831
9832 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9833 {
9834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9835 vos_mem_free(pWdaParams->wdaMsgParam);
9836 vos_mem_free(pWdaParams);
9837 }
9838
9839 return;
9840}
9841/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009842 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9843 * Request to WDI to delete WOWL Bcast pattern
9844 */
9845VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9846 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9847{
9848 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009849 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9851 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9852 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9853 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009855 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009856 if(NULL == wdiWowlDelBcPtrnInfo)
9857 {
9858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009859 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009860 VOS_ASSERT(0);
9861 return VOS_STATUS_E_NOMEM;
9862 }
9863 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9864 if(NULL == pWdaParams)
9865 {
9866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009868 VOS_ASSERT(0);
9869 vos_mem_free(wdiWowlDelBcPtrnInfo);
9870 return VOS_STATUS_E_NOMEM;
9871 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009872 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9873 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009874
9875 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9876 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9877
Yue Ma7f44bbe2013-04-12 11:47:39 -07009878 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9879 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009880 /* Store param pointer as passed in by caller */
9881 /* store Params pass it to WDI */
9882 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9883 pWdaParams->pWdaContext = pWDA;
9884 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009885 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009886 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
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 delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009891 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009892 vos_mem_free(pWdaParams->wdaMsgParam) ;
9893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9894 vos_mem_free(pWdaParams) ;
9895 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009896 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009897
9898}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009899/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009900 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009901 *
9902 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009903void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009904{
9905 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9906 tWDA_CbContext *pWDA;
9907 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009909 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009910 if(NULL == pWdaParams)
9911 {
9912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009913 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009914 VOS_ASSERT(0) ;
9915 return ;
9916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9918 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9919
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009920 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9921
Jeff Johnson295189b2012-06-20 16:38:30 -07009922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9923 vos_mem_free(pWdaParams) ;
9924
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009925 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009926 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009927 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 return ;
9929}
Jeff Johnson295189b2012-06-20 16:38:30 -07009930/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009931 * FUNCTION: WDA_WowlEnterReqCallback
9932 * Free memory and send WOWL Enter RSP back to PE.
9933 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9934 */
9935void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9936{
9937 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9938 tWDA_CbContext *pWDA;
9939 tSirHalWowlEnterParams *pWowlEnterParams;
9940
9941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9942 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9943
9944 if(NULL == pWdaParams)
9945 {
9946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9947 "%s: pWdaParams received NULL", __func__);
9948 VOS_ASSERT(0);
9949 return;
9950 }
9951
9952 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9953 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9954 pWowlEnterParams->status = wdiStatus;
9955
9956 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9957 {
9958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9959 vos_mem_free(pWdaParams);
9960 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9961 }
9962
9963 return;
9964}
9965/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009966 * FUNCTION: WDA_ProcessWowlEnterReq
9967 * Request to WDI to enter WOWL
9968 */
9969VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9970 tSirHalWowlEnterParams *pWowlEnterParams)
9971{
9972 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009973 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009974 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9975 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9976 sizeof(WDI_WowlEnterReqParamsType)) ;
9977 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009979 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 if(NULL == wdiWowlEnterInfo)
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__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009984 VOS_ASSERT(0);
9985 return VOS_STATUS_E_NOMEM;
9986 }
9987 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9988 if(NULL == pWdaParams)
9989 {
9990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009992 VOS_ASSERT(0);
9993 vos_mem_free(wdiWowlEnterInfo);
9994 return VOS_STATUS_E_NOMEM;
9995 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009996
9997 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9998
Jeff Johnson295189b2012-06-20 16:38:30 -07009999 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10000 pWowlEnterParams->magicPtrn,
10001 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010002 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10003 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10005 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010006 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10007 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010008 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10009 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010010 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10011 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010012 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10013 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010014 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10015 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10017 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010018#ifdef WLAN_WAKEUP_EVENTS
10019 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10020 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10021
10022 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10023 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10024
10025 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10026 pWowlEnterParams->ucWowNetScanOffloadMatch;
10027
10028 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10029 pWowlEnterParams->ucWowGTKRekeyError;
10030
10031 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10032 pWowlEnterParams->ucWoWBSSConnLoss;
10033#endif // WLAN_WAKEUP_EVENTS
10034
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010035 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10036 pWowlEnterParams->bssIdx;
10037
Yue Ma7f44bbe2013-04-12 11:47:39 -070010038 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10039 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 /* Store param pointer as passed in by caller */
10041 /* store Params pass it to WDI */
10042 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10043 pWdaParams->pWdaContext = pWDA;
10044 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010045 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010046 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010047 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010048 {
10049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10050 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010051 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010052 vos_mem_free(pWdaParams->wdaMsgParam) ;
10053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10054 vos_mem_free(pWdaParams) ;
10055 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010056 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010057
10058}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010059/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010060 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010061 *
10062 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010063void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010064{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010065 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10066 tWDA_CbContext *pWDA;
10067 tSirHalWowlExitParams *pWowlExitParams;
10068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010069 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010070 if(NULL == pWdaParams)
10071 {
10072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010073 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010074 VOS_ASSERT(0) ;
10075 return ;
10076 }
10077 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10078 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10079
10080 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010081 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010082
10083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10084 vos_mem_free(pWdaParams) ;
10085
Jeff Johnson295189b2012-06-20 16:38:30 -070010086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010087 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010088 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010089 return ;
10090}
Jeff Johnson295189b2012-06-20 16:38:30 -070010091/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010092 * FUNCTION: WDA_WowlExitReqCallback
10093 * Free memory and send WOWL Exit RSP back to PE.
10094 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10095 */
10096void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10097{
10098 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10099 tWDA_CbContext *pWDA;
10100 tSirHalWowlExitParams *pWowlExitParams;
10101
10102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10103 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10104
10105 if(NULL == pWdaParams)
10106 {
10107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10108 "%s: pWdaParams received NULL", __func__);
10109 VOS_ASSERT(0);
10110 return;
10111 }
10112
10113 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10114 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10115 pWowlExitParams->status = wdiStatus;
10116
10117 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10118 {
10119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10120 vos_mem_free(pWdaParams);
10121 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10122 }
10123
10124 return;
10125}
10126/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010127 * FUNCTION: WDA_ProcessWowlExitReq
10128 * Request to WDI to add WOWL Bcast pattern
10129 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010130VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10131 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010132{
10133 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010134 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010135 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10136 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10137 sizeof(WDI_WowlExitReqParamsType)) ;
10138 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010140 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010141 if(NULL == wdiWowlExitInfo)
10142 {
10143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010144 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010145 VOS_ASSERT(0);
10146 return VOS_STATUS_E_NOMEM;
10147 }
10148 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10149 if(NULL == pWdaParams)
10150 {
10151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010152 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010153 VOS_ASSERT(0);
10154 vos_mem_free(wdiWowlExitInfo);
10155 return VOS_STATUS_E_NOMEM;
10156 }
10157
10158 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10159 pWowlExitParams->bssIdx;
10160
Yue Ma7f44bbe2013-04-12 11:47:39 -070010161 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10162 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010163
10164 /* Store param pointer as passed in by caller */
10165 /* store Params pass it to WDI */
10166 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10167 pWdaParams->pWdaContext = pWDA;
10168 pWdaParams->wdaMsgParam = pWowlExitParams;
10169
10170 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010171 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010172
Jeff Johnson43971f52012-07-17 12:26:56 -070010173 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010174 {
10175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10176 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010177 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10179 vos_mem_free(pWdaParams->wdaMsgParam);
10180 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010181 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010182 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010183}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010184/*
10185 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10186 * Request to WDI to determine whether a given station is capable of
10187 * using HW-based frame translation
10188 */
10189v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10190 tANI_U8 staIdx)
10191{
10192 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10193}
Jeff Johnson295189b2012-06-20 16:38:30 -070010194/*
10195 * FUNCTION: WDA_NvDownloadReqCallback
10196 * send NV Download RSP back to PE
10197 */
10198void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10199 void* pUserData)
10200{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010201
10202 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10203 tWDA_CbContext *pWDA;
10204
Jeff Johnson295189b2012-06-20 16:38:30 -070010205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010206 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010207
10208 if(NULL == pWdaParams)
10209 {
10210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010211 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010212 VOS_ASSERT(0) ;
10213 return ;
10214 }
10215
10216 pWDA = pWdaParams->pWdaContext;
10217
Jeff Johnson295189b2012-06-20 16:38:30 -070010218 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10220 vos_mem_free(pWdaParams);
10221
Jeff Johnson295189b2012-06-20 16:38:30 -070010222 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010223 return ;
10224}
Jeff Johnson295189b2012-06-20 16:38:30 -070010225/*
10226 * FUNCTION: WDA_ProcessNvDownloadReq
10227 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10228 */
10229VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10230{
10231 /* Initialize the local Variables*/
10232 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10233 v_VOID_t *pNvBuffer=NULL;
10234 v_SIZE_t bufferSize = 0;
10235 WDI_Status status = WDI_STATUS_E_FAILURE;
10236 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010237 tWDA_ReqParams *pWdaParams ;
10238
Jeff Johnson295189b2012-06-20 16:38:30 -070010239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010240 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010241 if(NULL == pWDA)
10242 {
10243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010244 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010245 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 return VOS_STATUS_E_FAILURE;
10247 }
10248
10249 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010250 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10251
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10253 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 if(NULL == wdiNvDownloadReqParam)
10255 {
10256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 VOS_ASSERT(0);
10259 return VOS_STATUS_E_NOMEM;
10260 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 /* Copy Params to wdiNvDownloadReqParam*/
10262 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10263 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010264
10265 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10266 if(NULL == pWdaParams)
10267 {
10268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010269 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010270 VOS_ASSERT(0);
10271 vos_mem_free(wdiNvDownloadReqParam);
10272 return VOS_STATUS_E_NOMEM;
10273 }
10274
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010276 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10277 pWdaParams->wdaMsgParam = NULL;
10278 pWdaParams->pWdaContext = pWDA;
10279
10280
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010282
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010284 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10285
Jeff Johnson295189b2012-06-20 16:38:30 -070010286 if(IS_WDI_STATUS_FAILURE(status))
10287 {
10288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10289 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010290 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10291 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010292 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010293 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010294}
10295/*
10296 * FUNCTION: WDA_FlushAcReqCallback
10297 * send Flush AC RSP back to TL
10298 */
10299void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10300{
10301 vos_msg_t wdaMsg = {0} ;
10302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10303 tFlushACReq *pFlushACReqParams;
10304 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010306 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010307 if(NULL == pWdaParams)
10308 {
10309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010310 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010311 VOS_ASSERT(0) ;
10312 return ;
10313 }
10314
10315 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10316 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10317 if(NULL == pFlushACRspParams)
10318 {
10319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010320 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010322 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 return ;
10324 }
10325 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10326 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10327 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10328 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10329 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010330 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010331 vos_mem_free(pWdaParams->wdaMsgParam) ;
10332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10333 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010334 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10335 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10336 // POST message to TL
10337 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10338
Jeff Johnson295189b2012-06-20 16:38:30 -070010339 return ;
10340}
Jeff Johnson295189b2012-06-20 16:38:30 -070010341/*
10342 * FUNCTION: WDA_ProcessFlushAcReq
10343 * Request to WDI to Update the DELBA REQ params.
10344 */
10345VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10346 tFlushACReq *pFlushAcReqParams)
10347{
10348 WDI_Status status = WDI_STATUS_SUCCESS ;
10349 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10350 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10351 sizeof(WDI_FlushAcReqParamsType)) ;
10352 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010353 if(NULL == wdiFlushAcReqParam)
10354 {
10355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 VOS_ASSERT(0);
10358 return VOS_STATUS_E_NOMEM;
10359 }
10360 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10361 if(NULL == pWdaParams)
10362 {
10363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 VOS_ASSERT(0);
10366 vos_mem_free(wdiFlushAcReqParam);
10367 return VOS_STATUS_E_NOMEM;
10368 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010370 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010371 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10372 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10373 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10374 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010375 /* Store Flush AC pointer, as this will be used for response */
10376 /* store Params pass it to WDI */
10377 pWdaParams->pWdaContext = pWDA;
10378 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10379 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010380 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10381 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010382 if(IS_WDI_STATUS_FAILURE(status))
10383 {
10384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10385 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10386 vos_mem_free(pWdaParams->wdaMsgParam) ;
10387 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10388 vos_mem_free(pWdaParams) ;
10389 //TODO: respond to TL with failure
10390 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010391 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010392}
Jeff Johnson295189b2012-06-20 16:38:30 -070010393/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010394 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010395 *
10396 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010397void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010398{
10399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10400 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010401 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010402
10403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010404 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 if(NULL == pWdaParams)
10406 {
10407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010408 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 VOS_ASSERT(0) ;
10410 return ;
10411 }
10412 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10413 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10414 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10415 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10416 {
10417 pWDA->wdaAmpSessionOn = VOS_FALSE;
10418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010419 vos_mem_free(pWdaParams->wdaMsgParam) ;
10420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10421 vos_mem_free(pWdaParams) ;
10422 /*
10423 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10424 * param here
10425 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010426 return ;
10427}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010428/*
10429 * FUNCTION: WDA_BtAmpEventReqCallback
10430 * Free memory.
10431 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10432 */
10433void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10434{
10435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10436 tWDA_CbContext *pWDA;
10437 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010438
Yue Ma7f44bbe2013-04-12 11:47:39 -070010439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10440 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10441
10442 if(NULL == pWdaParams)
10443 {
10444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10445 "%s: pWdaParams received NULL", __func__);
10446 VOS_ASSERT(0);
10447 return;
10448 }
10449
10450 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10451 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10452
10453 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10454 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10455 {
10456 pWDA->wdaAmpSessionOn = VOS_FALSE;
10457 }
10458
10459 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10460 {
10461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10462 vos_mem_free(pWdaParams->wdaMsgParam);
10463 vos_mem_free(pWdaParams);
10464 }
10465
10466 return;
10467}
Jeff Johnson295189b2012-06-20 16:38:30 -070010468/*
10469 * FUNCTION: WDA_ProcessBtAmpEventReq
10470 * Request to WDI to Update with BT AMP events.
10471 */
10472VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10473 tSmeBtAmpEvent *pBtAmpEventParams)
10474{
10475 WDI_Status status = WDI_STATUS_SUCCESS ;
10476 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10477 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10478 sizeof(WDI_BtAmpEventParamsType)) ;
10479 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010481 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010482 if(NULL == wdiBtAmpEventParam)
10483 {
10484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010486 VOS_ASSERT(0);
10487 return VOS_STATUS_E_NOMEM;
10488 }
10489 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10490 if(NULL == pWdaParams)
10491 {
10492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010494 VOS_ASSERT(0);
10495 vos_mem_free(wdiBtAmpEventParam);
10496 return VOS_STATUS_E_NOMEM;
10497 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010498 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10499 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010500 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10501 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010502 /* Store BT AMP event pointer, as this will be used for response */
10503 /* store Params pass it to WDI */
10504 pWdaParams->pWdaContext = pWDA;
10505 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10506 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010507 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010508 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010509 if(IS_WDI_STATUS_FAILURE(status))
10510 {
10511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10512 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10513 vos_mem_free(pWdaParams->wdaMsgParam) ;
10514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10515 vos_mem_free(pWdaParams) ;
10516 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010517 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10518 {
10519 pWDA->wdaAmpSessionOn = VOS_TRUE;
10520 }
10521 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010522}
10523
Jeff Johnson295189b2012-06-20 16:38:30 -070010524/*
10525 * FUNCTION: WDA_FTMCommandReqCallback
10526 * Handle FTM CMD response came from HAL
10527 * Route responce to HDD FTM
10528 */
10529void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10530 void *usrData)
10531{
10532 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010533 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10534 {
10535 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010536 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010537 return;
10538 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 /* Release Current FTM Command Request */
10540 vos_mem_free(pWDA->wdaFTMCmdReq);
10541 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010542 /* Post FTM Responce to HDD FTM */
10543 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010544 return;
10545}
Jeff Johnson295189b2012-06-20 16:38:30 -070010546/*
10547 * FUNCTION: WDA_ProcessFTMCommand
10548 * Send FTM command to WDI
10549 */
10550VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10551 tPttMsgbuffer *pPTTFtmCmd)
10552{
10553 WDI_Status status = WDI_STATUS_SUCCESS;
10554 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010555 ftmCMDReq = (WDI_FTMCommandReqType *)
10556 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10557 if(NULL == ftmCMDReq)
10558 {
10559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10560 "WDA FTM Command buffer alloc fail");
10561 return VOS_STATUS_E_NOMEM;
10562 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010563 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10564 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010565 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010566 /* Send command to WDI */
10567 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010568 return status;
10569}
Jeff Johnsone7245742012-09-05 17:12:55 -070010570#ifdef FEATURE_OEM_DATA_SUPPORT
10571/*
10572 * FUNCTION: WDA_StartOemDataReqCallback
10573 *
10574 */
10575void WDA_StartOemDataReqCallback(
10576 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10577 void* pUserData)
10578{
10579 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10581 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010582 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010583
Jeff Johnsone7245742012-09-05 17:12:55 -070010584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010585 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010586
10587 if(NULL == pWdaParams)
10588 {
10589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010590 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010591 VOS_ASSERT(0) ;
10592 return ;
10593 }
10594 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10595
Jeff Johnsone7245742012-09-05 17:12:55 -070010596 if(NULL == pWDA)
10597 {
10598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010599 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010600 VOS_ASSERT(0);
10601 return ;
10602 }
10603
10604 /*
10605 * Allocate memory for response params sent to PE
10606 */
10607 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10608
10609 // Check if memory is allocated for OemdataMeasRsp Params.
10610 if(NULL == pOemDataRspParams)
10611 {
10612 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10613 "OEM DATA WDA callback alloc fail");
10614 VOS_ASSERT(0) ;
10615 return;
10616 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010617
Jeff Johnsone7245742012-09-05 17:12:55 -070010618 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10620 vos_mem_free(pWdaParams->wdaMsgParam);
10621 vos_mem_free(pWdaParams) ;
10622
Jeff Johnsone7245742012-09-05 17:12:55 -070010623 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010624 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010625 * Also, here success always means that we have atleast one BSSID.
10626 */
10627 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10628
10629 //enable Tx
10630 status = WDA_ResumeDataTx(pWDA);
10631 if(status != VOS_STATUS_SUCCESS)
10632 {
10633 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10634 }
10635 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10636 return ;
10637}
10638/*
10639 * FUNCTION: WDA_ProcessStartOemDataReq
10640 * Send Start Oem Data Req to WDI
10641 */
10642VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10643 tStartOemDataReq *pOemDataReqParams)
10644{
10645 WDI_Status status = WDI_STATUS_SUCCESS;
10646 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010647 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010648
10649 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10650
10651 if(NULL == wdiOemDataReqParams)
10652 {
10653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010654 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010655 VOS_ASSERT(0);
10656 return VOS_STATUS_E_NOMEM;
10657 }
10658
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010659 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10660 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10661 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10662 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010663
10664 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10665
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010666 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10667 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010668 {
10669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010671 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010672 vos_mem_free(pOemDataReqParams);
10673 VOS_ASSERT(0);
10674 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010675 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010676
Bernald44a1ae2013-01-09 08:30:39 -080010677 pWdaParams->pWdaContext = (void*)pWDA;
10678 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10679 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010680
10681 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10682 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010683
10684 if(IS_WDI_STATUS_FAILURE(status))
10685 {
10686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10687 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10689 vos_mem_free(pWdaParams->wdaMsgParam);
10690 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010691 }
10692 return CONVERT_WDI2VOS_STATUS(status) ;
10693}
10694#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010695/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010696 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010697 *
10698 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010699void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010700{
10701 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010703 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010704 if(NULL == pWdaParams)
10705 {
10706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010707 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010708 VOS_ASSERT(0) ;
10709 return ;
10710 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010711
10712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10713 vos_mem_free(pWdaParams->wdaMsgParam);
10714 vos_mem_free(pWdaParams);
10715
10716 return ;
10717}
10718/*
10719 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10720 * Free memory.
10721 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10722 */
10723void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10724{
10725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10726
10727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10728 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10729
10730 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10733 "%s: pWdaParams received NULL", __func__);
10734 VOS_ASSERT(0);
10735 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010736 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010737
10738 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010739 {
10740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010741 vos_mem_free(pWdaParams->wdaMsgParam);
10742 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010744
10745 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010746}
Jeff Johnson295189b2012-06-20 16:38:30 -070010747#ifdef WLAN_FEATURE_GTK_OFFLOAD
10748/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010749 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 *
10751 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010752void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010753 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010754{
10755 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10756
10757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010758 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010759 if(NULL == pWdaParams)
10760 {
10761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10762 "%s: pWdaParams received NULL", __func__);
10763 VOS_ASSERT(0);
10764 return;
10765 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010766
Jeff Johnson295189b2012-06-20 16:38:30 -070010767 vos_mem_free(pWdaParams->wdaMsgParam) ;
10768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10769 vos_mem_free(pWdaParams) ;
10770
10771 //print a msg, nothing else to do
10772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010773 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010774
10775 return ;
10776}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010777/*
10778 * FUNCTION: WDA_GTKOffloadReqCallback
10779 * Free memory.
10780 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10781 */
10782void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10783{
10784 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010785
Yue Ma7f44bbe2013-04-12 11:47:39 -070010786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10787 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10788
10789 if(NULL == pWdaParams)
10790 {
10791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10792 "%s: pWdaParams received NULL", __func__);
10793 VOS_ASSERT(0);
10794 return;
10795 }
10796
10797 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10798 {
10799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10800 vos_mem_free(pWdaParams->wdaMsgParam);
10801 vos_mem_free(pWdaParams);
10802 }
10803
10804 return;
10805}
Jeff Johnson295189b2012-06-20 16:38:30 -070010806/*
10807 * FUNCTION: WDA_ProcessGTKOffloadReq
10808 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10809 * to broadcast traffic (sta mode).
10810 */
10811VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10812 tpSirGtkOffloadParams pGtkOffloadParams)
10813{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010814 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010815 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10816 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10817 sizeof(WDI_GtkOffloadReqMsg)) ;
10818 tWDA_ReqParams *pWdaParams ;
10819
10820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010821 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010822
10823 if(NULL == wdiGtkOffloadReqMsg)
10824 {
10825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010826 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 VOS_ASSERT(0);
10828 return VOS_STATUS_E_NOMEM;
10829 }
10830
10831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10832 if(NULL == pWdaParams)
10833 {
10834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010836 VOS_ASSERT(0);
10837 vos_mem_free(wdiGtkOffloadReqMsg);
10838 return VOS_STATUS_E_NOMEM;
10839 }
10840
10841 //
10842 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10843 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010844
10845 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010846 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010847
Jeff Johnson295189b2012-06-20 16:38:30 -070010848 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10849 // Copy KCK
10850 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10851 // Copy KEK
10852 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10853 // Copy KeyReplayCounter
10854 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10855 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10856
Yue Ma7f44bbe2013-04-12 11:47:39 -070010857 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10858 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010859
Jeff Johnson295189b2012-06-20 16:38:30 -070010860
10861 /* Store Params pass it to WDI */
10862 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10863 pWdaParams->pWdaContext = pWDA;
10864 /* Store param pointer as passed in by caller */
10865 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10866
Yue Ma7f44bbe2013-04-12 11:47:39 -070010867 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010868
10869 if(IS_WDI_STATUS_FAILURE(status))
10870 {
10871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10872 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10874 vos_mem_free(pWdaParams->wdaMsgParam);
10875 vos_mem_free(pWdaParams);
10876 }
10877
10878 return CONVERT_WDI2VOS_STATUS(status) ;
10879}
10880
10881/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010882 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010883 *
10884 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010885void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010886 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010887{
10888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10889 tWDA_CbContext *pWDA;
10890 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053010891 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070010892 vos_msg_t vosMsg;
10893
10894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010895 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053010896
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010897 if(NULL == pWdaParams)
10898 {
10899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10900 "%s: pWdaParams received NULL", __func__);
10901 VOS_ASSERT(0);
10902 return;
10903 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010904
Nirav Shah374de6e2014-02-13 16:40:01 +053010905 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
10906 if(NULL == pGtkOffloadGetInfoRsp)
10907 {
10908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10909 "%s: vos_mem_malloc failed ", __func__);
10910 VOS_ASSERT(0);
10911 return;
10912 }
10913
Jeff Johnson295189b2012-06-20 16:38:30 -070010914 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10915 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10916
10917 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10918 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10919
10920 /* Message Header */
10921 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010922 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010923
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010924 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10925 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10926 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10927 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10928 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010929
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010930 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10931 pwdiGtkOffloadGetInfoRsparams->bssId,
10932 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010933 /* VOS message wrapper */
10934 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10935 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10936 vosMsg.bodyval = 0;
10937
10938 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10939 {
10940 /* free the mem and return */
10941 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10942 }
10943
10944 vos_mem_free(pWdaParams->wdaMsgParam) ;
10945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10946 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010947
10948 return;
10949}
10950/*
10951 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10952 * Free memory and send RSP back to SME.
10953 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10954 */
10955void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10956{
10957 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10958 vos_msg_t vosMsg;
10959
10960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10961 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10962
10963 if(NULL == pWdaParams)
10964 {
10965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10966 "%s: pWdaParams received NULL", __func__);
10967 VOS_ASSERT(0);
10968 return;
10969 }
10970
10971 /* VOS message wrapper */
10972 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10973 vosMsg.bodyptr = NULL;
10974 vosMsg.bodyval = 0;
10975
10976 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10977 {
10978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10979 vos_mem_free(pWdaParams->wdaMsgParam);
10980 vos_mem_free(pWdaParams);
10981 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10982 }
10983
10984 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010985}
10986#endif
10987
10988/*
10989 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10990 * Request to WDI to set Tx Per Tracking configurations
10991 */
10992VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10993{
10994 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010995 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010996 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10997 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10998 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10999 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011001 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 if(NULL == pwdiSetTxPerTrackingReqParams)
11003 {
11004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 vos_mem_free(pTxPerTrackingParams);
11007 VOS_ASSERT(0);
11008 return VOS_STATUS_E_NOMEM;
11009 }
11010 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11011 if(NULL == pWdaParams)
11012 {
11013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011015 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11016 vos_mem_free(pTxPerTrackingParams);
11017 VOS_ASSERT(0);
11018 return VOS_STATUS_E_NOMEM;
11019 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011020 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11021 pTxPerTrackingParams->ucTxPerTrackingEnable;
11022 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11023 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11024 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11025 pTxPerTrackingParams->ucTxPerTrackingRatio;
11026 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11027 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011028 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11029 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011030 /* Store param pointer as passed in by caller */
11031 /* store Params pass it to WDI
11032 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11033 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11034 pWdaParams->pWdaContext = pWDA;
11035 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011036 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011037 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011038 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011039 {
11040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11041 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011042 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011043 vos_mem_free(pWdaParams->wdaMsgParam) ;
11044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11045 vos_mem_free(pWdaParams) ;
11046 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011047 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011048
11049}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011050/*
11051 * FUNCTION: WDA_HALDumpCmdCallback
11052 * Send the VOS complete .
11053 */
11054void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11055 void* pUserData)
11056{
11057 tANI_U8 *buffer = NULL;
11058 tWDA_CbContext *pWDA = NULL;
11059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011060 if(NULL == pWdaParams)
11061 {
11062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011063 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011064 VOS_ASSERT(0) ;
11065 return ;
11066 }
11067
11068 pWDA = pWdaParams->pWdaContext;
11069 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011070 if(wdiRspParams->usBufferLen > 0)
11071 {
11072 /*Copy the Resp data to UMAC supplied buffer*/
11073 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11074 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11076 vos_mem_free(pWdaParams);
11077
11078 /* Indicate VOSS about the start complete */
11079 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011080 return ;
11081}
11082
Jeff Johnson295189b2012-06-20 16:38:30 -070011083/*
11084 * FUNCTION: WDA_ProcessHALDumpCmdReq
11085 * Send Dump command to WDI
11086 */
11087VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11088 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11089 tANI_U32 arg4, tANI_U8 *pBuffer)
11090{
11091 WDI_Status status = WDI_STATUS_SUCCESS;
11092 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11093 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11094 tWDA_ReqParams *pWdaParams ;
11095 pVosContextType pVosContext = NULL;
11096 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011097 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11098 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011099 if(pVosContext)
11100 {
11101 if (pVosContext->isLogpInProgress)
11102 {
11103 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11104 "%s:LOGP in Progress. Ignore!!!", __func__);
11105 return VOS_STATUS_E_BUSY;
11106 }
11107 }
11108 else
11109 {
11110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11111 "%s: VOS Context Null", __func__);
11112 return VOS_STATUS_E_RESOURCES;
11113 }
11114
Jeff Johnson295189b2012-06-20 16:38:30 -070011115 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11116 if(NULL == pWdaParams)
11117 {
11118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011119 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011120 return VOS_STATUS_E_NOMEM;
11121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011122 /* Allocate memory WDI request structure*/
11123 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11124 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11125 if(NULL == wdiHALDumpCmdReqParam)
11126 {
11127 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11128 "WDA HAL DUMP Command buffer alloc fail");
11129 vos_mem_free(pWdaParams);
11130 return WDI_STATUS_E_FAILURE;
11131 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011132 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011133 /* Extract the arguments */
11134 wdiHalDumpCmdInfo->command = cmd;
11135 wdiHalDumpCmdInfo->argument1 = arg1;
11136 wdiHalDumpCmdInfo->argument2 = arg2;
11137 wdiHalDumpCmdInfo->argument3 = arg3;
11138 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011139 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011140 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11141
11142 /* Response message will be passed through the buffer */
11143 pWdaParams->wdaMsgParam = (void *)pBuffer;
11144
11145 /* store Params pass it to WDI */
11146 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011147 /* Send command to WDI */
11148 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011149 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011150 if ( vStatus != VOS_STATUS_SUCCESS )
11151 {
11152 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11153 {
11154 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011155 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 }
11157 else
11158 {
11159 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011160 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011161 }
11162 VOS_ASSERT(0);
11163 }
11164 return status;
11165}
Jeff Johnson295189b2012-06-20 16:38:30 -070011166#ifdef WLAN_FEATURE_GTK_OFFLOAD
11167/*
11168 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11169 * Request to WDI to get GTK Offload Information
11170 */
11171VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11172 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11173{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011174 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011175 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11176 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11177 tWDA_ReqParams *pWdaParams ;
11178
11179 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11180 {
11181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011182 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011183 VOS_ASSERT(0);
11184 return VOS_STATUS_E_NOMEM;
11185 }
11186
11187 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11188 if(NULL == pWdaParams)
11189 {
11190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011192 VOS_ASSERT(0);
11193 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11194 return VOS_STATUS_E_NOMEM;
11195 }
11196
Yue Ma7f44bbe2013-04-12 11:47:39 -070011197 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11198 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011199
Jeff Johnson295189b2012-06-20 16:38:30 -070011200 /* Store Params pass it to WDI */
11201 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11202 pWdaParams->pWdaContext = pWDA;
11203 /* Store param pointer as passed in by caller */
11204 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11205
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011206 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011207 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011208
Yue Ma7f44bbe2013-04-12 11:47:39 -070011209 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011210
11211 if(IS_WDI_STATUS_FAILURE(status))
11212 {
11213 /* failure returned by WDI API */
11214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11215 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11217 vos_mem_free(pWdaParams) ;
11218 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11219 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11220 }
11221
11222 return CONVERT_WDI2VOS_STATUS(status) ;
11223}
11224#endif // WLAN_FEATURE_GTK_OFFLOAD
11225
11226/*
Yue Mab9c86f42013-08-14 15:59:08 -070011227 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11228 *
11229 */
11230VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11231 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11232{
11233 WDI_Status wdiStatus;
11234 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11235
11236 addPeriodicTxPtrnParams =
11237 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11238
11239 if (NULL == addPeriodicTxPtrnParams)
11240 {
11241 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11242 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11243 __func__);
11244
11245 return VOS_STATUS_E_NOMEM;
11246 }
11247
11248 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11249 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11250
11251 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11252 addPeriodicTxPtrnParams->pUserData = pWDA;
11253
11254 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11255
11256 if (WDI_STATUS_PENDING == wdiStatus)
11257 {
11258 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11259 "Pending received for %s:%d", __func__, __LINE__ );
11260 }
11261 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11262 {
11263 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11264 "Failure in %s:%d", __func__, __LINE__ );
11265 }
11266
11267 vos_mem_free(addPeriodicTxPtrnParams);
11268
11269 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11270}
11271
11272/*
11273 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11274 *
11275 */
11276VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11277 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11278{
11279 WDI_Status wdiStatus;
11280 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11281
11282 delPeriodicTxPtrnParams =
11283 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11284
11285 if (NULL == delPeriodicTxPtrnParams)
11286 {
11287 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11288 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11289 __func__);
11290
11291 return VOS_STATUS_E_NOMEM;
11292 }
11293
11294 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11295 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11296
11297 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11298 delPeriodicTxPtrnParams->pUserData = pWDA;
11299
11300 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11301
11302 if (WDI_STATUS_PENDING == wdiStatus)
11303 {
11304 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11305 "Pending received for %s:%d", __func__, __LINE__ );
11306 }
11307 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11308 {
11309 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11310 "Failure in %s:%d", __func__, __LINE__ );
11311 }
11312
11313 vos_mem_free(delPeriodicTxPtrnParams);
11314
11315 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11316}
11317
Rajeev79dbe4c2013-10-05 11:03:42 +053011318#ifdef FEATURE_WLAN_BATCH_SCAN
11319/*
11320 * FUNCTION: WDA_ProcessStopBatchScanInd
11321 *
11322 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11323 *
11324 * PARAM:
11325 * pWDA: pointer to WDA context
11326 * pReq: pointer to stop batch scan request
11327 */
11328VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11329 tSirStopBatchScanInd *pReq)
11330{
11331 WDI_Status wdiStatus;
11332 WDI_StopBatchScanIndType wdiReq;
11333
11334 wdiReq.param = pReq->param;
11335
11336 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11337
11338 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11339 {
11340 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11341 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11342 }
11343
11344 vos_mem_free(pReq);
11345
11346 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11347}
11348/*==========================================================================
11349 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11350
11351 DESCRIPTION
11352 API to pull batch scan result from FW
11353
11354 PARAMETERS
11355 pWDA: Pointer to WDA context
11356 pGetBatchScanReq: Pointer to get batch scan result indication
11357
11358 RETURN VALUE
11359 NONE
11360
11361===========================================================================*/
11362VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11363 tSirTriggerBatchScanResultInd *pReq)
11364{
11365 WDI_Status wdiStatus;
11366 WDI_TriggerBatchScanResultIndType wdiReq;
11367
11368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11369 "------> %s " ,__func__);
11370
11371 wdiReq.param = pReq->param;
11372
11373 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11374
11375 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11376 {
11377 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11378 "Trigger batch scan result ind failed %s:%d",
11379 __func__, wdiStatus);
11380 }
11381
11382 vos_mem_free(pReq);
11383
11384 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11385}
11386
11387/*==========================================================================
11388 FUNCTION WDA_SetBatchScanRespCallback
11389
11390 DESCRIPTION
11391 API to process set batch scan response from FW
11392
11393 PARAMETERS
11394 pRsp: Pointer to set batch scan response
11395 pUserData: Pointer to user data
11396
11397 RETURN VALUE
11398 NONE
11399
11400===========================================================================*/
11401void WDA_SetBatchScanRespCallback
11402(
11403 WDI_SetBatchScanRspType *pRsp,
11404 void* pUserData
11405)
11406{
11407 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11408 tpAniSirGlobal pMac;
11409 void *pCallbackContext;
11410 tWDA_CbContext *pWDA = NULL ;
11411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11412
11413
11414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11415 "<------ %s " ,__func__);
11416 if (NULL == pWdaParams)
11417 {
11418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11419 "%s: pWdaParams received NULL", __func__);
11420 VOS_ASSERT(0) ;
11421 return ;
11422 }
11423
11424 /*extract WDA context*/
11425 pWDA = pWdaParams->pWdaContext;
11426 if (NULL == pWDA)
11427 {
11428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11429 "%s:pWDA is NULL can't invole HDD callback",
11430 __func__);
11431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11432 vos_mem_free(pWdaParams->wdaMsgParam);
11433 vos_mem_free(pWdaParams);
11434 VOS_ASSERT(0);
11435 return;
11436 }
11437
11438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11439 vos_mem_free(pWdaParams->wdaMsgParam);
11440 vos_mem_free(pWdaParams);
11441
11442 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11443 if (NULL == pMac)
11444 {
11445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11446 "%s:pMac is NULL", __func__);
11447 VOS_ASSERT(0);
11448 return;
11449 }
11450
11451 pHddSetBatchScanRsp =
11452 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11453 if (NULL == pHddSetBatchScanRsp)
11454 {
11455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11456 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11457 VOS_ASSERT(0);
11458 return;
11459 }
11460
11461 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11462
11463 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11464 /*call hdd callback with set batch scan response data*/
11465 if(pMac->pmc.setBatchScanReqCallback)
11466 {
11467 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11468 }
11469 else
11470 {
11471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11472 "%s:HDD callback is null", __func__);
11473 VOS_ASSERT(0);
11474 }
11475
11476 vos_mem_free(pHddSetBatchScanRsp);
11477 return ;
11478}
11479
11480/*==========================================================================
11481 FUNCTION WDA_ProcessSetBatchScanReq
11482
11483 DESCRIPTION
11484 API to send set batch scan request to WDI
11485
11486 PARAMETERS
11487 pWDA: Pointer to WDA context
11488 pSetBatchScanReq: Pointer to set batch scan req
11489
11490 RETURN VALUE
11491 NONE
11492
11493===========================================================================*/
11494VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11495 tSirSetBatchScanReq *pSetBatchScanReq)
11496{
11497 WDI_Status status;
11498 tWDA_ReqParams *pWdaParams ;
11499 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11500
11501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11502 "------> %s " ,__func__);
11503
11504 pWdiSetBatchScanReq =
11505 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11506 if (NULL == pWdiSetBatchScanReq)
11507 {
11508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11509 "%s: VOS MEM Alloc Failure", __func__);
11510 vos_mem_free(pSetBatchScanReq);
11511 VOS_ASSERT(0);
11512 return VOS_STATUS_E_NOMEM;
11513 }
11514
11515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11516 if (NULL == pWdaParams)
11517 {
11518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11519 "%s: VOS MEM Alloc Failure", __func__);
11520 VOS_ASSERT(0);
11521 vos_mem_free(pSetBatchScanReq);
11522 vos_mem_free(pWdiSetBatchScanReq);
11523 return VOS_STATUS_E_NOMEM;
11524 }
11525
11526 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11527 pWdiSetBatchScanReq->numberOfScansToBatch =
11528 pSetBatchScanReq->numberOfScansToBatch;
11529 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11530 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11531 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11532
11533 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11534 pWdaParams->pWdaContext = pWDA;
11535 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11536
11537 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11538 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11539 if (IS_WDI_STATUS_FAILURE(status))
11540 {
11541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11542 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11544 vos_mem_free(pWdaParams->wdaMsgParam);
11545 vos_mem_free(pWdaParams);
11546 }
11547 return CONVERT_WDI2VOS_STATUS(status);
11548}
11549
11550#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011551/*
11552 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11553 *
11554 * DESCRIPTION: This function sends start/update OBSS scan
11555 * inidcation message to WDI
11556 *
11557 * PARAM:
11558 * pWDA: pointer to WDA context
11559 * pReq: pointer to start OBSS scan request
11560 */
11561VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11562 tSirHT40OBSSScanInd *pReq)
11563{
11564 WDI_Status status;
11565 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11566 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011567
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11569 "------> %s " ,__func__);
11570 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11571 wdiOBSSScanParams.pUserData = pWDA;
11572
11573 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11574 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11575 pWdiOBSSScanInd->scanType = pReq->scanType;
11576 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11577 pReq->OBSSScanActiveDwellTime;
11578 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11579 pReq->OBSSScanPassiveDwellTime;
11580 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11581 pReq->BSSChannelWidthTriggerScanInterval;
11582 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11583 pReq->BSSWidthChannelTransitionDelayFactor;
11584 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11585 pReq->OBSSScanActiveTotalPerChannel;
11586 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11587 pReq->OBSSScanPassiveTotalPerChannel;
11588 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11589 pReq->OBSSScanActivityThreshold;
11590 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11591 vos_mem_copy(pWdiOBSSScanInd->channels,
11592 pReq->channels,
11593 pReq->channelCount);
11594 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11595 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11596 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11597 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11598 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11599
11600 vos_mem_copy(pWdiOBSSScanInd->ieField,
11601 pReq->ieField,
11602 pReq->ieFieldLen);
11603
11604 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11605 if (WDI_STATUS_PENDING == status)
11606 {
11607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11608 "Pending received for %s:%d ",__func__,__LINE__ );
11609 }
11610 else if (WDI_STATUS_SUCCESS_SYNC != status)
11611 {
11612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11613 "Failure in %s:%d ",__func__,__LINE__ );
11614 }
11615 return CONVERT_WDI2VOS_STATUS(status) ;
11616}
11617/*
11618 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11619 *
11620 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11621 *
11622 * PARAM:
11623 * pWDA: pointer to WDA context
11624 * pReq: pointer to stop batch scan request
11625 */
11626VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11627 tANI_U8 *bssIdx)
11628{
11629 WDI_Status status;
11630
11631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11632 "------> %s " ,__func__);
11633
11634 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11635 if (WDI_STATUS_PENDING == status)
11636 {
11637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11638 "Pending received for %s:%d ",__func__,__LINE__ );
11639 }
11640 else if (WDI_STATUS_SUCCESS_SYNC != status)
11641 {
11642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11643 "Failure in %s:%d ",__func__,__LINE__ );
11644 }
11645 return CONVERT_WDI2VOS_STATUS(status) ;
11646}
Yue Mab9c86f42013-08-14 15:59:08 -070011647/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011648 * FUNCTION: WDA_ProcessRateUpdateInd
11649 *
11650 */
11651VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11652 tSirRateUpdateInd *pRateUpdateParams)
11653{
11654 WDI_Status wdiStatus;
11655 WDI_RateUpdateIndParams rateUpdateParams;
11656
11657 vos_mem_copy(rateUpdateParams.bssid,
11658 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11659
11660 rateUpdateParams.ucastDataRateTxFlag =
11661 pRateUpdateParams->ucastDataRateTxFlag;
11662 rateUpdateParams.reliableMcastDataRateTxFlag =
11663 pRateUpdateParams->reliableMcastDataRateTxFlag;
11664 rateUpdateParams.mcastDataRate24GHzTxFlag =
11665 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11666 rateUpdateParams.mcastDataRate5GHzTxFlag =
11667 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11668
11669 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11670 rateUpdateParams.reliableMcastDataRate =
11671 pRateUpdateParams->reliableMcastDataRate;
11672 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11673 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11674
11675 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11676 rateUpdateParams.pUserData = pWDA;
11677
11678 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11679
11680 if (WDI_STATUS_PENDING == wdiStatus)
11681 {
11682 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11683 "Pending received for %s:%d", __func__, __LINE__ );
11684 }
11685 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11686 {
11687 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11688 "Failure in %s:%d", __func__, __LINE__ );
11689 }
11690
11691 vos_mem_free(pRateUpdateParams);
11692
11693 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11694}
11695
11696/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011697 * -------------------------------------------------------------------------
11698 * DATA interface with WDI for Mgmt Frames
11699 * -------------------------------------------------------------------------
11700 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011701/*
11702 * FUNCTION: WDA_TxComplete
11703 * Callback function for the WDA_TxPacket
11704 */
11705VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11706 VOS_STATUS status )
11707{
11708
11709 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11710 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011711 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011712
11713 if(NULL == wdaContext)
11714 {
11715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11716 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011717 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011718 VOS_ASSERT(0);
11719 return VOS_STATUS_E_FAILURE;
11720 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011721
11722 /*Check if frame was timed out or not*/
11723 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11724 (v_PVOID_t)&uUserData);
11725
11726 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11727 {
11728 /*Discard frame - no further processing is needed*/
11729 vos_pkt_return_packet(pData);
11730 return VOS_STATUS_SUCCESS;
11731 }
11732
Jeff Johnson295189b2012-06-20 16:38:30 -070011733 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11734 if( NULL!=wdaContext->pTxCbFunc)
11735 {
11736 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011737 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011738 {
11739 wdaContext->pTxCbFunc(pMac, pData);
11740 }
11741 else
11742 {
11743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011744 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011745 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011746 //Return from here since we reaching here because the packet already timeout
11747 return status;
11748 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011749 }
11750
11751 /*
11752 * Trigger the event to bring the HAL TL Tx complete function to come
11753 * out of wait
11754 * Let the coe above to complete the packet first. When this event is set,
11755 * the thread waiting for the event may run and set Vospacket_freed causing the original
11756 * packet not being freed.
11757 */
11758 status = vos_event_set(&wdaContext->txFrameEvent);
11759 if(!VOS_IS_STATUS_SUCCESS(status))
11760 {
11761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011762 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011763 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011764 return status;
11765}
Jeff Johnson295189b2012-06-20 16:38:30 -070011766/*
11767 * FUNCTION: WDA_TxPacket
11768 * Forward TX management frame to WDI
11769 */
11770VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11771 void *pFrmBuf,
11772 tANI_U16 frmLen,
11773 eFrameType frmType,
11774 eFrameTxDir txDir,
11775 tANI_U8 tid,
11776 pWDATxRxCompFunc pCompFunc,
11777 void *pData,
11778 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011779 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011780{
11781 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11782 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11783 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11784 tANI_U8 eventIdx = 0;
11785 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11786 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011787 if((NULL == pWDA)||(NULL == pFrmBuf))
11788 {
11789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011790 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011791 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011792 VOS_ASSERT(0);
11793 return VOS_STATUS_E_FAILURE;
11794 }
11795
11796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011797 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011798 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11799 if(NULL == pMac)
11800 {
11801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011802 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011803 VOS_ASSERT(0);
11804 return VOS_STATUS_E_FAILURE;
11805 }
11806
11807
11808
11809 /* store the call back function in WDA context */
11810 pWDA->pTxCbFunc = pCompFunc;
11811 /* store the call back for the function of ackTxComplete */
11812 if( pAckTxComp )
11813 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011814 if( NULL != pWDA->pAckTxCbFunc )
11815 {
11816 /* Already TxComp is active no need to active again */
11817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011818 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011819 pWDA->pAckTxCbFunc( pMac, 0);
11820 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011821
Jeff Johnsone7245742012-09-05 17:12:55 -070011822 if( VOS_STATUS_SUCCESS !=
11823 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11824 {
11825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11826 "Tx Complete timeout Timer Stop Failed ");
11827 }
11828 else
11829 {
11830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011831 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011832 }
11833 }
11834
11835 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11836 pWDA->pAckTxCbFunc = pAckTxComp;
11837 if( VOS_STATUS_SUCCESS !=
11838 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11839 {
11840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11841 "Tx Complete Timer Start Failed ");
11842 pWDA->pAckTxCbFunc = NULL;
11843 return eHAL_STATUS_FAILURE;
11844 }
11845 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011846 /* Reset the event to be not signalled */
11847 status = vos_event_reset(&pWDA->txFrameEvent);
11848 if(!VOS_IS_STATUS_SUCCESS(status))
11849 {
11850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011851 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011852 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11853 if( pAckTxComp )
11854 {
11855 pWDA->pAckTxCbFunc = NULL;
11856 if( VOS_STATUS_SUCCESS !=
11857 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11858 {
11859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11860 "Tx Complete timeout Timer Stop Failed ");
11861 }
11862 }
11863 return VOS_STATUS_E_FAILURE;
11864 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011865
11866 /* If Peer Sta mask is set don't overwrite to self sta */
11867 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011868 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011869 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011870 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011871 else
11872 {
Ganesh K08bce952012-12-13 15:04:41 -080011873 /* Get system role, use the self station if in unknown role or STA role */
11874 systemRole = wdaGetGlobalSystemRole(pMac);
11875 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11876 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080011877#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011878 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011879#endif
Ganesh K08bce952012-12-13 15:04:41 -080011880 ))
11881 {
11882 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11883 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011884 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011885
Jeff Johnsone7245742012-09-05 17:12:55 -070011886 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11887 disassoc frame reaches the HW, HAL has already deleted the peer station */
11888 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011889 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011890 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011891 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011892 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011893 /*Send Probe request frames on self sta idx*/
11894 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011895 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011896 /* Since we donot want probe responses to be retried, send probe responses
11897 through the NO_ACK queues */
11898 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11899 {
11900 //probe response is sent out using self station and no retries options.
11901 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11902 }
11903 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11904 {
11905 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11906 }
11907 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011908 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011909
11910 /*Set frame tag to 0
11911 We will use the WDA user data in order to tag a frame as expired*/
11912 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11913 (v_PVOID_t)0);
11914
11915
11916 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11917 frmLen, ucTypeSubType, tid,
11918 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11919 {
11920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011921 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011922 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011923 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011924 if( pAckTxComp )
11925 {
11926 pWDA->pAckTxCbFunc = NULL;
11927 if( VOS_STATUS_SUCCESS !=
11928 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11929 {
11930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11931 "Tx Complete timeout Timer Stop Failed ");
11932 }
11933 }
11934 return VOS_STATUS_E_FAILURE;
11935 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 /*
11937 * Wait for the event to be set by the TL, to get the response of TX
11938 * complete, this event should be set by the Callback function called by TL
11939 */
11940 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11941 &eventIdx);
11942 if(!VOS_IS_STATUS_SUCCESS(status))
11943 {
11944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11945 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011946 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011947 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11948 after the packet gets completed(packet freed once)*/
11949
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011950 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Mihir Shete40a55652014-03-02 14:14:47 +053011951 WDA_TransportChannelDebug(pMac, 1, WPAL_DEBUG_TX_DESC_RESYNC);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011952
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011953 /*Tag Frame as timed out for later deletion*/
11954 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11955 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11956
Jeff Johnson295189b2012-06-20 16:38:30 -070011957 /* check whether the packet was freed already,so need not free again when
11958 * TL calls the WDA_Txcomplete routine
11959 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011960 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
11961 /*if(vos_atomic_set(uintptr_t *)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -070011962 {
11963 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011964 } */
11965
Jeff Johnson295189b2012-06-20 16:38:30 -070011966 if( pAckTxComp )
11967 {
11968 pWDA->pAckTxCbFunc = NULL;
11969 if( VOS_STATUS_SUCCESS !=
11970 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11971 {
11972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11973 "Tx Complete timeout Timer Stop Failed ");
11974 }
11975 }
11976 status = VOS_STATUS_E_FAILURE;
11977 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011978#ifdef WLAN_DUMP_MGMTFRAMES
11979 if (VOS_IS_STATUS_SUCCESS(status))
11980 {
11981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11982 "%s() TX packet : SubType %d", __func__,pFc->subType);
11983 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11984 pData, frmLen);
11985 }
11986#endif
11987
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080011988 if (VOS_IS_STATUS_SUCCESS(status))
11989 {
11990 if (pMac->fEnableDebugLog & 0x1)
11991 {
11992 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
11993 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
11994 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
11995 {
11996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
11997 pFc->type, pFc->subType);
11998 }
11999 }
12000 }
12001
12002
Jeff Johnson295189b2012-06-20 16:38:30 -070012003 return status;
12004}
Jeff Johnson295189b2012-06-20 16:38:30 -070012005/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012006 * FUNCTION: WDA_ProcessDHCPStartInd
12007 * Forward DHCP Start to WDI
12008 */
12009static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12010 tAniDHCPInd *dhcpStartInd)
12011{
12012 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012013 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012014
c_hpothu0b0cab72014-02-13 21:52:40 +053012015 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12016 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012017 sizeof(tSirMacAddr));
12018
c_hpothu0b0cab72014-02-13 21:52:40 +053012019 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012020
c_hpothu0b0cab72014-02-13 21:52:40 +053012021 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012022 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12024 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012025 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012026 else if (WDI_STATUS_SUCCESS_SYNC != status)
12027 {
12028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12029 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12030 }
12031
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012032 vos_mem_free(dhcpStartInd);
12033 return CONVERT_WDI2VOS_STATUS(status) ;
12034}
12035
12036 /*
12037 * FUNCTION: WDA_ProcessDHCPStopInd
12038 * Forward DHCP Stop to WDI
12039 */
12040 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12041 tAniDHCPInd *dhcpStopInd)
12042 {
12043 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012044 WDI_DHCPInd wdiDHCPInd;
12045
12046 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12047 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12048
12049 status = WDI_dhcpStopInd(&wdiDHCPInd);
12050
12051 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012052 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12054 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012055 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012056 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012057 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12059 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012060 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012061
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012062 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012063
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012064 return CONVERT_WDI2VOS_STATUS(status) ;
12065 }
12066
12067/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012068 * FUNCTION: WDA_McProcessMsg
12069 * Trigger DAL-AL to start CFG download
12070 */
12071VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12072{
12073 VOS_STATUS status = VOS_STATUS_SUCCESS;
12074 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012075 if(NULL == pMsg)
12076 {
12077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012078 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012079 VOS_ASSERT(0);
12080 return VOS_STATUS_E_FAILURE;
12081 }
12082
12083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012084 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012085
12086 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12087 if(NULL == pWDA )
12088 {
12089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012090 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012091 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012092 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 return VOS_STATUS_E_FAILURE;
12094 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012095 /* Process all the WDA messages.. */
12096 switch( pMsg->type )
12097 {
12098 case WNI_CFG_DNLD_REQ:
12099 {
12100 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012101 /* call WDA complete event if config download success */
12102 if( VOS_IS_STATUS_SUCCESS(status) )
12103 {
12104 vos_WDAComplete_cback(pVosContext);
12105 }
12106 else
12107 {
12108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12109 "WDA Config Download failure" );
12110 }
12111 break ;
12112 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012113 /*
12114 * Init SCAN request from PE, convert it into DAL format
12115 * and send it to DAL
12116 */
12117 case WDA_INIT_SCAN_REQ:
12118 {
12119 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12120 break ;
12121 }
12122 /* start SCAN request from PE */
12123 case WDA_START_SCAN_REQ:
12124 {
12125 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12126 break ;
12127 }
12128 /* end SCAN request from PE */
12129 case WDA_END_SCAN_REQ:
12130 {
12131 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12132 break ;
12133 }
12134 /* end SCAN request from PE */
12135 case WDA_FINISH_SCAN_REQ:
12136 {
12137 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12138 break ;
12139 }
12140 /* join request from PE */
12141 case WDA_CHNL_SWITCH_REQ:
12142 {
12143 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12144 {
12145 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12146 }
12147 else
12148 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012149 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12150 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12151 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12152 {
12153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12154 "call ProcessChannelSwitchReq_V1" );
12155 WDA_ProcessChannelSwitchReq_V1(pWDA,
12156 (tSwitchChannelParams*)pMsg->bodyptr) ;
12157 }
12158 else
12159 {
12160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12161 "call ProcessChannelSwitchReq" );
12162 WDA_ProcessChannelSwitchReq(pWDA,
12163 (tSwitchChannelParams*)pMsg->bodyptr) ;
12164 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012165 }
12166 break ;
12167 }
12168 /* ADD BSS request from PE */
12169 case WDA_ADD_BSS_REQ:
12170 {
12171 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12172 break ;
12173 }
12174 case WDA_ADD_STA_REQ:
12175 {
12176 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12177 break ;
12178 }
12179 case WDA_DELETE_BSS_REQ:
12180 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012181 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12182 break ;
12183 }
12184 case WDA_DELETE_STA_REQ:
12185 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012186 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12187 break ;
12188 }
12189 case WDA_CONFIG_PARAM_UPDATE_REQ:
12190 {
12191 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12192 break ;
12193 }
12194 case WDA_SET_BSSKEY_REQ:
12195 {
12196 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12197 break ;
12198 }
12199 case WDA_SET_STAKEY_REQ:
12200 {
12201 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12202 break ;
12203 }
12204 case WDA_SET_STA_BCASTKEY_REQ:
12205 {
12206 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12207 break ;
12208 }
12209 case WDA_REMOVE_BSSKEY_REQ:
12210 {
12211 WDA_ProcessRemoveBssKeyReq(pWDA,
12212 (tRemoveBssKeyParams *)pMsg->bodyptr);
12213 break ;
12214 }
12215 case WDA_REMOVE_STAKEY_REQ:
12216 {
12217 WDA_ProcessRemoveStaKeyReq(pWDA,
12218 (tRemoveStaKeyParams *)pMsg->bodyptr);
12219 break ;
12220 }
12221 case WDA_REMOVE_STA_BCASTKEY_REQ:
12222 {
12223 /* TODO: currently UMAC is not sending this request, Add the code for
12224 handling this request when UMAC supports */
12225 break;
12226 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012227#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012228 case WDA_TSM_STATS_REQ:
12229 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012230 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012231 break;
12232 }
12233#endif
12234 case WDA_UPDATE_EDCA_PROFILE_IND:
12235 {
12236 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12237 break;
12238 }
12239 case WDA_ADD_TS_REQ:
12240 {
12241 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12242 break;
12243 }
12244 case WDA_DEL_TS_REQ:
12245 {
12246 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12247 break;
12248 }
12249 case WDA_ADDBA_REQ:
12250 {
12251 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12252 break;
12253 }
12254 case WDA_DELBA_IND:
12255 {
12256 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12257 break;
12258 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012259 case WDA_UPDATE_CHAN_LIST_REQ:
12260 {
12261 WDA_ProcessUpdateChannelList(pWDA,
12262 (tSirUpdateChanList *)pMsg->bodyptr);
12263 break;
12264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012265 case WDA_SET_LINK_STATE:
12266 {
12267 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12268 break;
12269 }
12270 case WDA_GET_STATISTICS_REQ:
12271 {
12272 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12273 break;
12274 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012275#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012276 case WDA_GET_ROAM_RSSI_REQ:
12277 {
12278 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12279 break;
12280 }
12281#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012282 case WDA_PWR_SAVE_CFG:
12283 {
12284 if(pWDA->wdaState == WDA_READY_STATE)
12285 {
12286 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12287 }
12288 else
12289 {
12290 if(NULL != pMsg->bodyptr)
12291 {
12292 vos_mem_free(pMsg->bodyptr);
12293 }
12294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12295 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12296 }
12297 break;
12298 }
12299 case WDA_ENTER_IMPS_REQ:
12300 {
12301 if(pWDA->wdaState == WDA_READY_STATE)
12302 {
12303 WDA_ProcessEnterImpsReq(pWDA);
12304 }
12305 else
12306 {
12307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12308 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12309 }
12310 break;
12311 }
12312 case WDA_EXIT_IMPS_REQ:
12313 {
12314 if(pWDA->wdaState == WDA_READY_STATE)
12315 {
12316 WDA_ProcessExitImpsReq(pWDA);
12317 }
12318 else
12319 {
12320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12321 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12322 }
12323 break;
12324 }
12325 case WDA_ENTER_BMPS_REQ:
12326 {
12327 if(pWDA->wdaState == WDA_READY_STATE)
12328 {
12329 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12330 }
12331 else
12332 {
12333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12334 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12335 }
12336 break;
12337 }
12338 case WDA_EXIT_BMPS_REQ:
12339 {
12340 if(pWDA->wdaState == WDA_READY_STATE)
12341 {
12342 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12343 }
12344 else
12345 {
12346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12347 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12348 }
12349 break;
12350 }
12351 case WDA_ENTER_UAPSD_REQ:
12352 {
12353 if(pWDA->wdaState == WDA_READY_STATE)
12354 {
12355 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12356 }
12357 else
12358 {
12359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12360 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12361 }
12362 break;
12363 }
12364 case WDA_EXIT_UAPSD_REQ:
12365 {
12366 if(pWDA->wdaState == WDA_READY_STATE)
12367 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012368 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012369 }
12370 else
12371 {
12372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12373 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12374 }
12375 break;
12376 }
12377 case WDA_UPDATE_UAPSD_IND:
12378 {
12379 if(pWDA->wdaState == WDA_READY_STATE)
12380 {
12381 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12382 }
12383 else
12384 {
12385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12386 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12387 }
12388 break;
12389 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012390 case WDA_REGISTER_PE_CALLBACK :
12391 {
12392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12393 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12394 /*TODO: store the PE callback */
12395 /* Do Nothing? MSG Body should be freed at here */
12396 if(NULL != pMsg->bodyptr)
12397 {
12398 vos_mem_free(pMsg->bodyptr);
12399 }
12400 break;
12401 }
12402 case WDA_SYS_READY_IND :
12403 {
12404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12405 "Handling msg type WDA_SYS_READY_IND " );
12406 pWDA->wdaState = WDA_READY_STATE;
12407 if(NULL != pMsg->bodyptr)
12408 {
12409 vos_mem_free(pMsg->bodyptr);
12410 }
12411 break;
12412 }
12413 case WDA_BEACON_FILTER_IND :
12414 {
12415 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12416 break;
12417 }
12418 case WDA_BTC_SET_CFG:
12419 {
12420 /*TODO: handle this while dealing with BTC */
12421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12422 "Handling msg type WDA_BTC_SET_CFG " );
12423 /* Do Nothing? MSG Body should be freed at here */
12424 if(NULL != pMsg->bodyptr)
12425 {
12426 vos_mem_free(pMsg->bodyptr);
12427 }
12428 break;
12429 }
12430 case WDA_SIGNAL_BT_EVENT:
12431 {
12432 /*TODO: handle this while dealing with BTC */
12433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12434 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12435 /* Do Nothing? MSG Body should be freed at here */
12436 if(NULL != pMsg->bodyptr)
12437 {
12438 vos_mem_free(pMsg->bodyptr);
12439 }
12440 break;
12441 }
12442 case WDA_CFG_RXP_FILTER_REQ:
12443 {
12444 WDA_ProcessConfigureRxpFilterReq(pWDA,
12445 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12446 break;
12447 }
12448 case WDA_SET_HOST_OFFLOAD:
12449 {
12450 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12451 break;
12452 }
12453 case WDA_SET_KEEP_ALIVE:
12454 {
12455 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12456 break;
12457 }
12458#ifdef WLAN_NS_OFFLOAD
12459 case WDA_SET_NS_OFFLOAD:
12460 {
12461 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12462 break;
12463 }
12464#endif //WLAN_NS_OFFLOAD
12465 case WDA_ADD_STA_SELF_REQ:
12466 {
12467 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12468 break;
12469 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012470 case WDA_DEL_STA_SELF_REQ:
12471 {
12472 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12473 break;
12474 }
12475 case WDA_WOWL_ADD_BCAST_PTRN:
12476 {
12477 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12478 break;
12479 }
12480 case WDA_WOWL_DEL_BCAST_PTRN:
12481 {
12482 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12483 break;
12484 }
12485 case WDA_WOWL_ENTER_REQ:
12486 {
12487 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12488 break;
12489 }
12490 case WDA_WOWL_EXIT_REQ:
12491 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012492 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012493 break;
12494 }
12495 case WDA_TL_FLUSH_AC_REQ:
12496 {
12497 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12498 break;
12499 }
12500 case WDA_SIGNAL_BTAMP_EVENT:
12501 {
12502 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12503 break;
12504 }
12505#ifdef WDA_UT
12506 case WDA_WDI_EVENT_MSG:
12507 {
12508 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12509 break ;
12510 }
12511#endif
12512 case WDA_UPDATE_BEACON_IND:
12513 {
12514 WDA_ProcessUpdateBeaconParams(pWDA,
12515 (tUpdateBeaconParams *)pMsg->bodyptr);
12516 break;
12517 }
12518 case WDA_SEND_BEACON_REQ:
12519 {
12520 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12521 break;
12522 }
12523 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12524 {
12525 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12526 (tSendProbeRespParams *)pMsg->bodyptr);
12527 break;
12528 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012529#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070012530 case WDA_SET_MAX_TX_POWER_REQ:
12531 {
12532 WDA_ProcessSetMaxTxPowerReq(pWDA,
12533 (tMaxTxPowerParams *)pMsg->bodyptr);
12534 break;
12535 }
12536#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012537 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12538 {
12539 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12540 pMsg->bodyptr);
12541 break;
12542 }
schang86c22c42013-03-13 18:41:24 -070012543 case WDA_SET_TX_POWER_REQ:
12544 {
12545 WDA_ProcessSetTxPowerReq(pWDA,
12546 (tSirSetTxPowerReq *)pMsg->bodyptr);
12547 break;
12548 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012549 case WDA_SET_P2P_GO_NOA_REQ:
12550 {
12551 WDA_ProcessSetP2PGONOAReq(pWDA,
12552 (tP2pPsParams *)pMsg->bodyptr);
12553 break;
12554 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012555 /* timer related messages */
12556 case WDA_TIMER_BA_ACTIVITY_REQ:
12557 {
12558 WDA_BaCheckActivity(pWDA) ;
12559 break ;
12560 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012561
12562 /* timer related messages */
12563 case WDA_TIMER_TRAFFIC_STATS_IND:
12564 {
12565 WDA_TimerTrafficStatsInd(pWDA);
12566 break;
12567 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012568#ifdef WLAN_FEATURE_VOWIFI_11R
12569 case WDA_AGGR_QOS_REQ:
12570 {
12571 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12572 break;
12573 }
12574#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012575 case WDA_FTM_CMD_REQ:
12576 {
12577 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12578 break ;
12579 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012580#ifdef FEATURE_OEM_DATA_SUPPORT
12581 case WDA_START_OEM_DATA_REQ:
12582 {
12583 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12584 break;
12585 }
12586#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012587 /* Tx Complete Time out Indication */
12588 case WDA_TX_COMPLETE_TIMEOUT_IND:
12589 {
12590 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12591 break;
12592 }
12593 case WDA_WLAN_SUSPEND_IND:
12594 {
12595 WDA_ProcessWlanSuspendInd(pWDA,
12596 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12597 break;
12598 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012599 case WDA_WLAN_RESUME_REQ:
12600 {
12601 WDA_ProcessWlanResumeReq(pWDA,
12602 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12603 break;
12604 }
12605
12606 case WDA_UPDATE_CF_IND:
12607 {
12608 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12609 pMsg->bodyptr = NULL;
12610 break;
12611 }
12612#ifdef FEATURE_WLAN_SCAN_PNO
12613 case WDA_SET_PNO_REQ:
12614 {
12615 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12616 break;
12617 }
12618 case WDA_UPDATE_SCAN_PARAMS_REQ:
12619 {
12620 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12621 break;
12622 }
12623 case WDA_SET_RSSI_FILTER_REQ:
12624 {
12625 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12626 break;
12627 }
12628#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012629#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012630 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012631 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012632 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012633 break;
12634 }
12635#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012636 case WDA_SET_TX_PER_TRACKING_REQ:
12637 {
12638 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12639 break;
12640 }
12641
12642#ifdef WLAN_FEATURE_PACKET_FILTERING
12643 case WDA_8023_MULTICAST_LIST_REQ:
12644 {
12645 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12646 break;
12647 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012648 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12649 {
12650 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12651 break;
12652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012653 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12654 {
12655 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12656 break;
12657 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012658 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12659 {
12660 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12661 break;
12662 }
12663#endif // WLAN_FEATURE_PACKET_FILTERING
12664
12665
12666 case WDA_TRANSMISSION_CONTROL_IND:
12667 {
12668 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12669 break;
12670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012671 case WDA_SET_POWER_PARAMS_REQ:
12672 {
12673 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12674 break;
12675 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012676#ifdef WLAN_FEATURE_GTK_OFFLOAD
12677 case WDA_GTK_OFFLOAD_REQ:
12678 {
12679 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12680 break;
12681 }
12682
12683 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12684 {
12685 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12686 break;
12687 }
12688#endif //WLAN_FEATURE_GTK_OFFLOAD
12689
12690 case WDA_SET_TM_LEVEL_REQ:
12691 {
12692 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12693 break;
12694 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012695
Mohit Khanna4a70d262012-09-11 16:30:12 -070012696 case WDA_UPDATE_OP_MODE:
12697 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012698 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12699 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12700 {
12701 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12702 }
12703 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012704 {
12705 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12706 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12707 else
12708 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012709 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012710 }
12711 else
12712 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012713 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012714 break;
12715 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012716#ifdef WLAN_FEATURE_11W
12717 case WDA_EXCLUDE_UNENCRYPTED_IND:
12718 {
12719 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12720 break;
12721 }
12722#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012723#ifdef FEATURE_WLAN_TDLS
12724 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12725 {
12726 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12727 break;
12728 }
12729#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012730 case WDA_DHCP_START_IND:
12731 {
12732 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12733 break;
12734 }
12735 case WDA_DHCP_STOP_IND:
12736 {
12737 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12738 break;
12739 }
Leo Chang9056f462013-08-01 19:21:11 -070012740#ifdef FEATURE_WLAN_LPHB
12741 case WDA_LPHB_CONF_REQ:
12742 {
12743 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12744 break;
12745 }
12746#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012747 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12748 {
12749 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12750 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12751 break;
12752 }
12753 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12754 {
12755 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12756 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12757 break;
12758 }
12759
Rajeev79dbe4c2013-10-05 11:03:42 +053012760#ifdef FEATURE_WLAN_BATCH_SCAN
12761 case WDA_SET_BATCH_SCAN_REQ:
12762 {
12763 WDA_ProcessSetBatchScanReq(pWDA,
12764 (tSirSetBatchScanReq *)pMsg->bodyptr);
12765 break;
12766 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012767 case WDA_RATE_UPDATE_IND:
12768 {
12769 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12770 break;
12771 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012772 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12773 {
12774 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12775 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12776 break;
12777 }
12778 case WDA_STOP_BATCH_SCAN_IND:
12779 {
12780 WDA_ProcessStopBatchScanInd(pWDA,
12781 (tSirStopBatchScanInd *)pMsg->bodyptr);
12782 break;
12783 }
12784#endif
12785
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012786 case WDA_HT40_OBSS_SCAN_IND:
12787 {
12788 WDA_ProcessHT40OBSSScanInd(pWDA,
12789 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12790 break;
12791 }
12792 case WDA_HT40_OBSS_STOP_SCAN_IND:
12793 {
12794 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12795 (tANI_U8*)pMsg->bodyptr);
12796 break;
12797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012798 default:
12799 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053012800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070012801 "No Handling for msg type %x in WDA "
12802 ,pMsg->type);
12803 /* Do Nothing? MSG Body should be freed at here */
12804 if(NULL != pMsg->bodyptr)
12805 {
12806 vos_mem_free(pMsg->bodyptr);
12807 }
12808 //WDA_VOS_ASSERT(0) ;
12809 }
12810 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012811 return status ;
12812}
12813
Jeff Johnson295189b2012-06-20 16:38:30 -070012814/*
12815 * FUNCTION: WDA_LowLevelIndCallback
12816 * IND API callback from WDI, send Ind to PE
12817 */
12818void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12819 void* pUserData )
12820{
12821 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12822#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12823 tSirRSSINotification rssiNotification;
12824#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012825 if(NULL == pWDA)
12826 {
12827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012828 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012829 VOS_ASSERT(0);
12830 return ;
12831 }
12832
12833 switch(wdiLowLevelInd->wdiIndicationType)
12834 {
12835 case WDI_RSSI_NOTIFICATION_IND:
12836 {
12837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12838 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012839#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12840 rssiNotification.bReserved =
12841 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12842 rssiNotification.bRssiThres1NegCross =
12843 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12844 rssiNotification.bRssiThres1PosCross =
12845 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12846 rssiNotification.bRssiThres2NegCross =
12847 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12848 rssiNotification.bRssiThres2PosCross =
12849 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12850 rssiNotification.bRssiThres3NegCross =
12851 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12852 rssiNotification.bRssiThres3PosCross =
12853 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012854 rssiNotification.avgRssi = (v_S7_t)
12855 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 WLANTL_BMPSRSSIRegionChangedNotification(
12857 pWDA->pVosContext,
12858 &rssiNotification);
12859#endif
12860 break ;
12861 }
12862 case WDI_MISSED_BEACON_IND:
12863 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012864 tpSirSmeMissedBeaconInd pMissBeacInd =
12865 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12867 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012868 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012869 if(NULL == pMissBeacInd)
12870 {
12871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12872 "%s: VOS MEM Alloc Failure", __func__);
12873 break;
12874 }
12875 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12876 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12877 pMissBeacInd->bssIdx =
12878 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12879 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012880 break ;
12881 }
12882 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12883 {
12884 /* TODO: Decode Ind and send Ind to PE */
12885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12886 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12887 break ;
12888 }
12889
12890 case WDI_MIC_FAILURE_IND:
12891 {
12892 tpSirSmeMicFailureInd pMicInd =
12893 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12894
12895 if(NULL == pMicInd)
12896 {
12897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012898 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012899 break;
12900 }
12901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12902 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012903 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12904 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12905 vos_mem_copy(pMicInd->bssId,
12906 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12907 sizeof(tSirMacAddr));
12908 vos_mem_copy(pMicInd->info.srcMacAddr,
12909 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12910 sizeof(tSirMacAddr));
12911 vos_mem_copy(pMicInd->info.taMacAddr,
12912 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12913 sizeof(tSirMacAddr));
12914 vos_mem_copy(pMicInd->info.dstMacAddr,
12915 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12916 sizeof(tSirMacAddr));
12917 vos_mem_copy(pMicInd->info.rxMacAddr,
12918 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12919 sizeof(tSirMacAddr));
12920 pMicInd->info.multicast =
12921 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12922 pMicInd->info.keyId=
12923 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12924 pMicInd->info.IV1=
12925 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12926 vos_mem_copy(pMicInd->info.TSC,
12927 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012928 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12929 (void *)pMicInd , 0) ;
12930 break ;
12931 }
12932 case WDI_FATAL_ERROR_IND:
12933 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012934 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012935 /* TODO: Decode Ind and send Ind to PE */
12936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12937 "Received WDI_FATAL_ERROR_IND from WDI ");
12938 break ;
12939 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012940 case WDI_DEL_STA_IND:
12941 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012942 tpDeleteStaContext pDelSTACtx =
12943 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12944
12945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12946 "Received WDI_DEL_STA_IND from WDI ");
12947 if(NULL == pDelSTACtx)
12948 {
12949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012951 break;
12952 }
12953 vos_mem_copy(pDelSTACtx->addr2,
12954 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12955 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012956 vos_mem_copy(pDelSTACtx->bssId,
12957 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12958 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012959 pDelSTACtx->assocId =
12960 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12961 pDelSTACtx->reasonCode =
12962 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12963 pDelSTACtx->staId =
12964 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012965 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12966 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012967 break ;
12968 }
12969 case WDI_COEX_IND:
12970 {
12971 tANI_U32 index;
12972 vos_msg_t vosMsg;
12973 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12974 if(NULL == pSmeCoexInd)
12975 {
12976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012977 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012978 break;
12979 }
12980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12981 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012982 /* Message Header */
12983 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12984 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012985 /* Info from WDI Indication */
12986 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12987 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12988 {
12989 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12990 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012991 /* VOS message wrapper */
12992 vosMsg.type = eWNI_SME_COEX_IND;
12993 vosMsg.bodyptr = (void *)pSmeCoexInd;
12994 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012995 /* Send message to SME */
12996 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12997 {
12998 /* free the mem and return */
12999 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13000 }
13001 else
13002 {
13003 /* DEBUG */
13004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13005 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13006 pSmeCoexInd->coexIndType,
13007 pSmeCoexInd->coexIndData[0],
13008 pSmeCoexInd->coexIndData[1],
13009 pSmeCoexInd->coexIndData[2],
13010 pSmeCoexInd->coexIndData[3]);
13011 }
13012 break;
13013 }
13014 case WDI_TX_COMPLETE_IND:
13015 {
13016 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13017 /* Calling TxCompleteAck Indication from wda context*/
13018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13019 "Complete Indication received from HAL");
13020 if( pWDA->pAckTxCbFunc )
13021 {
13022 if( VOS_STATUS_SUCCESS !=
13023 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13024 {
13025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13026 "Tx Complete timeout Timer Stop Failed ");
13027 }
13028 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13029 pWDA->pAckTxCbFunc = NULL;
13030 }
13031 else
13032 {
13033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13034 "Tx Complete Indication is received after timeout ");
13035 }
13036 break;
13037 }
Viral Modid86bde22012-12-10 13:09:21 -080013038 case WDI_P2P_NOA_START_IND :
13039 {
13040 tSirP2PNoaStart *pP2pNoaStart =
13041 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13042
13043 if (NULL == pP2pNoaStart)
13044 {
13045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13046 "Memory allocation failure, "
13047 "WDI_P2P_NOA_START_IND not forwarded");
13048 break;
13049 }
13050 pP2pNoaStart->status =
13051 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13052 pP2pNoaStart->bssIdx =
13053 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13054 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13055 (void *)pP2pNoaStart , 0) ;
13056 break;
13057 }
13058
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013059#ifdef FEATURE_WLAN_TDLS
13060 case WDI_TDLS_IND :
13061 {
13062 tSirTdlsInd *pTdlsInd =
13063 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13064
13065 if (NULL == pTdlsInd)
13066 {
13067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13068 "Memory allocation failure, "
13069 "WDI_TDLS_IND not forwarded");
13070 break;
13071 }
13072 pTdlsInd->status =
13073 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13074 pTdlsInd->assocId =
13075 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13076 pTdlsInd->staIdx =
13077 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13078 pTdlsInd->reasonCode =
13079 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13080 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13081 (void *)pTdlsInd , 0) ;
13082 break;
13083 }
13084#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013085 case WDI_P2P_NOA_ATTR_IND :
13086 {
13087 tSirP2PNoaAttr *pP2pNoaAttr =
13088 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13090 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013091 if (NULL == pP2pNoaAttr)
13092 {
13093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13094 "Memory allocation failure, "
13095 "WDI_P2P_NOA_ATTR_IND not forwarded");
13096 break;
13097 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013098 pP2pNoaAttr->index =
13099 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13100 pP2pNoaAttr->oppPsFlag =
13101 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13102 pP2pNoaAttr->ctWin =
13103 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13104
13105 pP2pNoaAttr->uNoa1IntervalCnt =
13106 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13107 pP2pNoaAttr->uNoa1Duration =
13108 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13109 pP2pNoaAttr->uNoa1Interval =
13110 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13111 pP2pNoaAttr->uNoa1StartTime =
13112 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013113 pP2pNoaAttr->uNoa2IntervalCnt =
13114 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13115 pP2pNoaAttr->uNoa2Duration =
13116 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13117 pP2pNoaAttr->uNoa2Interval =
13118 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13119 pP2pNoaAttr->uNoa2StartTime =
13120 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013121 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13122 (void *)pP2pNoaAttr , 0) ;
13123 break;
13124 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013125#ifdef FEATURE_WLAN_SCAN_PNO
13126 case WDI_PREF_NETWORK_FOUND_IND:
13127 {
13128 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013129 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13130 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13131 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13132 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13133
Jeff Johnson295189b2012-06-20 16:38:30 -070013134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13135 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013136 if (NULL == pPrefNetworkFoundInd)
13137 {
13138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13139 "Memory allocation failure, "
13140 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013141 if (NULL !=
13142 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13143 {
13144 wpalMemoryFree(
13145 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13146 );
13147 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013149 break;
13150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013151 /* Message Header */
13152 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013153 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013154
13155 /* Info from WDI Indication */
13156 pPrefNetworkFoundInd->ssId.length =
13157 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013158 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013159 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13160 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13161 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013162 if (NULL !=
13163 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13164 {
13165 pPrefNetworkFoundInd->frameLength =
13166 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13167 vos_mem_copy( pPrefNetworkFoundInd->data,
13168 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13169 pPrefNetworkFoundInd->frameLength);
13170 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13171 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13172 }
13173 else
13174 {
13175 pPrefNetworkFoundInd->frameLength = 0;
13176 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013177 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013178 /* VOS message wrapper */
13179 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13180 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13181 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 /* Send message to SME */
13183 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13184 {
13185 /* free the mem and return */
13186 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13187 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013188 break;
13189 }
13190#endif // FEATURE_WLAN_SCAN_PNO
13191
13192#ifdef WLAN_WAKEUP_EVENTS
13193 case WDI_WAKE_REASON_IND:
13194 {
13195 vos_msg_t vosMsg;
13196 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13197 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13198 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13199
13200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13201 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
13202 wdiLowLevelInd->wdiIndicationType,
13203 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13204 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13205 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13206
13207 if (NULL == pWakeReasonInd)
13208 {
13209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13210 "Memory allocation failure, "
13211 "WDI_WAKE_REASON_IND not forwarded");
13212 break;
13213 }
13214
13215 vos_mem_zero(pWakeReasonInd, allocSize);
13216
13217 /* Message Header */
13218 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13219 pWakeReasonInd->mesgLen = allocSize;
13220
13221 /* Info from WDI Indication */
13222 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13223 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13224 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13225 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13226 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13227 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13228 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13229 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13230
13231 /* VOS message wrapper */
13232 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13233 vosMsg.bodyptr = (void *) pWakeReasonInd;
13234 vosMsg.bodyval = 0;
13235
13236 /* Send message to SME */
13237 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13238 {
13239 /* free the mem and return */
13240 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13241 }
13242
13243 break;
13244 }
13245#endif // WLAN_WAKEUP_EVENTS
13246
13247 case WDI_TX_PER_HIT_IND:
13248 {
13249 vos_msg_t vosMsg;
13250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13251 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13252 /* VOS message wrapper */
13253 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13254 vosMsg.bodyptr = NULL;
13255 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013256 /* Send message to SME */
13257 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13258 {
13259 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13260 }
13261 break;
13262 }
13263
Leo Chang9056f462013-08-01 19:21:11 -070013264#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013265 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013266 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013267 vos_msg_t vosMsg;
13268 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013269
Leo Changd9df8aa2013-09-26 13:32:26 -070013270 lphbInd =
13271 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13272 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013273 {
13274 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13275 "%s: LPHB IND buffer alloc Fail", __func__);
13276 return ;
13277 }
13278
Leo Changd9df8aa2013-09-26 13:32:26 -070013279 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013280 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013281 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013282 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013283 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013284 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13285
13286 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013287 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013288 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13289
Leo Changd9df8aa2013-09-26 13:32:26 -070013290 vosMsg.type = eWNI_SME_LPHB_IND;
13291 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013292 vosMsg.bodyval = 0;
13293 /* Send message to SME */
13294 if (VOS_STATUS_SUCCESS !=
13295 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13296 {
13297 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13298 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013299 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013300 }
13301 break;
13302 }
13303#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013304 case WDI_PERIODIC_TX_PTRN_FW_IND:
13305 {
13306 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13307 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13308 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13309 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13310 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13311 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13312 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13313
13314 break;
13315 }
Leo Chang9056f462013-08-01 19:21:11 -070013316
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013317 case WDI_IBSS_PEER_INACTIVITY_IND:
13318 {
13319 tSirIbssPeerInactivityInd *pIbssInd =
13320 (tSirIbssPeerInactivityInd *)
13321 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13322
13323 if (NULL == pIbssInd)
13324 {
13325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13326 "Memory allocation failure, "
13327 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13328 break;
13329 }
13330
13331 pIbssInd->bssIdx =
13332 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13333 pIbssInd->staIdx =
13334 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13335 vos_mem_copy(pIbssInd->peerAddr,
13336 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13337 sizeof(tSirMacAddr));
13338 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13339 break;
13340 }
13341
Rajeev79dbe4c2013-10-05 11:03:42 +053013342#ifdef FEATURE_WLAN_BATCH_SCAN
13343 case WDI_BATCH_SCAN_RESULT_IND:
13344 {
13345 void *pBatchScanResult;
13346 void *pCallbackContext;
13347 tpAniSirGlobal pMac;
13348
13349 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13350 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13351
13352 /*sanity check*/
13353 if(NULL == pWDA)
13354 {
13355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13356 "%s:pWDA is NULL", __func__);
13357 VOS_ASSERT(0);
13358 return;
13359 }
13360
13361 pBatchScanResult =
13362 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13363 if (NULL == pBatchScanResult)
13364 {
13365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13366 "%s:Batch scan result from FW is null can't invoke HDD callback",
13367 __func__);
13368 VOS_ASSERT(0);
13369 return;
13370 }
13371
13372 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13373 if (NULL == pMac)
13374 {
13375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13376 "%s:pMac is NULL", __func__);
13377 VOS_ASSERT(0);
13378 return;
13379 }
13380
13381 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13382 /*call hdd callback with set batch scan response data*/
13383 if(pMac->pmc.batchScanResultCallback)
13384 {
13385 pMac->pmc.batchScanResultCallback(pCallbackContext,
13386 pBatchScanResult);
13387 }
13388 else
13389 {
13390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13391 "%s:HDD callback is null", __func__);
13392 VOS_ASSERT(0);
13393 }
13394 break;
13395 }
13396#endif
13397
Leo Chang0b0e45a2013-12-15 15:18:55 -080013398#ifdef FEATURE_WLAN_CH_AVOID
13399 case WDI_CH_AVOID_IND:
13400 {
13401 vos_msg_t vosMsg;
13402 tSirChAvoidIndType *chAvoidInd;
13403
13404 chAvoidInd =
13405 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13406 if (NULL == chAvoidInd)
13407 {
13408 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13409 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13410 return ;
13411 }
13412
13413 chAvoidInd->avoidRangeCount =
13414 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13415 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13416 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13417 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13418
13419 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13420 "%s : WDA CH avoid notification", __func__);
13421
13422 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13423 vosMsg.bodyptr = chAvoidInd;
13424 vosMsg.bodyval = 0;
13425 /* Send message to SME */
13426 if (VOS_STATUS_SUCCESS !=
13427 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13428 {
13429 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13430 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13431 vos_mem_free(chAvoidInd);
13432 }
13433 break;
13434 }
13435#endif /* FEATURE_WLAN_CH_AVOID */
13436
Jeff Johnson295189b2012-06-20 16:38:30 -070013437 default:
13438 {
13439 /* TODO error */
13440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13441 "Received UNKNOWN Indication from WDI ");
13442 }
13443 }
13444 return ;
13445}
13446
Jeff Johnson295189b2012-06-20 16:38:30 -070013447/*
13448 * BA related processing in WDA.
13449 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013450void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
13451 void* pUserData)
13452{
13453 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13454 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070013455 if(NULL == pWdaParams)
13456 {
13457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013458 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013459 VOS_ASSERT(0) ;
13460 return ;
13461 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013462 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070013463 vos_mem_free(pWdaParams->wdaMsgParam) ;
13464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13465 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013467 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013468 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
13469 {
13470 tANI_U8 i = 0 ;
13471 tBaActivityInd *baActivityInd = NULL ;
13472 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
13473 tANI_U8 allocSize = sizeof(tBaActivityInd)
13474 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
13475 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
13476 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013477 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013478 if(NULL == baActivityInd)
13479 {
13480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013482 VOS_ASSERT(0) ;
13483 return;
13484 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013485 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13486 sizeof(tSirMacAddr)) ;
13487 baActivityInd->baCandidateCnt = baCandidateCount ;
13488
13489 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13490 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13491
13492 for(i = 0 ; i < baCandidateCount ; i++)
13493 {
13494 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013495 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13496 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013497 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13498 {
13499 baCandidate->baInfo[tid].fBaEnable =
13500 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13501 baCandidate->baInfo[tid].startingSeqNum =
13502 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13503 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013504 wdiBaCandidate++ ;
13505 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013507 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13508 }
13509 else
13510 {
13511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13512 "BA Trigger RSP with Failure received ");
13513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013514 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013515}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013516
13517
13518/*
13519 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13520 * during MCC
13521 */
13522void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13523{
13524 wpt_uint32 enabled;
13525 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13526 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13527 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13528
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013529 if (NULL == pMac )
13530 {
13531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13532 "%s: Invoked with invalid MAC context ", __func__ );
13533 VOS_ASSERT(0);
13534 return;
13535 }
13536
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013537 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13538 != eSIR_SUCCESS)
13539 {
13540 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13541 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13542 return;
13543 }
13544
13545 if(!enabled)
13546 {
13547 return;
13548 }
13549
13550 if(NULL == pWDA)
13551 {
13552 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13553 "%s:WDA context is NULL", __func__);
13554 VOS_ASSERT(0);
13555 return;
13556 }
13557
13558 if(activate)
13559 {
13560 if( VOS_STATUS_SUCCESS !=
13561 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13562 {
13563 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13564 "Traffic Stats Timer Start Failed ");
13565 return;
13566 }
13567 WDI_DS_ActivateTrafficStats();
13568 }
13569 else
13570 {
13571 WDI_DS_DeactivateTrafficStats();
13572 WDI_DS_ClearTrafficStats();
13573
13574 if( VOS_STATUS_SUCCESS !=
13575 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13576 {
13577 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13578 "Traffic Stats Timer Stop Failed ");
13579 return;
13580 }
13581 }
13582}
13583
13584/*
13585 * Traffic Stats Timer handler
13586 */
13587void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13588{
13589 WDI_Status wdiStatus;
13590 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13591 WDI_TrafficStatsIndType trafficStatsIndParams;
13592 wpt_uint32 length, enabled;
13593 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13594
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013595 if (NULL == pMac )
13596 {
13597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13598 "%s: Invoked with invalid MAC context ", __func__ );
13599 VOS_ASSERT(0);
13600 return;
13601 }
13602
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013603 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13604 != eSIR_SUCCESS)
13605 {
13606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13607 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13608 return;
13609 }
13610
13611 if(!enabled)
13612 {
13613 WDI_DS_DeactivateTrafficStats();
13614 return;
13615 }
13616
13617 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13618
13619 if(pWdiTrafficStats != NULL)
13620 {
13621 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13622 trafficStatsIndParams.length = length;
13623 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013624 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013625 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13626 trafficStatsIndParams.pUserData = pWDA;
13627
13628 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13629
13630 if(WDI_STATUS_PENDING == wdiStatus)
13631 {
13632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13633 "Pending received for %s:%d ",__func__,__LINE__ );
13634 }
13635 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13636 {
13637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13638 "Failure in %s:%d ",__func__,__LINE__ );
13639 }
13640
13641 WDI_DS_ClearTrafficStats();
13642 }
13643 else
13644 {
13645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13646 "pWdiTrafficStats is Null");
13647 }
13648
13649 if( VOS_STATUS_SUCCESS !=
13650 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13651 {
13652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13653 "Traffic Stats Timer Start Failed ");
13654 return;
13655 }
13656}
13657
Jeff Johnson295189b2012-06-20 16:38:30 -070013658/*
13659 * BA Activity check timer handler
13660 */
13661void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13662{
13663 tANI_U8 curSta = 0 ;
13664 tANI_U8 tid = 0 ;
13665 tANI_U8 size = 0 ;
13666 tANI_U8 baCandidateCount = 0 ;
13667 tANI_U8 newBaCandidate = 0 ;
13668 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13669
13670 if(NULL == pWDA)
13671 {
13672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013673 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013674 VOS_ASSERT(0);
13675 return ;
13676 }
13677 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13678 {
13679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13680 "Inconsistent STA entries in WDA");
13681 VOS_ASSERT(0) ;
13682 }
13683 /* walk through all STA entries and find out TX packet count */
13684 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13685 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013686#ifdef WLAN_SOFTAP_VSTA_FEATURE
13687 // We can only do BA on "hard" STAs.
13688 if (!(IS_HWSTA_IDX(curSta)))
13689 {
13690 continue;
13691 }
13692#endif //WLAN_SOFTAP_VSTA_FEATURE
13693 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13694 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013695 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013696 tANI_U32 txPktCount = 0 ;
13697 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013698 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013699 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13700 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013701 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13702 curSta, tid, &txPktCount)))
13703 {
13704#if 0
13705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13706 "************* %d:%d, %d ",curSta, txPktCount,
13707 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13708#endif
13709 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013710 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013711 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13712 curSta, tid)))
13713 {
13714 /* get prepare for sending message to HAL */
13715 //baCandidate[baCandidateCount].staIdx = curSta ;
13716 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13717 newBaCandidate = WDA_ENABLE_BA ;
13718 }
13719 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13720 }
13721 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013722 /* fill the entry for all the sta with given TID's */
13723 if(WDA_ENABLE_BA == newBaCandidate)
13724 {
13725 /* move to next BA candidate */
13726 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13727 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13728 baCandidateCount++ ;
13729 newBaCandidate = WDA_DISABLE_BA ;
13730 }
13731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013732 /* prepare and send message to hal */
13733 if( 0 < baCandidateCount)
13734 {
13735 WDI_Status status = WDI_STATUS_SUCCESS ;
13736 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13737 tWDA_ReqParams *pWdaParams =
13738 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013739 if(NULL == pWdaParams)
13740 {
13741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013742 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013743 VOS_ASSERT(0) ;
13744 return;
13745 }
13746 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13747 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13748 if(NULL == wdiTriggerBaReq)
13749 {
13750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013751 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013752 VOS_ASSERT(0) ;
13753 vos_mem_free(pWdaParams);
13754 return;
13755 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013756 do
13757 {
13758 WDI_TriggerBAReqinfoType *triggerBaInfo =
13759 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13760 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13761 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13762 * for each request */
13763 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13764 triggerBaInfo->ucBASessionID = 0;
13765 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13766 } while(0) ;
13767 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013769 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013770 pWdaParams->pWdaContext = pWDA;
13771 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13772 pWdaParams->wdaMsgParam = NULL;
13773 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13774 WDA_TriggerBaReqCallback, pWdaParams) ;
13775 if(IS_WDI_STATUS_FAILURE(status))
13776 {
13777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13778 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13779 vos_mem_free(pWdaParams->wdaMsgParam) ;
13780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13781 vos_mem_free(pWdaParams) ;
13782 }
13783 }
13784 else
13785 {
13786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13787 "There is no TID for initiating BA");
13788 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013789 if( VOS_STATUS_SUCCESS !=
13790 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13791 {
13792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13793 "BA Activity Timer Stop Failed ");
13794 return ;
13795 }
13796 if( VOS_STATUS_SUCCESS !=
13797 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13798 {
13799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13800 "BA Activity Timer Start Failed ");
13801 return;
13802 }
13803 return ;
13804}
Jeff Johnson295189b2012-06-20 16:38:30 -070013805/*
13806 * WDA common routine to create timer used by WDA.
13807 */
13808static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13809{
Jeff Johnson295189b2012-06-20 16:38:30 -070013810 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13811 tANI_U32 val = 0 ;
13812 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13813
13814 if(NULL == pMac)
13815 {
13816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013817 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013818 VOS_ASSERT(0);
13819 return VOS_STATUS_E_FAILURE;
13820 }
13821 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13822 != eSIR_SUCCESS)
13823 {
13824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13825 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13826 return VOS_STATUS_E_FAILURE;
13827 }
13828 val = SYS_MS_TO_TICKS(val) ;
13829
13830 /* BA activity check timer */
13831 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13832 "BA Activity Check timer", WDA_TimerHandler,
13833 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13834 if(status != TX_SUCCESS)
13835 {
13836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13837 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013838 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013839 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013840 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013841 /* Tx Complete Timeout timer */
13842 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13843 "Tx Complete Check timer", WDA_TimerHandler,
13844 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013845 if(status != TX_SUCCESS)
13846 {
13847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13848 "Unable to create Tx Complete Timeout timer");
13849 /* Destroy timer of BA activity check timer */
13850 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13851 if(status != TX_SUCCESS)
13852 {
13853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13854 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013855 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013856 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013857 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013858 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013859
13860 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13861
13862 /* Traffic Stats timer */
13863 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13864 "Traffic Stats timer", WDA_TimerHandler,
13865 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13866 if(status != TX_SUCCESS)
13867 {
13868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13869 "Unable to create traffic stats timer");
13870 /* Destroy timer of BA activity check timer */
13871 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13872 if(status != TX_SUCCESS)
13873 {
13874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13875 "Unable to Destroy BA activity timer");
13876 }
13877 /* Destroy timer of tx complete timer */
13878 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13879 if(status != TX_SUCCESS)
13880 {
13881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13882 "Unable to Tx complete timer");
13883 }
13884 return VOS_STATUS_E_FAILURE ;
13885 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013886 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013887}
Jeff Johnson295189b2012-06-20 16:38:30 -070013888/*
13889 * WDA common routine to destroy timer used by WDA.
13890 */
13891static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13892{
13893 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013894 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13895 if(status != TX_SUCCESS)
13896 {
13897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13898 "Unable to Destroy Tx Complete Timeout timer");
13899 return eSIR_FAILURE ;
13900 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013901 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13902 if(status != TX_SUCCESS)
13903 {
13904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13905 "Unable to Destroy BA activity timer");
13906 return eSIR_FAILURE ;
13907 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013908 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13909 if(status != TX_SUCCESS)
13910 {
13911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13912 "Unable to Destroy traffic stats timer");
13913 return eSIR_FAILURE ;
13914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013915 return eSIR_SUCCESS ;
13916}
Jeff Johnson295189b2012-06-20 16:38:30 -070013917/*
13918 * WDA timer handler.
13919 */
13920void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13921{
13922 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13923 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013924 /*
13925 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13926 */
13927 wdaMsg.type = timerInfo ;
13928 wdaMsg.bodyptr = NULL;
13929 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 /* post the message.. */
13931 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13932 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13933 {
13934 vosStatus = VOS_STATUS_E_BADMSG;
13935 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013936}
Jeff Johnson295189b2012-06-20 16:38:30 -070013937/*
13938 * WDA Tx Complete timeout Indication.
13939 */
13940void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13941{
13942 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013943 if( pWDA->pAckTxCbFunc )
13944 {
13945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013946 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013947 pWDA->pAckTxCbFunc( pMac, 0);
13948 pWDA->pAckTxCbFunc = NULL;
13949 }
13950 else
13951 {
13952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013953 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013954 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013955}
Jeff Johnson295189b2012-06-20 16:38:30 -070013956/*
13957 * WDA Set REG Domain to VOS NV
13958 */
Abhishek Singha306a442013-11-07 18:39:01 +053013959eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13960 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013961{
Abhishek Singha306a442013-11-07 18:39:01 +053013962 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013963 {
13964 return eHAL_STATUS_INVALID_PARAMETER;
13965 }
13966 return eHAL_STATUS_SUCCESS;
13967}
Jeff Johnson295189b2012-06-20 16:38:30 -070013968
Jeff Johnson295189b2012-06-20 16:38:30 -070013969#ifdef FEATURE_WLAN_SCAN_PNO
13970/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013971 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013972 *
13973 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013974void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013975{
13976 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013977 tSirPNOScanReq *pPNOScanReqParams;
13978
Jeff Johnson295189b2012-06-20 16:38:30 -070013979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013980 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013981 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013982 {
13983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013984 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013985 VOS_ASSERT(0) ;
13986 return ;
13987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013988
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013989 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
13990 if(pPNOScanReqParams->statusCallback)
13991 {
13992 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
13993 (status == WDI_STATUS_SUCCESS) ?
13994 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
13995 }
13996
Yue Ma7f44bbe2013-04-12 11:47:39 -070013997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13998 vos_mem_free(pWdaParams->wdaMsgParam);
13999 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014000
14001 return ;
14002}
Jeff Johnson295189b2012-06-20 16:38:30 -070014003/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014004 * FUNCTION: WDA_PNOScanReqCallback
14005 * Free memory.
14006 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14007 */
14008void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014009{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014011 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014012
14013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14014 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14015
14016 if(NULL == pWdaParams)
14017 {
14018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14019 "%s: pWdaParams received NULL", __func__);
14020 VOS_ASSERT(0);
14021 return;
14022 }
14023
14024 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14025 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014026 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14027 if(pPNOScanReqParams->statusCallback)
14028 {
14029 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14030 VOS_STATUS_E_FAILURE);
14031 }
14032
Yue Ma7f44bbe2013-04-12 11:47:39 -070014033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14034 vos_mem_free(pWdaParams->wdaMsgParam);
14035 vos_mem_free(pWdaParams);
14036 }
14037
14038 return;
14039}
14040/*
14041 * FUNCTION: WDA_UpdateScanParamsRespCallback
14042 *
14043 */
14044void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14045{
14046 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014048 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014049 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014050 {
14051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014052 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014053 VOS_ASSERT(0) ;
14054 return ;
14055 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014056
14057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14058 vos_mem_free(pWdaParams->wdaMsgParam);
14059 vos_mem_free(pWdaParams);
14060
Jeff Johnson295189b2012-06-20 16:38:30 -070014061 return ;
14062}
Jeff Johnson295189b2012-06-20 16:38:30 -070014063/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014064 * FUNCTION: WDA_UpdateScanParamsReqCallback
14065 * Free memory.
14066 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14067 */
14068void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14069{
14070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14071
14072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14073 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14074
14075 if(NULL == pWdaParams)
14076 {
14077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14078 "%s: pWdaParams received NULL", __func__);
14079 VOS_ASSERT(0);
14080 return;
14081 }
14082
14083 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14084 {
14085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14086 vos_mem_free(pWdaParams->wdaMsgParam);
14087 vos_mem_free(pWdaParams);
14088 }
14089
14090 return;
14091}
14092/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014093 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14094 * Request to WDI to set Preferred Network List.Offload
14095 */
14096VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14097 tSirPNOScanReq *pPNOScanReqParams)
14098{
Jeff Johnson43971f52012-07-17 12:26:56 -070014099 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014100 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14101 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14102 tWDA_ReqParams *pWdaParams ;
14103 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014105 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014106 if(NULL == pwdiPNOScanReqInfo)
14107 {
14108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014109 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014110 VOS_ASSERT(0);
14111 return VOS_STATUS_E_NOMEM;
14112 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014113 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14114 if(NULL == pWdaParams)
14115 {
14116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014118 VOS_ASSERT(0);
14119 vos_mem_free(pwdiPNOScanReqInfo);
14120 return VOS_STATUS_E_NOMEM;
14121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014122 //
14123 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14124 //
14125 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14126 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014127 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14128 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14129 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014130 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14131 {
14132 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14133 &pPNOScanReqParams->aNetworks[i],
14134 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14135 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014136 /*Scan timer intervals*/
14137 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14138 &pPNOScanReqParams->scanTimers,
14139 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014140 /*Probe template for 2.4GHz band*/
14141 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14142 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14143 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014144 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14145 pPNOScanReqParams->p24GProbeTemplate,
14146 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014147 /*Probe template for 5GHz band*/
14148 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14149 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14150 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014151 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14152 pPNOScanReqParams->p5GProbeTemplate,
14153 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014154 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14155 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014156
Jeff Johnson295189b2012-06-20 16:38:30 -070014157 /* Store Params pass it to WDI */
14158 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14159 pWdaParams->pWdaContext = pWDA;
14160 /* Store param pointer as passed in by caller */
14161 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014162 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014163 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014164 if(IS_WDI_STATUS_FAILURE(status))
14165 {
14166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14167 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014168 if(pPNOScanReqParams->statusCallback)
14169 {
14170 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14171 VOS_STATUS_E_FAILURE);
14172 }
14173
Jeff Johnson295189b2012-06-20 16:38:30 -070014174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14175 vos_mem_free(pWdaParams->wdaMsgParam);
14176 pWdaParams->wdaWdiApiMsgParam = NULL;
14177 pWdaParams->wdaMsgParam = NULL;
14178 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014179 return CONVERT_WDI2VOS_STATUS(status) ;
14180}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014181
14182#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14183
14184void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14185{
14186 /*Convert the CSR Auth types to WDI Auth types */
14187 switch (csrAuthType)
14188 {
14189 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14190 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14191 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014192#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014193 case eCSR_AUTH_TYPE_CCKM_WPA:
14194 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14195 break;
14196#endif
14197 case eCSR_AUTH_TYPE_WPA:
14198 *AuthType = eWDA_AUTH_TYPE_WPA;
14199 break;
14200 case eCSR_AUTH_TYPE_WPA_PSK:
14201 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14202 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014203#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014204 case eCSR_AUTH_TYPE_CCKM_RSN:
14205 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
14206 break;
14207#endif
14208 case eCSR_AUTH_TYPE_RSN:
14209 *AuthType = eWDA_AUTH_TYPE_RSN;
14210 break;
14211 case eCSR_AUTH_TYPE_RSN_PSK:
14212 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
14213 break;
14214#if defined WLAN_FEATURE_VOWIFI_11R
14215 case eCSR_AUTH_TYPE_FT_RSN:
14216 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
14217 break;
14218 case eCSR_AUTH_TYPE_FT_RSN_PSK:
14219 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
14220 break;
14221#endif
14222#ifdef FEATURE_WLAN_WAPI
14223 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
14224 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
14225 break;
14226 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
14227 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
14228 break;
14229#endif /* FEATURE_WLAN_WAPI */
14230 case eCSR_AUTH_TYPE_SHARED_KEY:
14231 case eCSR_AUTH_TYPE_AUTOSWITCH:
14232 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14233 break;
14234#if 0
14235 case eCSR_AUTH_TYPE_SHARED_KEY:
14236 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
14237 break;
14238 case eCSR_AUTH_TYPE_AUTOSWITCH:
14239 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
14240#endif
14241 default:
14242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14243 "%s: Unknown Auth Type", __func__);
14244 break;
14245 }
14246}
14247void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
14248{
14249 switch (csrEncrType)
14250 {
14251 case eCSR_ENCRYPT_TYPE_NONE:
14252 *EncrType = WDI_ED_NONE;
14253 break;
14254 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
14255 case eCSR_ENCRYPT_TYPE_WEP40:
14256 *EncrType = WDI_ED_WEP40;
14257 break;
14258 case eCSR_ENCRYPT_TYPE_WEP104:
14259 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
14260 *EncrType = WDI_ED_WEP104;
14261 break;
14262 case eCSR_ENCRYPT_TYPE_TKIP:
14263 *EncrType = WDI_ED_TKIP;
14264 break;
14265 case eCSR_ENCRYPT_TYPE_AES:
14266 *EncrType = WDI_ED_CCMP;
14267 break;
14268#ifdef WLAN_FEATURE_11W
14269 case eCSR_ENCRYPT_TYPE_AES_CMAC:
14270 *EncrType = WDI_ED_AES_128_CMAC;
14271 break;
14272#endif
14273#ifdef FEATURE_WLAN_WAPI
14274 case eCSR_ENCRYPT_TYPE_WPI:
14275 *EncrType = WDI_ED_WPI;
14276 break;
14277#endif
14278 case eCSR_ENCRYPT_TYPE_ANY:
14279 *EncrType = WDI_ED_ANY;
14280 break;
14281
14282 default:
14283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14284 "%s: Unknown Encryption Type", __func__);
14285 break;
14286 }
14287}
14288
14289/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014290 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014291 * Request to WDI to set Roam Offload Scan
14292 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014293VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014294 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
14295{
14296 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014297 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
14298 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014299 tWDA_ReqParams *pWdaParams ;
14300 v_U8_t csrAuthType;
14301 WDI_RoamNetworkType *pwdiRoamNetworkType;
14302 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
14303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14304 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014305 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014306 {
14307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14308 "%s: VOS MEM Alloc Failure", __func__);
14309 VOS_ASSERT(0);
14310 return VOS_STATUS_E_NOMEM;
14311 }
14312 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14313 if (NULL == pWdaParams)
14314 {
14315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14316 "%s: VOS MEM Alloc Failure", __func__);
14317 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014318 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014319 return VOS_STATUS_E_NOMEM;
14320 }
14321
14322 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014323 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014324 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014325 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
14326 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014327 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
14328 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
14329 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
14330 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
14331 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
14332 sizeof(pwdiRoamNetworkType->currAPbssid));
14333 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
14334 csrAuthType);
14335 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
14336 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
14337 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
14338 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
14339 pwdiRoamOffloadScanInfo->LookupThreshold =
14340 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080014341 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
14342 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014343 pwdiRoamOffloadScanInfo->RoamRssiDiff =
14344 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080014345 pwdiRoamOffloadScanInfo->MAWCEnabled =
14346 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014347 pwdiRoamOffloadScanInfo->Command =
14348 pRoamOffloadScanReqParams->Command ;
14349 pwdiRoamOffloadScanInfo->StartScanReason =
14350 pRoamOffloadScanReqParams->StartScanReason ;
14351 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
14352 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
14353 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
14354 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
14355 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
14356 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
14357 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
14358 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
14359 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
14360 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014361 pwdiRoamOffloadScanInfo->IsESEEnabled =
14362 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014363 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
14364 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
14365 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
14366 pwdiRoamNetworkType->ssId.ucLength =
14367 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
14368 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
14369 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
14370 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
14371 pwdiRoamNetworkType->ChannelCount =
14372 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
14373 pwdiRoamOffloadScanInfo->ChannelCacheType =
14374 pRoamOffloadScanReqParams->ChannelCacheType;
14375 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
14376 pRoamOffloadScanReqParams->ValidChannelList,
14377 pRoamOffloadScanReqParams->ValidChannelCount);
14378 pwdiRoamOffloadScanInfo->ValidChannelCount =
14379 pRoamOffloadScanReqParams->ValidChannelCount;
14380 pwdiRoamOffloadScanInfo->us24GProbeSize =
14381 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14382 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14383 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
14384 pRoamOffloadScanReqParams->p24GProbeTemplate,
14385 pwdiRoamOffloadScanInfo->us24GProbeSize);
14386 pwdiRoamOffloadScanInfo->us5GProbeSize =
14387 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14388 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14389 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
14390 pRoamOffloadScanReqParams->p5GProbeTemplate,
14391 pwdiRoamOffloadScanInfo->us5GProbeSize);
14392 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
14393 pRoamOffloadScanReqParams->MDID.mdiePresent;
14394 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
14395 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014396 pwdiRoamOffloadScanInfo->nProbes =
14397 pRoamOffloadScanReqParams->nProbes;
14398 pwdiRoamOffloadScanInfo->HomeAwayTime =
14399 pRoamOffloadScanReqParams->HomeAwayTime;
14400 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014401 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014402 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014403 pWdaParams->pWdaContext = pWDA;
14404 /* Store param pointer as passed in by caller */
14405 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014406 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014407 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
14408 if(IS_WDI_STATUS_FAILURE(status))
14409 {
14410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14411 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
14412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14413 vos_mem_free(pWdaParams->wdaMsgParam);
14414 pWdaParams->wdaWdiApiMsgParam = NULL;
14415 pWdaParams->wdaMsgParam = NULL;
14416 }
14417 return CONVERT_WDI2VOS_STATUS(status) ;
14418}
14419#endif
14420
Jeff Johnson295189b2012-06-20 16:38:30 -070014421/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014422 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014423 *
14424 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014425void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014426{
14427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14428
14429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014430 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014431
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014432 if(NULL == pWdaParams)
14433 {
14434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014435 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014436 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014437 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014438 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014439
Jeff Johnson295189b2012-06-20 16:38:30 -070014440 vos_mem_free(pWdaParams->wdaMsgParam) ;
14441 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14442 vos_mem_free(pWdaParams) ;
14443
14444 return ;
14445}
14446/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014447 * FUNCTION: WDA_RssiFilterReqCallback
14448 * Free memory.
14449 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
14450 */
14451void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14452{
14453 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14454
14455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14456 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14457
14458 if(NULL == pWdaParams)
14459 {
14460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14461 "%s: pWdaParams received NULL", __func__);
14462 VOS_ASSERT(0);
14463 return;
14464 }
14465
14466 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14467 {
14468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14469 vos_mem_free(pWdaParams->wdaMsgParam);
14470 vos_mem_free(pWdaParams);
14471 }
14472
14473 return;
14474}
14475/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014476 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14477 * Request to WDI to set Preferred Network List.Offload
14478 */
14479VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
14480 tSirSetRSSIFilterReq* pRssiFilterParams)
14481{
Jeff Johnson43971f52012-07-17 12:26:56 -070014482 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014483 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
14484 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
14485 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014487 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014488 if(NULL == pwdiSetRssiFilterReqInfo)
14489 {
14490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014491 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014492 VOS_ASSERT(0);
14493 return VOS_STATUS_E_NOMEM;
14494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014495 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14496 if(NULL == pWdaParams)
14497 {
14498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014500 VOS_ASSERT(0);
14501 vos_mem_free(pwdiSetRssiFilterReqInfo);
14502 return VOS_STATUS_E_NOMEM;
14503 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014504 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014505 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
14506 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014507
Jeff Johnson295189b2012-06-20 16:38:30 -070014508 /* Store Params pass it to WDI */
14509 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14510 pWdaParams->pWdaContext = pWDA;
14511 /* Store param pointer as passed in by caller */
14512 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014513 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014514 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014515 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014516 if(IS_WDI_STATUS_FAILURE(status))
14517 {
14518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14519 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14521 vos_mem_free(pWdaParams->wdaMsgParam);
14522 pWdaParams->wdaWdiApiMsgParam = NULL;
14523 pWdaParams->wdaMsgParam = NULL;
14524 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014525 return CONVERT_WDI2VOS_STATUS(status) ;
14526}
14527
Jeff Johnson295189b2012-06-20 16:38:30 -070014528/*
14529 * FUNCTION: WDA_ProcessUpdateScanParams
14530 * Request to WDI to update Scan Parameters
14531 */
14532VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14533 tSirUpdateScanParams *pUpdateScanParams)
14534{
Jeff Johnson43971f52012-07-17 12:26:56 -070014535 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014536 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14537 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14538 sizeof(WDI_UpdateScanParamsInfoType)) ;
14539 tWDA_ReqParams *pWdaParams ;
14540 v_U8_t i;
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 if(NULL == wdiUpdateScanParamsInfoType)
14544 {
14545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014546 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014547 VOS_ASSERT(0);
14548 return VOS_STATUS_E_NOMEM;
14549 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014550 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14551 if ( NULL == pWdaParams )
14552 {
14553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014555 VOS_ASSERT(0);
14556 vos_mem_free(wdiUpdateScanParamsInfoType);
14557 return VOS_STATUS_E_NOMEM;
14558 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014559 //
14560 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14561 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14563 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14564 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14565 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014566 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014567 pUpdateScanParams->b11dEnabled,
14568 pUpdateScanParams->b11dResolved,
14569 pUpdateScanParams->ucChannelCount,
14570 pUpdateScanParams->usPassiveMinChTime,
14571 pUpdateScanParams->usPassiveMaxChTime,
14572 pUpdateScanParams->usActiveMinChTime,
14573 pUpdateScanParams->usActiveMaxChTime,
14574 sizeof(tSirUpdateScanParams),
14575 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14576
Jeff Johnson295189b2012-06-20 16:38:30 -070014577 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14578 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014579 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14580 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014581 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14582 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014583 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14584 pUpdateScanParams->usActiveMaxChTime;
14585 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14586 pUpdateScanParams->usActiveMinChTime;
14587 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14588 pUpdateScanParams->usPassiveMaxChTime;
14589 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14590 pUpdateScanParams->usPassiveMinChTime;
14591
Jeff Johnson295189b2012-06-20 16:38:30 -070014592 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014593 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14594 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014595
Jeff Johnson295189b2012-06-20 16:38:30 -070014596 for ( i = 0; i <
14597 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14598 i++)
14599 {
14600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14601 "Update Scan Parameters channel: %d",
14602 pUpdateScanParams->aChannels[i]);
14603
14604 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14605 pUpdateScanParams->aChannels[i];
14606 }
14607
Yue Ma7f44bbe2013-04-12 11:47:39 -070014608 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14609 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014610
Jeff Johnson295189b2012-06-20 16:38:30 -070014611 /* Store Params pass it to WDI */
14612 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
14613 pWdaParams->pWdaContext = pWDA;
14614 /* Store param pointer as passed in by caller */
14615 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014616
Jeff Johnson295189b2012-06-20 16:38:30 -070014617
14618
14619 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014620 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014621 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014622 if(IS_WDI_STATUS_FAILURE(status))
14623 {
14624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14625 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14626 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14627 vos_mem_free(pWdaParams->wdaMsgParam);
14628 vos_mem_free(pWdaParams);
14629 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014630 return CONVERT_WDI2VOS_STATUS(status) ;
14631}
14632#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014633
14634#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14635/*
14636 * FUNCTION: WDA_RoamOffloadScanReqCallback
14637 *
14638 */
14639void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14640{
14641 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014642 vos_msg_t vosMsg;
14643 wpt_uint8 reason = 0;
14644
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014646 "<------ %s " ,__func__);
14647 if (NULL == pWdaParams)
14648 {
14649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14650 "%s: pWdaParams received NULL", __func__);
14651 VOS_ASSERT(0) ;
14652 return ;
14653 }
14654 if ( pWdaParams != NULL )
14655 {
14656 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14657 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014658 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14660 }
14661 if ( pWdaParams->wdaMsgParam != NULL)
14662 {
14663 vos_mem_free(pWdaParams->wdaMsgParam);
14664 }
14665
14666 vos_mem_free(pWdaParams) ;
14667 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014668 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14669 vosMsg.bodyptr = NULL;
14670 if (WDI_STATUS_SUCCESS != status)
14671 {
14672 reason = 0;
14673 }
14674 vosMsg.bodyval = reason;
14675 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14676 {
14677 /* free the mem and return */
14678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014679 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014680 }
14681
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014682 return ;
14683}
14684#endif
14685
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014686/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014687 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014688 *
14689 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014690void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014691{
14692 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14693
14694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14695 "<------ %s " ,__func__);
14696
14697 if(NULL == pWdaParams)
14698 {
14699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14700 "%s: pWdaParams received NULL", __func__);
14701 VOS_ASSERT(0);
14702 return;
14703 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014704
14705 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14706 vos_mem_free(pWdaParams->wdaMsgParam);
14707 vos_mem_free(pWdaParams);
14708
14709 return;
14710}
14711/*
14712 * FUNCTION: WDA_SetPowerParamsReqCallback
14713 * Free memory.
14714 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14715 */
14716void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14717{
14718 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14719
14720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14721 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14722
14723 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014724 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14726 "%s: pWdaParams received NULL", __func__);
14727 VOS_ASSERT(0);
14728 return;
14729 }
14730
14731 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14732 {
14733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14734 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014735 vos_mem_free(pWdaParams);
14736 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014737
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014738 return;
14739}
14740
Jeff Johnson295189b2012-06-20 16:38:30 -070014741#ifdef WLAN_FEATURE_PACKET_FILTERING
14742/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014743 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014744 *
14745 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014746void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014747 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14748 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014749{
14750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014752 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014753 if(NULL == pWdaParams)
14754 {
14755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014756 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014757 VOS_ASSERT(0) ;
14758 return ;
14759 }
14760
14761 vos_mem_free(pWdaParams->wdaMsgParam) ;
14762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14763 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014764 //print a msg, nothing else to do
14765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014766 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014767 return ;
14768}
Jeff Johnson295189b2012-06-20 16:38:30 -070014769/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014770 * FUNCTION: WDA_8023MulticastListReqCallback
14771 * Free memory.
14772 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14773 */
14774void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14775{
14776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14777
14778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14779 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14780
14781 if(NULL == pWdaParams)
14782 {
14783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14784 "%s: pWdaParams received NULL", __func__);
14785 VOS_ASSERT(0);
14786 return;
14787 }
14788
14789 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14790 {
14791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14792 vos_mem_free(pWdaParams->wdaMsgParam);
14793 vos_mem_free(pWdaParams);
14794 }
14795
14796 return;
14797}
14798/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014799 * FUNCTION: WDA_Process8023MulticastListReq
14800 * Request to WDI to add 8023 Multicast List
14801 */
14802VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14803 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14804{
Jeff Johnson43971f52012-07-17 12:26:56 -070014805 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014806 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14807 tWDA_ReqParams *pWdaParams ;
14808 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014810 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014811 pwdiFltPktSetMcListReqParamsType =
14812 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14813 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14814 ) ;
14815 if(NULL == pwdiFltPktSetMcListReqParamsType)
14816 {
14817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014818 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014819 return VOS_STATUS_E_NOMEM;
14820 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014821 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14822 if(NULL == pWdaParams)
14823 {
14824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014825 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014826 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14827 return VOS_STATUS_E_NOMEM;
14828 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014829
Jeff Johnson295189b2012-06-20 16:38:30 -070014830 //
14831 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14832 //
14833 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014834 pRcvFltMcAddrList->ulMulticastAddrCnt;
14835
14836 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14837 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14838 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14839 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14840
Jeff Johnson295189b2012-06-20 16:38:30 -070014841 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14842 {
14843 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14844 &(pRcvFltMcAddrList->multicastAddr[i]),
14845 sizeof(tSirMacAddr));
14846 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014847 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14848 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014849
Jeff Johnson295189b2012-06-20 16:38:30 -070014850 /* Store Params pass it to WDI */
14851 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14852 pWdaParams->pWdaContext = pWDA;
14853 /* Store param pointer as passed in by caller */
14854 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014855 status = WDI_8023MulticastListReq(
14856 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014857 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014858 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014859 if(IS_WDI_STATUS_FAILURE(status))
14860 {
14861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14862 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14864 vos_mem_free(pWdaParams->wdaMsgParam);
14865 vos_mem_free(pWdaParams);
14866 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014867 return CONVERT_WDI2VOS_STATUS(status) ;
14868}
Jeff Johnson295189b2012-06-20 16:38:30 -070014869/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014870 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014871 *
14872 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014873void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014874 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14875 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014876{
14877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014879 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014880 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014881 if(NULL == pWdaParams)
14882 {
14883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014884 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014885 VOS_ASSERT(0) ;
14886 return ;
14887 }
14888
14889 vos_mem_free(pWdaParams->wdaMsgParam) ;
14890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14891 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014892 //print a msg, nothing else to do
14893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014894 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014895 return ;
14896}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014897
14898/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014899 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14900 * Free memory.
14901 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014902 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014903void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014904 void* pUserData)
14905{
14906 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14907
14908 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14909 "<------ %s, wdiStatus: %d",
14910 __func__, wdiStatus);
14911
14912 if (NULL == pWdaParams)
14913 {
14914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14915 "%s: Invalid pWdaParams pointer", __func__);
14916 VOS_ASSERT(0);
14917 return;
14918 }
14919
14920 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14921 {
14922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14923 vos_mem_free(pWdaParams->wdaMsgParam);
14924 vos_mem_free(pWdaParams);
14925 }
14926
14927 return;
14928}
14929
Jeff Johnson295189b2012-06-20 16:38:30 -070014930/*
14931 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14932 * Request to WDI to set Receive Filters
14933 */
14934VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14935 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14936{
Jeff Johnson43971f52012-07-17 12:26:56 -070014937 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014938 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14939 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14940 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14941 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14942 tWDA_ReqParams *pWdaParams ;
14943 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014945 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014946 if(NULL == pwdiSetRcvPktFilterReqParamsType)
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 return VOS_STATUS_E_NOMEM;
14952 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014953 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14954 if(NULL == pWdaParams)
14955 {
14956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014957 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014958 VOS_ASSERT(0);
14959 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14960 return VOS_STATUS_E_NOMEM;
14961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014962 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14963 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14964 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14965 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014966 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14967 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14968
14969 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14970 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014971
14972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14973 "FID %d FT %d NParams %d CT %d",
14974 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14975 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14976 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14977 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014978 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14979 {
14980 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14981 &pRcvPktFilterCfg->paramsData[i],
14982 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014984 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014985 pwdiSetRcvPktFilterReqParamsType->
14986 wdiPktFilterCfg.paramsData[i].protocolLayer,
14987 pwdiSetRcvPktFilterReqParamsType->
14988 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014990 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014991 pwdiSetRcvPktFilterReqParamsType->
14992 wdiPktFilterCfg.paramsData[i].dataOffset,
14993 pwdiSetRcvPktFilterReqParamsType->
14994 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014996 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014997 pwdiSetRcvPktFilterReqParamsType->
14998 wdiPktFilterCfg.paramsData[i].compareData[0],
14999 pwdiSetRcvPktFilterReqParamsType->
15000 wdiPktFilterCfg.paramsData[i].compareData[1],
15001 pwdiSetRcvPktFilterReqParamsType->
15002 wdiPktFilterCfg.paramsData[i].compareData[2],
15003 pwdiSetRcvPktFilterReqParamsType->
15004 wdiPktFilterCfg.paramsData[i].compareData[3],
15005 pwdiSetRcvPktFilterReqParamsType->
15006 wdiPktFilterCfg.paramsData[i].compareData[4],
15007 pwdiSetRcvPktFilterReqParamsType->
15008 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015010 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015011 pwdiSetRcvPktFilterReqParamsType->
15012 wdiPktFilterCfg.paramsData[i].dataMask[0],
15013 pwdiSetRcvPktFilterReqParamsType->
15014 wdiPktFilterCfg.paramsData[i].dataMask[1],
15015 pwdiSetRcvPktFilterReqParamsType->
15016 wdiPktFilterCfg.paramsData[i].dataMask[2],
15017 pwdiSetRcvPktFilterReqParamsType->
15018 wdiPktFilterCfg.paramsData[i].dataMask[3],
15019 pwdiSetRcvPktFilterReqParamsType->
15020 wdiPktFilterCfg.paramsData[i].dataMask[4],
15021 pwdiSetRcvPktFilterReqParamsType->
15022 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015023 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015024 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015025 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015026 /* Store Params pass it to WDI */
15027 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15028 pWdaParams->pWdaContext = pWDA;
15029 /* Store param pointer as passed in by caller */
15030 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015031 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015032 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015033 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015034 if(IS_WDI_STATUS_FAILURE(status))
15035 {
15036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15037 "Failure in SetFilter(),free all the memory,status %d ",status);
15038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15039 vos_mem_free(pWdaParams->wdaMsgParam);
15040 vos_mem_free(pWdaParams);
15041 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015042 return CONVERT_WDI2VOS_STATUS(status) ;
15043}
Jeff Johnson295189b2012-06-20 16:38:30 -070015044/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015045 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015046 *
15047 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015048void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015049 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15050 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015051{
15052 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15053 tWDA_CbContext *pWDA;
15054 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15055 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15056 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15057 tANI_U8 i;
15058 vos_msg_t vosMsg;
15059
15060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015061 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015062 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15063
Jeff Johnsone7245742012-09-05 17:12:55 -070015064 if(NULL == pRcvFltPktMatchCntRsp)
15065 {
15066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015067 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015068 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015069 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015070 return ;
15071 }
15072
Jeff Johnson295189b2012-06-20 16:38:30 -070015073 if(NULL == pWdaParams)
15074 {
15075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015076 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015077 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015078 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015079 return ;
15080 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015081 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15082 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015083 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15084 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15085
15086 /* Message Header */
15087 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15088 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15089
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015090 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015091
15092 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15093 {
15094 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15095 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015097 /* VOS message wrapper */
15098 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15099 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15100 vosMsg.bodyval = 0;
15101 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15102 {
15103 /* free the mem and return */
15104 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15105 }
15106
15107 vos_mem_free(pWdaParams->wdaMsgParam) ;
15108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15109 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015110
15111 return;
15112}
15113/*
15114 * FUNCTION: WDA_FilterMatchCountReqCallback
15115 * Free memory and send RSP back to SME.
15116 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15117 */
15118void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15119{
15120 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15121 vos_msg_t vosMsg;
15122
15123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15124 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15125
15126 if(NULL == pWdaParams)
15127 {
15128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15129 "%s: pWdaParams received NULL", __func__);
15130 VOS_ASSERT(0);
15131 return;
15132 }
15133
15134 /* VOS message wrapper */
15135 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15136 vosMsg.bodyptr = NULL;
15137 vosMsg.bodyval = 0;
15138
15139 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15140 {
15141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15142 vos_mem_free(pWdaParams->wdaMsgParam);
15143 vos_mem_free(pWdaParams);
15144 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15145 }
15146
15147 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015148}
Jeff Johnson295189b2012-06-20 16:38:30 -070015149/*
15150 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15151 * Request to WDI to get PC Filter Match Count
15152 */
15153VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15154{
Jeff Johnson43971f52012-07-17 12:26:56 -070015155 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015156 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15157 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15158 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015160 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015161 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15162 {
15163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015164 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015165 VOS_ASSERT(0);
15166 return VOS_STATUS_E_NOMEM;
15167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015168 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15169 if(NULL == pWdaParams)
15170 {
15171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015172 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015173 VOS_ASSERT(0);
15174 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15175 return VOS_STATUS_E_NOMEM;
15176 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015177
Yue Ma7f44bbe2013-04-12 11:47:39 -070015178 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15179 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015180
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015181 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15182 pRcvFltPktMatchRsp->bssId,
15183 sizeof(wpt_macAddr));
15184
Jeff Johnson295189b2012-06-20 16:38:30 -070015185 /* Store Params pass it to WDI */
15186 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15187 pWdaParams->pWdaContext = pWDA;
15188 /* Store param pointer as passed in by caller */
15189 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015190 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015191 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015192 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015193 if(IS_WDI_STATUS_FAILURE(status))
15194 {
15195 /* failure returned by WDI API */
15196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15197 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15199 vos_mem_free(pWdaParams) ;
15200 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15201 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15202 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015203 return CONVERT_WDI2VOS_STATUS(status) ;
15204}
Jeff Johnson295189b2012-06-20 16:38:30 -070015205/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015206 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015207 *
15208 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015209void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015210 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
15211 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015212{
15213 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015215 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015216/* WDA_VOS_ASSERT(NULL != pWdaParams); */
15217 if(NULL == pWdaParams)
15218 {
15219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015220 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015221 VOS_ASSERT(0) ;
15222 return ;
15223 }
15224
15225 vos_mem_free(pWdaParams->wdaMsgParam) ;
15226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15227 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015228 //print a msg, nothing else to do
15229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015230 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015231 return ;
15232}
Jeff Johnson295189b2012-06-20 16:38:30 -070015233/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015234 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
15235 * Free memory.
15236 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
15237 */
15238void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15239{
15240 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15241
15242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15243 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15244
15245 if(NULL == pWdaParams)
15246 {
15247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15248 "%s: Invalid pWdaParams pointer", __func__);
15249 VOS_ASSERT(0);
15250 return;
15251 }
15252
15253 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15254 {
15255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15256 vos_mem_free(pWdaParams->wdaMsgParam);
15257 vos_mem_free(pWdaParams);
15258 }
15259
15260 return;
15261}
15262/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015263 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
15264 * Request to WDI to clear Receive Filters
15265 */
15266VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
15267 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
15268{
Jeff Johnson43971f52012-07-17 12:26:56 -070015269 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015270 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
15271 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
15272 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015274 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015275 if(NULL == pwdiRcvFltPktClearReqParamsType)
15276 {
15277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015278 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015279 VOS_ASSERT(0);
15280 return VOS_STATUS_E_NOMEM;
15281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015282 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15283 if(NULL == pWdaParams)
15284 {
15285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015287 VOS_ASSERT(0);
15288 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
15289 return VOS_STATUS_E_NOMEM;
15290 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015291 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
15292 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070015293 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
15294 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
15295 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
15296 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015297
Yue Ma7f44bbe2013-04-12 11:47:39 -070015298 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015299 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015300 /* Store Params pass it to WDI */
15301 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
15302 pWdaParams->pWdaContext = pWDA;
15303 /* Store param pointer as passed in by caller */
15304 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015305 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015306 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015307 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015308 if(IS_WDI_STATUS_FAILURE(status))
15309 {
15310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15311 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
15312 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080015313 vos_mem_free(pWdaParams->wdaMsgParam);
15314 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015315 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015316 return CONVERT_WDI2VOS_STATUS(status) ;
15317}
15318#endif // WLAN_FEATURE_PACKET_FILTERING
15319
Jeff Johnson295189b2012-06-20 16:38:30 -070015320/*
15321 * FUNCTION: WDA_ProcessSetPowerParamsReq
15322 * Request to WDI to set power params
15323 */
15324VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
15325 tSirSetPowerParamsReq *pPowerParams)
15326{
Jeff Johnson43971f52012-07-17 12:26:56 -070015327 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015328 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
15329 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015330 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015332 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015333 if(NULL == pwdiSetPowerParamsReqInfo)
15334 {
15335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015337 VOS_ASSERT(0);
15338 return VOS_STATUS_E_NOMEM;
15339 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015340 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15341 if(NULL == pWdaParams)
15342 {
15343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015345 VOS_ASSERT(0);
15346 vos_mem_free(pwdiSetPowerParamsReqInfo);
15347 return VOS_STATUS_E_NOMEM;
15348 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015349
Jeff Johnson295189b2012-06-20 16:38:30 -070015350
15351 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
15352 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070015353 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
15354 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070015355 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
15356 pPowerParams->uListenInterval;
15357 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
15358 pPowerParams->uBcastMcastFilter;
15359 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
15360 pPowerParams->uEnableBET;
15361 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
15362 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070015363 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
15364 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015365 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
15366 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015367
Jeff Johnson295189b2012-06-20 16:38:30 -070015368 /* Store Params pass it to WDI */
15369 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
15370 pWdaParams->pWdaContext = pWDA;
15371 /* Store param pointer as passed in by caller */
15372 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015373 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015374 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015375 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015376 if(IS_WDI_STATUS_FAILURE(status))
15377 {
15378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15379 "Failure in Set power params REQ WDI API, free all the memory " );
15380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15381 vos_mem_free(pWdaParams->wdaMsgParam);
15382 pWdaParams->wdaWdiApiMsgParam = NULL;
15383 pWdaParams->wdaMsgParam = NULL;
15384 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015385 return CONVERT_WDI2VOS_STATUS(status) ;
15386}
15387
15388/*
15389 * FUNCTION: WDA_SetTmLevelRspCallback
15390 * Set TM Level response
15391 */
15392void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
15393{
15394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15395
15396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015397 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015398
15399 if(NULL == pWdaParams)
15400 {
15401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015402 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015403 VOS_ASSERT(0) ;
15404 return ;
15405 }
15406
15407 /* Dose not need to send notification to upper layer
15408 * Just free allocated resources */
15409 if( pWdaParams != NULL )
15410 {
15411 if( pWdaParams->wdaWdiApiMsgParam != NULL )
15412 {
15413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15414 }
15415 vos_mem_free(pWdaParams->wdaMsgParam) ;
15416 vos_mem_free(pWdaParams) ;
15417 }
15418}
15419
15420/*
15421 * FUNCTION: WDA_ProcessSetTmLevelReq
15422 * Set TM Level request
15423 */
15424VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
15425 tAniSetTmLevelReq *setTmLevelReq)
15426{
15427 WDI_Status status = WDI_STATUS_SUCCESS ;
15428 tWDA_ReqParams *pWdaParams ;
15429 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
15430 (WDI_SetTmLevelReqType *)vos_mem_malloc(
15431 sizeof(WDI_SetTmLevelReqType)) ;
15432 if(NULL == wdiSetTmLevelReq)
15433 {
15434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015436 VOS_ASSERT(0);
15437 return VOS_STATUS_E_NOMEM;
15438 }
15439
15440 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15441 if(NULL == pWdaParams)
15442 {
15443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015445 VOS_ASSERT(0);
15446 vos_mem_free(wdiSetTmLevelReq);
15447 return VOS_STATUS_E_NOMEM;
15448 }
15449
15450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015451 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015452
15453 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
15454 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
15455
15456 pWdaParams->pWdaContext = pWDA;
15457 pWdaParams->wdaMsgParam = setTmLevelReq;
15458 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
15459
15460 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
15461 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
15462
15463 if(IS_WDI_STATUS_FAILURE(status))
15464 {
15465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080015466 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070015467 vos_mem_free(pWdaParams->wdaMsgParam) ;
15468 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15469 vos_mem_free(pWdaParams) ;
15470 }
15471
15472 return CONVERT_WDI2VOS_STATUS(status) ;
15473}
15474
15475VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
15476 tpTxControlParams pTxCtrlParam)
15477{
15478 VOS_STATUS wdaStatus;
15479
15480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015481 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015482 if( pTxCtrlParam == NULL )
15483 {
15484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015485 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015486 return VOS_STATUS_E_FAILURE;
15487 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015488 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
15489 {
15490 wdaStatus = WDA_SuspendDataTx(pWDA);
15491 }
15492 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
15493 {
15494 wdaStatus = WDA_ResumeDataTx(pWDA);
15495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015496 return wdaStatus;
15497}
15498
15499 /* FUNCTION WDA_featureCapsExchange
15500 * WDA API to invoke capability exchange between host and FW.
15501 */
15502void WDA_featureCapsExchange(v_PVOID_t pVosContext)
15503{
15504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015505 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015506 WDI_featureCapsExchangeReq( NULL, pVosContext);
15507}
15508
Yathish9f22e662012-12-10 14:21:35 -080015509/* FUNCTION WDA_disableCapablityFeature
15510 * WDA API to diable Active mode offload in host.
15511 */
15512void WDA_disableCapablityFeature(tANI_U8 feature_index)
15513{
15514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15515 "%s:enter", __func__ );
15516 WDI_disableCapablityFeature(feature_index);
15517}
15518
Jeff Johnson295189b2012-06-20 16:38:30 -070015519 /* FUNCTION WDA_getHostWlanFeatCaps
15520 * Wrapper for WDI API, that will return if the feature (enum value).passed
15521 * to this API is supported or not in Host
15522 * return value
15523 * 0 - implies feature is NOT Supported
15524 * any non zero value - implies feature is SUPPORTED
15525 */
15526tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15527{
15528 return WDI_getHostWlanFeatCaps(featEnumValue);
15529}
15530
15531 /* FUNCTION WDA_getFwWlanFeatCaps
15532 * Wrapper for WDI API, that will return if the feature (enum value).passed
15533 * to this API is supported or not in FW
15534 * return value
15535 * 0 - implies feature is NOT Supported
15536 * any non zero value - implies feature is SUPPORTED
15537 */
15538tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15539{
15540 return WDI_getFwWlanFeatCaps(featEnumValue);
15541}
15542
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015543
Jeff Johnson295189b2012-06-20 16:38:30 -070015544/*
15545 * FUNCTION: WDA_shutdown
15546 * Shutdown WDA/WDI without handshaking with Riva.
15547 * Synchronous function.
15548 */
15549VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15550{
15551 WDI_Status wdiStatus;
15552 //tANI_U8 eventIdx = 0;
15553 VOS_STATUS status = VOS_STATUS_SUCCESS;
15554 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015555 if (NULL == pWDA)
15556 {
15557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015558 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015559 VOS_ASSERT(0);
15560 return VOS_STATUS_E_FAILURE;
15561 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015562 /* FTM mode stay START_STATE */
15563 if( (WDA_READY_STATE != pWDA->wdaState) &&
15564 (WDA_INIT_STATE != pWDA->wdaState) &&
15565 (WDA_START_STATE != pWDA->wdaState) )
15566 {
15567 VOS_ASSERT(0);
15568 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015569
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015570 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15571 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015572 {
15573 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015574 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015575 }
Leo Chang9d76f622013-08-23 16:34:52 -070015576 else
15577 {
15578 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15579 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015580
Jeff Johnson295189b2012-06-20 16:38:30 -070015581 /* call WDI shutdown */
15582 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015583 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15584 {
15585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15586 "error in WDA Stop" );
15587 status = VOS_STATUS_E_FAILURE;
15588 }
15589 /* WDI stop is synchrnous, shutdown is complete when it returns */
15590 pWDA->wdaState = WDA_STOP_STATE;
15591
Jeff Johnson295189b2012-06-20 16:38:30 -070015592 /* shutdown should perform the stop & close actions. */
15593 /* Destroy the event */
15594 status = vos_event_destroy(&pWDA->txFrameEvent);
15595 if(!VOS_IS_STATUS_SUCCESS(status))
15596 {
15597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015598 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015599 status = VOS_STATUS_E_FAILURE;
15600 }
15601 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15602 if(!VOS_IS_STATUS_SUCCESS(status))
15603 {
15604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015605 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015606 status = VOS_STATUS_E_FAILURE;
15607 }
15608 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15609 if(!VOS_IS_STATUS_SUCCESS(status))
15610 {
15611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015612 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015613 status = VOS_STATUS_E_FAILURE;
15614 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015615 /* free WDA context */
15616 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15617 if ( !VOS_IS_STATUS_SUCCESS(status) )
15618 {
15619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15620 "error in WDA close " );
15621 status = VOS_STATUS_E_FAILURE;
15622 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015623 return status;
15624}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015625
Jeff Johnsone7245742012-09-05 17:12:55 -070015626/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015627 * FUNCTION: WDA_setNeedShutdown
15628 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015629 */
15630
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015631void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015632{
15633 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015634 if(pWDA == NULL)
15635 {
15636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15637 "Could not get the WDA Context pointer" );
15638 return;
15639 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015640 pWDA->needShutdown = TRUE;
15641}
15642/*
15643 * FUNCTION: WDA_needShutdown
15644 * WDA needs a shutdown
15645 */
15646
15647v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15648{
15649 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015650 if(pWDA == NULL)
15651 {
15652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15653 "Could not get the WDA Context pointer" );
15654 return 0;
15655 }
15656 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015657}
15658
Mohit Khanna4a70d262012-09-11 16:30:12 -070015659#ifdef WLAN_FEATURE_11AC
15660/*
15661 * FUNCTION: WDA_SetBeaconFilterReqCallback
15662 *
15663 */
15664void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15665{
15666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015668 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015669 if(NULL == pWdaParams)
15670 {
15671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015672 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015673 VOS_ASSERT(0) ;
15674 return ;
15675 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015676
Mohit Khanna4a70d262012-09-11 16:30:12 -070015677 vos_mem_free(pWdaParams->wdaMsgParam) ;
15678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15679 vos_mem_free(pWdaParams) ;
15680 /*
15681 * No respone required for SetBeaconFilter req so just free the request
15682 * param here
15683 */
15684
15685 return ;
15686}
15687
15688VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15689 tUpdateVHTOpMode *pData)
15690{
15691 WDI_Status status = WDI_STATUS_SUCCESS ;
15692 tWDA_ReqParams *pWdaParams ;
15693 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15694 sizeof(WDI_UpdateVHTOpMode)) ;
15695 if(NULL == wdiTemp)
15696 {
15697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015698 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015699 VOS_ASSERT(0);
15700 return VOS_STATUS_E_NOMEM;
15701 }
15702 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15703 if(NULL == pWdaParams)
15704 {
15705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015706 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015707 VOS_ASSERT(0);
15708 vos_mem_free(wdiTemp);
15709 return VOS_STATUS_E_NOMEM;
15710 }
15711
15712 wdiTemp->opMode = pData->opMode;
15713 wdiTemp->staId = pData->staId;
15714
15715 pWdaParams->pWdaContext = pWDA;
15716 /* Store Req pointer, as this will be used for response */
15717 pWdaParams->wdaMsgParam = (void *)pData;
15718 /* store Params pass it to WDI */
15719 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15720
15721 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15722
15723 if(IS_WDI_STATUS_FAILURE(status))
15724 {
15725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15726 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15727 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15728 vos_mem_free(pWdaParams->wdaMsgParam);
15729 vos_mem_free(pWdaParams);
15730 }
15731 return CONVERT_WDI2VOS_STATUS(status) ;
15732}
15733#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015734
15735/*==========================================================================
15736 FUNCTION WDA_TransportChannelDebug
15737
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015738 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015739 Display Transport Channel debugging information
15740 User may request to display DXE channel snapshot
15741 Or if host driver detects any abnormal stcuk may display
15742
15743 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015744 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015745 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053015746 debugFlags : Enable stall detect features
15747 defined by WPAL_DeviceDebugFlags
15748 These features may effect
15749 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015750
15751 RETURN VALUE
15752 NONE
15753
15754===========================================================================*/
15755void WDA_TransportChannelDebug
15756(
schang6295e542013-03-12 15:31:23 -070015757 tpAniSirGlobal pMac,
15758 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053015759 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015760)
15761{
Mihir Shete40a55652014-03-02 14:14:47 +053015762 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015763 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015764}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015765
15766/*==========================================================================
15767 FUNCTION WDA_SetEnableSSR
15768
15769 DESCRIPTION
15770 API to enable/disable SSR on WDI timeout
15771
15772 PARAMETERS
15773 enableSSR : enable/disable SSR
15774
15775 RETURN VALUE
15776 NONE
15777
15778===========================================================================*/
15779void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15780{
15781 WDI_SetEnableSSR(enableSSR);
15782}
Leo Chang9056f462013-08-01 19:21:11 -070015783
15784#ifdef FEATURE_WLAN_LPHB
15785/*
15786 * FUNCTION: WDA_LPHBconfRspCallback
15787 *
15788 */
15789void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15790{
15791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15792
15793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15794 "<------ %s " ,__func__);
15795 if (NULL == pWdaParams)
15796 {
15797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15798 "%s: pWdaParams received NULL", __func__);
15799 VOS_ASSERT(0) ;
15800 return ;
15801 }
15802
15803 /* Do not need to send notification to upper layer
15804 * Just free allocated resources */
15805 if (pWdaParams != NULL)
15806 {
15807 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15808 {
15809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15810 }
15811 vos_mem_free(pWdaParams->wdaMsgParam) ;
15812 vos_mem_free(pWdaParams) ;
15813 }
15814
15815 return;
15816}
15817
15818/*
15819 * FUNCTION: WDA_ProcessLPHBConfReq
15820 *
15821 */
15822VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15823 tSirLPHBReq *pData)
15824{
15825 WDI_Status wdiStatus;
15826 tWDA_ReqParams *pWdaParams ;
15827
15828 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15829 "------> %s " , __func__);
15830
15831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15832 if (NULL == pWdaParams)
15833 {
15834 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15835 "%s: VOS MEM Alloc Failure", __func__);
15836 VOS_ASSERT(0);
15837 vos_mem_free(pData);
15838 return VOS_STATUS_E_NOMEM;
15839 }
15840
15841 pWdaParams->pWdaContext = pWDA;
15842 pWdaParams->wdaMsgParam = (void *)pData;
15843 pWdaParams->wdaWdiApiMsgParam = NULL;
15844
15845 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15846 if (WDI_STATUS_PENDING == wdiStatus)
15847 {
15848 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15849 "Pending received for %s:%d ", __func__, __LINE__);
15850 }
15851 else if (WDI_STATUS_SUCCESS != wdiStatus)
15852 {
15853 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15854 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15855 vos_mem_free(pWdaParams->wdaMsgParam);
15856 vos_mem_free(pWdaParams);
15857 }
15858
15859 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15860}
15861#endif /* FEATURE_WLAN_LPHB */
15862