blob: a789af83a140540ce56086f713cb573ee7a1a9e1 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * Copyright (c) 2012-2014 Qualcomm Atheros, Inc.
24 * All Rights Reserved.
25 * Qualcomm Atheros Confidential and Proprietary.
26 *
27 */
28
Jeff Johnson295189b2012-06-20 16:38:30 -070029
30/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070031 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070032 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070033 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070034 The functions externalized by this module are to be called ONLY by other
35 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070036 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070037 Are listed for each API below.
38
Jeff Johnson295189b2012-06-20 16:38:30 -070039 Copyright (c) 2010-2011 QUALCOMM Incorporated.
40 All Rights Reserved.
41 Qualcomm Confidential and Proprietary
42===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070043/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070044 EDIT HISTORY FOR FILE
45
Jeff Johnson295189b2012-06-20 16:38:30 -070046 This section contains comments describing changes made to the module.
47 Notice that changes are listed in reverse chronological order.
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 $Header$$DateTime$$Author$
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 when who what, where, why
52---------- --- -------------------------------------------------
5310/05/2011 haparna Adding support for Keep Alive Feature
542010-12-30 smiryala UMAC convergence changes
552010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
56===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070057#include "vos_mq.h"
58#include "vos_api.h"
59#include "vos_packet.h"
60#include "vos_nvitem.h"
61#include "sirApi.h"
62#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053063#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070064#include "wlan_qct_wda.h"
65#include "wlan_qct_wda_msg.h"
66#include "wlan_qct_wdi_cfg.h"
67#include "wlan_qct_wdi.h"
68#include "wlan_qct_wdi_ds.h"
69#include "wlan_hal_cfg.h"
70/**********************/
71#include "wniApi.h"
72#include "cfgApi.h"
73#include "limApi.h"
74#include "wlan_qct_tl.h"
75#include "wlan_qct_tli_ba.h"
76#include "limUtils.h"
77#include "btcApi.h"
78#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079#include "pttMsgApi.h"
80#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070081/* Used MACRO's */
82/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080083#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
85#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070086#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define CONVERT_WDI2SIR_STATUS(x) \
88 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
89
90#define IS_WDI_STATUS_FAILURE(status) \
91 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070092#define CONVERT_WDI2VOS_STATUS(x) \
93 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
94
95/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070096#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_GET_BA_TXFLAG(a, b, c) \
99 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
100
101#define WDA_SET_BA_TXFLAG(a, b, c) \
102 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
103
104#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
105 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700106#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
107 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108/* timer related Macros */
109#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
110 tx_timer_create(a, b, c, d, e, f, g)
111#define WDA_START_TIMER(a) tx_timer_activate(a)
112#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
113#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700114#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700115
116#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
117 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800122#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700125
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700126#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700127#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
128 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
129 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
130
131#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
132#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800133#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
134
Jeff Johnson295189b2012-06-20 16:38:30 -0700135/* extern declarations */
136extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700137extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
138
Jeff Johnson295189b2012-06-20 16:38:30 -0700139/* forward declarations */
140void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
141 void *pBodyptr, tANI_U32 bodyVal) ;
142VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
143 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700144VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
145VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
146
147extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
148 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
149void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
150 tANI_U32 *pConfig) ;
151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
211VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
212 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700213#ifdef WLAN_FEATURE_11AC
214VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
215 tUpdateVHTOpMode *pData);
216#endif
Leo Chang9056f462013-08-01 19:21:11 -0700217
218#ifdef FEATURE_WLAN_LPHB
219VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
220 tSirLPHBReq *pData);
221#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700222/*
223 * FUNCTION: WDA_open
224 * Allocate the WDA context
225 */
226VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
227 tMacOpenParameters *pMacParams )
228{
229 tWDA_CbContext *wdaContext;
230 VOS_STATUS status;
231 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700232 /* Allocate WDA context */
233 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
234 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
235 if(!VOS_IS_STATUS_SUCCESS(status))
236 {
237 return VOS_STATUS_E_NOMEM;
238 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700239 /*__asm int 3;*/
240 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
241
242 /* Initialize data structures */
243 wdaContext->pVosContext = pVosContext;
244 wdaContext->wdaState = WDA_INIT_STATE;
245 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
246
247 /* Initialize WDA-WDI synchronization event */
248 status = vos_event_init(&wdaContext->wdaWdiEvent);
249 if(!VOS_IS_STATUS_SUCCESS(status))
250 {
251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800252 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800253 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700254 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700255 /* Init Frame transfer event */
256 status = vos_event_init(&wdaContext->txFrameEvent);
257 if(!VOS_IS_STATUS_SUCCESS(status))
258 {
259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800260 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800261 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700262 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700263 status = vos_event_init(&wdaContext->suspendDataTxEvent);
264 if(!VOS_IS_STATUS_SUCCESS(status))
265 {
266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800267 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800268 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700270 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
271 if(!VOS_IS_STATUS_SUCCESS(status))
272 {
273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800274 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800275 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700277 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700278 wdaContext->driverMode = pMacParams->driverType;
279 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
280 &wdiDevCapability, pMacParams->driverType))
281 {
282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
283 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800284 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700285 }
286 else
287 {
288 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
289 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
290 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 /* update max STA in WDA used for BA */
292 wdaContext->wdaMaxSta = pMacParams->maxStation;
293 /* store the frameTransRequired flag in wdaContext, to send this to HAL
294 * in WDA_Start
295 */
296 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
297 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700298 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800299
300error:
301 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
302 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700303}
304
Jeff Johnson295189b2012-06-20 16:38:30 -0700305/*
306 * FUNCTION: WDA_preStart
307 * Trigger DAL-AL to start CFG download
308 */
309VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
310{
311 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
312 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700313 /*
314 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
315 */
316 wdaMsg.type = WNI_CFG_DNLD_REQ ;
317 wdaMsg.bodyptr = NULL;
318 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 /* post the message.. */
320 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
321 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
322 {
323 vosStatus = VOS_STATUS_E_BADMSG;
324 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 return( vosStatus );
326}
Jeff Johnson295189b2012-06-20 16:38:30 -0700327/*
328 * FUNCTION: WDA_wdiStartCallback
329 * Once WDI_Start is finished, WDI start callback will be called by WDI
330 * to indicate completion of WDI_Start.
331 */
332void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
333 void *pVosContext)
334{
335 tWDA_CbContext *wdaContext;
336 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700337 if (NULL == pVosContext)
338 {
339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700340 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700341 return;
342 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
344 if (NULL == wdaContext)
345 {
346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700347 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 return;
349 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700350 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
351 {
352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700353 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 }
355 else
356 {
357 wdaContext->wdaState = WDA_START_STATE;
358 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* extract and save version information from the Start Response */
360 wdaContext->wcnssWlanCompiledVersion.major =
361 wdiRspParams->wlanCompiledVersion.major;
362 wdaContext->wcnssWlanCompiledVersion.minor =
363 wdiRspParams->wlanCompiledVersion.minor;
364 wdaContext->wcnssWlanCompiledVersion.version =
365 wdiRspParams->wlanCompiledVersion.version;
366 wdaContext->wcnssWlanCompiledVersion.revision =
367 wdiRspParams->wlanCompiledVersion.revision;
368 wdaContext->wcnssWlanReportedVersion.major =
369 wdiRspParams->wlanReportedVersion.major;
370 wdaContext->wcnssWlanReportedVersion.minor =
371 wdiRspParams->wlanReportedVersion.minor;
372 wdaContext->wcnssWlanReportedVersion.version =
373 wdiRspParams->wlanReportedVersion.version;
374 wdaContext->wcnssWlanReportedVersion.revision =
375 wdiRspParams->wlanReportedVersion.revision;
376 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
377 wdiRspParams->wcnssSoftwareVersion,
378 sizeof(wdaContext->wcnssSoftwareVersionString));
379 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
380 wdiRspParams->wcnssHardwareVersion,
381 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700382 /* Notify WDA_start that WDI_Start has completed */
383 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700384 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 {
386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700387 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700389 return;
390}
391
Jeff Johnson295189b2012-06-20 16:38:30 -0700392/*
393 * FUNCTION: WDA_start
394 * Prepare TLV configuration and call WDI_Start.
395 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700396VOS_STATUS WDA_start(v_PVOID_t pVosContext)
397{
398 tWDA_CbContext *wdaContext;
399 VOS_STATUS status;
400 WDI_Status wdiStatus;
401 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 if (NULL == pVosContext)
403 {
404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700405 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 return VOS_STATUS_E_FAILURE;
407 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700408 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
409 if (NULL == wdaContext)
410 {
411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700412 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 return VOS_STATUS_E_FAILURE;
414 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700415 /* Non-FTM mode, WDA status for START must be INIT
416 * FTM mode, WDA Status for START can be INIT or STOP */
417 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
418 (WDA_STOP_STATE != wdaContext->wdaState) )
419 {
420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
421 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700422 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700423 return VOS_STATUS_E_FAILURE;
424 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700425 /* initialize the wdiStartParam. Note that we can create this on
426 the stack since we won't exit until WDI_Start() completes or
427 times out */
428 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 /* prepare the config TLV for the WDI */
431 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
432 if ( !VOS_IS_STATUS_SUCCESS(status) )
433 {
434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700435 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 return VOS_STATUS_E_FAILURE;
437 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 /* note from here onwards if an error occurs we must
439 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
441 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
442 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 /* initialize the WDA-WDI synchronization event */
444 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700445 /* call WDI start */
446 wdiStatus = WDI_Start(&wdiStartParam,
447 (WDI_StartRspCb)WDA_wdiStartCallback,
448 (v_VOID_t *)pVosContext);
449 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
450 {
451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700452 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 vos_mem_free(wdiStartParam.pConfigBuffer);
454 return VOS_STATUS_E_FAILURE;
455 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* wait for WDI start to invoke our callback */
457 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
458 WDA_WDI_START_TIMEOUT );
459 if ( !VOS_IS_STATUS_SUCCESS(status) )
460 {
461 if ( VOS_STATUS_E_TIMEOUT == status )
462 {
463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700464 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700465 }
466 else
467 {
468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
469 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700470 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 }
472 vos_mem_free(wdiStartParam.pConfigBuffer);
473 return VOS_STATUS_E_FAILURE;
474 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 /* we no longer need the config TLV */
477 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* if we are not in the START state then WDI_Start() failed */
479 if (WDA_START_STATE != wdaContext->wdaState)
480 {
481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700482 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 return VOS_STATUS_E_FAILURE;
484 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700485 /* FTM mode does not need to monitor BA activity */
486 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
487 {
488 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800489 if(VOS_STATUS_SUCCESS == status)
490 {
491 wdaContext->wdaTimersCreated = VOS_TRUE;
492 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700493 }
Leo Chang9d76f622013-08-23 16:34:52 -0700494 else
495 {
496 vos_event_init(&wdaContext->ftmStopDoneEvent);
497 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 return status;
499}
500
Jeff Johnson295189b2012-06-20 16:38:30 -0700501/*
502 * FUNCTION: WDA_prepareConfigTLV
503 * Function to prepare CFG for DAL(WDA)
504 */
505VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
506 WDI_StartReqParamsType *wdiStartParams )
507{
508 /* get pMac to acess CFG data base */
509 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
510 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
511 tHalCfg *tlvStruct = NULL ;
512 tANI_U8 *tlvStructStart = NULL ;
513 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
514 v_PVOID_t *configParam;
515 tANI_U32 configParamSize;
516 tANI_U32 *configDataValue;
517 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700518 tANI_U8 i;
519
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 if ((NULL == pMac)||(NULL == wdaContext))
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 VOS_ASSERT(0);
525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
528 WNI_CFG_STA_ID_LEN +
529 WNI_CFG_EDCA_WME_ACBK_LEN +
530 WNI_CFG_EDCA_WME_ACBE_LEN +
531 WNI_CFG_EDCA_WME_ACVI_LEN +
532 WNI_CFG_EDCA_WME_ACVO_LEN +
533 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 /* malloc memory for all configs in one shot */
535 configParam = vos_mem_malloc(configParamSize);
536
537 if(NULL == configParam )
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 VOS_ASSERT(0) ;
542 return VOS_STATUS_E_NOMEM;
543 }
544 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 tlvStruct = (tHalCfg *)configParam;
547 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 /* TODO: Remove Later */
549 /* QWLAN_HAL_CFG_STA_ID */
550 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
551 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
552 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
553 eSIR_SUCCESS)
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
556 "Failed to get value for WNI_CFG_STA_ID");
557 goto handle_failure;
558 }
559 tlvStruct->length = strLength ;
560 /* calculate the pad bytes to have the CFG in aligned format */
561 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
562 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
564 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
566 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
567 tlvStruct->length = sizeof(tANI_U32);
568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
569 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
570 != eSIR_SUCCESS)
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
573 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
574 goto handle_failure;
575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
577 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
579 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
580 tlvStruct->length = sizeof(tANI_U32);
581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
582 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
583 eSIR_SUCCESS)
584 {
585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
586 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
587 goto handle_failure;
588 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
590 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
592 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
593 tlvStruct->length = sizeof(tANI_U32);
594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
595 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
596 != eSIR_SUCCESS)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
599 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
600 goto handle_failure;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
603 + sizeof(tHalCfg) + tlvStruct->length)) ;
604
605 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
606 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
610 configDataValue ) != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CAL_PERIOD */
619 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
623 != eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CAL_PERIOD");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_CAL_CONTROL */
632 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_CAL_CONTROL");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 /* QWLAN_HAL_CFG_PROXIMITY */
645 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
646 tlvStruct->length = sizeof(tANI_U32);
647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
648 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
649 != eSIR_SUCCESS)
650 {
651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
652 "Failed to get value for WNI_CFG_PROXIMITY");
653 goto handle_failure;
654 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
656 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
658 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
659 tlvStruct->length = sizeof(tANI_U32);
660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
661 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
662 != eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
666 goto handle_failure;
667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
669 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
671 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
672 tlvStruct->length = sizeof(tANI_U32);
673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
674 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
675 eSIR_SUCCESS)
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
679 goto handle_failure;
680 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
682 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
684 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
688 configDataValue ) != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
692 goto handle_failure;
693 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
697 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
701 eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
705 goto handle_failure;
706 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
708 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
710 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
714 eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
718 goto handle_failure;
719 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
721 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
723 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
724 tlvStruct->length = sizeof(tANI_U32);
725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
726 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
727 eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
731 goto handle_failure;
732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
734 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
736 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
740 configDataValue ) != eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
744 goto handle_failure;
745 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
747 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
749 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
753 configDataValue ) != eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length));
761
762 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
763 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
767 configDataValue ) != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
776 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length));
788
789 /* QWLAN_HAL_CFG_FIXED_RATE */
790 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_FIXED_RATE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length));
802
803 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
804 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
816
817 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
818 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
831 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
832 tlvStruct->length = sizeof(tANI_U32);
833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
834 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
835 configDataValue ) != eSIR_SUCCESS)
836 {
837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
838 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
839 goto handle_failure;
840 }
841 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
842 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
844 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
848 configDataValue ) != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
857 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
858 tlvStruct->length = sizeof(tANI_U32);
859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
860 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
861 configDataValue ) != eSIR_SUCCESS)
862 {
863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
864 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
865 goto handle_failure;
866 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
868 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700869 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
882
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
884 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
885 tlvStruct->length = sizeof(tANI_U32);
886 configDataValue = (tANI_U32 *)(tlvStruct + 1);
887 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
888 configDataValue ) != eSIR_SUCCESS)
889 {
890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
891 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
892 goto handle_failure;
893 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700894 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
895 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700896 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
897 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
901 configDataValue ) != eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
910 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
914 eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
922
923 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
924 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
925 tlvStruct->length = sizeof(tANI_U32);
926 configDataValue = (tANI_U32 *)(tlvStruct + 1);
927 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
928 configDataValue ) != eSIR_SUCCESS)
929 {
930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
931 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
932 goto handle_failure;
933 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700934 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
935 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
937 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
950 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
963 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length);
975
976 /* QWLAN_HAL_CFG_STATS_PERIOD */
977 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
978 tlvStruct->length = sizeof(tANI_U32);
979 configDataValue = (tANI_U32 *)(tlvStruct + 1);
980 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
981 eSIR_SUCCESS)
982 {
983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
984 "Failed to get value for WNI_CFG_STATS_PERIOD");
985 goto handle_failure;
986 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700987 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
988 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
990 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
994 eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1003 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1007 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001008 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1009 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1011 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1012 tlvStruct->length = sizeof(tANI_U32);
1013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1014 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1015 != eSIR_SUCCESS)
1016 {
1017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1018 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1019 goto handle_failure;
1020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1022 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1024 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1025 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1027 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1028 &strLength) != eSIR_SUCCESS)
1029 {
1030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1031 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1032 goto handle_failure;
1033 }
1034 tlvStruct->length = strLength;
1035 /* calculate the pad bytes to have the CFG in aligned format */
1036 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1037 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001038 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1039 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1041 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1042 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1043 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1044 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1045 &strLength) != eSIR_SUCCESS)
1046 {
1047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1048 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1049 goto handle_failure;
1050 }
1051 tlvStruct->length = strLength;
1052 /* calculate the pad bytes to have the CFG in aligned format */
1053 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1054 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001055 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1056 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1058 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1059 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1060 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1061 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1062 &strLength) != eSIR_SUCCESS)
1063 {
1064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1065 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1066 goto handle_failure;
1067 }
1068 tlvStruct->length = strLength;
1069 /* calculate the pad bytes to have the CFG in aligned format */
1070 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1071 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001072 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1073 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001074 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1075 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1076 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1077 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1078 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1079 &strLength) != eSIR_SUCCESS)
1080 {
1081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1082 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1083 goto handle_failure;
1084 }
1085 tlvStruct->length = strLength;
1086 /* calculate the pad bytes to have the CFG in aligned format */
1087 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1088 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001089 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1090 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1092 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1093 tlvStruct->length = sizeof(tANI_U32);
1094 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1095 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1096 != eSIR_SUCCESS)
1097 {
1098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1099 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1100 goto handle_failure;
1101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1103 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1105 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1106 tlvStruct->length = sizeof(tANI_U32);
1107 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1108 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1109 != eSIR_SUCCESS)
1110 {
1111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1112 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1113 goto handle_failure;
1114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1116 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1118 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1119 tlvStruct->length = sizeof(tANI_U32);
1120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1121 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1122 != eSIR_SUCCESS)
1123 {
1124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1125 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1126 goto handle_failure;
1127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1129 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1131 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1132 tlvStruct->length = sizeof(tANI_U32);
1133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1134 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1135 != eSIR_SUCCESS)
1136 {
1137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1138 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1139 goto handle_failure;
1140 }
1141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1142 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1144 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1145 tlvStruct->length = sizeof(tANI_U32);
1146 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1147 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1148 != eSIR_SUCCESS)
1149 {
1150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1151 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1152 goto handle_failure;
1153 }
1154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1157 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1158 tlvStruct->length = sizeof(tANI_U32);
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1161 != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1165 goto handle_failure;
1166 }
1167 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1168 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001169 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1170 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1171 tlvStruct->length = sizeof(tANI_U32);
1172 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1173 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1174 != eSIR_SUCCESS)
1175 {
1176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1177 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1178 goto handle_failure;
1179 }
1180 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1181 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001182 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1183 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1184 tlvStruct->length = sizeof(tANI_U32);
1185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1186 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1187 != eSIR_SUCCESS)
1188 {
1189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1190 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1191 goto handle_failure;
1192 }
1193 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1194 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1196 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1204 goto handle_failure;
1205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1209 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1222 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1226 != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1230 goto handle_failure;
1231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1233 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1235 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1236 * into FW, so the parameters are added here.
1237 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001238 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1239 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1240 tlvStruct->length = sizeof(tANI_U32);
1241 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1242 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1243 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1244 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1246 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1247 tlvStruct->length = sizeof(tANI_U32);
1248 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1249 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1250 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1251 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1253 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1254 tlvStruct->length = sizeof(tANI_U32);
1255 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1256 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001259 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1260 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1261 tlvStruct->length = sizeof(tANI_U32);
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1264 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1265 + sizeof(tHalCfg) + tlvStruct->length) ;
1266
1267 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1268 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1269 tlvStruct->length = sizeof(tANI_U32);
1270 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1271 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1272 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1273 + sizeof(tHalCfg) + tlvStruct->length) ;
1274
1275 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1276 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1277 tlvStruct->length = sizeof(tANI_U32);
1278 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1279 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1280 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1281 + sizeof(tHalCfg) + tlvStruct->length) ;
1282
1283 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1284 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1285 tlvStruct->length = sizeof(tANI_U32);
1286 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1287 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1288 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1289 + sizeof(tHalCfg) + tlvStruct->length) ;
1290
1291 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1292 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1293 tlvStruct->length = sizeof(tANI_U32);
1294 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1295 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1296 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1297 + sizeof(tHalCfg) + tlvStruct->length) ;
1298
1299 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1300 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1301 tlvStruct->length = sizeof(tANI_U32);
1302 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1303 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1304 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1305 + sizeof(tHalCfg) + tlvStruct->length) ;
1306
1307 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1308 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1309 tlvStruct->length = sizeof(tANI_U32);
1310 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1311 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1312 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1313 + sizeof(tHalCfg) + tlvStruct->length) ;
1314
1315 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1316 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1317 tlvStruct->length = sizeof(tANI_U32);
1318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1319 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1320 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1321 + sizeof(tHalCfg) + tlvStruct->length) ;
1322
1323 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1324 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1325 tlvStruct->length = sizeof(tANI_U32);
1326 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1327 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1328 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1329 + sizeof(tHalCfg) + tlvStruct->length) ;
1330
1331 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1332 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1333 tlvStruct->length = sizeof(tANI_U32);
1334 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1335 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1336 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1337 + sizeof(tHalCfg) + tlvStruct->length) ;
1338
1339 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1340 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1341 tlvStruct->length = sizeof(tANI_U32);
1342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1343 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1344 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1345 + sizeof(tHalCfg) + tlvStruct->length) ;
1346
1347 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1348 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1349 tlvStruct->length = sizeof(tANI_U32);
1350 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1351 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
1354
1355 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1356 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1357 tlvStruct->length = sizeof(tANI_U32);
1358 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1359 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1360 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1361 + sizeof(tHalCfg) + tlvStruct->length) ;
1362
Wilson Tsaof8b37942013-09-06 10:49:00 -07001363 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1364 {
1365 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1366 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1370 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1371 + sizeof(tHalCfg) + tlvStruct->length) ;
1372
1373 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1374 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1375 tlvStruct->length = sizeof(tANI_U32);
1376 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1377 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1378 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1379 + sizeof(tHalCfg) + tlvStruct->length) ;
1380
1381 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1382 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1383 tlvStruct->length = sizeof(tANI_U32);
1384 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1385 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1386 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1387 + sizeof(tHalCfg) + tlvStruct->length) ;
1388
1389 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1390 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1391 tlvStruct->length = sizeof(tANI_U32);
1392 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1393 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1394 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1395 + sizeof(tHalCfg) + tlvStruct->length) ;
1396 }
1397
1398 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1399 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1400 tlvStruct->length = sizeof(tANI_U32);
1401 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1402 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
1405
1406 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1407 {
1408 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1409 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1410 tlvStruct->length = sizeof(tANI_U32);
1411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1412 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1413 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1414 + sizeof(tHalCfg) + tlvStruct->length) ;
1415 }
1416
1417 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1418 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1419 tlvStruct->length = sizeof(tANI_U32);
1420 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1421 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1422 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1423 + sizeof(tHalCfg) + tlvStruct->length) ;
1424
Jeff Johnson32d95a32012-09-10 13:15:23 -07001425 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001426 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1427 tlvStruct->length = sizeof(tANI_U32);
1428 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1429 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1430 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1431 wcnssCompiledApiVersion.minor,
1432 wcnssCompiledApiVersion.version,
1433 wcnssCompiledApiVersion.revision);
1434 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1435 + sizeof(tHalCfg) + tlvStruct->length) ;
1436
Jeff Johnsond13512a2012-07-17 11:42:19 -07001437 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1438 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1439 tlvStruct->length = sizeof(tANI_U32);
1440 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1441 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1442 configDataValue ) != eSIR_SUCCESS)
1443 {
1444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1445 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1446 goto handle_failure;
1447 }
1448
1449 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1450 + sizeof(tHalCfg) + tlvStruct->length) ;
1451 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1452 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1456 configDataValue ) != eSIR_SUCCESS)
1457 {
1458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1459 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1460 goto handle_failure;
1461 }
1462
1463 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1464 + sizeof(tHalCfg) + tlvStruct->length) ;
1465
1466 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1467 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1468 tlvStruct->length = sizeof(tANI_U32);
1469 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1470 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1471 != eSIR_SUCCESS)
1472 {
1473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1474 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1475 goto handle_failure;
1476 }
1477
1478 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1479 + sizeof(tHalCfg) + tlvStruct->length) ;
1480
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001481 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1482 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1483 tlvStruct->length = sizeof(tANI_U32);
1484 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1485 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1486 != eSIR_SUCCESS)
1487 {
1488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1489 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1490 goto handle_failure;
1491 }
1492
1493 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1494 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001495#ifdef WLAN_SOFTAP_VSTA_FEATURE
1496 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1497 tlvStruct->length = sizeof(tANI_U32);
1498 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1499 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1500 != eSIR_SUCCESS)
1501 {
1502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1503 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1504 goto handle_failure;
1505 }
1506
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
1509#endif
1510
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001511 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1512 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1513 tlvStruct->length = sizeof(tANI_U32);
1514 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1515
1516 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1517 != eSIR_SUCCESS)
1518 {
1519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1520 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1521 goto handle_failure;
1522 }
1523
1524 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1525 + sizeof(tHalCfg) + tlvStruct->length) ;
1526
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301527/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1528 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1529 tlvStruct->length = sizeof(tANI_U32);
1530 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1531 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1532 configDataValue ) != eSIR_SUCCESS)
1533 {
1534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1535 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1536 goto handle_failure;
1537 }
1538
1539 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1540 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301541#ifdef FEATURE_WLAN_TDLS
1542 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1543 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1544 tlvStruct->length = sizeof(tANI_U32);
1545 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1546 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1547 configDataValue ) != eSIR_SUCCESS)
1548 {
1549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1550 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1551 goto handle_failure;
1552 }
1553 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1554 + sizeof(tHalCfg) + tlvStruct->length) ;
1555
1556 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1557 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1558 tlvStruct->length = sizeof(tANI_U32);
1559 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1560 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1561 configDataValue ) != eSIR_SUCCESS)
1562 {
1563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1564 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1565 goto handle_failure;
1566 }
1567 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1568 + sizeof(tHalCfg) + tlvStruct->length) ;
1569 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1570 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1578 goto handle_failure;
1579 }
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301595 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1596 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1600 configDataValue ) != eSIR_SUCCESS)
1601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1603 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1604 goto handle_failure;
1605 }
1606 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1607 + sizeof(tHalCfg) + tlvStruct->length) ;
1608
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301609#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301610
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001611 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1612 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1613 tlvStruct->length = sizeof(tANI_U32);
1614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1615 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1616 configDataValue ) != eSIR_SUCCESS)
1617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1620 goto handle_failure;
1621 }
1622
1623 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1624 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001625
1626 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1627 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1628 tlvStruct->length = sizeof(tANI_U32);
1629 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1630 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1631 != eSIR_SUCCESS)
1632 {
1633 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1634 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1635 goto handle_failure;
1636 }
1637 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1638 + sizeof(tHalCfg) + tlvStruct->length));
1639
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301640 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1641 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1642 tlvStruct->length = sizeof(tANI_U32);
1643 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1644 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1645 configDataValue ) != eSIR_SUCCESS)
1646 {
1647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1648 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1649 goto handle_failure;
1650 }
1651
1652 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1653 + sizeof(tHalCfg) + tlvStruct->length) ;
1654
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301655 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1656 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1657 tlvStruct->length = sizeof(tANI_U32);
1658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1659 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1660 configDataValue ) != eSIR_SUCCESS)
1661 {
1662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1663 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1664 goto handle_failure;
1665 }
1666 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1667 + sizeof(tHalCfg) + tlvStruct->length) ;
1668
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301669 /* QWLAN_HAL_CFG_ATH_DISABLE */
1670 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1671 tlvStruct->length = sizeof(tANI_U32);
1672 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1673 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1674 configDataValue ) != eSIR_SUCCESS)
1675 {
1676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1677 "Failed to get value for WNI_CFG_ATH_DISABLE");
1678 goto handle_failure;
1679 }
1680 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1681 + sizeof(tHalCfg) + tlvStruct->length) ;
1682
c_hpothu6d7dc922013-12-02 12:36:41 +05301683 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1684 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1685 tlvStruct->length = sizeof(tANI_U32);
1686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1687 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1688 configDataValue ) != eSIR_SUCCESS)
1689 {
1690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1691 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1692 goto handle_failure;
1693 }
1694 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1695 + sizeof(tHalCfg) + tlvStruct->length) ;
1696
1697 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1698 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1699 tlvStruct->length = sizeof(tANI_U32);
1700 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1701 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1702 configDataValue ) != eSIR_SUCCESS)
1703 {
1704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1705 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1706 goto handle_failure;
1707 }
1708 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1709 + sizeof(tHalCfg) + tlvStruct->length) ;
1710
1711 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1712 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1713 tlvStruct->length = sizeof(tANI_U32);
1714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1715 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1716 configDataValue ) != eSIR_SUCCESS)
1717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1719 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1720 goto handle_failure;
1721 }
1722 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1723 + sizeof(tHalCfg) + tlvStruct->length) ;
1724
1725 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1726 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1727 tlvStruct->length = sizeof(tANI_U32);
1728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1729 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1730 configDataValue ) != eSIR_SUCCESS)
1731 {
1732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1733 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1734 goto handle_failure;
1735 }
1736 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1737 + sizeof(tHalCfg) + tlvStruct->length) ;
1738
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301739 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1740 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1741 tlvStruct->length = sizeof(tANI_U32);
1742 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1743 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1744 configDataValue ) != eSIR_SUCCESS)
1745 {
1746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1747 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1748 goto handle_failure;
1749 }
1750 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1751 + sizeof(tHalCfg) + tlvStruct->length) ;
1752
1753 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1754 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1755 tlvStruct->length = sizeof(tANI_U32);
1756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1757 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1758 configDataValue ) != eSIR_SUCCESS)
1759 {
1760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1761 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1762 goto handle_failure;
1763 }
1764 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1765 + sizeof(tHalCfg) + tlvStruct->length) ;
1766
1767 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1768 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1769 tlvStruct->length = sizeof(tANI_U32);
1770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1771 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1772 configDataValue ) != eSIR_SUCCESS)
1773 {
1774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1775 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1776 goto handle_failure;
1777 }
1778 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1779 + sizeof(tHalCfg) + tlvStruct->length) ;
1780
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001781 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1782 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1783 tlvStruct->length = sizeof(tANI_U32);
1784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1785 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1786 configDataValue ) != eSIR_SUCCESS)
1787 {
1788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1789 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1790 goto handle_failure;
1791 }
1792 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1793 + sizeof(tHalCfg) + tlvStruct->length) ;
1794
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001796#ifdef WLAN_DEBUG
1797 {
1798 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001799 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1800 "****** Dumping CFG TLV ***** ");
1801 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1802 {
1803 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1804 "%02x %02x %02x %02x %02x %02x %02x %02x",
1805 tlvStructStart[i],
1806 tlvStructStart[i+1],
1807 tlvStructStart[i+2],
1808 tlvStructStart[i+3],
1809 tlvStructStart[i+4],
1810 tlvStructStart[i+5],
1811 tlvStructStart[i+6],
1812 tlvStructStart[i+7]);
1813 }
1814 /* Dump the bytes in the last line*/
1815 for (; i < wdiStartParams->usConfigBufferLen; i++)
1816 {
1817 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1818 "%02x ",tlvStructStart[i]);
1819 }
1820 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1821 "**************************** ");
1822 }
1823#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001825handle_failure:
1826 vos_mem_free(configParam);
1827 return VOS_STATUS_E_FAILURE;
1828}
Jeff Johnson295189b2012-06-20 16:38:30 -07001829/*
1830 * FUNCTION: WDA_wdiCompleteCB
1831 * call the voss call back function
1832 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001833void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001834{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1836 tWDA_CbContext *wdaContext;
1837
1838 if(NULL == pWdaParams)
1839 {
1840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001841 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001842 VOS_ASSERT(0) ;
1843 return ;
1844 }
1845
1846 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1847
Jeff Johnson295189b2012-06-20 16:38:30 -07001848 if (NULL == wdaContext)
1849 {
1850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001851 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001852 return ;
1853 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001854
Jeff Johnson295189b2012-06-20 16:38:30 -07001855 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001856 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001857 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001859 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001860 vos_mem_free(pWdaParams);
1861
Jeff Johnson295189b2012-06-20 16:38:30 -07001862 if(WDI_STATUS_SUCCESS != status)
1863 {
1864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1865 "WDI stop callback returned failure" );
1866 VOS_ASSERT(0) ;
1867 }
1868 else
1869 {
1870 wdaContext->wdaState = WDA_STOP_STATE;
1871 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001872
Leo Chang9d76f622013-08-23 16:34:52 -07001873 /* FTM Driver stop procedure should be synced.
1874 * Stop and Close will happen on same context */
1875 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1876 {
1877 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1878 {
1879 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1880 "%s: FTM Stop Event Set Fail", __func__);
1881 VOS_ASSERT(0);
1882 }
1883 }
1884
Jeff Johnson295189b2012-06-20 16:38:30 -07001885 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001886 vos_WDAComplete_cback(wdaContext->pVosContext);
1887
Jeff Johnson295189b2012-06-20 16:38:30 -07001888 return ;
1889}
Jeff Johnson295189b2012-06-20 16:38:30 -07001890/*
1891 * FUNCTION: WDA_stop
1892 * call WDI_stop
1893 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001894VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1895{
1896 WDI_Status wdiStatus;
1897 VOS_STATUS status = VOS_STATUS_SUCCESS;
1898 WDI_StopReqParamsType *wdiStopReq;
1899 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001900 tWDA_ReqParams *pWdaParams ;
1901
Jeff Johnson295189b2012-06-20 16:38:30 -07001902 if (NULL == pWDA)
1903 {
1904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001905 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001906 VOS_ASSERT(0);
1907 return VOS_STATUS_E_FAILURE;
1908 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001909 if (pWDA->wdiFailed == true)
1910 {
1911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001912 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001913 return VOS_STATUS_E_ALREADY;
1914 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001915
Jeff Johnson295189b2012-06-20 16:38:30 -07001916 /* FTM mode stay START_STATE */
1917 if( (WDA_READY_STATE != pWDA->wdaState) &&
1918 (WDA_INIT_STATE != pWDA->wdaState) &&
1919 (WDA_START_STATE != pWDA->wdaState) )
1920 {
1921 VOS_ASSERT(0);
1922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001923 wdiStopReq = (WDI_StopReqParamsType *)
1924 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1925 if(NULL == wdiStopReq)
1926 {
1927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001929 VOS_ASSERT(0);
1930 return VOS_STATUS_E_NOMEM;
1931 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001932
Jeff Johnson295189b2012-06-20 16:38:30 -07001933 wdiStopReq->wdiStopReason = reason;
1934 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001935
1936 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1937 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001938 {
1939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001940 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001941 VOS_ASSERT(0);
1942 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001943 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001944 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001945
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001946 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1947 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001948 {
1949 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001950 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001951 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001952
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001953 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1954 pWdaParams->wdaMsgParam = NULL;
1955 pWdaParams->pWdaContext = pWDA;
1956
Jeff Johnson295189b2012-06-20 16:38:30 -07001957 /* call WDI stop */
1958 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001959 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1960
Jeff Johnson295189b2012-06-20 16:38:30 -07001961 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1962 {
1963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1964 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1966 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001967 status = VOS_STATUS_E_FAILURE;
1968 }
Leo Chang9d76f622013-08-23 16:34:52 -07001969
1970 /* FTM Driver stop procedure should be synced.
1971 * Stop and Close will happen on same context */
1972 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1973 {
1974 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1975 WDI_RESPONSE_TIMEOUT);
1976 if (status != VOS_STATUS_SUCCESS)
1977 {
1978 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1979 "%s: FTM Stop Timepoout", __func__);
1980 VOS_ASSERT(0);
1981 vos_event_reset(&pWDA->ftmStopDoneEvent);
1982 }
1983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001984 return status;
1985}
Jeff Johnson295189b2012-06-20 16:38:30 -07001986/*
1987 * FUNCTION: WDA_close
1988 * call WDI_close and free the WDA context
1989 */
1990VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1991{
Jeff Johnson43971f52012-07-17 12:26:56 -07001992 VOS_STATUS status = VOS_STATUS_SUCCESS;
1993 WDI_Status wstatus;
1994 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001995 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001996 if (NULL == wdaContext)
1997 {
1998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001999 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002000 return VOS_STATUS_E_FAILURE;
2001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002002 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2003 (WDA_STOP_STATE != wdaContext->wdaState))
2004 {
2005 VOS_ASSERT(0);
2006 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002007 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002008 wstatus = WDI_Close();
2009 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002010 {
2011 status = VOS_STATUS_E_FAILURE;
2012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002014 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002015 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2016 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002017 {
2018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002019 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 status = VOS_STATUS_E_FAILURE;
2021 }
2022
Jeff Johnson43971f52012-07-17 12:26:56 -07002023 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002024 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002025 {
2026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002027 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002028 status = VOS_STATUS_E_FAILURE;
2029 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002030 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002031 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002032 {
2033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002034 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002035 status = VOS_STATUS_E_FAILURE;
2036 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002037 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002038 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002039 {
2040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002041 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002042 status = VOS_STATUS_E_FAILURE;
2043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002045 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002046 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002047 {
2048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2049 "error in WDA close " );
2050 status = VOS_STATUS_E_FAILURE;
2051 }
2052 return status;
2053}
Jeff Johnson295189b2012-06-20 16:38:30 -07002054/*
2055 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2056 * returns 1 if the compiled version is greater than or equal to the input version
2057 */
2058
2059uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2060{
2061 VOS_STATUS status = VOS_STATUS_SUCCESS;
2062 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2063 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002065 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2066 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2067 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2068 (compiledVersion.revision >= revision)))
2069 return 1;
2070 else
2071 return 0;
2072}
Jeff Johnson295189b2012-06-20 16:38:30 -07002073/*
2074 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2075 * returns 1 if the compiled version is greater than or equal to the input version
2076 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002077uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2078{
2079 VOS_STATUS status = VOS_STATUS_SUCCESS;
2080 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2081 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002082 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002083 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2084 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2085 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2086 (reportedVersion.revision >= revision)))
2087 return 1;
2088 else
2089 return 0;
2090}
Jeff Johnson295189b2012-06-20 16:38:30 -07002091/*
2092 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2093 * Returns the version of the WCNSS WLAN API with which the HOST
2094 * device driver was compiled
2095 */
2096VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2097 tSirVersionType *pVersion)
2098{
2099 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002100 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002101 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002102 if ((NULL == pvosGCtx) || (NULL == pVersion))
2103 {
2104 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002105 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 VOS_ASSERT(0);
2107 return VOS_STATUS_E_FAILURE;
2108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002109 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2110 if (NULL == pWDA )
2111 {
2112 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002113 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002114 VOS_ASSERT(0);
2115 return VOS_STATUS_E_FAILURE;
2116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002117 *pVersion = pWDA->wcnssWlanCompiledVersion;
2118 return VOS_STATUS_SUCCESS;
2119}
Jeff Johnson295189b2012-06-20 16:38:30 -07002120/*
2121 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2122 * Returns the version of the WCNSS WLAN API with which the WCNSS
2123 * device driver was compiled
2124 */
2125VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2126 tSirVersionType *pVersion)
2127{
2128 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002129 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002130 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 if ((NULL == pvosGCtx) || (NULL == pVersion))
2132 {
2133 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002134 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002135 VOS_ASSERT(0);
2136 return VOS_STATUS_E_FAILURE;
2137 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002138 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2139 if (NULL == pWDA )
2140 {
2141 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002142 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002143 VOS_ASSERT(0);
2144 return VOS_STATUS_E_FAILURE;
2145 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002146 *pVersion = pWDA->wcnssWlanReportedVersion;
2147 return VOS_STATUS_SUCCESS;
2148}
Jeff Johnson295189b2012-06-20 16:38:30 -07002149/*
2150 * FUNCTION: WDA_GetWcnssSoftwareVersion
2151 * Returns the WCNSS Software version string
2152 */
2153VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2154 tANI_U8 *pVersion,
2155 tANI_U32 versionBufferSize)
2156{
2157 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002159 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002160 if ((NULL == pvosGCtx) || (NULL == pVersion))
2161 {
2162 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002163 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002164 VOS_ASSERT(0);
2165 return VOS_STATUS_E_FAILURE;
2166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002167 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2168 if (NULL == pWDA )
2169 {
2170 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002171 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002172 VOS_ASSERT(0);
2173 return VOS_STATUS_E_FAILURE;
2174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2176 return VOS_STATUS_SUCCESS;
2177}
Jeff Johnson295189b2012-06-20 16:38:30 -07002178/*
2179 * FUNCTION: WDA_GetWcnssHardwareVersion
2180 * Returns the WCNSS Hardware version string
2181 */
2182VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2183 tANI_U8 *pVersion,
2184 tANI_U32 versionBufferSize)
2185{
2186 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002188 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 if ((NULL == pvosGCtx) || (NULL == pVersion))
2190 {
2191 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002192 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002193 VOS_ASSERT(0);
2194 return VOS_STATUS_E_FAILURE;
2195 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2197 if (NULL == pWDA )
2198 {
2199 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002200 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002201 VOS_ASSERT(0);
2202 return VOS_STATUS_E_FAILURE;
2203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002204 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2205 return VOS_STATUS_SUCCESS;
2206}
Jeff Johnson295189b2012-06-20 16:38:30 -07002207/*
2208 * FUNCTION: WDA_WniCfgDnld
2209 * Trigger CFG Download
2210 */
2211VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2212{
2213 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002215 v_VOID_t *pFileImage = NULL;
2216 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002217 v_VOID_t *pCfgBinary = NULL;
2218 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002220
Jeff Johnson295189b2012-06-20 16:38:30 -07002221 if (NULL == pMac )
2222 {
2223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002224 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 VOS_ASSERT(0);
2226 return VOS_STATUS_E_FAILURE;
2227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 /* get the number of bytes in the CFG Binary... */
2229 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2230 &cbFileImageSize );
2231 if ( VOS_STATUS_E_NOMEM != vosStatus )
2232 {
2233 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2234 "Error obtaining binary size" );
2235 goto fail;
2236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002237 // malloc a buffer to read in the Configuration binary file.
2238 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 if ( NULL == pFileImage )
2240 {
2241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2242 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2243 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002244 vosStatus = VOS_STATUS_E_NOMEM;
2245 goto fail;
2246 }
2247
2248 /* Get the entire CFG file image... */
2249 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2250 &cbFileImageSize );
2251 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2252 {
2253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2254 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2255 cbFileImageSize );
2256 goto fail;
2257 }
2258
2259 /*
2260 * Validate the binary image. This function will return a pointer
2261 * and length where the CFG binary is located within the binary image file.
2262 */
2263 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2264 &pCfgBinary, &cbCfgBinarySize );
2265 if ( VOS_FALSE == bStatus )
2266 {
2267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2268 "Error: Cannot find STA CFG in binary image file" );
2269 vosStatus = VOS_STATUS_E_FAILURE;
2270 goto fail;
2271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002272 /*
2273 * TODO: call the config download function
2274 * for now calling the existing cfg download API
2275 */
2276 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002277 vosStatus = VOS_STATUS_SUCCESS;
2278
2279 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002280
2281fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002282 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 return vosStatus;
2284}
Jeff Johnson295189b2012-06-20 16:38:30 -07002285/* -----------------------------------------------------------------
2286 * WDI interface
2287 * -----------------------------------------------------------------
2288 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002289/*
2290 * FUNCTION: WDA_suspendDataTxCallback
2291 * call back function called from TL after suspend Transmission
2292 */
2293VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2294 v_U8_t* ucSTAId,
2295 VOS_STATUS vosStatus)
2296{
2297 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002299 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 if (NULL == pWDA )
2301 {
2302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002303 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 VOS_ASSERT(0);
2305 return VOS_STATUS_E_FAILURE;
2306 }
2307 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2308 {
2309 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2310 }
2311 else
2312 {
2313 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002315 /* Trigger the event to bring the WDA TL suspend function to come
2316 * out of wait*/
2317 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2318 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2319 {
2320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002321 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 /* If TL suspended had timedout before this callback was called, resume back
2324 * TL.*/
2325 if (pWDA->txSuspendTimedOut)
2326 {
2327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002328 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 WDA_ResumeDataTx(pWDA);
2330 pWDA->txSuspendTimedOut = FALSE;
2331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 return VOS_STATUS_SUCCESS;
2333}
Jeff Johnson295189b2012-06-20 16:38:30 -07002334/*
2335 * FUNCTION: WDA_suspendDataTx
2336 * Update TL to suspend the data Transmission
2337 */
2338VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2339{
2340 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2341 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002342
2343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002344 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002346 if (pWDA->txSuspendTimedOut)
2347 {
2348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002349 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002350 return status;
2351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002352 /* Reset the event to be not signalled */
2353 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2354 if(!VOS_IS_STATUS_SUCCESS(status))
2355 {
2356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002357 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002358 return VOS_STATUS_E_FAILURE;
2359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002360 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002361 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002362 WDA_SuspendDataTxCallback);
2363 if(status != VOS_STATUS_SUCCESS)
2364 {
2365 return status;
2366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002367 /* Wait for the event to be set by the TL, to get the response of
2368 * suspending the TX queues, this event should be set by the Callback
2369 * function called by TL*/
2370 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2371 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2372 if(!VOS_IS_STATUS_SUCCESS(status))
2373 {
2374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2375 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002376 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002377 /* Set this flag to true when TL suspend times out, so that when TL
2378 * suspend eventually happens and calls the callback, TL can be resumed
2379 * right away by looking at this flag when true.*/
2380 pWDA->txSuspendTimedOut = TRUE;
2381 }
2382 else
2383 {
2384 pWDA->txSuspendTimedOut = FALSE;
2385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2387 {
2388 status = VOS_STATUS_SUCCESS;
2389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 return status;
2391}
Jeff Johnson295189b2012-06-20 16:38:30 -07002392/*
2393 * FUNCTION: WDA_resumeDataTx
2394 * Update TL to resume the data Transmission
2395 */
2396VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2397{
2398 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002399
2400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002401 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002402
2403 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 return status;
2405}
Jeff Johnson295189b2012-06-20 16:38:30 -07002406/*
2407 * FUNCTION: WDA_InitScanReqCallback
2408 * Trigger Init SCAN callback
2409 */
2410void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2411{
2412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2413 tWDA_CbContext *pWDA;
2414 tInitScanParams *pWDA_ScanParam ;
2415 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002417 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 if(NULL == pWdaParams)
2419 {
2420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002421 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 VOS_ASSERT(0) ;
2423 return ;
2424 }
2425 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2426 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002427 if(NULL == pWDA_ScanParam)
2428 {
2429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002430 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002431 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2433 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 return ;
2435 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 if(WDI_STATUS_SUCCESS != wdiStatus)
2437 {
2438 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 if(VOS_STATUS_SUCCESS != status)
2440 {
2441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002442 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 }
2444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002445 /* free WDI command buffer */
2446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002447 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002448
Jeff Johnson295189b2012-06-20 16:38:30 -07002449
2450 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002451 /* without converting the Status to Failure or Success Just
2452 pass the same status to lim */
2453 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 /* send SCAN RSP message back to PE */
2455 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002456 return ;
2457}
2458
2459/*
2460 * FUNCTION: WDA_ProcessInitScanReq
2461 * Trigger Init SCAN in DAL
2462 */
2463VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2464 tInitScanParams *initScanParams)
2465{
2466 WDI_Status status = WDI_STATUS_SUCCESS ;
2467 WDI_InitScanReqParamsType *wdiInitScanParam =
2468 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2469 sizeof(WDI_InitScanReqParamsType)) ;
2470 tWDA_ReqParams *pWdaParams;
2471 tANI_U8 i = 0;
2472
2473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002474 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 if(NULL == wdiInitScanParam)
2476 {
2477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002478 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 VOS_ASSERT(0);
2480 return VOS_STATUS_E_NOMEM;
2481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2483 if(NULL == pWdaParams)
2484 {
2485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002487 VOS_ASSERT(0);
2488 vos_mem_free(wdiInitScanParam);
2489 return VOS_STATUS_E_NOMEM;
2490 }
2491
2492 /* Copy init Scan params to WDI structure */
2493 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2494 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2495 sizeof(tSirMacAddr)) ;
2496 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2497 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2498 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2500 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2502 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002503 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2504 {
2505 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2506 initScanParams->scanEntry.bssIdx[i] ;
2507 }
2508
2509 /* if Frame length, copy macMgmtHdr or WDI structure */
2510 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2511 {
2512 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2513 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2514 }
2515 wdiInitScanParam->wdiReqStatusCB = NULL ;
2516
Jeff Johnson295189b2012-06-20 16:38:30 -07002517 /* Store Init Req pointer, as this will be used for response */
2518 pWdaParams->pWdaContext = pWDA;
2519 pWdaParams->wdaMsgParam = initScanParams;
2520 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002521 /* first try to suspend TX */
2522 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 if(WDI_STATUS_SUCCESS != status)
2524 {
2525 goto handleWdiFailure;
2526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002527 /* call DAL API to pass init scan request to DAL */
2528 status = WDI_InitScanReq(wdiInitScanParam,
2529 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 if(IS_WDI_STATUS_FAILURE(status))
2531 {
2532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2533 "error in WDA Init Scan, Resume Tx " );
2534 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002535 VOS_ASSERT(0) ;
2536
2537 goto handleWdiFailure;
2538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002540handleWdiFailure:
2541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2542 "Failure in WDI Api, free all the memory " );
2543 /* free WDI command buffer */
2544 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2545 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 /* send Failure to PE */
2547 initScanParams->status = eSIR_FAILURE ;
2548 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002549 return CONVERT_WDI2VOS_STATUS(status) ;
2550}
2551
Jeff Johnson295189b2012-06-20 16:38:30 -07002552/*
2553 * FUNCTION: WDA_StartScanReqCallback
2554 * send Start SCAN RSP back to PE
2555 */
2556void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2557 void* pUserData)
2558{
2559 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2560 tWDA_CbContext *pWDA;
2561 tStartScanParams *pWDA_ScanParam;
2562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002563 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 if(NULL == pWdaParams)
2565 {
2566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002567 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 VOS_ASSERT(0) ;
2569 return ;
2570 }
2571 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2572 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 if(NULL == pWDA_ScanParam)
2574 {
2575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002576 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002578 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 return ;
2580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2582 {
2583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002584 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002586 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 return ;
2588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2590 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002591
Jeff Johnson295189b2012-06-20 16:38:30 -07002592
2593 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002594 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 /* send SCAN RSP message back to PE */
2596 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002597 return ;
2598}
2599
Jeff Johnson295189b2012-06-20 16:38:30 -07002600/*
2601 * FUNCTION: WDA_ProcessStartScanReq
2602 * Trigger start SCAN in WDI
2603 */
2604VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2605 tStartScanParams *startScanParams)
2606{
2607 WDI_Status status = WDI_STATUS_SUCCESS;
2608 WDI_StartScanReqParamsType *wdiStartScanParams =
2609 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2610 sizeof(WDI_StartScanReqParamsType)) ;
2611 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002613 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002614 if(NULL == wdiStartScanParams)
2615 {
2616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 VOS_ASSERT(0);
2619 return VOS_STATUS_E_NOMEM;
2620 }
2621 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2622 if(NULL == pWdaParams)
2623 {
2624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 VOS_ASSERT(0);
2627 vos_mem_free(wdiStartScanParams);
2628 return VOS_STATUS_E_NOMEM;
2629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002630 /* Copy init Scan params to WDI structure */
2631 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2632 wdiStartScanParams->wdiReqStatusCB = NULL ;
2633
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 /* Store Init Req pointer, as this will be used for response */
2635 /* store Params pass it to WDI */
2636 pWdaParams->pWdaContext = pWDA;
2637 pWdaParams->wdaMsgParam = startScanParams;
2638 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 /* call DAL API to pass init scan request to DAL */
2640 status = WDI_StartScanReq(wdiStartScanParams,
2641 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 /* failure returned by WDI API */
2643 if(IS_WDI_STATUS_FAILURE(status))
2644 {
2645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2646 "Failure in Start Scan WDI API, free all the memory "
2647 "It should be due to previous abort scan." );
2648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2649 vos_mem_free(pWdaParams) ;
2650 startScanParams->status = eSIR_FAILURE ;
2651 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002653 return CONVERT_WDI2VOS_STATUS(status) ;
2654}
Jeff Johnson295189b2012-06-20 16:38:30 -07002655/*
2656 * FUNCTION: WDA_EndScanReqCallback
2657 * END SCAN callback
2658 */
2659void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2660{
2661 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2662 tWDA_CbContext *pWDA;
2663 tEndScanParams *endScanParam;
2664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002665 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 if(NULL == pWdaParams)
2667 {
2668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002669 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 VOS_ASSERT(0) ;
2671 return ;
2672 }
2673 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2674 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 if(NULL == endScanParam)
2676 {
2677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002678 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2681 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 return ;
2683 }
2684
2685 /* Free WDI command buffer */
2686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2687 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002689 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 /* send response back to PE */
2691 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2692 return ;
2693}
2694
Jeff Johnson295189b2012-06-20 16:38:30 -07002695/*
2696 * FUNCTION: WDA_ProcessEndScanReq
2697 * Trigger END SCAN in WDI
2698 */
2699VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2700 tEndScanParams *endScanParams)
2701{
2702 WDI_Status status = WDI_STATUS_SUCCESS;
2703 WDI_EndScanReqParamsType *wdiEndScanParams =
2704 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2705 sizeof(WDI_EndScanReqParamsType)) ;
2706 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002708 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002709 if(NULL == wdiEndScanParams)
2710 {
2711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002712 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 VOS_ASSERT(0);
2714 return VOS_STATUS_E_NOMEM;
2715 }
2716 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2717 if(NULL == pWdaParams)
2718 {
2719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002721 VOS_ASSERT(0);
2722 vos_mem_free(wdiEndScanParams);
2723 return VOS_STATUS_E_NOMEM;
2724 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002725 /* Copy init Scan params to WDI structure */
2726 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2727 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002728 /* Store Init Req pointer, as this will be used for response */
2729 /* store Params pass it to WDI */
2730 pWdaParams->pWdaContext = pWDA;
2731 pWdaParams->wdaMsgParam = endScanParams;
2732 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 /* call DAL API to pass init scan request to DAL */
2734 status = WDI_EndScanReq(wdiEndScanParams,
2735 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 if(IS_WDI_STATUS_FAILURE(status))
2737 {
2738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2739 "Failure in End Scan WDI API, free all the memory "
2740 "It should be due to previous abort scan." );
2741 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2742 vos_mem_free(pWdaParams) ;
2743 endScanParams->status = eSIR_FAILURE ;
2744 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 return CONVERT_WDI2VOS_STATUS(status) ;
2747}
Jeff Johnson295189b2012-06-20 16:38:30 -07002748/*
2749 * FUNCTION: WDA_FinishScanReqCallback
2750 * Trigger Finish SCAN callback
2751 */
2752void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2753{
2754 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2755 tWDA_CbContext *pWDA;
2756 tFinishScanParams *finishScanParam;
2757 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002759 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 if(NULL == pWdaParams)
2761 {
2762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002763 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 VOS_ASSERT(0) ;
2765 return ;
2766 }
2767
2768 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2769 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002770 if(NULL == finishScanParam)
2771 {
2772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002773 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2776 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 return ;
2778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2780 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 /*
2782 * Now Resume TX, if we reached here means, TX is already suspended, we
2783 * have to resume it unconditionaly
2784 */
2785 status = WDA_ResumeDataTx(pWDA) ;
2786
2787 if(VOS_STATUS_SUCCESS != status)
2788 {
2789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002790 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002792 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2794 return ;
2795}
Jeff Johnson295189b2012-06-20 16:38:30 -07002796/*
2797 * FUNCTION: WDA_ProcessFinshScanReq
2798 * Trigger Finish SCAN in WDI
2799 */
2800VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2801 tFinishScanParams *finishScanParams)
2802{
2803 WDI_Status status = WDI_STATUS_SUCCESS;
2804 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2805 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2806 sizeof(WDI_FinishScanReqParamsType)) ;
2807 tWDA_ReqParams *pWdaParams ;
2808 tANI_U8 i = 0;
2809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002810 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 if(NULL == wdiFinishScanParams)
2812 {
2813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 VOS_ASSERT(0);
2816 return VOS_STATUS_E_NOMEM;
2817 }
2818 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2819 if(NULL == pWdaParams)
2820 {
2821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002822 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002823 VOS_ASSERT(0);
2824 vos_mem_free(wdiFinishScanParams);
2825 return VOS_STATUS_E_NOMEM;
2826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002827 /* Copy init Scan params to WDI structure */
2828 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2829 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2830 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2832 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2833 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2834 finishScanParams->frameLength ;
2835 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2836 finishScanParams->currentOperChannel ;
2837 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2838 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2839 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2841 {
2842 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2843 finishScanParams->scanEntry.bssIdx[i] ;
2844 }
2845
2846
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 /* if Frame length, copy macMgmtHdr ro WDI structure */
2848 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2849 {
2850 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2851 &finishScanParams->macMgmtHdr,
2852 sizeof(WDI_MacMgmtHdr)) ;
2853 }
2854 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 /* Store Init Req pointer, as this will be used for response */
2856 /* store Params pass it to WDI */
2857 pWdaParams->pWdaContext = pWDA;
2858 pWdaParams->wdaMsgParam = finishScanParams;
2859 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 /* call DAL API to pass init scan request to DAL */
2861 status = WDI_FinishScanReq(wdiFinishScanParams,
2862 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002863
Jeff Johnson295189b2012-06-20 16:38:30 -07002864
2865 /*
2866 * WDI API returns failure..
2867 */
2868 if(IS_WDI_STATUS_FAILURE( status))
2869 {
2870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2871 "Failure in Finish Scan WDI API, free all the memory " );
2872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2873 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 finishScanParams->status = eSIR_FAILURE ;
2875 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 return CONVERT_WDI2VOS_STATUS(status) ;
2878}
Jeff Johnson295189b2012-06-20 16:38:30 -07002879/*---------------------------------------------------------------------
2880 * ASSOC API's
2881 *---------------------------------------------------------------------
2882 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002883/*
2884 * FUNCTION: WDA_JoinReqCallback
2885 * Trigger Init SCAN callback
2886 */
2887void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2888{
2889 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2890 tWDA_CbContext *pWDA;
2891 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002893 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002894 if(NULL == pWdaParams)
2895 {
2896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002897 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 VOS_ASSERT(0) ;
2899 return ;
2900 }
2901 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2902 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2904 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 /* reset macBSSID */
2906 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002907 /* reset macSTASelf */
2908 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002909 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 return ;
2912}
Jeff Johnson295189b2012-06-20 16:38:30 -07002913/*
2914 * FUNCTION: WDA_ProcessJoinReq
2915 * Trigger Join REQ in WDI
2916 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002917VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2918 tSwitchChannelParams* joinReqParam)
2919{
2920 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002921 WDI_JoinReqParamsType *wdiJoinReqParam =
2922 (WDI_JoinReqParamsType *)vos_mem_malloc(
2923 sizeof(WDI_JoinReqParamsType)) ;
2924 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002926 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002927 if(NULL == wdiJoinReqParam)
2928 {
2929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002932 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 return VOS_STATUS_E_NOMEM;
2934 }
2935 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2936 if(NULL == pWdaParams)
2937 {
2938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002940 VOS_ASSERT(0);
2941 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002942 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 return VOS_STATUS_E_NOMEM;
2944 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002945
2946 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2947 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2948 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2949 {
2950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2951 "%s: received join request when BSSID or self-STA is NULL "
2952 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002953 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002954 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2955 VOS_ASSERT(0);
2956 vos_mem_free(wdiJoinReqParam);
2957 vos_mem_free(pWdaParams);
2958 joinReqParam->status = eSIR_FAILURE ;
2959 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2960 return VOS_STATUS_E_INVAL;
2961 }
2962
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 /* copy the BSSID for pWDA */
2964 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2965 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2967 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2969 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002970#ifdef WLAN_FEATURE_VOWIFI
2971 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2972 joinReqParam->maxTxPower ;
2973#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2975 joinReqParam->localPowerConstraint ;
2976#endif
2977 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2978 joinReqParam->secondaryChannelOffset ;
2979 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2980
2981 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 /* Store Init Req pointer, as this will be used for response */
2983 /* store Params pass it to WDI */
2984 pWdaParams->pWdaContext = pWDA;
2985 pWdaParams->wdaMsgParam = joinReqParam;
2986 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 status = WDI_JoinReq(wdiJoinReqParam,
2988 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 if(IS_WDI_STATUS_FAILURE(status))
2990 {
2991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2992 "Failure in Join WDI API, free all the memory " );
2993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2994 vos_mem_free(pWdaParams) ;
2995 joinReqParam->status = eSIR_FAILURE ;
2996 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 return CONVERT_WDI2VOS_STATUS(status) ;
2999}
Jeff Johnson295189b2012-06-20 16:38:30 -07003000/*
3001 * FUNCTION: WDA_SwitchChannelReqCallback
3002 * send Switch channel RSP back to PE
3003 */
3004void WDA_SwitchChannelReqCallback(
3005 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3006{
3007 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3008 tWDA_CbContext *pWDA;
3009 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003011 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003012 if(NULL == pWdaParams)
3013 {
3014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003015 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 VOS_ASSERT(0) ;
3017 return ;
3018 }
3019 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3020 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3021
3022#ifdef WLAN_FEATURE_VOWIFI
3023 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3024#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3026 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003028 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003030 return ;
3031}
Jeff Johnson295189b2012-06-20 16:38:30 -07003032/*
3033 * FUNCTION: WDA_ProcessChannelSwitchReq
3034 * Request to WDI to switch channel REQ params.
3035 */
3036VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3037 tSwitchChannelParams *pSwitchChanParams)
3038{
3039 WDI_Status status = WDI_STATUS_SUCCESS ;
3040 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3041 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3042 sizeof(WDI_SwitchChReqParamsType)) ;
3043 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003045 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 if(NULL == wdiSwitchChanParam)
3047 {
3048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003049 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003050 VOS_ASSERT(0);
3051 return VOS_STATUS_E_NOMEM;
3052 }
3053 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3054 if(NULL == pWdaParams)
3055 {
3056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 VOS_ASSERT(0);
3059 vos_mem_free(wdiSwitchChanParam);
3060 return VOS_STATUS_E_NOMEM;
3061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3063#ifndef WLAN_FEATURE_VOWIFI
3064 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3065 pSwitchChanParams->localPowerConstraint;
3066#endif
3067 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3068 pSwitchChanParams->secondaryChannelOffset;
3069 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 /* Store req pointer, as this will be used for response */
3071 /* store Params pass it to WDI */
3072 pWdaParams->pWdaContext = pWDA;
3073 pWdaParams->wdaMsgParam = pSwitchChanParams;
3074 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003075#ifdef WLAN_FEATURE_VOWIFI
3076 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3077 = pSwitchChanParams->maxTxPower;
3078 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3079 pSwitchChanParams ->selfStaMacAddr,
3080 sizeof(tSirMacAddr));
3081#endif
3082 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3083 pSwitchChanParams->bssId,
3084 sizeof(tSirMacAddr));
3085
3086 status = WDI_SwitchChReq(wdiSwitchChanParam,
3087 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 if(IS_WDI_STATUS_FAILURE(status))
3089 {
3090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3091 "Failure in process channel switch Req WDI API, free all the memory " );
3092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3093 vos_mem_free(pWdaParams) ;
3094 pSwitchChanParams->status = eSIR_FAILURE ;
3095 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 return CONVERT_WDI2VOS_STATUS(status) ;
3098}
Jeff Johnson295189b2012-06-20 16:38:30 -07003099/*
3100 * FUNCTION: WDA_ConfigBssReqCallback
3101 * config BSS Req Callback, called by WDI
3102 */
3103void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3104 ,void* pUserData)
3105{
3106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3107 tWDA_CbContext *pWDA;
3108 tAddBssParams *configBssReqParam;
3109 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003111 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 if(NULL == pWdaParams)
3113 {
3114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003115 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 VOS_ASSERT(0) ;
3117 return ;
3118 }
3119 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3120 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3121 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003123 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3125 {
3126 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3127 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3129 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3130 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3131
3132 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3133 {
3134 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3135 {
3136 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3137 staConfigBssParam->staType = STA_ENTRY_BSSID;
3138 }
3139 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3140 (staConfigBssParam->staType == STA_ENTRY_SELF))
3141 {
3142 /* This is the 1st add BSS Req for the BTAMP STA */
3143 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3144 staConfigBssParam->staType = STA_ENTRY_BSSID;
3145 }
3146 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3147 (staConfigBssParam->staType == STA_ENTRY_PEER))
3148 {
3149 /* This is the 2nd ADD BSS Request that is sent
3150 * on the BTAMP STA side. The Sta type is
3151 * set to STA_ENTRY_PEER here.*/
3152 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3153 }
3154 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3155 (staConfigBssParam->staType == STA_ENTRY_SELF))
3156 {
3157 /* statype is already set by PE.
3158 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3159 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3160 staConfigBssParam->staType = STA_ENTRY_BSSID;
3161 }
3162 else
3163 {
3164 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3165 staConfigBssParam->staType = STA_ENTRY_PEER;
3166 }
3167 }
3168 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3169 {
3170 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3171 staConfigBssParam->staType = STA_ENTRY_SELF;
3172 }
3173 else
3174 {
3175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3176 "Invalid operation mode specified");
3177 VOS_ASSERT(0);
3178 }
3179
3180 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3185 sizeof(tSirMacAddr));
3186 staConfigBssParam->txChannelWidthSet =
3187 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003188 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3189 staConfigBssParam->htCapable)
3190 {
3191 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3192 wdiConfigBssRsp->ucBSSIdx;
3193 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3194 WDA_VALID_STA_INDEX ;
3195 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003196 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3197 wdiConfigBssRsp->ucBSSIdx,
3198 wdiConfigBssRsp->ucSTAIdx))
3199 {
3200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003201 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 VOS_ASSERT(0) ;
3203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003204 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3205 {
3206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003207 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 VOS_ASSERT(0) ;
3209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003210#ifdef WLAN_FEATURE_VOWIFI
3211 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3212#endif
3213 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3215 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 return ;
3218}
Jeff Johnson295189b2012-06-20 16:38:30 -07003219/*
3220 * FUNCTION: WDA_UpdateEdcaParamsForAC
3221 * Update WDI EDCA params with PE edca params
3222 */
3223void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3224 WDI_EdcaParamRecord *wdiEdcaParam,
3225 tSirMacEdcaParamRecord *macEdcaParam)
3226{
3227 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3228 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3229 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3230 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3231 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3232 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3233}
Jeff Johnson295189b2012-06-20 16:38:30 -07003234/*
3235 * FUNCTION: WDA_ProcessConfigBssReq
3236 * Configure BSS before starting Assoc with AP
3237 */
3238VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3239 tAddBssParams* configBssReqParam)
3240{
3241 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303242 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003243 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003245 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303246 if (NULL == configBssReqParam)
3247 {
3248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3249 "%s: configBssReqParam is NULL", __func__);
3250 return VOS_STATUS_E_INVAL;
3251 }
3252
3253 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3254 sizeof(WDI_ConfigBSSReqParamsType)) ;
3255
Jeff Johnson295189b2012-06-20 16:38:30 -07003256 if(NULL == wdiConfigBssReqParam)
3257 {
3258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003259 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 VOS_ASSERT(0);
3261 return VOS_STATUS_E_NOMEM;
3262 }
3263 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3264 if(NULL == pWdaParams)
3265 {
3266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003268 VOS_ASSERT(0);
3269 vos_mem_free(wdiConfigBssReqParam);
3270 return VOS_STATUS_E_NOMEM;
3271 }
Kiran4a17ebe2013-01-31 10:43:43 -08003272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3273 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3276 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003277 /* Store Init Req pointer, as this will be used for response */
3278 /* store Params pass it to WDI */
3279 pWdaParams->pWdaContext = pWDA;
3280 pWdaParams->wdaMsgParam = configBssReqParam;
3281 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003282 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3283 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 if(IS_WDI_STATUS_FAILURE(status))
3285 {
3286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3287 "Failure in Config BSS WDI API, free all the memory " );
3288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3289 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 return CONVERT_WDI2VOS_STATUS(status) ;
3294}
Jeff Johnson295189b2012-06-20 16:38:30 -07003295#ifdef ENABLE_HAL_COMBINED_MESSAGES
3296/*
3297 * FUNCTION: WDA_PostAssocReqCallback
3298 * Post ASSOC req callback, send RSP back to PE
3299 */
3300void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3301 void* pUserData)
3302{
3303 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3304 tPostAssocParams *postAssocReqParam =
3305 (tPostAssocParams *)pWDA->wdaMsgParam ;
3306 /*STA context within the BSS Params*/
3307 tAddStaParams *staPostAssocParam =
3308 &postAssocReqParam->addBssParams.staContext ;
3309 /*STA Params for self STA*/
3310 tAddStaParams *selfStaPostAssocParam =
3311 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003315 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3317 {
3318 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3319 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3320 sizeof(tSirMacAddr)) ;
3321 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3322 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3323 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3325 }
3326 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3327 pWDA->wdaWdiApiMsgParam = NULL;
3328 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 return ;
3331}
Jeff Johnson295189b2012-06-20 16:38:30 -07003332/*
3333 * FUNCTION: WDA_ProcessPostAssocReq
3334 * Trigger POST ASSOC processing in WDI
3335 */
3336VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3337 tPostAssocParams *postAssocReqParam)
3338{
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 WDI_Status status = WDI_STATUS_SUCCESS ;
3340
3341 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3342 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3343 sizeof(WDI_PostAssocReqParamsType)) ;
3344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003345 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003346
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 if(NULL == wdiPostAssocReqParam)
3348 {
3349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 VOS_ASSERT(0);
3352 return VOS_STATUS_E_NOMEM;
3353 }
3354
3355 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3356 {
3357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003358 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 VOS_ASSERT(0);
3360 return VOS_STATUS_E_FAILURE;
3361 }
3362
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 /* update BSS params into WDI structure */
3364 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3365 &postAssocReqParam->addBssParams) ;
3366 /* update STA params into WDI structure */
3367 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3368 &postAssocReqParam->addStaParams) ;
3369
3370 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3371 postAssocReqParam->addBssParams.highPerformance;
3372 WDA_UpdateEdcaParamsForAC(pWDA,
3373 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3374 &postAssocReqParam->addBssParams.acbe);
3375 WDA_UpdateEdcaParamsForAC(pWDA,
3376 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3377 &postAssocReqParam->addBssParams.acbk);
3378 WDA_UpdateEdcaParamsForAC(pWDA,
3379 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3380 &postAssocReqParam->addBssParams.acvi);
3381 WDA_UpdateEdcaParamsForAC(pWDA,
3382 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3383 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 /* Store Init Req pointer, as this will be used for response */
3385 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 /* store Params pass it to WDI */
3387 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3389 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003390 if(IS_WDI_STATUS_FAILURE(status))
3391 {
3392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3393 "Failure in Post Assoc WDI API, free all the memory " );
3394 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3395 pWDA->wdaWdiApiMsgParam = NULL;
3396 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3399 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 return CONVERT_WDI2VOS_STATUS(status) ;
3401}
3402#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003403/*
3404 * FUNCTION: WDA_AddStaReqCallback
3405 * ADD STA req callback, send RSP back to PE
3406 */
3407void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3408 void* pUserData)
3409{
3410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3411 tWDA_CbContext *pWDA;
3412 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003414 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 if(NULL == pWdaParams)
3416 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 VOS_ASSERT(0) ;
3419 return ;
3420 }
3421 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3422 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003423 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003424 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003425 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3426 {
3427 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3428 /*TODO: UMAC structure doesn't have these fields*/
3429 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3430 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3431 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3432 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3433 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3434 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003435#ifdef FEATURE_WLAN_TDLS
3436 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3437 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3438#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003440#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003441 {
3442 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3443 wdiConfigStaRsp->ucBssIdx;
3444 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3445 WDA_VALID_STA_INDEX ;
3446 }
3447 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3448 {
3449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003450 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003451 VOS_ASSERT(0) ;
3452 return ;
3453 }
3454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3456 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 return ;
3459}
Jeff Johnson295189b2012-06-20 16:38:30 -07003460/*
3461 * FUNCTION: WDA_ConfigStaReq
3462 * Trigger Config STA processing in WDI
3463 */
3464VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3465 tAddStaParams *addStaReqParam)
3466{
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003468 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3469 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3470 sizeof(WDI_ConfigSTAReqParamsType)) ;
3471 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003473 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003474 if(NULL == wdiConfigStaReqParam)
3475 {
3476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 VOS_ASSERT(0);
3479 return VOS_STATUS_E_NOMEM;
3480 }
3481 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3482 if(NULL == pWdaParams)
3483 {
3484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 VOS_ASSERT(0);
3487 vos_mem_free(wdiConfigStaReqParam);
3488 return VOS_STATUS_E_NOMEM;
3489 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 /* update STA params into WDI structure */
3492 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3493 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 /* Store Init Req pointer, as this will be used for response */
3495 /* store Params pass it to WDI */
3496 pWdaParams->pWdaContext = pWDA;
3497 pWdaParams->wdaMsgParam = addStaReqParam;
3498 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3500 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 if(IS_WDI_STATUS_FAILURE(status))
3502 {
3503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3504 "Failure in Config STA WDI API, free all the memory " );
3505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3506 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3509 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 return CONVERT_WDI2VOS_STATUS(status) ;
3511}
Jeff Johnson295189b2012-06-20 16:38:30 -07003512/*
3513 * FUNCTION: WDA_DelBSSReqCallback
3514 * Dens DEL BSS RSP back to PE
3515 */
3516void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3517 void* pUserData)
3518{
3519 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3520 tWDA_CbContext *pWDA;
3521 tDeleteBssParams *delBssReqParam;
3522 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003524 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 if(NULL == pWdaParams)
3526 {
3527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003528 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 VOS_ASSERT(0) ;
3530 return ;
3531 }
3532 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3533 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003534 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003535 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3536 {
3537 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3538 sizeof(tSirMacAddr)) ;
3539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003540 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3541 {
3542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003543 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 VOS_ASSERT(0) ;
3545 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003546 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3547 {
3548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003549 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003550 VOS_ASSERT(0) ;
3551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3553 {
3554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003555 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 VOS_ASSERT(0) ;
3557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3559 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 /* reset the the system role*/
3561 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3562
3563 /* Reset the BA related information */
3564 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3565 {
3566 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3567 {
3568 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3569 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3570 /* Reset framesTxed counters here */
3571 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3572 {
3573 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3574 }
3575 }
3576 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003578 return ;
3579}
3580
Jeff Johnson295189b2012-06-20 16:38:30 -07003581/*
3582 * FUNCTION: WDA_ProcessDelBssReq
3583 * Init DEL BSS req with WDI
3584 */
3585VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3586 tDeleteBssParams *delBssParam)
3587{
3588 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3590 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3591 sizeof(WDI_DelBSSReqParamsType)) ;
3592 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003594 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 if(NULL == wdiDelBssReqParam)
3596 {
3597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 VOS_ASSERT(0);
3600 return VOS_STATUS_E_NOMEM;
3601 }
3602 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3603 if(NULL == pWdaParams)
3604 {
3605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003606 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 VOS_ASSERT(0);
3608 vos_mem_free(wdiDelBssReqParam);
3609 return VOS_STATUS_E_NOMEM;
3610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003611 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3612 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3613
3614 /* Store Init Req pointer, as this will be used for response */
3615 /* store Params pass it to WDI */
3616 pWdaParams->pWdaContext = pWDA;
3617 pWdaParams->wdaMsgParam = delBssParam;
3618 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 status = WDI_DelBSSReq(wdiDelBssReqParam,
3620 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 if(IS_WDI_STATUS_FAILURE(status))
3622 {
3623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3624 "Failure in Del BSS WDI API, free all the memory " );
3625 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3626 vos_mem_free(pWdaParams) ;
3627 delBssParam->status = eSIR_FAILURE ;
3628 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003630 return CONVERT_WDI2VOS_STATUS(status) ;
3631}
Jeff Johnson295189b2012-06-20 16:38:30 -07003632/*
3633 * FUNCTION: WDA_DelSTAReqCallback
3634 * Dens DEL STA RSP back to PE
3635 */
3636void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3637 void* pUserData)
3638{
3639 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3640 tWDA_CbContext *pWDA;
3641 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003643 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 if(NULL == pWdaParams)
3645 {
3646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003647 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003648 VOS_ASSERT(0) ;
3649 return ;
3650 }
3651 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3652 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003653 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3655 {
3656 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3657 {
3658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003659 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003660 VOS_ASSERT(0) ;
3661 }
3662 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3663 }
3664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3665 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003666 /*Reset the BA information corresponding to this STAIdx */
3667 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3668 WDA_INVALID_STA_INDEX;
3669 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3670
3671 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 return ;
3673}
Jeff Johnson295189b2012-06-20 16:38:30 -07003674/*
3675 * FUNCTION: WDA_ProcessDelStaReq
3676 * Init DEL STA req with WDI
3677 */
3678VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3679 tDeleteStaParams *delStaParam)
3680{
3681 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3683 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3684 sizeof(WDI_DelSTAReqParamsType)) ;
3685 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003687 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003688 if(NULL == wdiDelStaReqParam)
3689 {
3690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003691 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003692 VOS_ASSERT(0);
3693 return VOS_STATUS_E_NOMEM;
3694 }
3695 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3696 if(NULL == pWdaParams)
3697 {
3698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003699 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003700 VOS_ASSERT(0);
3701 vos_mem_free(wdiDelStaReqParam);
3702 return VOS_STATUS_E_NOMEM;
3703 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003704 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3705 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003706 /* Store Init Req pointer, as this will be used for response */
3707 /* store Params pass it to WDI */
3708 pWdaParams->pWdaContext = pWDA;
3709 pWdaParams->wdaMsgParam = delStaParam;
3710 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 status = WDI_DelSTAReq(wdiDelStaReqParam,
3712 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003713 if(IS_WDI_STATUS_FAILURE(status))
3714 {
3715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3716 "Failure in Del STA WDI API, free all the memory status = %d",
3717 status );
3718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3719 vos_mem_free(pWdaParams) ;
3720 delStaParam->status = eSIR_FAILURE ;
3721 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3722 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003723 return CONVERT_WDI2VOS_STATUS(status) ;
3724}
Jeff Johnson295189b2012-06-20 16:38:30 -07003725void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3726{
3727 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3728 tWDA_CbContext *pWDA;
3729 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003731 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003732 if(NULL == pWdaParams)
3733 {
3734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003735 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003736 VOS_ASSERT(0) ;
3737 return ;
3738 }
3739 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3740 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3742 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003743 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3744 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3745 pwdiAddSTASelfRsp->macSelfSta,
3746 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003748 return ;
3749}
Jeff Johnson295189b2012-06-20 16:38:30 -07003750/*
3751 * FUNCTION: WDA_ProcessAddStaSelfReq
3752 *
3753 */
3754VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3755{
3756 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003757 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3759 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3760 sizeof(WDI_AddSTASelfReqParamsType)) ;
3761 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003763 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 if( NULL == wdiAddStaSelfReq )
3765 {
3766 VOS_ASSERT( 0 );
3767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003768 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003769 return( VOS_STATUS_E_NOMEM );
3770 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 if( NULL == pWdaParams )
3773 {
3774 VOS_ASSERT( 0 );
3775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003776 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 vos_mem_free(wdiAddStaSelfReq) ;
3778 return( VOS_STATUS_E_NOMEM );
3779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003780 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003781 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003782 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003783 /* Store Init Req pointer, as this will be used for response */
3784 /* store Params pass it to WDI */
3785 pWdaParams->pWdaContext = pWDA;
3786 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3787 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003788 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003789
Jeff Johnson43971f52012-07-17 12:26:56 -07003790 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003791 {
3792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3793 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003794 wstatus );
3795 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3797 vos_mem_free(pWdaParams) ;
3798 pAddStaSelfReq->status = eSIR_FAILURE ;
3799 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3800 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003801 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003802}
Jeff Johnson295189b2012-06-20 16:38:30 -07003803/*
3804 * FUNCTION: WDA_DelSTASelfRespCallback
3805 *
3806 */
3807void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3808 wdiDelStaSelfRspParams , void* pUserData)
3809{
3810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3811 tWDA_CbContext *pWDA;
3812 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003814 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003815 if (NULL == pWdaParams)
3816 {
3817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003818 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003819 VOS_ASSERT(0);
3820 return;
3821 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003822 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3823 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003824 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003825 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003826
3827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3828 vos_mem_free(pWdaParams) ;
3829
3830 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003831 return ;
3832}
Jeff Johnson295189b2012-06-20 16:38:30 -07003833/*
3834 * FUNCTION: WDA_DelSTASelfReqCallback
3835 *
3836 */
3837void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3838 void* pUserData)
3839{
3840 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3841 tWDA_CbContext *pWDA;
3842 tDelStaSelfParams *delStaSelfParams;
3843
3844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303845 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003846 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003847
3848 if (NULL == pWdaParams)
3849 {
3850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003851 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 VOS_ASSERT(0);
3853 return;
3854 }
3855
3856 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3857 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3858
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003859 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003860
3861 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3862 {
3863 VOS_ASSERT(0);
3864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3865 vos_mem_free(pWdaParams) ;
3866 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3867 }
3868
3869 return ;
3870}
3871
3872/*
3873 * FUNCTION: WDA_DelSTASelfReq
3874 * Trigger Config STA processing in WDI
3875 */
3876VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3877 tDelStaSelfParams* pDelStaSelfReqParam)
3878{
3879 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003880 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003881 tWDA_ReqParams *pWdaParams = NULL;
3882 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3883 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3884 sizeof(WDI_DelSTASelfReqParamsType)) ;
3885
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003887 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003888 if( NULL == wdiDelStaSelfReq )
3889 {
3890 VOS_ASSERT( 0 );
3891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003892 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003893 return( VOS_STATUS_E_NOMEM );
3894 }
3895
3896 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3897 if( NULL == pWdaParams )
3898 {
3899 VOS_ASSERT( 0 );
3900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003901 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003902 vos_mem_free(wdiDelStaSelfReq) ;
3903 return( VOS_STATUS_E_NOMEM );
3904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 pWdaParams->pWdaContext = pWDA;
3906 /* Store param pointer as passed in by caller */
3907 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3908 /* store Params pass it to WDI */
3909 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3911 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3912
3913 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3914 wdiDelStaSelfReq->pUserData = pWdaParams;
3915
Jeff Johnson43971f52012-07-17 12:26:56 -07003916 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003917 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3918
Jeff Johnson43971f52012-07-17 12:26:56 -07003919 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003920 {
3921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3922 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3923 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003924 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3926 vos_mem_free(pWdaParams) ;
3927 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3928 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3929 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003930 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003931}
3932
Jeff Johnson295189b2012-06-20 16:38:30 -07003933/*
3934 * FUNCTION: WDA_SendMsg
3935 * Send Message back to PE
3936 */
3937void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3938 void *pBodyptr, tANI_U32 bodyVal)
3939{
3940 tSirMsgQ msg = {0} ;
3941 tANI_U32 status = VOS_STATUS_SUCCESS ;
3942 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 msg.type = msgType;
3944 msg.bodyval = bodyVal;
3945 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 if (VOS_STATUS_SUCCESS != status)
3948 {
3949 if(NULL != pBodyptr)
3950 {
3951 vos_mem_free(pBodyptr);
3952 }
3953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003954 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003955 VOS_ASSERT(0) ;
3956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003957 return ;
3958}
Jeff Johnson295189b2012-06-20 16:38:30 -07003959/*
3960 * FUNCTION: WDA_UpdateBSSParams
3961 * Translated WDA/PE BSS info into WDI BSS info..
3962 */
3963void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3964 WDI_ConfigBSSReqInfoType *wdiBssParams,
3965 tAddBssParams *wdaBssParams)
3966{
3967 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 /* copy bssReq Params to WDI structure */
3969 vos_mem_copy(wdiBssParams->macBSSID,
3970 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3971 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3972 sizeof(tSirMacAddr)) ;
3973 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3974 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3975 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 wdiBssParams->ucShortSlotTimeSupported =
3977 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003978 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3979 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3980 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3981 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3982 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3983
3984 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3985 wdiBssParams->ucTXOPProtectionFullSupport =
3986 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3988 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003990 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3991 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3992 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3993 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3994
Chet Lanctot186b5732013-03-18 10:26:30 -07003995 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3996
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 /* copy SSID into WDI structure */
3998 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3999 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4000 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004001 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4002 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004004#ifdef WLAN_FEATURE_VOWIFI
4005 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4006#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004009#ifdef WLAN_FEATURE_VOWIFI_11R
4010 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 if(wdiBssParams->bExtSetStaKeyParamValid)
4012 {
4013 /* copy set STA key params to WDI structure */
4014 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4015 wdaBssParams->extSetStaKeyParam.staIdx;
4016 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4017 wdaBssParams->extSetStaKeyParam.encType;
4018 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4019 wdaBssParams->extSetStaKeyParam.wepType;
4020 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4021 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004022 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4023 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004024 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004025 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4026 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4027 {
4028 WDA_GetWepKeysFromCfg( pWDA,
4029 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4030 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4031 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4032 }
4033 else
4034 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4036 keyIndex++)
4037 {
4038 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4039 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4040 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4041 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4042 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4043 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004044 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4045 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4046 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4047 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4048 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4049 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4050 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4051 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004053 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4054 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 }
4056 }
4057 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4058 }
4059 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4060 {
4061 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4062 sizeof(wdaBssParams->extSetStaKeyParam) );
4063 }
4064#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004065#ifdef WLAN_FEATURE_11AC
4066 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4067 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4068#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004069
4070 return ;
4071}
Jeff Johnson295189b2012-06-20 16:38:30 -07004072/*
4073 * FUNCTION: WDA_UpdateSTAParams
4074 * Translated WDA/PE BSS info into WDI BSS info..
4075 */
4076void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4077 WDI_ConfigStaReqInfoType *wdiStaParams,
4078 tAddStaParams *wdaStaParams)
4079{
4080 tANI_U8 i = 0;
4081 /* Update STA params */
4082 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4083 sizeof(tSirMacAddr)) ;
4084 wdiStaParams->usAssocId = wdaStaParams->assocId;
4085 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004086 wdiStaParams->staIdx = wdaStaParams->staIdx;
4087
Jeff Johnson295189b2012-06-20 16:38:30 -07004088 wdiStaParams->ucShortPreambleSupported =
4089 wdaStaParams->shortPreambleSupported;
4090 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4091 sizeof(tSirMacAddr)) ;
4092 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4093
4094 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4095
4096 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4097 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4098 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4099 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4100 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4101 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4102 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4103
4104 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4105 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 wdiStaParams->wdiSupportedRates.opRateMode =
4107 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004108 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4109 {
4110 wdiStaParams->wdiSupportedRates.llbRates[i] =
4111 wdaStaParams->supportedRates.llbRates[i];
4112 }
4113 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4114 {
4115 wdiStaParams->wdiSupportedRates.llaRates[i] =
4116 wdaStaParams->supportedRates.llaRates[i];
4117 }
4118 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4119 {
4120 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4121 wdaStaParams->supportedRates.aniLegacyRates[i];
4122 }
4123 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4124 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004125#ifdef WLAN_FEATURE_11AC
4126 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4127 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4128 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4129 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4130#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4132 {
4133 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4134 wdaStaParams->supportedRates.supportedMCSSet[i];
4135 }
4136 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4137 wdaStaParams->supportedRates.rxHighestDataRate;
4138
4139 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4140
4141 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4142
4143 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4144 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4145 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4146
4147 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4148 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4149 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4150 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004151 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004152#ifdef WLAN_FEATURE_11AC
4153 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4154 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004155 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004156#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004157 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4158 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 return ;
4160}
Jeff Johnson295189b2012-06-20 16:38:30 -07004161/*
4162 * -------------------------------------------------------------------------
4163 * CFG update to WDI
4164 * -------------------------------------------------------------------------
4165 */
4166
4167 /*
4168 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4169 * Convert the WNI CFG ID to HAL CFG ID
4170 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004171static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004172{
4173 switch(wniCfgId)
4174 {
4175 case WNI_CFG_STA_ID:
4176 return QWLAN_HAL_CFG_STA_ID;
4177 case WNI_CFG_CURRENT_TX_ANTENNA:
4178 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4179 case WNI_CFG_CURRENT_RX_ANTENNA:
4180 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4181 case WNI_CFG_LOW_GAIN_OVERRIDE:
4182 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4183 case WNI_CFG_POWER_STATE_PER_CHAIN:
4184 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4185 case WNI_CFG_CAL_PERIOD:
4186 return QWLAN_HAL_CFG_CAL_PERIOD;
4187 case WNI_CFG_CAL_CONTROL:
4188 return QWLAN_HAL_CFG_CAL_CONTROL;
4189 case WNI_CFG_PROXIMITY:
4190 return QWLAN_HAL_CFG_PROXIMITY;
4191 case WNI_CFG_NETWORK_DENSITY:
4192 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4193 case WNI_CFG_MAX_MEDIUM_TIME:
4194 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4195 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4196 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4197 case WNI_CFG_RTS_THRESHOLD:
4198 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4199 case WNI_CFG_SHORT_RETRY_LIMIT:
4200 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4201 case WNI_CFG_LONG_RETRY_LIMIT:
4202 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4203 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4204 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4205 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4206 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4207 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4208 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4209 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4210 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4211 case WNI_CFG_FIXED_RATE:
4212 return QWLAN_HAL_CFG_FIXED_RATE;
4213 case WNI_CFG_RETRYRATE_POLICY:
4214 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4215 case WNI_CFG_RETRYRATE_SECONDARY:
4216 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4217 case WNI_CFG_RETRYRATE_TERTIARY:
4218 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4219 case WNI_CFG_FORCE_POLICY_PROTECTION:
4220 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4221 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4222 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4223 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4224 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4225 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4226 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4227 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4228 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4229 case WNI_CFG_MAX_BA_SESSIONS:
4230 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4231 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4232 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4233 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4234 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4235 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4236 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4237 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4238 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4239 case WNI_CFG_STATS_PERIOD:
4240 return QWLAN_HAL_CFG_STATS_PERIOD;
4241 case WNI_CFG_CFP_MAX_DURATION:
4242 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4243#if 0 /*This is not part of CFG*/
4244 case WNI_CFG_FRAME_TRANS_ENABLED:
4245 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4246#endif
4247 case WNI_CFG_DTIM_PERIOD:
4248 return QWLAN_HAL_CFG_DTIM_PERIOD;
4249 case WNI_CFG_EDCA_WME_ACBK:
4250 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4251 case WNI_CFG_EDCA_WME_ACBE:
4252 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4253 case WNI_CFG_EDCA_WME_ACVI:
4254 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4255 case WNI_CFG_EDCA_WME_ACVO:
4256 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4257#if 0
4258 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4259 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4260 case WNI_CFG_TELE_BCN_TRANS_LI:
4261 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4262 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4263 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4264 case WNI_CFG_TELE_BCN_MAX_LI:
4265 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4266 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4267 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4268#endif
4269 case WNI_CFG_ENABLE_CLOSE_LOOP:
4270 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004271 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4272 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 default:
4274 {
4275 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004276 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004277 wniCfgId);
4278 return VOS_STATUS_E_INVAL;
4279 }
4280 }
4281}
Jeff Johnson295189b2012-06-20 16:38:30 -07004282/*
4283 * FUNCTION: WDA_UpdateCfgCallback
4284 *
4285 */
4286void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4287{
4288 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4289 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4290 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004292 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004293 /*
4294 * currently there is no response message is expected between PE and
4295 * WDA, Failure return from WDI is a ASSERT condition
4296 */
4297 if(WDI_STATUS_SUCCESS != wdiStatus)
4298 {
4299 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004300 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4302 }
4303
4304 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4305 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4306 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 return ;
4308}
Jeff Johnson295189b2012-06-20 16:38:30 -07004309/*
4310 * FUNCTION: WDA_UpdateCfg
4311 *
4312 */
4313VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4314{
4315
4316 WDI_Status status = WDI_STATUS_SUCCESS ;
4317 tANI_U32 val =0;
4318 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4319 tHalCfg *configData;
4320 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4321 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004323 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 if (NULL == pMac )
4325 {
4326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004327 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 return VOS_STATUS_E_FAILURE;
4329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 if(WDA_START_STATE != pWDA->wdaState)
4331 {
4332 return VOS_STATUS_E_FAILURE;
4333 }
4334
4335 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4336 {
4337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004338 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004339 VOS_ASSERT(0);
4340 return VOS_STATUS_E_FAILURE;
4341 }
4342
4343 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4344 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 if(NULL == wdiCfgReqParam)
4346 {
4347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004348 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004349 VOS_ASSERT(0);
4350 return VOS_STATUS_E_NOMEM;
4351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004352 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4353 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 if(NULL == wdiCfgReqParam->pConfigBuffer)
4355 {
4356 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 vos_mem_free(wdiCfgReqParam);
4359 VOS_ASSERT(0);
4360 return VOS_STATUS_E_NOMEM;
4361 }
4362
4363 /*convert the WNI CFG Id to HAL CFG Id*/
4364 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4365 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4366
4367 /*TODO: revisit this for handling string parameters */
4368 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4369 &val) != eSIR_SUCCESS)
4370 {
4371 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004372 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4374 vos_mem_free(wdiCfgReqParam);
4375 return eSIR_FAILURE;
4376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004377 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4378 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4379 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4380 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4381 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4382
4383 /* store Params pass it to WDI */
4384 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004385#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4386 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4387 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 if(IS_WDI_STATUS_FAILURE(status))
4389 {
4390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4391 "Failure in Update CFG WDI API, free all the memory " );
4392 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4393 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4394 pWDA->wdaWdiCfgApiMsgParam = NULL;
4395 /* Failure is not expected */
4396 VOS_ASSERT(0) ;
4397 }
4398#else
4399 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4400 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4401 pWDA->wdaWdiCfgApiMsgParam = NULL;
4402#endif
4403 return CONVERT_WDI2VOS_STATUS(status) ;
4404}
4405
Jeff Johnson295189b2012-06-20 16:38:30 -07004406VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4407 v_U8_t *pDefaultKeyId,
4408 v_U8_t *pNumKeys,
4409 WDI_KeysType *pWdiKeys )
4410{
4411 v_U32_t i, j, defKeyId = 0;
4412 v_U32_t val = SIR_MAC_KEY_LENGTH;
4413 VOS_STATUS status = WDI_STATUS_SUCCESS;
4414 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 if (NULL == pMac )
4416 {
4417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004418 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004419 return VOS_STATUS_E_FAILURE;
4420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4422 &defKeyId ))
4423 {
4424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4425 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4426 }
4427
4428 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 /* Need to extract ALL of the configured WEP Keys */
4430 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4431 {
4432 val = SIR_MAC_KEY_LENGTH;
4433 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4434 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4435 pWdiKeys[j].key,
4436 &val ))
4437 {
4438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004439 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 }
4441 else
4442 {
4443 pWdiKeys[j].keyId = (tANI_U8) i;
4444 /*
4445 * Actually, a DC (Don't Care) because
4446 * this is determined (and set) by PE/MLME
4447 */
4448 pWdiKeys[j].unicast = 0;
4449 /*
4450 * Another DC (Don't Care)
4451 */
4452 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4453 /* Another DC (Don't Care). Unused for WEP */
4454 pWdiKeys[j].paeRole = 0;
4455 /* Determined from wlan_cfgGetStr() above.*/
4456 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004457 j++;
4458 *pNumKeys = (tANI_U8) j;
4459 }
4460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004461 return status;
4462}
Jeff Johnson295189b2012-06-20 16:38:30 -07004463/*
4464 * FUNCTION: WDA_SetBssKeyReqCallback
4465 * send SET BSS key RSP back to PE
4466 */
4467void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4468{
4469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4470 tWDA_CbContext *pWDA;
4471 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004473 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 if(NULL == pWdaParams)
4475 {
4476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004477 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004478 VOS_ASSERT(0) ;
4479 return ;
4480 }
4481 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4482 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4484 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004485 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 return ;
4488}
Jeff Johnson295189b2012-06-20 16:38:30 -07004489/*
4490 * FUNCTION: WDA_ProcessSetBssKeyReq
4491 * Request to WDI for programming the BSS key( key for
4492 * broadcast/multicast frames Encryption)
4493 */
4494VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4495 tSetBssKeyParams *setBssKeyParams )
4496{
4497 WDI_Status status = WDI_STATUS_SUCCESS ;
4498 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4499 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4500 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4501 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004504 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 if(NULL == wdiSetBssKeyParam)
4506 {
4507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 VOS_ASSERT(0);
4510 return VOS_STATUS_E_NOMEM;
4511 }
4512 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4513 if(NULL == pWdaParams)
4514 {
4515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004516 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004517 VOS_ASSERT(0);
4518 vos_mem_free(wdiSetBssKeyParam);
4519 return VOS_STATUS_E_NOMEM;
4520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 /* copy set BSS params to WDI structure */
4523 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4524 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4525 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 if(setBssKeyParams->encType != eSIR_ED_NONE)
4527 {
4528 if( setBssKeyParams->numKeys == 0 &&
4529 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4530 setBssKeyParams->encType == eSIR_ED_WEP104))
4531 {
4532 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004533 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4534 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4535 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4536 }
4537 else
4538 {
4539 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4540 {
4541 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4542 setBssKeyParams->key[keyIndex].keyId;
4543 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4544 setBssKeyParams->key[keyIndex].unicast;
4545 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4546 setBssKeyParams->key[keyIndex].keyDirection;
4547 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4548 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4549 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4550 setBssKeyParams->key[keyIndex].paeRole;
4551 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4552 setBssKeyParams->key[keyIndex].keyLength;
4553 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4554 setBssKeyParams->key[keyIndex].key,
4555 SIR_MAC_MAX_KEY_LENGTH);
4556 }
4557 }
4558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4560 setBssKeyParams->singleTidRc;
4561 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 /* Store set key pointer, as this will be used for response */
4563 /* store Params pass it to WDI */
4564 pWdaParams->pWdaContext = pWDA;
4565 pWdaParams->wdaMsgParam = setBssKeyParams;
4566 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004567 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4568 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4569
4570 if(IS_WDI_STATUS_FAILURE(status))
4571 {
4572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4573 "Failure in Set BSS Key Req WDI API, free all the memory " );
4574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4575 vos_mem_free(pWdaParams) ;
4576 setBssKeyParams->status = eSIR_FAILURE ;
4577 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4578 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004579 return CONVERT_WDI2VOS_STATUS(status) ;
4580}
Jeff Johnson295189b2012-06-20 16:38:30 -07004581/*
4582 * FUNCTION: WDA_RemoveBssKeyReqCallback
4583 * send SET BSS key RSP back to PE
4584 */
4585void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4586{
4587 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4588 tWDA_CbContext *pWDA;
4589 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004591 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 if(NULL == pWdaParams)
4593 {
4594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004595 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 VOS_ASSERT(0) ;
4597 return ;
4598 }
4599 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4600 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4602 vos_mem_free(pWdaParams) ;
4603
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004604 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004606 return ;
4607}
Jeff Johnson295189b2012-06-20 16:38:30 -07004608/*
4609 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4610 * Request to WDI to remove the BSS key( key for broadcast/multicast
4611 * frames Encryption)
4612 */
4613VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4614 tRemoveBssKeyParams *removeBssKeyParams )
4615{
4616 WDI_Status status = WDI_STATUS_SUCCESS ;
4617 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4618 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4619 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4620 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004622 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 if(NULL == wdiRemoveBssKeyParam)
4624 {
4625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004626 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004627 VOS_ASSERT(0);
4628 return VOS_STATUS_E_NOMEM;
4629 }
4630 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4631 if(NULL == pWdaParams)
4632 {
4633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004635 VOS_ASSERT(0);
4636 vos_mem_free(wdiRemoveBssKeyParam);
4637 return VOS_STATUS_E_NOMEM;
4638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004639 /* copy Remove BSS key params to WDI structure*/
4640 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4641 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4642 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4643 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4644 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004645 /* Store remove key pointer, as this will be used for response */
4646 /* store Params pass it to WDI */
4647 pWdaParams->pWdaContext = pWDA;
4648 pWdaParams->wdaMsgParam = removeBssKeyParams;
4649 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004650 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4651 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004652 if(IS_WDI_STATUS_FAILURE(status))
4653 {
4654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4655 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4657 vos_mem_free(pWdaParams) ;
4658 removeBssKeyParams->status = eSIR_FAILURE ;
4659 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4660 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004661 return CONVERT_WDI2VOS_STATUS(status) ;
4662}
Jeff Johnson295189b2012-06-20 16:38:30 -07004663/*
4664 * FUNCTION: WDA_SetBssKeyReqCallback
4665 * send SET BSS key RSP back to PE
4666 */
4667void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4668{
4669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4670 tWDA_CbContext *pWDA;
4671 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004673 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004674 if(NULL == pWdaParams)
4675 {
4676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004677 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004678 VOS_ASSERT(0) ;
4679 return ;
4680 }
4681 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4682 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4684 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004685 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 return ;
4688}
Jeff Johnson295189b2012-06-20 16:38:30 -07004689/*
4690 * FUNCTION: WDA_ProcessSetStaKeyReq
4691 * Request to WDI for programming the STA key( key for Unicast frames
4692 * Encryption)
4693 */
4694VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4695 tSetStaKeyParams *setStaKeyParams )
4696{
4697 WDI_Status status = WDI_STATUS_SUCCESS ;
4698 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4699 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4700 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4701 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004704 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 if(NULL == wdiSetStaKeyParam)
4706 {
4707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004708 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 VOS_ASSERT(0);
4710 return VOS_STATUS_E_NOMEM;
4711 }
4712 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4713 if(NULL == pWdaParams)
4714 {
4715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004716 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 VOS_ASSERT(0);
4718 vos_mem_free(wdiSetStaKeyParam);
4719 return VOS_STATUS_E_NOMEM;
4720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004723 /* copy set STA key params to WDI structure */
4724 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4725 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4726 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4727 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 if(setStaKeyParams->encType != eSIR_ED_NONE)
4729 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004730 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004731 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4732 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4733 {
4734 WDA_GetWepKeysFromCfg( pWDA,
4735 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4736 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4737 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4738 }
4739 else
4740 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4742 keyIndex++)
4743 {
4744 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4745 setStaKeyParams->key[keyIndex].keyId;
4746 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4747 setStaKeyParams->key[keyIndex].unicast;
4748 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4749 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4751 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4752 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4753 setStaKeyParams->key[keyIndex].paeRole;
4754 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4755 setStaKeyParams->key[keyIndex].keyLength;
4756 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4757 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4758 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4759 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4760 {
4761 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4762 }
4763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004764 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4765 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 }
4767 }
4768 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4769 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004770 /* Store set key pointer, as this will be used for response */
4771 /* store Params pass it to WDI */
4772 pWdaParams->pWdaContext = pWDA;
4773 pWdaParams->wdaMsgParam = setStaKeyParams;
4774 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4776 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 if(IS_WDI_STATUS_FAILURE(status))
4778 {
4779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4780 "Failure in set STA Key Req WDI API, free all the memory " );
4781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4782 vos_mem_free(pWdaParams) ;
4783 setStaKeyParams->status = eSIR_FAILURE ;
4784 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 return CONVERT_WDI2VOS_STATUS(status) ;
4787}
Jeff Johnson295189b2012-06-20 16:38:30 -07004788/*
4789 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4790 * send SET Bcast STA key RSP back to PE
4791 */
4792void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4793{
4794 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4795 tWDA_CbContext *pWDA;
4796 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 if(NULL == pWdaParams)
4800 {
4801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004802 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004803 VOS_ASSERT(0) ;
4804 return ;
4805 }
4806 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4807 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4809 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004810 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004812 return ;
4813}
4814
Jeff Johnson295189b2012-06-20 16:38:30 -07004815/*
4816 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4817 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4818 * Encryption)
4819 */
4820VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4821 tSetStaKeyParams *setStaKeyParams )
4822{
4823 WDI_Status status = WDI_STATUS_SUCCESS ;
4824 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4825 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4826 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4827 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004830 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 if(NULL == wdiSetStaKeyParam)
4832 {
4833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004834 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004835 VOS_ASSERT(0);
4836 return VOS_STATUS_E_NOMEM;
4837 }
4838 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4839 if(NULL == pWdaParams)
4840 {
4841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004842 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 VOS_ASSERT(0);
4844 vos_mem_free(wdiSetStaKeyParam);
4845 return VOS_STATUS_E_NOMEM;
4846 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004848 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 /* copy set STA key params to WDI structure */
4850 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4851 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4852 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4853 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 if(setStaKeyParams->encType != eSIR_ED_NONE)
4855 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4857 keyIndex++)
4858 {
4859 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4860 setStaKeyParams->key[keyIndex].keyId;
4861 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4862 setStaKeyParams->key[keyIndex].unicast;
4863 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4864 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4866 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4867 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4868 setStaKeyParams->key[keyIndex].paeRole;
4869 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4870 setStaKeyParams->key[keyIndex].keyLength;
4871 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4872 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4873 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004874 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4875 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 }
4877 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 /* Store set key pointer, as this will be used for response */
4879 /* store Params pass it to WDI */
4880 pWdaParams->pWdaContext = pWDA;
4881 pWdaParams->wdaMsgParam = setStaKeyParams;
4882 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4884 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 if(IS_WDI_STATUS_FAILURE(status))
4886 {
4887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4888 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4890 vos_mem_free(pWdaParams) ;
4891 setStaKeyParams->status = eSIR_FAILURE ;
4892 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004894 return CONVERT_WDI2VOS_STATUS(status) ;
4895}
Jeff Johnson295189b2012-06-20 16:38:30 -07004896/*
4897 * FUNCTION: WDA_RemoveStaKeyReqCallback
4898 * send SET BSS key RSP back to PE
4899 */
4900void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4901{
4902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4903 tWDA_CbContext *pWDA;
4904 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004906 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 if(NULL == pWdaParams)
4908 {
4909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004910 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 VOS_ASSERT(0) ;
4912 return ;
4913 }
4914 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4915 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4917 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004918 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004919 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004920 return ;
4921}
4922
Jeff Johnson295189b2012-06-20 16:38:30 -07004923/*
4924 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4925 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4926 */
4927VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4928 tRemoveStaKeyParams *removeStaKeyParams )
4929{
4930 WDI_Status status = WDI_STATUS_SUCCESS ;
4931 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4932 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4933 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4934 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004936 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004937 if(NULL == wdiRemoveStaKeyParam)
4938 {
4939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004940 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 VOS_ASSERT(0);
4942 return VOS_STATUS_E_NOMEM;
4943 }
4944 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4945 if(NULL == pWdaParams)
4946 {
4947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004948 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 VOS_ASSERT(0);
4950 vos_mem_free(wdiRemoveStaKeyParam);
4951 return VOS_STATUS_E_NOMEM;
4952 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 /* copy remove STA key params to WDI structure*/
4954 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4955 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4956 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4957 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4958 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 /* Store remove key pointer, as this will be used for response */
4960 /* store Params pass it to WDI */
4961 pWdaParams->pWdaContext = pWDA;
4962 pWdaParams->wdaMsgParam = removeStaKeyParams;
4963 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4965 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 if(IS_WDI_STATUS_FAILURE(status))
4967 {
4968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4969 "Failure in remove STA Key Req WDI API, free all the memory " );
4970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4971 vos_mem_free(pWdaParams) ;
4972 removeStaKeyParams->status = eSIR_FAILURE ;
4973 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 return CONVERT_WDI2VOS_STATUS(status) ;
4976}
Jeff Johnson295189b2012-06-20 16:38:30 -07004977/*
4978 * FUNCTION: WDA_IsHandleSetLinkStateReq
4979 * Update the WDA state and return the status to handle this message or not
4980 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004981WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4982 tWDA_CbContext *pWDA,
4983 tLinkStateParams *linkStateParams)
4984{
4985 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004986 switch(linkStateParams->state)
4987 {
4988 case eSIR_LINK_PREASSOC_STATE:
4989 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4990 /*
4991 * set the WDA state to PRE ASSOC
4992 * copy the BSSID into pWDA to use it in join request and return,
4993 * No need to handle these messages.
4994 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004995 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4996 {
4997 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004998 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004999 }
5000 else
5001 {
5002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005003 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005004 VOS_ASSERT(0);
5005 }
5006
5007 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5008 {
5009 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005010 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005011 }
5012 else
5013 {
5014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005015 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005016 VOS_ASSERT(0);
5017 }
5018
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5020 *channel and after ) so reset the WDA state to ready when the second
5021 * time UMAC issue the link state with PREASSOC
5022 */
5023 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5024 {
5025 /* RESET WDA state back to WDA_READY_STATE */
5026 pWDA->wdaState = WDA_READY_STATE;
5027 }
5028 else
5029 {
5030 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5031 }
5032 //populate linkState info in WDACbCtxt
5033 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005034 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 default:
5036 if(pWDA->wdaState != WDA_READY_STATE)
5037 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005038 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5039 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5040 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5041 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5042 *the ASSERT in WDA_Stop during module unload.*/
5043 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5044 {
5045 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005046 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005047 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005048 else
5049 {
5050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005051 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005052 status = WDA_IGNORE_SET_LINK_STATE;
5053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 }
5055 break;
5056 }
5057
5058 return status;
5059}
Jeff Johnson295189b2012-06-20 16:38:30 -07005060/*
5061 * FUNCTION: WDA_SetLinkStateCallback
5062 * call back function for set link state from WDI
5063 */
5064void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5065{
5066 tWDA_CbContext *pWDA;
5067 tLinkStateParams *linkStateParams;
5068 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005070 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 if(NULL == pWdaParams)
5072 {
5073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005074 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 VOS_ASSERT(0) ;
5076 return ;
5077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005080 /*
5081 * In STA mode start the BA activity check timer after association
5082 * and in AP mode start BA activity check timer after BSS start */
5083 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5084 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005085 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5086 ((status == WDI_STATUS_SUCCESS) &&
5087 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005088 {
5089 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005091 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005092 /*
5093 * No respone required for WDA_SET_LINK_STATE so free the request
5094 * param here
5095 */
5096 if( pWdaParams != NULL )
5097 {
5098 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5099 {
5100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5101 }
5102 vos_mem_free(pWdaParams);
5103 }
5104 return ;
5105}
Jeff Johnson295189b2012-06-20 16:38:30 -07005106/*
5107 * FUNCTION: WDA_ProcessSetLinkState
5108 * Request to WDI to set the link status.
5109 */
5110VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5111 tLinkStateParams *linkStateParams)
5112{
5113 WDI_Status status = WDI_STATUS_SUCCESS ;
5114 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5115 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5116 sizeof(WDI_SetLinkReqParamsType)) ;
5117 tWDA_ReqParams *pWdaParams ;
5118 tpAniSirGlobal pMac;
5119 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5120
5121 if(NULL == pMac)
5122 {
5123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005124 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005125 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005126 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005127 return VOS_STATUS_E_FAILURE;
5128 }
5129
5130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005131 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 if(NULL == wdiSetLinkStateParam)
5133 {
5134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005136 VOS_ASSERT(0);
5137 return VOS_STATUS_E_NOMEM;
5138 }
5139 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5140 if(NULL == pWdaParams)
5141 {
5142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005143 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005144 VOS_ASSERT(0);
5145 vos_mem_free(wdiSetLinkStateParam);
5146 return VOS_STATUS_E_NOMEM;
5147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 if(WDA_IGNORE_SET_LINK_STATE ==
5149 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5150 {
5151 status = WDI_STATUS_E_FAILURE;
5152 }
5153 else
5154 {
5155 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5156 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005157 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5158 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5160 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005161 pWdaParams->pWdaContext = pWDA;
5162 /* Store remove key pointer, as this will be used for response */
5163 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 /* store Params pass it to WDI */
5165 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5166 /* Stop Timer only other than GO role and concurrent session */
5167 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005168 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5170 {
5171 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005173 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5174 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 if(IS_WDI_STATUS_FAILURE(status))
5176 {
5177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5178 "Failure in set link state Req WDI API, free all the memory " );
5179 }
5180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 if(IS_WDI_STATUS_FAILURE(status))
5182 {
5183 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005184 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005185 vos_mem_free(pWdaParams);
5186 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 return CONVERT_WDI2VOS_STATUS(status) ;
5188}
Jeff Johnson295189b2012-06-20 16:38:30 -07005189/*
5190 * FUNCTION: WDA_GetStatsReqParamsCallback
5191 * send the response to PE with Stats received from WDI
5192 */
5193void WDA_GetStatsReqParamsCallback(
5194 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5195 void* pUserData)
5196{
5197 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5198 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5199
5200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005201 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005202 pGetPEStatsRspParams =
5203 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5204 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5205
5206 if(NULL == pGetPEStatsRspParams)
5207 {
5208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005210 VOS_ASSERT(0);
5211 return;
5212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005213 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5214 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5215 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5216 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005217
5218 //Fill the Session Id Properly in PE
5219 pGetPEStatsRspParams->sessionId = 0;
5220 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005221 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5223 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005224 vos_mem_copy( pGetPEStatsRspParams + 1,
5225 wdiGetStatsRsp + 1,
5226 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 /* send response to UMAC*/
5228 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5229
5230 return;
5231}
5232
Jeff Johnson295189b2012-06-20 16:38:30 -07005233/*
5234 * FUNCTION: WDA_ProcessGetStatsReq
5235 * Request to WDI to get the statistics
5236 */
5237VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5238 tAniGetPEStatsReq *pGetStatsParams)
5239{
5240 WDI_Status status = WDI_STATUS_SUCCESS ;
5241 WDI_GetStatsReqParamsType wdiGetStatsParam;
5242 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005244 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005245 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5246 pGetStatsParams->staId;
5247 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5248 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005250 status = WDI_GetStatsReq(&wdiGetStatsParam,
5251 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 if(IS_WDI_STATUS_FAILURE(status))
5253 {
5254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5255 "Failure in Get Stats Req WDI API, free all the memory " );
5256 pGetPEStatsRspParams =
5257 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5258 if(NULL == pGetPEStatsRspParams)
5259 {
5260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005261 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005263 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005264 return VOS_STATUS_E_NOMEM;
5265 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005266 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5267 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5268 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5269 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5270 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5271 (void *)pGetPEStatsRspParams, 0) ;
5272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005273 /* Free the request message */
5274 vos_mem_free(pGetStatsParams);
5275 return CONVERT_WDI2VOS_STATUS(status);
5276}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005277
5278#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5279/*
5280 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5281 * send the response to PE with roam Rssi received from WDI
5282 */
5283void WDA_GetRoamRssiReqParamsCallback(
5284 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5285 void* pUserData)
5286{
5287 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5288 tWDA_CbContext *pWDA = NULL;
5289 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5290 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5292 "<------ %s " ,__func__);
5293 if(NULL == pWdaParams)
5294 {
5295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5296 "%s: pWdaParams received NULL", __func__);
5297 VOS_ASSERT(0) ;
5298 return ;
5299 }
5300 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5301 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5302
5303 if(NULL == pGetRoamRssiReqParams)
5304 {
5305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5306 "%s: pGetRoamRssiReqParams received NULL", __func__);
5307 VOS_ASSERT(0);
5308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5309 vos_mem_free(pWdaParams);
5310 return ;
5311 }
5312 pGetRoamRssiRspParams =
5313 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5314
5315 if(NULL == pGetRoamRssiRspParams)
5316 {
5317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5318 "%s: VOS MEM Alloc Failure", __func__);
5319 VOS_ASSERT(0);
5320 return;
5321 }
5322 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5323 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005324 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005325 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5326 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5327
5328 /* Assign get roam rssi req (backup) in to the response */
5329 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5330
5331 /* free WDI command buffer */
5332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5333 vos_mem_free(pWdaParams) ;
5334
5335 /* send response to UMAC*/
5336 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5337
5338 return;
5339}
5340
5341
5342
5343/*
5344 * FUNCTION: WDA_ProcessGetRoamRssiReq
5345 * Request to WDI to get the statistics
5346 */
5347VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5348 tAniGetRssiReq *pGetRoamRssiParams)
5349{
5350 WDI_Status status = WDI_STATUS_SUCCESS ;
5351 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5352 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5353 tWDA_ReqParams *pWdaParams = NULL;
5354
5355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5356 "------> %s " ,__func__);
5357 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5358 pGetRoamRssiParams->staId;
5359 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5360
5361 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5362 if(NULL == pWdaParams)
5363 {
5364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5365 "%s: VOS MEM Alloc Failure", __func__);
5366 VOS_ASSERT(0);
5367 return VOS_STATUS_E_NOMEM;
5368 }
5369
5370 /* Store Init Req pointer, as this will be used for response */
5371 pWdaParams->pWdaContext = pWDA;
5372
5373 /* Take Get roam Rssi req backup as it stores the callback to be called after
5374 receiving the response */
5375 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5376 pWdaParams->wdaWdiApiMsgParam = NULL;
5377
5378 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5379 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5380 if(IS_WDI_STATUS_FAILURE(status))
5381 {
5382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5383 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5384 pGetRoamRssiRspParams =
5385 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5386 if(NULL == pGetRoamRssiRspParams)
5387 {
5388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5389 "%s: VOS MEM Alloc Failure", __func__);
5390 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305391 vos_mem_free(pGetRoamRssiParams);
5392 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005393 return VOS_STATUS_E_NOMEM;
5394 }
5395 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5396 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5397 pGetRoamRssiRspParams->rssi = 0;
5398 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5399 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5400 (void *)pGetRoamRssiRspParams, 0) ;
5401 }
5402 return CONVERT_WDI2VOS_STATUS(status);
5403}
5404#endif
5405
5406
Jeff Johnson295189b2012-06-20 16:38:30 -07005407/*
5408 * FUNCTION: WDA_UpdateEDCAParamCallback
5409 * call back function for Update EDCA params from WDI
5410 */
5411void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5412{
5413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5414 tEdcaParams *pEdcaParams;
5415
5416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005417 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005418 if(NULL == pWdaParams)
5419 {
5420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005421 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005422 VOS_ASSERT(0) ;
5423 return ;
5424 }
5425 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5427 vos_mem_free(pWdaParams);
5428 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005429 return ;
5430}
Jeff Johnson295189b2012-06-20 16:38:30 -07005431/*
5432 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5433 * Request to WDI to Update the EDCA params.
5434 */
5435VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5436 tEdcaParams *pEdcaParams)
5437{
5438 WDI_Status status = WDI_STATUS_SUCCESS ;
5439 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5440 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5441 sizeof(WDI_UpdateEDCAParamsType)) ;
5442 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005444 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 if(NULL == wdiEdcaParam)
5446 {
5447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005450 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005451 return VOS_STATUS_E_NOMEM;
5452 }
5453 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5454 if(NULL == pWdaParams)
5455 {
5456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005458 VOS_ASSERT(0);
5459 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005460 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 return VOS_STATUS_E_NOMEM;
5462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005464 /*
5465 Since firmware is not using highperformance flag, we have removed
5466 this flag from wdiEDCAInfo structure to match sizeof the structure
5467 between host and firmware.In future if we are planning to use
5468 highperformance flag then Please define this flag in wdiEDCAInfo
5469 structure, update it here and send it to firmware. i.e.
5470 Following is the original line which we removed as part of the fix
5471 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5472 pEdcaParams->highPerformance;
5473 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5475 &pEdcaParams->acbe);
5476 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5477 &pEdcaParams->acbk);
5478 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5479 &pEdcaParams->acvi);
5480 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5481 &pEdcaParams->acvo);
5482 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005483 pWdaParams->pWdaContext = pWDA;
5484 /* Store remove key pointer, as this will be used for response */
5485 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005486 /* store Params pass it to WDI */
5487 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5489 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 if(IS_WDI_STATUS_FAILURE(status))
5491 {
5492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5493 "Failure in Update EDCA Params WDI API, free all the memory " );
5494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5495 vos_mem_free(pWdaParams);
5496 vos_mem_free(pEdcaParams);
5497 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 return CONVERT_WDI2VOS_STATUS(status) ;
5499}
Jeff Johnson295189b2012-06-20 16:38:30 -07005500/*
5501 * FUNCTION: WDA_AddBAReqCallback
5502 * send ADD BA RSP back to PE
5503 */
5504void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5505 void* pUserData)
5506{
5507 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5508 tWDA_CbContext *pWDA;
5509 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005511 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 if(NULL == pWdaParams)
5513 {
5514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005515 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005516 VOS_ASSERT(0) ;
5517 return ;
5518 }
5519 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5520 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5522 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005523 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 return ;
5526}
5527
Jeff Johnson295189b2012-06-20 16:38:30 -07005528/*
5529 * FUNCTION: WDA_ProcessAddBAReq
5530 * Request to WDI to Update the ADDBA REQ params.
5531 */
5532VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5533 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5534{
Jeff Johnson43971f52012-07-17 12:26:56 -07005535 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5537 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5538 sizeof(WDI_AddBAReqParamsType)) ;
5539 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005541 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 if(NULL == wdiAddBAReqParam)
5543 {
5544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005545 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 VOS_ASSERT(0);
5547 return VOS_STATUS_E_NOMEM;
5548 }
5549 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5550 if(NULL == pWdaParams)
5551 {
5552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005553 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005554 VOS_ASSERT(0);
5555 vos_mem_free(wdiAddBAReqParam);
5556 return VOS_STATUS_E_NOMEM;
5557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 do
5559 {
5560 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005561 wdiAddBaInfo->ucSTAIdx = staIdx ;
5562 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5563 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005564 } while(0) ;
5565 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 pWdaParams->pWdaContext = pWDA;
5567 /* store Params pass it to WDI */
5568 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5569 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005570 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5571 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005572
Jeff Johnson43971f52012-07-17 12:26:56 -07005573 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 {
5575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005576 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5577 status = CONVERT_WDI2VOS_STATUS(wstatus);
5578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005579 vos_mem_free(pWdaParams);
5580 pAddBAReqParams->status = eSIR_FAILURE;
5581 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5582 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005583 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005584}
Jeff Johnson295189b2012-06-20 16:38:30 -07005585/*
5586 * FUNCTION: WDA_AddBASessionReqCallback
5587 * send ADD BA SESSION RSP back to PE/(or TL)
5588 */
5589void WDA_AddBASessionReqCallback(
5590 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5591{
5592 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5594 tWDA_CbContext *pWDA;
5595 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005597 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 if(NULL == pWdaParams)
5599 {
5600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005601 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005602 VOS_ASSERT(0) ;
5603 return ;
5604 }
5605 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5606 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005607 if( NULL == pAddBAReqParams )
5608 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005610 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005611 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5613 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 return ;
5615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5617 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005618 /*
5619 * if WDA in update TL state, update TL with BA session parama and send
5620 * another request to HAL(/WDI) (ADD_BA_REQ)
5621 */
5622
5623 if((VOS_STATUS_SUCCESS ==
5624 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5625 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5626 {
5627 /* Update TL with BA info received from HAL/WDI */
5628 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5629 wdiAddBaSession->usBaSessionID,
5630 wdiAddBaSession->ucSTAIdx,
5631 wdiAddBaSession->ucBaTID,
5632 wdiAddBaSession->ucBaBufferSize,
5633 wdiAddBaSession->ucWinSize,
5634 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005635 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5636 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5637 }
5638 else
5639 {
5640 pAddBAReqParams->status =
5641 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5642
5643 /* Setting Flag to indicate that Set BA is success */
5644 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5645 {
5646 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5647 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5648 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005650 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005652 /*Reset the WDA state to READY */
5653 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005654 return ;
5655}
5656
Jeff Johnson295189b2012-06-20 16:38:30 -07005657/*
5658 * FUNCTION: WDA_ProcessAddBASessionReq
5659 * Request to WDI to Update the ADDBA REQ params.
5660 */
5661VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5662 tAddBAParams *pAddBAReqParams)
5663{
5664 WDI_Status status = WDI_STATUS_SUCCESS ;
5665 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5666 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5667 sizeof(WDI_AddBASessionReqParamsType)) ;
5668 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005669 WLANTL_STAStateType tlSTAState = 0;
5670
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005672 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 if(NULL == wdiAddBASessionReqParam)
5674 {
5675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 VOS_ASSERT(0);
5678 return VOS_STATUS_E_NOMEM;
5679 }
5680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5681 if(NULL == pWdaParams)
5682 {
5683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005685 VOS_ASSERT(0);
5686 vos_mem_free(wdiAddBASessionReqParam);
5687 return VOS_STATUS_E_NOMEM;
5688 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 /*
5690 * Populate ADD BA parameters and pass these paarmeters to WDI.
5691 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5692 * the state to track if these is BA recipient case or BA initiator
5693 * case.
5694 */
5695 do
5696 {
5697 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5698 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5699 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5700 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5701 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5702 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5703 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5706 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5707 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5708 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5709 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005710 /* check the BA direction and update state accordingly */
5711 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5712 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5713 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5714
5715 }while(0) ;
5716 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005717 pWdaParams->pWdaContext = pWDA;
5718 /* Store ADD BA pointer, as this will be used for response */
5719 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5720 /* store Params pass it to WDI */
5721 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005722
5723 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5724 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5725 */
5726 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5727 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5728 {
5729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005730 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005731 status = WDI_STATUS_E_NOT_ALLOWED;
5732 pAddBAReqParams->status =
5733 CONVERT_WDI2SIR_STATUS(status) ;
5734 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5735 /*Reset the WDA state to READY */
5736 pWDA->wdaState = WDA_READY_STATE;
5737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5738 vos_mem_free(pWdaParams);
5739
5740 return CONVERT_WDI2VOS_STATUS(status) ;
5741 }
5742
Jeff Johnson295189b2012-06-20 16:38:30 -07005743 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5744 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005745 if(IS_WDI_STATUS_FAILURE(status))
5746 {
5747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005748 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005750 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005751 pAddBAReqParams->status =
5752 CONVERT_WDI2SIR_STATUS(status) ;
5753 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005754 /*Reset the WDA state to READY */
5755 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005757 vos_mem_free(pWdaParams);
5758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005760}
Jeff Johnson295189b2012-06-20 16:38:30 -07005761/*
5762 * FUNCTION: WDA_DelBANotifyTL
5763 * send DEL BA IND to TL
5764 */
5765void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5766 tDelBAParams *pDelBAReqParams)
5767{
5768 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5769 //tSirMsgQ msg;
5770 vos_msg_t vosMsg;
5771 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 if(NULL == pDelBAInd)
5773 {
5774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005775 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005776 VOS_ASSERT(0) ;
5777 return;
5778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005779 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5780 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5781 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5782 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005783
Jeff Johnson295189b2012-06-20 16:38:30 -07005784
5785 vosMsg.type = WDA_DELETEBA_IND;
5786 vosMsg.bodyptr = pDelBAInd;
5787 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5788 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5789 {
5790 vosStatus = VOS_STATUS_E_BADMSG;
5791 }
5792}
Jeff Johnson295189b2012-06-20 16:38:30 -07005793/*
5794 * FUNCTION: WDA_DelBAReqCallback
5795 * send DEL BA RSP back to PE
5796 */
5797void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5798{
5799 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5800 tWDA_CbContext *pWDA;
5801 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005803 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005804 if(NULL == pWdaParams)
5805 {
5806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005807 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005808 VOS_ASSERT(0) ;
5809 return ;
5810 }
5811 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5812 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005813 /* Notify TL about DEL BA in case of recipinet */
5814 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5815 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5816 {
5817 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5818 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005819 /*
5820 * No respone required for WDA_DELBA_IND so just free the request
5821 * param here
5822 */
5823 vos_mem_free(pDelBAReqParams);
5824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5825 vos_mem_free(pWdaParams);
5826 return ;
5827}
5828
Jeff Johnson295189b2012-06-20 16:38:30 -07005829/*
5830 * FUNCTION: WDA_ProcessDelBAReq
5831 * Request to WDI to Update the DELBA REQ params.
5832 */
5833VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5834 tDelBAParams *pDelBAReqParams)
5835{
5836 WDI_Status status = WDI_STATUS_SUCCESS ;
5837 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5838 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5839 sizeof(WDI_DelBAReqParamsType)) ;
5840 tWDA_ReqParams *pWdaParams ;
5841 tANI_U16 staIdx = 0;
5842 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005844 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005845 if(NULL == wdiDelBAReqParam)
5846 {
5847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005848 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005849 VOS_ASSERT(0);
5850 return VOS_STATUS_E_NOMEM;
5851 }
5852 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5853 if(NULL == pWdaParams)
5854 {
5855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005856 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 VOS_ASSERT(0);
5858 vos_mem_free(wdiDelBAReqParam);
5859 return VOS_STATUS_E_NOMEM;
5860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5862 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5863 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5864 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005865 pWdaParams->pWdaContext = pWDA;
5866 /* Store DEL BA pointer, as this will be used for response */
5867 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005868 /* store Params pass it to WDI */
5869 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5871 * maintained in WDA, so that WDA can retry for another BA session
5872 */
5873 staIdx = pDelBAReqParams->staIdx;
5874 tid = pDelBAReqParams->baTID;
5875 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005876 status = WDI_DelBAReq(wdiDelBAReqParam,
5877 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 if(IS_WDI_STATUS_FAILURE(status))
5879 {
5880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5881 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5883 vos_mem_free(pWdaParams->wdaMsgParam);
5884 vos_mem_free(pWdaParams);
5885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005886 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005887}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08005888
5889/*
5890 * FUNCTION: WDA_UpdateChReqCallback
5891 *
5892 */
5893void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
5894{
5895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5896 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam =
5897 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
5898 WDI_UpdateChannelReqType *pwdiUpdateChanReqType =
5899 &pwdiUpdateChReqParam->wdiUpdateChanParams;
5900 WDI_UpdateChannelReqinfoType *pChanInfoType =
5901 pwdiUpdateChanReqType->pchanParam;
5902 tSirUpdateChanList *pChanList =
5903 (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
5904
5905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5906 "<------ %s " ,__func__);
5907 if(NULL == pWdaParams)
5908 {
5909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5910 "%s: pWdaParams received NULL", __func__);
5911 VOS_ASSERT(0);
5912 return;
5913 }
5914
5915 /*
5916 * currently there is no response message is expected between PE and
5917 * WDA, Failure return from WDI is a ASSERT condition
5918 */
5919 vos_mem_free(pChanInfoType);
5920 vos_mem_free(pChanList);
5921 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5922 vos_mem_free(pWdaParams);
5923
5924 return;
5925}
5926
5927/*
5928 * FUNCTION: WDA_ProcessUpdateChannelList
5929 * Request to WDI to Update the ChannelList params.
5930 */
5931VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
5932 tSirUpdateChanList *pChanList)
5933{
5934 WDI_Status status = WDI_STATUS_SUCCESS;
5935 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
5936 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
5937 WDI_UpdateChannelReqinfoType *pChanInfoType;
5938 tWDA_ReqParams *pWdaParams;
5939 wpt_uint8 i;
5940
5941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5942 "------> %s " ,__func__);
5943 if(NULL == pChanList)
5944 {
5945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5946 "%s: NULL pChanList", __func__);
5947 VOS_ASSERT(0);
5948 return VOS_STATUS_E_INVAL;
5949 }
5950
5951 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
5952 {
5953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5954 "Update channel list capability Not Supported");
5955 vos_mem_free(pChanList);
5956 return VOS_STATUS_E_INVAL;
5957 }
5958
5959 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
5960 sizeof(WDI_UpdateChReqParamsType));
5961 if(NULL == pwdiUpdateChReqParam)
5962 {
5963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5964 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
5965 __func__);
5966 VOS_ASSERT(0);
5967 vos_mem_free(pChanList);
5968 return VOS_STATUS_E_NOMEM;
5969 }
5970 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
5971 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
5972 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
5973 pChanList->numChan);
5974 if(NULL == pChanInfoType)
5975 {
5976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5977 "%s: VOS MEM Alloc Failure", __func__);
5978 VOS_ASSERT(0);
5979 vos_mem_free(pChanList);
5980 vos_mem_free(pwdiUpdateChReqParam);
5981 return VOS_STATUS_E_NOMEM;
5982 }
5983 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
5984 * pChanList->numChan);
5985 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
5986
5987 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
5988 if(NULL == pWdaParams)
5989 {
5990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5991 "%s: VOS MEM Alloc Failure", __func__);
5992 VOS_ASSERT(0);
5993 vos_mem_free(pChanList);
5994 vos_mem_free(pChanInfoType);
5995 vos_mem_free(pwdiUpdateChReqParam);
5996 return VOS_STATUS_E_NOMEM;
5997 }
5998 pwdiUpdateChanReqType->numchan = pChanList->numChan;
5999
6000 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6001 {
6002 pChanInfoType->mhz =
6003 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6004
6005 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6006 pChanInfoType->band_center_freq2 = 0;
6007
6008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6009 "chan[%d] = %u", i, pChanInfoType->mhz);
6010 if (pChanList->chanParam[i].dfsSet)
6011 {
6012 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6014 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6015 pChanList->chanParam[i].dfsSet);
6016 }
6017
6018 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6019 {
6020 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6021 }
6022 else
6023 {
6024 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6025 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6026 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6027 }
6028
6029 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6030 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6031
6032 pChanInfoType++;
6033 }
6034
6035 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6036 pWdaParams->pWdaContext = pWDA;
6037 pWdaParams->wdaMsgParam = (void *)pChanList;
6038 /* store Params pass it to WDI */
6039 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6040 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6041 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6042 if(IS_WDI_STATUS_FAILURE(status))
6043 {
6044 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6045 "Failure in Update Channel REQ Params WDI API, free all the memory");
6046 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6047 vos_mem_free(pwdiUpdateChReqParam);
6048 vos_mem_free(pWdaParams->wdaMsgParam);
6049 vos_mem_free(pWdaParams);
6050 }
6051 return CONVERT_WDI2VOS_STATUS(status);
6052}
6053
Jeff Johnson295189b2012-06-20 16:38:30 -07006054/*
6055 * FUNCTION: WDA_AddTSReqCallback
6056 * send ADD TS RSP back to PE
6057 */
6058void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6059{
6060 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6061 tWDA_CbContext *pWDA;
6062 tAddTsParams *pAddTsReqParams;
6063
6064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 if(NULL == pWdaParams)
6067 {
6068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006069 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 VOS_ASSERT(0) ;
6071 return ;
6072 }
6073 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6074 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6076 vos_mem_free(pWdaParams);
6077
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006078 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006079 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 return ;
6081}
6082
Jeff Johnson295189b2012-06-20 16:38:30 -07006083/*
6084 * FUNCTION: WDA_ProcessAddTSReq
6085 * Request to WDI to Update the ADD TS REQ params.
6086 */
6087VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6088 tAddTsParams *pAddTsReqParams)
6089{
6090 WDI_Status status = WDI_STATUS_SUCCESS ;
6091 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6092 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6093 sizeof(WDI_AddTSReqParamsType)) ;
6094 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006096 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 if(NULL == wdiAddTSReqParam)
6098 {
6099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006100 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 VOS_ASSERT(0);
6102 return VOS_STATUS_E_NOMEM;
6103 }
6104 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6105 if(NULL == pWdaParams)
6106 {
6107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006109 VOS_ASSERT(0);
6110 vos_mem_free(wdiAddTSReqParam);
6111 return VOS_STATUS_E_NOMEM;
6112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6114 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 //TS IE
6116 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6117 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6118 pAddTsReqParams->tspec.length;
6119
6120 //TS IE : TS INFO : TRAFFIC
6121 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6122 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6123 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6124 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6125 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6126 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6127 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6128 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6129 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6130 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6131 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6132 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6133 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6134 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6135 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6136 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6137
6138 //TS IE : TS INFO : SCHEDULE
6139 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6140 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6141 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6142 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 //TS IE
6144 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6145 pAddTsReqParams->tspec.nomMsduSz;
6146 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6147 pAddTsReqParams->tspec.maxMsduSz;
6148 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6149 pAddTsReqParams->tspec.minSvcInterval;
6150 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6151 pAddTsReqParams->tspec.maxSvcInterval;
6152 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6153 pAddTsReqParams->tspec.inactInterval;
6154 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6155 pAddTsReqParams->tspec.suspendInterval;
6156 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6157 pAddTsReqParams->tspec.svcStartTime;
6158 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6159 pAddTsReqParams->tspec.minDataRate;
6160 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6161 pAddTsReqParams->tspec.meanDataRate;
6162 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6163 pAddTsReqParams->tspec.peakDataRate;
6164 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6165 pAddTsReqParams->tspec.maxBurstSz;
6166 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6167 pAddTsReqParams->tspec.delayBound;
6168 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6169 pAddTsReqParams->tspec.minPhyRate;
6170 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6171 pAddTsReqParams->tspec.surplusBw;
6172 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6173 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 /* TODO: tAddTsParams doesn't have the following fields */
6175#if 0
6176 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6177 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6178 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6179 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6180#endif
6181 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6182
6183 pWdaParams->pWdaContext = pWDA;
6184 /* Store ADD TS pointer, as this will be used for response */
6185 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006186 /* store Params pass it to WDI */
6187 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 status = WDI_AddTSReq(wdiAddTSReqParam,
6189 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006190 if(IS_WDI_STATUS_FAILURE(status))
6191 {
6192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6193 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6195 vos_mem_free(pWdaParams);
6196 pAddTsReqParams->status = eSIR_FAILURE ;
6197 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006199 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006200}
6201
Jeff Johnson295189b2012-06-20 16:38:30 -07006202/*
6203 * FUNCTION: WDA_DelTSReqCallback
6204 * send DEL TS RSP back to PE
6205 */
6206void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6207{
6208 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006210 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6212 vos_mem_free(pWdaParams->wdaMsgParam) ;
6213 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 /*
6215 * No respone required for WDA_DEL_TS_REQ so just free the request
6216 * param here
6217 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006218 return ;
6219}
6220
Jeff Johnson295189b2012-06-20 16:38:30 -07006221/*
6222 * FUNCTION: WDA_ProcessDelTSReq
6223 * Request to WDI to Update the DELTS REQ params.
6224 */
6225VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6226 tDelTsParams *pDelTSReqParams)
6227{
6228 WDI_Status status = WDI_STATUS_SUCCESS ;
6229 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6230 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6231 sizeof(WDI_DelTSReqParamsType)) ;
6232 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006234 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 if(NULL == wdiDelTSReqParam)
6236 {
6237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006238 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 VOS_ASSERT(0);
6240 return VOS_STATUS_E_NOMEM;
6241 }
6242 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6243 if(NULL == pWdaParams)
6244 {
6245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006246 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006247 VOS_ASSERT(0);
6248 vos_mem_free(wdiDelTSReqParam);
6249 return VOS_STATUS_E_NOMEM;
6250 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6252 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6253 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6254 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6255 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006256 pWdaParams->pWdaContext = pWDA;
6257 /* Store DEL TS pointer, as this will be used for response */
6258 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 /* store Params pass it to WDI */
6260 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 status = WDI_DelTSReq(wdiDelTSReqParam,
6262 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006263 if(IS_WDI_STATUS_FAILURE(status))
6264 {
6265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6266 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6268 vos_mem_free(pWdaParams->wdaMsgParam);
6269 vos_mem_free(pWdaParams);
6270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006272}
Jeff Johnson295189b2012-06-20 16:38:30 -07006273/*
6274 * FUNCTION: WDA_UpdateBeaconParamsCallback
6275 * Free the memory. No need to send any response to PE in this case
6276 */
6277void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6278{
6279 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006281 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 if(NULL == pWdaParams)
6283 {
6284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006285 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006286 VOS_ASSERT(0) ;
6287 return ;
6288 }
6289 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6290 vos_mem_free(pWdaParams->wdaMsgParam) ;
6291 vos_mem_free(pWdaParams);
6292 /*
6293 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6294 * param here
6295 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006296 return ;
6297}
Jeff Johnson295189b2012-06-20 16:38:30 -07006298/*
6299 * FUNCTION: WDA_ProcessUpdateBeaconParams
6300 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6301 */
6302VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6303 tUpdateBeaconParams *pUpdateBeaconParams)
6304{
6305 WDI_Status status = WDI_STATUS_SUCCESS ;
6306 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6307 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6308 sizeof(WDI_UpdateBeaconParamsType)) ;
6309 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006311 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 if(NULL == wdiUpdateBeaconParams)
6313 {
6314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006315 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 VOS_ASSERT(0);
6317 return VOS_STATUS_E_NOMEM;
6318 }
6319 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6320 if(NULL == pWdaParams)
6321 {
6322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006324 VOS_ASSERT(0);
6325 vos_mem_free(wdiUpdateBeaconParams);
6326 return VOS_STATUS_E_NOMEM;
6327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006328 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6329 pUpdateBeaconParams->bssIdx;
6330 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6331 pUpdateBeaconParams->fShortPreamble;
6332 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6333 pUpdateBeaconParams->fShortSlotTime;
6334 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6335 pUpdateBeaconParams->beaconInterval;
6336 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6337 pUpdateBeaconParams->llaCoexist;
6338 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6339 pUpdateBeaconParams->llbCoexist;
6340 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6341 pUpdateBeaconParams->llgCoexist;
6342 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6343 pUpdateBeaconParams->ht20MhzCoexist;
6344 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6345 pUpdateBeaconParams->llnNonGFCoexist;
6346 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6347 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6348 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6349 pUpdateBeaconParams->fRIFSMode;
6350 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6351 pUpdateBeaconParams->paramChangeBitmap;
6352 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6353
6354 pWdaParams->pWdaContext = pWDA;
6355 /* Store UpdateBeacon Req pointer, as this will be used for response */
6356 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 /* store Params pass it to WDI */
6358 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006359 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6360 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6361 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 if(IS_WDI_STATUS_FAILURE(status))
6363 {
6364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6365 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6367 vos_mem_free(pWdaParams->wdaMsgParam);
6368 vos_mem_free(pWdaParams);
6369 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006370 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006371}
Jeff Johnson295189b2012-06-20 16:38:30 -07006372#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006373/*
6374 * FUNCTION: WDA_TSMStatsReqCallback
6375 * send TSM Stats RSP back to PE
6376 */
6377void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6378{
6379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6380 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006381 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6382 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006383
6384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006385 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 if(NULL == pWdaParams)
6387 {
6388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006389 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 VOS_ASSERT(0) ;
6391 return ;
6392 }
6393 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006394 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6395
6396 if(NULL == pGetTsmStatsReqParams)
6397 {
6398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6399 "%s: pGetTsmStatsReqParams received NULL", __func__);
6400 VOS_ASSERT(0);
6401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6402 vos_mem_free(pWdaParams);
6403 return;
6404 }
6405
6406 pTsmRspParams =
6407 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006408 if( NULL == pTsmRspParams )
6409 {
6410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006411 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 VOS_ASSERT( 0 );
6413 return ;
6414 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006415 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6416 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6417 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6418
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6420 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6421 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6422 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6423 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6424 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6425 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6426 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6427 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6428 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006429
6430 /* Assign get tsm stats req req (backup) in to the response */
6431 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6432
6433 /* free WDI command buffer */
6434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6435 vos_mem_free(pWdaParams);
6436
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 return ;
6439}
6440
6441
Jeff Johnson295189b2012-06-20 16:38:30 -07006442/*
6443 * FUNCTION: WDA_ProcessTsmStatsReq
6444 * Request to WDI to get the TSM Stats params.
6445 */
6446VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006447 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006448{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006449 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006450 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006451 tWDA_ReqParams *pWdaParams = NULL;
6452 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6453
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006455 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6457 sizeof(WDI_TSMStatsReqParamsType));
6458 if(NULL == wdiTSMReqParam)
6459 {
6460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 VOS_ASSERT(0);
6463 return VOS_STATUS_E_NOMEM;
6464 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6466 if(NULL == pWdaParams)
6467 {
6468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006470 VOS_ASSERT(0);
6471 vos_mem_free(wdiTSMReqParam);
6472 return VOS_STATUS_E_NOMEM;
6473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6475 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6476 pTsmStats->bssId,
6477 sizeof(wpt_macAddr));
6478 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6479
6480 pWdaParams->pWdaContext = pWDA;
6481 /* Store TSM Stats pointer, as this will be used for response */
6482 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006483 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006484 status = WDI_TSMStatsReq(wdiTSMReqParam,
6485 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 if(IS_WDI_STATUS_FAILURE(status))
6487 {
6488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6489 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006490 vos_mem_free(pWdaParams);
6491
6492 pGetTsmStatsRspParams =
6493 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6494 if(NULL == pGetTsmStatsRspParams)
6495 {
6496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6497 "%s: VOS MEM Alloc Failure", __func__);
6498 VOS_ASSERT(0);
6499 vos_mem_free(pTsmStats);
6500 return VOS_STATUS_E_NOMEM;
6501 }
6502 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6503 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6504 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6505
6506 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006508 return CONVERT_WDI2VOS_STATUS(status) ;
6509}
6510#endif
6511/*
6512 * FUNCTION: WDA_SendBeaconParamsCallback
6513 * No need to send any response to PE in this case
6514 */
6515void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6516{
6517
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006519 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 return ;
6521}
Jeff Johnson295189b2012-06-20 16:38:30 -07006522/*
6523 * FUNCTION: WDA_ProcessSendBeacon
6524 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6525 * start beacon trasmission
6526 */
6527VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6528 tSendbeaconParams *pSendbeaconParams)
6529{
6530 WDI_Status status = WDI_STATUS_SUCCESS ;
6531 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006533 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6535 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6536 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6537 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6539 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306540 /* p2pIeOffset should be atleast greater than timIeOffset */
6541 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6542 (pSendbeaconParams->p2pIeOffset <
6543 pSendbeaconParams->timIeOffset))
6544 {
6545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6546 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6547 VOS_ASSERT( 0 );
6548 return WDI_STATUS_E_FAILURE;
6549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6551 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006552 /* Copy the beacon template to local buffer */
6553 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6554 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6555 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6556
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6558 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 if(IS_WDI_STATUS_FAILURE(status))
6560 {
6561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6562 "Failure in SEND BEACON REQ Params WDI API" );
6563 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 vos_mem_free(pSendbeaconParams);
6565 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006566}
Jeff Johnson295189b2012-06-20 16:38:30 -07006567/*
6568 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6569 * No need to send any response to PE in this case
6570 */
6571void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6572{
Jeff Johnson295189b2012-06-20 16:38:30 -07006573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006574 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 return ;
6576}
6577
Jeff Johnson295189b2012-06-20 16:38:30 -07006578/*
6579 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6580 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6581 * send probe response
6582 */
6583VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6584 tSendProbeRespParams *pSendProbeRspParams)
6585{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006586 WDI_Status status = WDI_STATUS_SUCCESS;
6587 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6588 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006590 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006591
6592 if (!wdiSendProbeRspParam)
6593 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6594
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006596 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006597 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006598 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006599 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006600 /* Copy the Probe Response template to local buffer */
6601 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006602 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006603 pSendProbeRspParams->pProbeRespTemplate,
6604 pSendProbeRspParams->probeRespTemplateLen);
6605 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006606 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6608 WDI_PROBE_REQ_BITMAP_IE_LEN);
6609
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006610 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006611
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006612 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006613 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006614 if(IS_WDI_STATUS_FAILURE(status))
6615 {
6616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6617 "Failure in SEND Probe RSP Params WDI API" );
6618 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006619 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006620 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006621 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006622}
Jeff Johnson295189b2012-06-20 16:38:30 -07006623#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6624/*
6625 * FUNCTION: WDA_SetMaxTxPowerCallBack
6626 * send the response to PE with power value received from WDI
6627 */
6628void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6629 void* pUserData)
6630{
6631 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6632 tWDA_CbContext *pWDA = NULL;
6633 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6634
6635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006636 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006637 if(NULL == pWdaParams)
6638 {
6639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006640 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006641 VOS_ASSERT(0) ;
6642 return ;
6643 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006644 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6645 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006646 if( NULL == pMaxTxPowerParams )
6647 {
6648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006649 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006650 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006651 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6652 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006653 return ;
6654 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006655
Jeff Johnson295189b2012-06-20 16:38:30 -07006656
6657 /*need to free memory for the pointers used in the
6658 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6660 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006661 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006662
Jeff Johnson295189b2012-06-20 16:38:30 -07006663
6664 /* send response to UMAC*/
6665 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6666
6667 return;
6668}
Jeff Johnson295189b2012-06-20 16:38:30 -07006669/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006670 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 * Request to WDI to send set Max Tx Power Request
6672 */
6673 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6674 tMaxTxPowerParams *MaxTxPowerParams)
6675{
6676 WDI_Status status = WDI_STATUS_SUCCESS;
6677 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6678 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006679
Jeff Johnson295189b2012-06-20 16:38:30 -07006680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006681 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006682
Jeff Johnson295189b2012-06-20 16:38:30 -07006683 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6684 sizeof(WDI_SetMaxTxPowerParamsType));
6685 if(NULL == wdiSetMaxTxPowerParams)
6686 {
6687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006688 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006689 VOS_ASSERT(0);
6690 return VOS_STATUS_E_NOMEM;
6691 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006692 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6693 if(NULL == pWdaParams)
6694 {
6695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006696 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006697 vos_mem_free(wdiSetMaxTxPowerParams);
6698 VOS_ASSERT(0);
6699 return VOS_STATUS_E_NOMEM;
6700 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006701 /* Copy.Max.Tx.Power Params to WDI structure */
6702 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6703 MaxTxPowerParams->bssId,
6704 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006705 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6706 MaxTxPowerParams->selfStaMacAddr,
6707 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006708 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6709 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006711 pWdaParams->pWdaContext = pWDA;
6712 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006713 /* store Params pass it to WDI */
6714 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006715 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6716 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 if(IS_WDI_STATUS_FAILURE(status))
6718 {
6719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6720 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6722 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006723 /* send response to UMAC*/
6724 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006725 }
6726 return CONVERT_WDI2VOS_STATUS(status);
6727
6728}
Jeff Johnson295189b2012-06-20 16:38:30 -07006729#endif
schang86c22c42013-03-13 18:41:24 -07006730
6731/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006732 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6733 * send the response to PE with power value received from WDI
6734 */
6735void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6736 *pwdiSetMaxTxPowerPerBandRsp,
6737 void* pUserData)
6738{
6739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6740 tWDA_CbContext *pWDA = NULL;
6741 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6742
6743 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6744 "<------ %s ", __func__);
6745 if (NULL == pWdaParams)
6746 {
6747 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6748 "%s: pWdaParams received NULL", __func__);
6749 VOS_ASSERT(0);
6750 return ;
6751 }
6752 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6753 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6754 if ( NULL == pMxTxPwrPerBandParams )
6755 {
6756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6757 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6758 VOS_ASSERT(0);
6759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6760 vos_mem_free(pWdaParams);
6761 return;
6762 }
6763
6764 /*need to free memory for the pointers used in the
6765 WDA Process.Set Max Tx Power Req function*/
6766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6767 vos_mem_free(pWdaParams);
6768 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6769
6770 /* send response to UMAC*/
6771 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6772 pMxTxPwrPerBandParams, 0);
6773
6774 return;
6775}
6776
6777/*
6778 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6779 * Request to WDI to send set Max Tx Power Per band Request
6780 */
6781 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6782 tMaxTxPowerPerBandParams
6783 *MaxTxPowerPerBandParams)
6784{
6785 WDI_Status status = WDI_STATUS_SUCCESS;
6786 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6787 tWDA_ReqParams *pWdaParams = NULL;
6788
6789 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6790 "------> %s ", __func__);
6791
6792 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6793 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6794
6795 if (NULL == wdiSetMxTxPwrPerBandParams)
6796 {
6797 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6798 "%s: VOS MEM Alloc Failure", __func__);
6799 VOS_ASSERT(0);
6800 return VOS_STATUS_E_NOMEM;
6801 }
6802 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6803 if (NULL == pWdaParams)
6804 {
6805 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6806 "%s: VOS MEM Alloc Failure", __func__);
6807 vos_mem_free(wdiSetMxTxPwrPerBandParams);
6808 VOS_ASSERT(0);
6809 return VOS_STATUS_E_NOMEM;
6810 }
6811 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
6812 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
6813 MaxTxPowerPerBandParams->bandInfo;
6814 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
6815 MaxTxPowerPerBandParams->power;
6816 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
6817 pWdaParams->pWdaContext = pWDA;
6818 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
6819 /* store Params pass it to WDI */
6820 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
6821 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
6822 WDA_SetMaxTxPowerPerBandCallBack,
6823 pWdaParams);
6824 if (IS_WDI_STATUS_FAILURE(status))
6825 {
6826 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6827 "Failure in SET MAX TX Power REQ Params WDI API,"
6828 " free all the memory");
6829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6830 vos_mem_free(pWdaParams);
6831 /* send response to UMAC*/
6832 WDA_SendMsg(pWDA,
6833 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6834 MaxTxPowerPerBandParams, 0);
6835 }
6836 return CONVERT_WDI2VOS_STATUS(status);
6837}
6838
6839/*
schang86c22c42013-03-13 18:41:24 -07006840 * FUNCTION: WDA_SetTxPowerCallBack
6841 * send the response to PE with power value received from WDI
6842 */
6843void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6844 void* pUserData)
6845{
6846 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6847 tWDA_CbContext *pWDA = NULL;
6848 tSirSetTxPowerReq *pTxPowerParams = NULL;
6849
6850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6851 "<------ %s ", __func__);
6852 if(NULL == pWdaParams)
6853 {
6854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6855 "%s: pWdaParams received NULL", __func__);
6856 VOS_ASSERT(0) ;
6857 return ;
6858 }
6859 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6860 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6861 if(NULL == pTxPowerParams)
6862 {
6863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6864 "%s: pTxPowerParams received NULL " ,__func__);
6865 VOS_ASSERT(0);
6866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6867 vos_mem_free(pWdaParams);
6868 return ;
6869 }
6870
6871 /*need to free memory for the pointers used in the
6872 WDA Process.Set Max Tx Power Req function*/
6873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6874 vos_mem_free(pWdaParams);
6875
6876 /* send response to UMAC*/
6877 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6878 return;
6879}
6880
6881/*
6882 * FUNCTION: WDA_ProcessSetTxPowerReq
6883 * Request to WDI to send set Tx Power Request
6884 */
6885 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6886 tSirSetTxPowerReq *txPowerParams)
6887{
6888 WDI_Status status = WDI_STATUS_SUCCESS;
6889 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6890 tWDA_ReqParams *pWdaParams = NULL;
6891
6892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6893 "------> %s ", __func__);
6894
6895 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6896 sizeof(WDI_SetTxPowerParamsType));
6897 if(NULL == wdiSetTxPowerParams)
6898 {
6899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6900 "%s: VOS MEM Alloc Failure", __func__);
6901 VOS_ASSERT(0);
6902 return VOS_STATUS_E_NOMEM;
6903 }
6904 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6905 if(NULL == pWdaParams)
6906 {
6907 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6908 "%s: VOS MEM Alloc Failure", __func__);
6909 vos_mem_free(wdiSetTxPowerParams);
6910 VOS_ASSERT(0);
6911 return VOS_STATUS_E_NOMEM;
6912 }
6913 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6914 txPowerParams->bssIdx;
6915 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6916 txPowerParams->mwPower;
6917 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6918 pWdaParams->pWdaContext = pWDA;
6919 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6920 /* store Params pass it to WDI */
6921 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6922 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6923 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6924 if(IS_WDI_STATUS_FAILURE(status))
6925 {
6926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6927 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6929 vos_mem_free(pWdaParams);
6930 /* send response to UMAC*/
6931 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6932 }
6933 return CONVERT_WDI2VOS_STATUS(status);
6934}
6935
Jeff Johnson295189b2012-06-20 16:38:30 -07006936/*
6937 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6938 * Free the memory. No need to send any response to PE in this case
6939 */
6940void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6941{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006942 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6943
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006945 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006946
6947 if(NULL == pWdaParams)
6948 {
6949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006950 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006951 VOS_ASSERT(0) ;
6952 return ;
6953 }
6954
6955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6956 vos_mem_free(pWdaParams->wdaMsgParam) ;
6957 vos_mem_free(pWdaParams);
6958
Jeff Johnson295189b2012-06-20 16:38:30 -07006959 /*
6960 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6961 * so just free the request param here
6962 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 return ;
6964}
6965
Jeff Johnson295189b2012-06-20 16:38:30 -07006966/*
6967 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6968 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6969 */
6970VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6971 tP2pPsParams *pP2pPsConfigParams)
6972{
6973 WDI_Status status = WDI_STATUS_SUCCESS ;
6974 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6975 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6976 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006977 tWDA_ReqParams *pWdaParams = NULL;
6978
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006980 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006981 if(NULL == wdiSetP2PGONOAReqParam)
6982 {
6983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006984 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 VOS_ASSERT(0);
6986 return VOS_STATUS_E_NOMEM;
6987 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006988
6989 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6990 if(NULL == pWdaParams)
6991 {
6992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006993 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006994 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006995 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006996 VOS_ASSERT(0);
6997 return VOS_STATUS_E_NOMEM;
6998 }
6999
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7001 pP2pPsConfigParams->opp_ps;
7002 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7003 pP2pPsConfigParams->ctWindow;
7004 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7005 pP2pPsConfigParams->count;
7006 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7007 pP2pPsConfigParams->duration;
7008 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7009 pP2pPsConfigParams->interval;
7010 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7011 pP2pPsConfigParams->single_noa_duration;
7012 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7013 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007014
Jeff Johnson295189b2012-06-20 16:38:30 -07007015 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7016 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007017 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7018
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007020 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7021 pWdaParams->pWdaContext = pWDA;
7022
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007024 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7025
Jeff Johnson295189b2012-06-20 16:38:30 -07007026 if(IS_WDI_STATUS_FAILURE(status))
7027 {
7028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7029 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7031 vos_mem_free(pWdaParams->wdaMsgParam);
7032 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 return CONVERT_WDI2VOS_STATUS(status);
7035
Jeff Johnson295189b2012-06-20 16:38:30 -07007036}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307037
7038#ifdef FEATURE_WLAN_TDLS
7039/*
7040 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7041 * Free the memory. No need to send any response to PE in this case
7042 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307043void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7044 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307045{
7046 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7047 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307048 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307049
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
7062 if(NULL == pWdaParams)
7063 {
7064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7065 "%s: pWdaParams received NULL", __func__);
7066 VOS_ASSERT(0) ;
7067 return ;
7068 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307069 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7070 if( NULL == pTdlsLinkEstablishParams )
7071 {
7072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7073 "%s: pTdlsLinkEstablishParams "
7074 "received NULL " ,__func__);
7075 VOS_ASSERT(0);
7076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7077 vos_mem_free(pWdaParams);
7078 return ;
7079 }
7080 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7081 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307083 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307084 /* send response to UMAC*/
7085 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7086
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307087 return ;
7088}
7089
7090VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7091 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7092{
7093 WDI_Status status = WDI_STATUS_SUCCESS ;
7094 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7095 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7096 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7097 tWDA_ReqParams *pWdaParams = NULL;
7098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7099 "------> %s " ,__func__);
7100 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7101 {
7102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7103 "%s: VOS MEM Alloc Failure", __func__);
7104 VOS_ASSERT(0);
7105 return VOS_STATUS_E_NOMEM;
7106 }
7107 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7108 if(NULL == pWdaParams)
7109 {
7110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7111 "%s: VOS MEM Alloc Failure", __func__);
7112 vos_mem_free(pTdlsLinkEstablishParams);
7113 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7114 VOS_ASSERT(0);
7115 return VOS_STATUS_E_NOMEM;
7116 }
7117 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307118 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307119 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307120 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307121 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307122 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307123 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307124 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307125 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307126 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307127 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7128 pTdlsLinkEstablishParams->isOffChannelSupported;
7129
7130 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7131 pTdlsLinkEstablishParams->validChannels,
7132 pTdlsLinkEstablishParams->validChannelsLen);
7133
7134 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7135 pTdlsLinkEstablishParams->validChannelsLen;
7136
7137 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7138 pTdlsLinkEstablishParams->validOperClasses,
7139 pTdlsLinkEstablishParams->validOperClassesLen);
7140 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7141 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307142
7143 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7144 /* Store msg pointer from PE, as this will be used for response */
7145 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7146 /* store Params pass it to WDI */
7147 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7148 pWdaParams->pWdaContext = pWDA;
7149
7150 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7151 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7152 WDA_SetTDLSLinkEstablishReqParamsCallback,
7153 pWdaParams);
7154 if(IS_WDI_STATUS_FAILURE(status))
7155 {
7156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7157 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7159 vos_mem_free(pWdaParams->wdaMsgParam);
7160 vos_mem_free(pWdaParams);
7161 }
7162 return CONVERT_WDI2VOS_STATUS(status);
7163}
7164#endif
7165
7166
Jeff Johnson295189b2012-06-20 16:38:30 -07007167#ifdef WLAN_FEATURE_VOWIFI_11R
7168/*
7169 * FUNCTION: WDA_AggrAddTSReqCallback
7170 * send ADD AGGREGATED TS RSP back to PE
7171 */
7172void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7173{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7175 tWDA_CbContext *pWDA;
7176 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007179 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007180 if(NULL == pWdaParams)
7181 {
7182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007183 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007184 VOS_ASSERT(0) ;
7185 return ;
7186 }
7187
7188 pWDA = pWdaParams->pWdaContext;
7189 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007190
7191 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7192 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007193 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007196
7197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7198 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007199 return ;
7200}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007201/*
7202 * FUNCTION: WDA_ProcessAddTSReq
7203 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7204 */
7205VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7206 tAggrAddTsParams *pAggrAddTsReqParams)
7207{
7208 WDI_Status status = WDI_STATUS_SUCCESS ;
7209 int i;
7210 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007211 tWDA_ReqParams *pWdaParams = NULL;
7212
7213
Jeff Johnson295189b2012-06-20 16:38:30 -07007214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007215 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7217 sizeof(WDI_AggrAddTSReqParamsType)) ;
7218 if(NULL == wdiAggrAddTSReqParam)
7219 {
7220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 VOS_ASSERT(0);
7223 return VOS_STATUS_E_NOMEM;
7224 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007225
7226
7227 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7228 if(NULL == pWdaParams)
7229 {
7230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007231 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007232 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007233 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007234 VOS_ASSERT(0);
7235 return VOS_STATUS_E_NOMEM;
7236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7238 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7239 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007240 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7241 {
7242 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7243 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7244 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007245 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7246 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7247 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7248 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7249 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7250 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7251 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7252 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7253 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7254 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7255 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7256 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7257 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7258 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7259 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7260 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007261 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7262 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7264 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7265 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7266 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7267 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7268 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7269 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7270 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7271 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7272 pAggrAddTsReqParams->tspec[i].inactInterval;
7273 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7274 pAggrAddTsReqParams->tspec[i].suspendInterval;
7275 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7276 pAggrAddTsReqParams->tspec[i].svcStartTime;
7277 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7278 pAggrAddTsReqParams->tspec[i].minDataRate;
7279 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7280 pAggrAddTsReqParams->tspec[i].meanDataRate;
7281 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7282 pAggrAddTsReqParams->tspec[i].peakDataRate;
7283 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7284 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7285 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7286 pAggrAddTsReqParams->tspec[i].delayBound;
7287 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7288 pAggrAddTsReqParams->tspec[i].minPhyRate;
7289 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7290 pAggrAddTsReqParams->tspec[i].surplusBw;
7291 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7292 pAggrAddTsReqParams->tspec[i].mediumTime;
7293 }
7294
7295 /* TODO: tAggrAddTsParams doesn't have the following fields */
7296#if 0
7297 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7298 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7299 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7300 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7301#endif
7302 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7303
7304 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007305 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007306 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007307 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7308
7309 pWdaParams->pWdaContext = pWDA;
7310
Jeff Johnson295189b2012-06-20 16:38:30 -07007311 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007312 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7313
Jeff Johnson295189b2012-06-20 16:38:30 -07007314 if(IS_WDI_STATUS_FAILURE(status))
7315 {
7316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7317 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7319 vos_mem_free(pWdaParams);
7320
7321 /* send the failure response back to PE*/
7322 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7323 {
7324 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7325 }
7326
7327 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7328 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 return CONVERT_WDI2VOS_STATUS(status) ;
7331}
7332#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007333/*
7334 * FUNCTION: WDA_EnterImpsReqCallback
7335 * send Enter IMPS RSP back to PE
7336 */
7337void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
7338{
7339 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007341 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007342 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007343 return ;
7344}
Jeff Johnson295189b2012-06-20 16:38:30 -07007345/*
7346 * FUNCTION: WDA_ProcessEnterImpsReq
7347 * Request to WDI to Enter IMPS power state.
7348 */
7349VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7350{
7351 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007353 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007354 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007355 if(IS_WDI_STATUS_FAILURE(status))
7356 {
7357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7358 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007359 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 return CONVERT_WDI2VOS_STATUS(status) ;
7362}
Jeff Johnson295189b2012-06-20 16:38:30 -07007363/*
7364 * FUNCTION: WDA_ExitImpsReqCallback
7365 * send Exit IMPS RSP back to PE
7366 */
7367void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7368{
7369 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007371 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007372 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 return ;
7374}
Jeff Johnson295189b2012-06-20 16:38:30 -07007375/*
7376 * FUNCTION: WDA_ProcessExitImpsReq
7377 * Request to WDI to Exit IMPS power state.
7378 */
7379VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7380{
7381 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007383 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 if(IS_WDI_STATUS_FAILURE(status))
7386 {
7387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7388 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007389 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 return CONVERT_WDI2VOS_STATUS(status) ;
7392}
Jeff Johnson295189b2012-06-20 16:38:30 -07007393/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007394 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007395 * send Enter BMPS RSP back to PE
7396 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007397void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007398{
7399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7400 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007401 tEnterBmpsParams *pEnterBmpsRspParams;
7402
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007404 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007405 if(NULL == pWdaParams)
7406 {
7407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007408 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 VOS_ASSERT(0) ;
7410 return ;
7411 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007412
7413 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7414 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7415
7416 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007417 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007418
7419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007420 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007421 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7422
Jeff Johnson295189b2012-06-20 16:38:30 -07007423 return ;
7424}
Jeff Johnson295189b2012-06-20 16:38:30 -07007425/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007426 * FUNCTION: WDA_EnterBmpsReqCallback
7427 * Free memory and send Enter BMPS RSP back to PE.
7428 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7429 */
7430void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7431{
7432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7433 tWDA_CbContext *pWDA;
7434 tEnterBmpsParams *pEnterBmpsRspParams;
7435
7436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7437 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7438
7439 if(NULL == pWdaParams)
7440 {
7441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7442 "%s: pWdaParams received NULL", __func__);
7443 VOS_ASSERT(0);
7444 return;
7445 }
7446
7447 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7448 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7449 pEnterBmpsRspParams->status = wdiStatus;
7450
7451 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7452 {
7453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7454 vos_mem_free(pWdaParams);
7455 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7456 }
7457
7458 return;
7459}
7460/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 * FUNCTION: WDA_ProcessEnterBmpsReq
7462 * Request to WDI to Enter BMPS power state.
7463 */
7464VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7465 tEnterBmpsParams *pEnterBmpsReqParams)
7466{
7467 WDI_Status status = WDI_STATUS_SUCCESS;
7468 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7469 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007471 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007472 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7473 {
7474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007475 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 VOS_ASSERT(0);
7477 return VOS_STATUS_E_FAILURE;
7478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007479 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7480 if (NULL == wdiEnterBmpsReqParams)
7481 {
7482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007483 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007484 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007485 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7486 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 return VOS_STATUS_E_NOMEM;
7488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7490 if (NULL == pWdaParams)
7491 {
7492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007494 VOS_ASSERT(0);
7495 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007496 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7497 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007498 return VOS_STATUS_E_NOMEM;
7499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007500 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7501 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7502 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7503 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 // For CCX and 11R Roaming
7505 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7506 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7507 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007508 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7509 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007510
Jeff Johnson295189b2012-06-20 16:38:30 -07007511 /* Store param pointer as passed in by caller */
7512 /* store Params pass it to WDI */
7513 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007514 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007516 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007517 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007518 if (IS_WDI_STATUS_FAILURE(status))
7519 {
7520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7521 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007523 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007525 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 return CONVERT_WDI2VOS_STATUS(status);
7528}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007529
7530
7531static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7532 WDI_Status wdiStatus,
7533 tExitBmpsParams *pExitBmpsReqParams)
7534{
7535 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7536
7537 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7538}
7539
7540
Jeff Johnson295189b2012-06-20 16:38:30 -07007541/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007542 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007543 * send Exit BMPS RSP back to PE
7544 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007545void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007546{
7547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7548 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007549 tExitBmpsParams *pExitBmpsRspParams;
7550
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007553 if(NULL == pWdaParams)
7554 {
7555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007557 VOS_ASSERT(0) ;
7558 return ;
7559 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007560
7561 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7562 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7563
7564 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007565 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007566
Jeff Johnson295189b2012-06-20 16:38:30 -07007567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7568 vos_mem_free(pWdaParams) ;
7569
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007570 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007571 return ;
7572}
Jeff Johnson295189b2012-06-20 16:38:30 -07007573/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007574 * FUNCTION: WDA_ExitBmpsReqCallback
7575 * Free memory and send Exit BMPS RSP back to PE.
7576 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7577 */
7578void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7579{
7580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7581 tWDA_CbContext *pWDA;
7582 tExitBmpsParams *pExitBmpsRspParams;
7583
7584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7585 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7586
7587 if(NULL == pWdaParams)
7588 {
7589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7590 "%s: pWdaParams received NULL", __func__);
7591 VOS_ASSERT(0);
7592 return;
7593 }
7594
7595 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7596 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7597 pExitBmpsRspParams->status = wdiStatus;
7598
7599 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7600 {
7601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7602 vos_mem_free(pWdaParams);
7603 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7604 }
7605
7606 return;
7607}
7608/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007609 * FUNCTION: WDA_ProcessExitBmpsReq
7610 * Request to WDI to Exit BMPS power state.
7611 */
7612VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7613 tExitBmpsParams *pExitBmpsReqParams)
7614{
7615 WDI_Status status = WDI_STATUS_SUCCESS ;
7616 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7617 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7618 sizeof(WDI_ExitBmpsReqParamsType)) ;
7619 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007621 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 if(NULL == wdiExitBmpsReqParams)
7623 {
7624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007627 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007628 return VOS_STATUS_E_NOMEM;
7629 }
7630 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7631 if(NULL == pWdaParams)
7632 {
7633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007634 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 VOS_ASSERT(0);
7636 vos_mem_free(wdiExitBmpsReqParams);
7637 return VOS_STATUS_E_NOMEM;
7638 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007640
7641 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7642
Yue Ma7f44bbe2013-04-12 11:47:39 -07007643 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7644 wdiExitBmpsReqParams->pUserData = pWdaParams;
7645
Jeff Johnson295189b2012-06-20 16:38:30 -07007646 /* Store param pointer as passed in by caller */
7647 /* store Params pass it to WDI */
7648 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7649 pWdaParams->pWdaContext = pWDA;
7650 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007651 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007652 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 if(IS_WDI_STATUS_FAILURE(status))
7654 {
7655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7656 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7658 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007659 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007660 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 return CONVERT_WDI2VOS_STATUS(status) ;
7662}
Jeff Johnson295189b2012-06-20 16:38:30 -07007663/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007664 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007665 * send Enter UAPSD RSP back to PE
7666 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007667void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007668{
7669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7670 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007671 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007673 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 if(NULL == pWdaParams)
7675 {
7676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007677 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 VOS_ASSERT(0) ;
7679 return ;
7680 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007681
7682 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7683 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7684
7685 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007686 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007687
Jeff Johnson295189b2012-06-20 16:38:30 -07007688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7689 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007690 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007691 return ;
7692}
Jeff Johnson295189b2012-06-20 16:38:30 -07007693/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007694 * FUNCTION: WDA_EnterUapsdReqCallback
7695 * Free memory and send Enter UAPSD RSP back to PE.
7696 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7697 */
7698void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7699{
7700 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7701 tWDA_CbContext *pWDA;
7702 tUapsdParams *pEnterUapsdRsqParams;
7703
7704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7705 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7706
7707 if(NULL == pWdaParams)
7708 {
7709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7710 "%s: pWdaParams received NULL", __func__);
7711 VOS_ASSERT(0);
7712 return;
7713 }
7714
7715 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7716 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7717 pEnterUapsdRsqParams->status = wdiStatus;
7718
7719 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7720 {
7721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7722 vos_mem_free(pWdaParams);
7723 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7724 }
7725
7726 return;
7727}
7728/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007729 * FUNCTION: WDA_ProcessEnterUapsdReq
7730 * Request to WDI to Enter UAPSD power state.
7731 */
7732VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7733 tUapsdParams *pEnterUapsdReqParams)
7734{
7735 WDI_Status status = WDI_STATUS_SUCCESS ;
7736 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7737 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7738 sizeof(WDI_EnterUapsdReqParamsType)) ;
7739 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007741 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 if(NULL == wdiEnterUapsdReqParams)
7743 {
7744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007746 VOS_ASSERT(0);
7747 return VOS_STATUS_E_NOMEM;
7748 }
7749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7750 if(NULL == pWdaParams)
7751 {
7752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 VOS_ASSERT(0);
7755 vos_mem_free(wdiEnterUapsdReqParams);
7756 return VOS_STATUS_E_NOMEM;
7757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7759 pEnterUapsdReqParams->beDeliveryEnabled;
7760 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7761 pEnterUapsdReqParams->beTriggerEnabled;
7762 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7763 pEnterUapsdReqParams->bkDeliveryEnabled;
7764 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7765 pEnterUapsdReqParams->bkTriggerEnabled;
7766 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7767 pEnterUapsdReqParams->viDeliveryEnabled;
7768 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7769 pEnterUapsdReqParams->viTriggerEnabled;
7770 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7771 pEnterUapsdReqParams->voDeliveryEnabled;
7772 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7773 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007774 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007775
Yue Ma7f44bbe2013-04-12 11:47:39 -07007776 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7777 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007778
Jeff Johnson295189b2012-06-20 16:38:30 -07007779 /* Store param pointer as passed in by caller */
7780 /* store Params pass it to WDI */
7781 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7782 pWdaParams->pWdaContext = pWDA;
7783 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007784 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007785 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 if(IS_WDI_STATUS_FAILURE(status))
7787 {
7788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7789 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7790 vos_mem_free(pWdaParams->wdaMsgParam) ;
7791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7792 vos_mem_free(pWdaParams) ;
7793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007794 return CONVERT_WDI2VOS_STATUS(status) ;
7795}
Jeff Johnson295189b2012-06-20 16:38:30 -07007796/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007797 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007798 * send Exit UAPSD RSP back to PE
7799 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007800void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007801{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007802
7803 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7804 tWDA_CbContext *pWDA;
7805 tExitUapsdParams *pExitUapsdRspParams;
7806
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007808 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007809 if(NULL == pWdaParams)
7810 {
7811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007812 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007813 VOS_ASSERT(0);
7814 return;
7815 }
7816
7817 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7818 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7819
7820 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007821 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007822
7823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7824 vos_mem_free(pWdaParams) ;
7825
7826 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007827 return ;
7828}
Jeff Johnson295189b2012-06-20 16:38:30 -07007829/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007830 * FUNCTION: WDA_ExitUapsdReqCallback
7831 * Free memory and send Exit UAPSD RSP back to PE.
7832 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7833 */
7834void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7835{
7836 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7837 tWDA_CbContext *pWDA;
7838 tExitUapsdParams *pExitUapsdRspParams;
7839
7840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7841 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7842
7843 if(NULL == pWdaParams)
7844 {
7845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7846 "%s: pWdaParams received NULL", __func__);
7847 VOS_ASSERT(0);
7848 return;
7849 }
7850
7851 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7852 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7853 pExitUapsdRspParams->status = wdiStatus;
7854
7855 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7856 {
7857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7858 vos_mem_free(pWdaParams);
7859 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7860 }
7861
7862 return;
7863}
7864/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 * FUNCTION: WDA_ProcessExitUapsdReq
7866 * Request to WDI to Exit UAPSD power state.
7867 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007868VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7869 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007870{
7871 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007872 tWDA_ReqParams *pWdaParams ;
7873 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7874 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7875 sizeof(WDI_ExitUapsdReqParamsType)) ;
7876
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007878 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007879
7880 if(NULL == wdiExitUapsdReqParams)
7881 {
7882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007883 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007884 VOS_ASSERT(0);
7885 return VOS_STATUS_E_NOMEM;
7886 }
7887 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7888 if(NULL == pWdaParams)
7889 {
7890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007891 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007892 VOS_ASSERT(0);
7893 vos_mem_free(wdiExitUapsdReqParams);
7894 return VOS_STATUS_E_NOMEM;
7895 }
7896
7897 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007898 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7899 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007900
7901 /* Store param pointer as passed in by caller */
7902 /* store Params pass it to WDI */
7903 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7904 pWdaParams->pWdaContext = pWDA;
7905 pWdaParams->wdaMsgParam = pExitUapsdParams;
7906
Yue Ma7f44bbe2013-04-12 11:47:39 -07007907 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007908 if(IS_WDI_STATUS_FAILURE(status))
7909 {
7910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7911 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007912 vos_mem_free(pWdaParams->wdaMsgParam) ;
7913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7914 vos_mem_free(pWdaParams) ;
7915
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 return CONVERT_WDI2VOS_STATUS(status) ;
7918}
7919
Jeff Johnson295189b2012-06-20 16:38:30 -07007920/*
7921 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7922 *
7923 */
7924void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7925{
7926 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007928 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007929 if(NULL == pWdaParams)
7930 {
7931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007932 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007933 VOS_ASSERT(0) ;
7934 return ;
7935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 if( pWdaParams != NULL )
7937 {
7938 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7939 {
7940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7941 }
7942 if( pWdaParams->wdaMsgParam != NULL )
7943 {
7944 vos_mem_free(pWdaParams->wdaMsgParam) ;
7945 }
7946 vos_mem_free(pWdaParams) ;
7947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 return ;
7949}
Jeff Johnson295189b2012-06-20 16:38:30 -07007950/*
7951 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7952 * Request to WDI to set the power save params at start.
7953 */
7954VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7955 tSirPowerSaveCfg *pPowerSaveCfg)
7956{
7957 WDI_Status status = WDI_STATUS_SUCCESS ;
7958 tHalCfg *tlvStruct = NULL ;
7959 tANI_U8 *tlvStructStart = NULL ;
7960 v_PVOID_t *configParam;
7961 tANI_U32 configParamSize;
7962 tANI_U32 *configDataValue;
7963 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7964 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007966 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007967 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7968 {
7969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007970 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007972 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 return VOS_STATUS_E_FAILURE;
7974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7976 if (NULL == wdiPowerSaveCfg)
7977 {
7978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007980 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007981 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 return VOS_STATUS_E_NOMEM;
7983 }
7984 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7985 if(NULL == pWdaParams)
7986 {
7987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007989 VOS_ASSERT(0);
7990 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007991 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007992 return VOS_STATUS_E_NOMEM;
7993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7995 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 if(NULL == configParam)
7997 {
7998 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007999 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008000 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008001 vos_mem_free(pWdaParams);
8002 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008003 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008004 return VOS_STATUS_E_NOMEM;
8005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 vos_mem_set(configParam, configParamSize, 0);
8007 wdiPowerSaveCfg->pConfigBuffer = configParam;
8008 tlvStruct = (tHalCfg *)configParam;
8009 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008010 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8011 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8012 tlvStruct->length = sizeof(tANI_U32);
8013 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8014 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008015 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8016 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8018 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8019 tlvStruct->length = sizeof(tANI_U32);
8020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8021 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008022 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8023 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8025 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8026 tlvStruct->length = sizeof(tANI_U32);
8027 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8028 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008029 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8030 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8032 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8033 tlvStruct->length = sizeof(tANI_U32);
8034 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8035 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008036 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8037 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008038 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8039 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8040 tlvStruct->length = sizeof(tANI_U32);
8041 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8042 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008043 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8044 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8046 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8047 tlvStruct->length = sizeof(tANI_U32);
8048 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8049 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008050 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8051 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008052 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8053 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8054 tlvStruct->length = sizeof(tANI_U32);
8055 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8056 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008057 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8058 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8060 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8061 tlvStruct->length = sizeof(tANI_U32);
8062 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8063 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8064 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8065 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008066 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8067 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8068 tlvStruct->length = sizeof(tANI_U32);
8069 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8070 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8071 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8072 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8074 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8075 tlvStruct->length = sizeof(tANI_U32);
8076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8077 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008078 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8079 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8081 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8082 tlvStruct->length = sizeof(tANI_U32);
8083 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8084 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008085 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8086 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 /* store Params pass it to WDI */
8090 pWdaParams->wdaMsgParam = configParam;
8091 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8092 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8094 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 if(IS_WDI_STATUS_FAILURE(status))
8096 {
8097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8098 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8099 vos_mem_free(pWdaParams->wdaMsgParam);
8100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8101 vos_mem_free(pWdaParams);
8102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008104 return CONVERT_WDI2VOS_STATUS(status);
8105}
Jeff Johnson295189b2012-06-20 16:38:30 -07008106/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008107 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008108 *
8109 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008110void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008111{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008112 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8113
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008115 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008116
8117 if(NULL == pWdaParams)
8118 {
8119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8120 "%s: pWdaParams received NULL", __func__);
8121 VOS_ASSERT(0);
8122 return ;
8123 }
8124
8125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 vos_mem_free(pWdaParams);
8127
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 return ;
8129}
Jeff Johnson295189b2012-06-20 16:38:30 -07008130/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008131 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8132 * Free memory.
8133 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8134 */
8135void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8136{
8137 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8138
8139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8140 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8141
8142 if(NULL == pWdaParams)
8143 {
8144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8145 "%s: pWdaParams received NULL", __func__);
8146 VOS_ASSERT(0);
8147 return;
8148 }
8149
8150 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8151 {
8152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8153 vos_mem_free(pWdaParams);
8154 }
8155
8156 return;
8157}
8158/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008159 * FUNCTION: WDA_SetUapsdAcParamsReq
8160 * Request to WDI to set the UAPSD params for an ac (sta mode).
8161 */
8162VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8163 tUapsdInfo *pUapsdInfo)
8164{
8165 WDI_Status status = WDI_STATUS_SUCCESS;
8166 tWDA_CbContext *pWDA = NULL ;
8167 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8168 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8169 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8170 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008172 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008173 if(NULL == wdiUapsdParams)
8174 {
8175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008177 VOS_ASSERT(0);
8178 return VOS_STATUS_E_NOMEM;
8179 }
8180 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8181 if(NULL == pWdaParams)
8182 {
8183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008185 VOS_ASSERT(0);
8186 vos_mem_free(wdiUapsdParams);
8187 return VOS_STATUS_E_NOMEM;
8188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008189 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8190 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8191 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8192 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8193 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8194 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008195 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8196 wdiUapsdParams->pUserData = pWdaParams;
8197
Jeff Johnson295189b2012-06-20 16:38:30 -07008198 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 pWdaParams->pWdaContext = pWDA;
8200 /* Store param pointer as passed in by caller */
8201 pWdaParams->wdaMsgParam = pUapsdInfo;
8202 /* store Params pass it to WDI */
8203 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008204 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008205 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008207 if(IS_WDI_STATUS_FAILURE(status))
8208 {
8209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8210 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8212 vos_mem_free(pWdaParams);
8213 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008214 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8215 return VOS_STATUS_SUCCESS;
8216 else
8217 return VOS_STATUS_E_FAILURE;
8218
Jeff Johnson295189b2012-06-20 16:38:30 -07008219}
8220/*
8221 * FUNCTION: WDA_ClearUapsdAcParamsReq
8222 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8223 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8224 * and again enter the UPASD with the modified params. Hence the disable
8225 * function was kept empty.
8226 *
8227 */
8228VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8229{
8230 /* do nothing */
8231 return VOS_STATUS_SUCCESS;
8232}
Jeff Johnson295189b2012-06-20 16:38:30 -07008233/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008234 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 *
8236 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008237void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008238{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008239 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8240
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008242 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008243
8244 if(NULL == pWdaParams)
8245 {
8246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008247 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008248 VOS_ASSERT(0) ;
8249 return ;
8250 }
8251
8252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8253 vos_mem_free(pWdaParams->wdaMsgParam);
8254 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008255
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 //print a msg, nothing else to do
8257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008258 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008259 return ;
8260}
Jeff Johnson295189b2012-06-20 16:38:30 -07008261/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008262 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8263 * Free memory.
8264 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8265 */
8266void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8267{
8268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8269
8270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8271 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8272
8273 if(NULL == pWdaParams)
8274 {
8275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8276 "%s: pWdaParams received NULL", __func__);
8277 VOS_ASSERT(0);
8278 return;
8279 }
8280
8281 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8282 {
8283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8284 vos_mem_free(pWdaParams->wdaMsgParam);
8285 vos_mem_free(pWdaParams);
8286 }
8287
8288 return;
8289}
8290/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 * FUNCTION: WDA_UpdateUapsdParamsReq
8292 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8293 */
8294VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8295 tUpdateUapsdParams* pUpdateUapsdInfo)
8296{
8297 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008298 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008299 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8300 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8301 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008302 tWDA_ReqParams *pWdaParams = NULL;
8303
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 if(NULL == wdiUpdateUapsdParams)
8307 {
8308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 VOS_ASSERT(0);
8311 return VOS_STATUS_E_NOMEM;
8312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8314 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8315 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008316 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8317 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008318
8319 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8320 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008321 {
8322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008325 vos_mem_free(pUpdateUapsdInfo);
8326 vos_mem_free(wdiUpdateUapsdParams);
8327 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008330 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008332 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8333 pWdaParams->pWdaContext = pWDA;
8334
Jeff Johnson43971f52012-07-17 12:26:56 -07008335 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008336 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008337 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008338
Jeff Johnson43971f52012-07-17 12:26:56 -07008339 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008340 {
8341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8342 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008343 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8345 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008346 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008347 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008348 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008349}
Jeff Johnson295189b2012-06-20 16:38:30 -07008350/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008351 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 *
8353 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008354void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008355{
8356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008358 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 if(WDI_STATUS_SUCCESS != wdiStatus)
8360 {
8361 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008362 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 if(NULL == pWdaParams)
8365 {
8366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008367 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008368 VOS_ASSERT(0) ;
8369 return ;
8370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8372 vos_mem_free(pWdaParams->wdaMsgParam);
8373 vos_mem_free(pWdaParams);
8374 return ;
8375}
Jeff Johnson295189b2012-06-20 16:38:30 -07008376/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008377 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8378 * Free memory.
8379 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8380 */
8381void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8382{
8383 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8384
8385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8386 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8387
8388 if(NULL == pWdaParams)
8389 {
8390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8391 "%s: pWdaParams received NULL", __func__);
8392 VOS_ASSERT(0);
8393 return;
8394 }
8395
8396 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8397 {
8398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8399 vos_mem_free(pWdaParams->wdaMsgParam);
8400 vos_mem_free(pWdaParams);
8401 }
8402
8403 return;
8404}
8405/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8407 *
8408 */
8409VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8410 tSirWlanSetRxpFilters *pWlanSuspendParam)
8411{
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008413 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8415 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8416 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8417 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008419 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 if(NULL == wdiRxpFilterParams)
8421 {
8422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008423 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008424 VOS_ASSERT(0);
8425 vos_mem_free(pWlanSuspendParam);
8426 return VOS_STATUS_E_NOMEM;
8427 }
8428 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8429 if(NULL == pWdaParams)
8430 {
8431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008432 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 VOS_ASSERT(0);
8434 vos_mem_free(wdiRxpFilterParams);
8435 vos_mem_free(pWlanSuspendParam);
8436 return VOS_STATUS_E_NOMEM;
8437 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8439 pWlanSuspendParam->setMcstBcstFilter;
8440 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8441 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8442
Yue Ma7f44bbe2013-04-12 11:47:39 -07008443 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8444 wdiRxpFilterParams->pUserData = pWdaParams;
8445
Jeff Johnson295189b2012-06-20 16:38:30 -07008446 pWdaParams->pWdaContext = pWDA;
8447 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8448 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008449 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008450 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008451 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008452 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008453 {
8454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8455 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008456 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8458 vos_mem_free(pWdaParams->wdaMsgParam);
8459 vos_mem_free(pWdaParams);
8460 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008461 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008462}
Jeff Johnson295189b2012-06-20 16:38:30 -07008463/*
8464 * FUNCTION: WDA_WdiIndicationCallback
8465 *
8466 */
8467void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8468 void* pUserData)
8469{
8470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008471 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008472}
Jeff Johnson295189b2012-06-20 16:38:30 -07008473/*
8474 * FUNCTION: WDA_ProcessWlanSuspendInd
8475 *
8476 */
8477VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8478 tSirWlanSuspendParam *pWlanSuspendParam)
8479{
8480 WDI_Status wdiStatus;
8481 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008483 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008484 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8485 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8486 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8487 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008489 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8490 if(WDI_STATUS_PENDING == wdiStatus)
8491 {
8492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008493 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008494 }
8495 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8496 {
8497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008498 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 vos_mem_free(pWlanSuspendParam);
8501 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8502}
8503
Chet Lanctot186b5732013-03-18 10:26:30 -07008504#ifdef WLAN_FEATURE_11W
8505/*
8506 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8507 *
8508 */
8509VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8510 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8511{
8512 WDI_Status wdiStatus;
8513 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8515 "------> %s ", __func__);
8516
8517 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8518 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8519 sizeof(tSirMacAddr));
8520
8521 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8522 wdiExclUnencryptParams.pUserData = pWDA;
8523
8524 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8525 if(WDI_STATUS_PENDING == wdiStatus)
8526 {
8527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8528 "Pending received for %s:%d ", __func__, __LINE__ );
8529 }
8530 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8531 {
8532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8533 "Failure in %s:%d ", __func__, __LINE__ );
8534 }
8535 vos_mem_free(pExclUnencryptParam);
8536 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8537}
8538#endif
8539
Jeff Johnson295189b2012-06-20 16:38:30 -07008540/*
8541 * FUNCTION: WDA_ProcessWlanResumeCallback
8542 *
8543 */
8544void WDA_ProcessWlanResumeCallback(
8545 WDI_SuspendResumeRspParamsType *resumeRspParams,
8546 void* pUserData)
8547{
8548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008550 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 if(NULL == pWdaParams)
8552 {
8553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008554 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008555 VOS_ASSERT(0) ;
8556 return ;
8557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008558 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8559 {
8560 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008561 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008562 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8564 vos_mem_free(pWdaParams->wdaMsgParam);
8565 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008566 return ;
8567}
Jeff Johnson295189b2012-06-20 16:38:30 -07008568/*
8569 * FUNCTION: WDA_ProcessWlanResumeReq
8570 *
8571 */
8572VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8573 tSirWlanResumeParam *pWlanResumeParam)
8574{
8575 WDI_Status wdiStatus;
8576 WDI_ResumeParamsType *wdiResumeParams =
8577 (WDI_ResumeParamsType *)vos_mem_malloc(
8578 sizeof(WDI_ResumeParamsType) ) ;
8579 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008581 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008582 if(NULL == wdiResumeParams)
8583 {
8584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 VOS_ASSERT(0);
8587 return VOS_STATUS_E_NOMEM;
8588 }
8589 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8590 if(NULL == pWdaParams)
8591 {
8592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008593 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 VOS_ASSERT(0);
8595 vos_mem_free(wdiResumeParams);
8596 return VOS_STATUS_E_NOMEM;
8597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008598 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8599 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 wdiResumeParams->wdiReqStatusCB = NULL;
8602 pWdaParams->wdaMsgParam = pWlanResumeParam;
8603 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8604 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008605 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8606 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8607 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008608 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8609 {
8610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8611 "Failure in Host Resume REQ WDI API, free all the memory " );
8612 VOS_ASSERT(0);
8613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8614 vos_mem_free(pWdaParams->wdaMsgParam);
8615 vos_mem_free(pWdaParams);
8616 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8618}
8619
Jeff Johnson295189b2012-06-20 16:38:30 -07008620/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008621 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 *
8623 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008624void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008625{
8626 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008628 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 if(NULL == pWdaParams)
8630 {
8631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008632 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 VOS_ASSERT(0) ;
8634 return ;
8635 }
8636
8637 vos_mem_free(pWdaParams->wdaMsgParam) ;
8638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8639 vos_mem_free(pWdaParams) ;
8640 /*
8641 * No respone required for SetBeaconFilter req so just free the request
8642 * param here
8643 */
8644
Jeff Johnson295189b2012-06-20 16:38:30 -07008645 return ;
8646}
Jeff Johnson295189b2012-06-20 16:38:30 -07008647/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008648 * FUNCTION: WDA_SetBeaconFilterReqCallback
8649 * Free memory.
8650 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8651 */
8652void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8653{
8654 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8655
8656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8657 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8658
8659 if(NULL == pWdaParams)
8660 {
8661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8662 "%s: pWdaParams received NULL", __func__);
8663 VOS_ASSERT(0);
8664 return;
8665 }
8666
8667 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8668 {
8669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8670 vos_mem_free(pWdaParams->wdaMsgParam);
8671 vos_mem_free(pWdaParams);
8672 }
8673
8674 return;
8675}
8676/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008677 * FUNCTION: WDA_SetBeaconFilterReq
8678 * Request to WDI to send the beacon filtering related information.
8679 */
8680VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8681 tBeaconFilterMsg* pBeaconFilterInfo)
8682{
8683 WDI_Status status = WDI_STATUS_SUCCESS;
8684 tANI_U8 *dstPtr, *srcPtr;
8685 tANI_U8 filterLength;
8686 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8687 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8688 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8689 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008691 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008692 if(NULL == wdiBeaconFilterInfo)
8693 {
8694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008696 VOS_ASSERT(0);
8697 return VOS_STATUS_E_NOMEM;
8698 }
8699 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8700 if(NULL == pWdaParams)
8701 {
8702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008703 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008704 VOS_ASSERT(0);
8705 vos_mem_free(wdiBeaconFilterInfo);
8706 return VOS_STATUS_E_NOMEM;
8707 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008708 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8709 pBeaconFilterInfo->beaconInterval;
8710 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8711 pBeaconFilterInfo->capabilityInfo;
8712 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8713 pBeaconFilterInfo->capabilityMask;
8714 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008715
8716 //Fill the BssIdx
8717 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8718
Jeff Johnson295189b2012-06-20 16:38:30 -07008719 //Fill structure with info contained in the beaconFilterTable
8720 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8721 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8722 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8723 if(WDI_BEACON_FILTER_LEN < filterLength)
8724 {
8725 filterLength = WDI_BEACON_FILTER_LEN;
8726 }
8727 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008728 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8729 wdiBeaconFilterInfo->pUserData = pWdaParams;
8730
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 /* Store param pointer as passed in by caller */
8732 /* store Params pass it to WDI */
8733 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8734 pWdaParams->pWdaContext = pWDA;
8735 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8736
Jeff Johnson295189b2012-06-20 16:38:30 -07008737 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008738 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008739 if(IS_WDI_STATUS_FAILURE(status))
8740 {
8741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8742 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8743 vos_mem_free(pWdaParams->wdaMsgParam) ;
8744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8745 vos_mem_free(pWdaParams) ;
8746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008747 return CONVERT_WDI2VOS_STATUS(status) ;
8748}
Jeff Johnson295189b2012-06-20 16:38:30 -07008749/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008750 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 *
8752 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008753void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008754{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008755 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8756
Jeff Johnson295189b2012-06-20 16:38:30 -07008757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008758 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008759
8760 if(NULL == pWdaParams)
8761 {
8762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008763 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008764 VOS_ASSERT(0) ;
8765 return ;
8766 }
8767
8768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8769 vos_mem_free(pWdaParams->wdaMsgParam);
8770 vos_mem_free(pWdaParams);
8771
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 //print a msg, nothing else to do
8773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008774 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008775 return ;
8776}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008777/*
8778 * FUNCTION: WDA_RemBeaconFilterReqCallback
8779 * Free memory.
8780 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8781 */
8782void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8783{
8784 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8785
8786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8787 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8788
8789 if(NULL == pWdaParams)
8790 {
8791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8792 "%s: pWdaParams received NULL", __func__);
8793 VOS_ASSERT(0);
8794 return;
8795 }
8796
8797 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8798 {
8799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8800 vos_mem_free(pWdaParams->wdaMsgParam);
8801 vos_mem_free(pWdaParams);
8802 }
8803
8804 return;
8805}
Jeff Johnson295189b2012-06-20 16:38:30 -07008806 // TODO: PE does not have this feature for now implemented,
8807 // but the support for removing beacon filter exists between
8808 // HAL and FW. This function can be called whenever PE defines
8809 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008810/*
8811 * FUNCTION: WDA_RemBeaconFilterReq
8812 * Request to WDI to send the removal of beacon filtering related information.
8813 */
8814VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8815 tRemBeaconFilterMsg* pBeaconFilterInfo)
8816{
8817 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008818 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008819 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8820 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8821 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008822 tWDA_ReqParams *pWdaParams ;
8823
Jeff Johnson295189b2012-06-20 16:38:30 -07008824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008825 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008826 if(NULL == wdiBeaconFilterInfo)
8827 {
8828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008830 VOS_ASSERT(0);
8831 return VOS_STATUS_E_NOMEM;
8832 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008833 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8834 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008835 {
8836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008838 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008839 vos_mem_free(wdiBeaconFilterInfo);
8840 vos_mem_free(pBeaconFilterInfo);
8841 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008843
8844 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8845 pBeaconFilterInfo->ucIeCount;
8846 //Fill structure with info contained in the ucRemIeId
8847 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8848 pBeaconFilterInfo->ucRemIeId,
8849 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8850 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8851 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008852
8853 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008854 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008855 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008856 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8857
8858 pWdaParams->pWdaContext = pWDA;
8859
Jeff Johnson43971f52012-07-17 12:26:56 -07008860 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008861 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008862 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008863 {
8864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8865 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008866 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8868 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008869 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008870 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008871 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008872}
Jeff Johnson295189b2012-06-20 16:38:30 -07008873/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008874 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008875 *
8876 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008877void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008878{
8879 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008881 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 if(NULL == pWdaParams)
8883 {
8884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008885 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008886 VOS_ASSERT(0) ;
8887 return ;
8888 }
8889
8890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8891 vos_mem_free(pWdaParams) ;
8892
Jeff Johnson295189b2012-06-20 16:38:30 -07008893 return ;
8894}
Jeff Johnson295189b2012-06-20 16:38:30 -07008895/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008896 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8897 * Free memory.
8898 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8899 */
8900void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8901{
8902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8903
8904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8905 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8906
8907 if(NULL == pWdaParams)
8908 {
8909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8910 "%s: pWdaParams received NULL", __func__);
8911 VOS_ASSERT(0);
8912 return;
8913 }
8914
8915 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8916 {
8917 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8918 vos_mem_free(pWdaParams);
8919 }
8920
8921 return;
8922}
8923/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008924 * FUNCTION: WDA_SetRSSIThresholdsReq
8925 * Request to WDI to set the RSSI thresholds (sta mode).
8926 */
8927VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8928{
8929 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008930 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008931 tWDA_CbContext *pWDA = NULL ;
8932 v_PVOID_t pVosContext = NULL;
8933 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8934 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8935 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8936 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008938 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008939 if(NULL == wdiRSSIThresholdsInfo)
8940 {
8941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008943 VOS_ASSERT(0);
8944 return VOS_STATUS_E_NOMEM;
8945 }
8946 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8947 if(NULL == pWdaParams)
8948 {
8949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008951 VOS_ASSERT(0);
8952 vos_mem_free(wdiRSSIThresholdsInfo);
8953 return VOS_STATUS_E_NOMEM;
8954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008956 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8957 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8958 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8960 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8961 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8963 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8964 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008965 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8966 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008967 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8968 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8969
Jeff Johnson295189b2012-06-20 16:38:30 -07008970 /* Store param pointer as passed in by caller */
8971 /* store Params pass it to WDI */
8972 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8973 pWdaParams->pWdaContext = pWDA;
8974 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008975 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008976 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008977 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008978 {
8979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8980 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008981 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8983 vos_mem_free(pWdaParams) ;
8984 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008985 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008986
8987}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008988/*
Yue Madb90ac12013-04-04 13:39:13 -07008989 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 *
8991 */
Yue Madb90ac12013-04-04 13:39:13 -07008992void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008993{
8994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8995
8996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008997 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 if(NULL == pWdaParams)
8999 {
9000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009001 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009002 VOS_ASSERT(0) ;
9003 return ;
9004 }
9005
9006 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9007 vos_mem_free(pWdaParams->wdaMsgParam);
9008 vos_mem_free(pWdaParams) ;
9009
9010 //print a msg, nothing else to do
9011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009012 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009013 return ;
9014}
Jeff Johnson295189b2012-06-20 16:38:30 -07009015/*
Yue Madb90ac12013-04-04 13:39:13 -07009016 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009017 * Free memory.
9018 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009019 */
9020void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9021{
9022 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9023
9024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9025 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9026
9027 if(NULL == pWdaParams)
9028 {
9029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9030 "%s: Invalid pWdaParams pointer", __func__);
9031 VOS_ASSERT(0);
9032 return;
9033 }
9034
9035 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9036 {
9037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9038 vos_mem_free(pWdaParams->wdaMsgParam);
9039 vos_mem_free(pWdaParams);
9040 }
9041
9042 return;
9043}
9044/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009045 * FUNCTION: WDA_ProcessHostOffloadReq
9046 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9047 * to broadcast traffic (sta mode).
9048 */
9049VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9050 tSirHostOffloadReq *pHostOffloadParams)
9051{
9052 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009053 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9055 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9056 sizeof(WDI_HostOffloadReqParamsType)) ;
9057 tWDA_ReqParams *pWdaParams ;
9058
9059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009060 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009061
9062 if(NULL == wdiHostOffloadInfo)
9063 {
9064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009065 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009066 VOS_ASSERT(0);
9067 return VOS_STATUS_E_NOMEM;
9068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009069 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9070 if(NULL == pWdaParams)
9071 {
9072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009073 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 VOS_ASSERT(0);
9075 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009076 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009077 return VOS_STATUS_E_NOMEM;
9078 }
9079
9080 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9081 pHostOffloadParams->offloadType;
9082 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9083 pHostOffloadParams->enableOrDisable;
9084
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009085 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9086 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9087
Jeff Johnson295189b2012-06-20 16:38:30 -07009088 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9089 {
9090 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9091 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9092 pHostOffloadParams->params.hostIpv4Addr,
9093 4);
9094 break;
9095 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9096 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9097 pHostOffloadParams->params.hostIpv6Addr,
9098 16);
9099 break;
9100 case SIR_IPV6_NS_OFFLOAD:
9101 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9102 pHostOffloadParams->params.hostIpv6Addr,
9103 16);
9104
9105#ifdef WLAN_NS_OFFLOAD
9106 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9107 {
9108 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9109 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9110 16);
9111 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9112 }
9113 else
9114 {
9115 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9116 }
9117
9118 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9119 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9120 16);
9121 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9122 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9123 6);
9124
9125 //Only two are supported so let's go through them without a loop
9126 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9127 {
9128 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9129 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9130 16);
9131 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9132 }
9133 else
9134 {
9135 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9136 }
9137
9138 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9139 {
9140 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9141 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9142 16);
9143 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9144 }
9145 else
9146 {
9147 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9148 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309149 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9150 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009151 break;
9152#endif //WLAN_NS_OFFLOAD
9153 default:
9154 {
9155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9156 "No Handling for Offload Type %x in WDA "
9157 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9158 //WDA_VOS_ASSERT(0) ;
9159 }
9160 }
Yue Madb90ac12013-04-04 13:39:13 -07009161 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9162 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009163
Jeff Johnson295189b2012-06-20 16:38:30 -07009164 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009165 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009166 /* store Params pass it to WDI */
9167 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9168 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009169
Jeff Johnson295189b2012-06-20 16:38:30 -07009170
Jeff Johnson43971f52012-07-17 12:26:56 -07009171 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009172 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009173
Jeff Johnson43971f52012-07-17 12:26:56 -07009174 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 {
9176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9177 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009178 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9180 vos_mem_free(pWdaParams->wdaMsgParam);
9181 vos_mem_free(pWdaParams) ;
9182 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009183 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009184
9185}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009186/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009187 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 *
9189 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009190void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009191{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009192 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9193
Jeff Johnson295189b2012-06-20 16:38:30 -07009194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009195 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009196
9197 if(NULL == pWdaParams)
9198 {
9199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009200 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009201 VOS_ASSERT(0) ;
9202 return ;
9203 }
9204
9205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9206 vos_mem_free(pWdaParams->wdaMsgParam);
9207 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009208
Jeff Johnson295189b2012-06-20 16:38:30 -07009209 //print a msg, nothing else to do
9210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009211 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 return ;
9213}
Jeff Johnson295189b2012-06-20 16:38:30 -07009214/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009215 * FUNCTION: WDA_KeepAliveReqCallback
9216 * Free memory.
9217 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9218 */
9219void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9220{
9221 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9222
9223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9224 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9225
9226 if(NULL == pWdaParams)
9227 {
9228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9229 "%s: pWdaParams received NULL", __func__);
9230 VOS_ASSERT(0);
9231 return;
9232 }
9233
9234 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9235 {
9236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9237 vos_mem_free(pWdaParams->wdaMsgParam);
9238 vos_mem_free(pWdaParams);
9239 }
9240
9241 return;
9242}
9243/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009244 * FUNCTION: WDA_ProcessKeepAliveReq
9245 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9246 * wakeup due to broadcast traffic (sta mode).
9247 */
9248VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9249 tSirKeepAliveReq *pKeepAliveParams)
9250{
9251 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009252 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009253 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9254 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9255 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009256 tWDA_ReqParams *pWdaParams;
9257
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009259 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 if(NULL == wdiKeepAliveInfo)
9261 {
9262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009263 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009265 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009266 return VOS_STATUS_E_NOMEM;
9267 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009268
9269 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9270 if(NULL == pWdaParams)
9271 {
9272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009273 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009274 VOS_ASSERT(0);
9275 vos_mem_free(wdiKeepAliveInfo);
9276 vos_mem_free(pKeepAliveParams);
9277 return VOS_STATUS_E_NOMEM;
9278 }
9279
Jeff Johnson295189b2012-06-20 16:38:30 -07009280 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9281 pKeepAliveParams->packetType;
9282 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9283 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009284
9285 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9286 pKeepAliveParams->bssId,
9287 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009288
9289 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9290 {
9291 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9292 pKeepAliveParams->hostIpv4Addr,
9293 SIR_IPV4_ADDR_LEN);
9294 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9295 pKeepAliveParams->destIpv4Addr,
9296 SIR_IPV4_ADDR_LEN);
9297 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9298 pKeepAliveParams->destMacAddr,
9299 SIR_MAC_ADDR_LEN);
9300 }
9301 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9302 {
9303 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9304 SIR_IPV4_ADDR_LEN,
9305 0);
9306 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9307 SIR_IPV4_ADDR_LEN,
9308 0);
9309 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9310 SIR_MAC_ADDR_LEN,
9311 0);
9312 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009313 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9314 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009315
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009317 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009318 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009319 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9320 pWdaParams->pWdaContext = pWDA;
9321
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9323 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9324 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9325 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9326 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9328 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9329 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9330 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9331 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9333 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9334 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9335 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9336 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9337 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9338 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9339 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9341 "TimePeriod %d PacketType %d",
9342 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9343 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009344 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009345 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009346
Jeff Johnson43971f52012-07-17 12:26:56 -07009347 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 {
9349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9350 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009351 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9353 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009354 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009355 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009356 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009357
9358}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009359/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009360 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009361 *
9362 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009363void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009364 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9365 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009366{
9367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009369 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009370 if(NULL == pWdaParams)
9371 {
9372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009373 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009374 VOS_ASSERT(0) ;
9375 return ;
9376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9378 vos_mem_free(pWdaParams->wdaMsgParam);
9379 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 return ;
9381}
Jeff Johnson295189b2012-06-20 16:38:30 -07009382/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009383 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9384 * Free memory.
9385 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9386 */
9387void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9388{
9389 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9390
9391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9392 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9393
9394 if(NULL == pWdaParams)
9395 {
9396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9397 "%s: pWdaParams received NULL", __func__);
9398 VOS_ASSERT(0);
9399 return;
9400 }
9401
9402 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9403 {
9404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9405 vos_mem_free(pWdaParams->wdaMsgParam);
9406 vos_mem_free(pWdaParams);
9407 }
9408
9409 return;
9410}
9411
9412/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009413 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9414 * Request to WDI to add WOWL Bcast pattern
9415 */
9416VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9417 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9418{
9419 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009420 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009421 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9422 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9423 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9424 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009426 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009427 if(NULL == wdiWowlAddBcPtrnInfo)
9428 {
9429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009430 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009431 VOS_ASSERT(0);
9432 return VOS_STATUS_E_NOMEM;
9433 }
9434 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9435 if(NULL == pWdaParams)
9436 {
9437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009438 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 VOS_ASSERT(0);
9440 vos_mem_free(wdiWowlAddBcPtrnInfo);
9441 return VOS_STATUS_E_NOMEM;
9442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009443 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9444 pWowlAddBcPtrnParams->ucPatternId;
9445 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9446 pWowlAddBcPtrnParams->ucPatternByteOffset;
9447 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9448 pWowlAddBcPtrnParams->ucPatternMaskSize;
9449 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9450 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9452 {
9453 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9454 pWowlAddBcPtrnParams->ucPattern,
9455 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9456 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9457 pWowlAddBcPtrnParams->ucPatternMask,
9458 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9459 }
9460 else
9461 {
9462 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9463 pWowlAddBcPtrnParams->ucPattern,
9464 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9465 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9466 pWowlAddBcPtrnParams->ucPatternMask,
9467 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9468
9469 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9470 pWowlAddBcPtrnParams->ucPatternExt,
9471 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9472 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9473 pWowlAddBcPtrnParams->ucPatternMaskExt,
9474 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9475 }
9476
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009477 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9478 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9479
Yue Ma7f44bbe2013-04-12 11:47:39 -07009480 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9481 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 /* Store param pointer as passed in by caller */
9483 /* store Params pass it to WDI */
9484 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9485 pWdaParams->pWdaContext = pWDA;
9486 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009487 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009488 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009489 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 {
9491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9492 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009493 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009494 vos_mem_free(pWdaParams->wdaMsgParam) ;
9495 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9496 vos_mem_free(pWdaParams) ;
9497 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009498 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009499
9500}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009501/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009502 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009503 *
9504 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009505void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009506 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9507 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009508{
9509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009511 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009512 if(NULL == pWdaParams)
9513 {
9514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009515 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009516 VOS_ASSERT(0) ;
9517 return ;
9518 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9520 vos_mem_free(pWdaParams->wdaMsgParam);
9521 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009522 return ;
9523}
Jeff Johnson295189b2012-06-20 16:38:30 -07009524/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009525 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9526 * Free memory.
9527 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9528 */
9529void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9530{
9531 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9532
9533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9534 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9535
9536 if(NULL == pWdaParams)
9537 {
9538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9539 "%s: pWdaParams received NULL", __func__);
9540 VOS_ASSERT(0);
9541 return;
9542 }
9543
9544 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9545 {
9546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9547 vos_mem_free(pWdaParams->wdaMsgParam);
9548 vos_mem_free(pWdaParams);
9549 }
9550
9551 return;
9552}
9553/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009554 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9555 * Request to WDI to delete WOWL Bcast pattern
9556 */
9557VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9558 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9559{
9560 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009561 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009562 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9563 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9564 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9565 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009567 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 if(NULL == wdiWowlDelBcPtrnInfo)
9569 {
9570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009571 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009572 VOS_ASSERT(0);
9573 return VOS_STATUS_E_NOMEM;
9574 }
9575 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9576 if(NULL == pWdaParams)
9577 {
9578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009579 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009580 VOS_ASSERT(0);
9581 vos_mem_free(wdiWowlDelBcPtrnInfo);
9582 return VOS_STATUS_E_NOMEM;
9583 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009584 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9585 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009586
9587 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9588 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9589
Yue Ma7f44bbe2013-04-12 11:47:39 -07009590 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9591 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009592 /* Store param pointer as passed in by caller */
9593 /* store Params pass it to WDI */
9594 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9595 pWdaParams->pWdaContext = pWDA;
9596 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009597 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009598 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009599 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009600 {
9601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9602 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009603 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009604 vos_mem_free(pWdaParams->wdaMsgParam) ;
9605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9606 vos_mem_free(pWdaParams) ;
9607 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009608 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009609
9610}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009611/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009612 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009613 *
9614 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009615void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009616{
9617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9618 tWDA_CbContext *pWDA;
9619 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009621 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009622 if(NULL == pWdaParams)
9623 {
9624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009625 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009626 VOS_ASSERT(0) ;
9627 return ;
9628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009629 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9630 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9631
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009632 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9633
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9635 vos_mem_free(pWdaParams) ;
9636
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009637 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009638 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009639 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009640 return ;
9641}
Jeff Johnson295189b2012-06-20 16:38:30 -07009642/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009643 * FUNCTION: WDA_WowlEnterReqCallback
9644 * Free memory and send WOWL Enter RSP back to PE.
9645 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9646 */
9647void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9648{
9649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9650 tWDA_CbContext *pWDA;
9651 tSirHalWowlEnterParams *pWowlEnterParams;
9652
9653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9654 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9655
9656 if(NULL == pWdaParams)
9657 {
9658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9659 "%s: pWdaParams received NULL", __func__);
9660 VOS_ASSERT(0);
9661 return;
9662 }
9663
9664 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9665 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9666 pWowlEnterParams->status = wdiStatus;
9667
9668 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9669 {
9670 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9671 vos_mem_free(pWdaParams);
9672 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9673 }
9674
9675 return;
9676}
9677/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009678 * FUNCTION: WDA_ProcessWowlEnterReq
9679 * Request to WDI to enter WOWL
9680 */
9681VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9682 tSirHalWowlEnterParams *pWowlEnterParams)
9683{
9684 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009685 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009686 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9687 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9688 sizeof(WDI_WowlEnterReqParamsType)) ;
9689 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009691 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 if(NULL == wdiWowlEnterInfo)
9693 {
9694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 VOS_ASSERT(0);
9697 return VOS_STATUS_E_NOMEM;
9698 }
9699 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9700 if(NULL == pWdaParams)
9701 {
9702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009703 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009704 VOS_ASSERT(0);
9705 vos_mem_free(wdiWowlEnterInfo);
9706 return VOS_STATUS_E_NOMEM;
9707 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009708
9709 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9710
Jeff Johnson295189b2012-06-20 16:38:30 -07009711 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9712 pWowlEnterParams->magicPtrn,
9713 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009714 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9715 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009716 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9717 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009718 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9719 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009720 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9721 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009722 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9723 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009724 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9725 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009726 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9727 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009728 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9729 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009730#ifdef WLAN_WAKEUP_EVENTS
9731 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9732 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9733
9734 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9735 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9736
9737 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9738 pWowlEnterParams->ucWowNetScanOffloadMatch;
9739
9740 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9741 pWowlEnterParams->ucWowGTKRekeyError;
9742
9743 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9744 pWowlEnterParams->ucWoWBSSConnLoss;
9745#endif // WLAN_WAKEUP_EVENTS
9746
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009747 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9748 pWowlEnterParams->bssIdx;
9749
Yue Ma7f44bbe2013-04-12 11:47:39 -07009750 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9751 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009752 /* Store param pointer as passed in by caller */
9753 /* store Params pass it to WDI */
9754 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9755 pWdaParams->pWdaContext = pWDA;
9756 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009757 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009758 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009759 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009760 {
9761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9762 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009763 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009764 vos_mem_free(pWdaParams->wdaMsgParam) ;
9765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9766 vos_mem_free(pWdaParams) ;
9767 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009768 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009769
9770}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009771/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009772 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009773 *
9774 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009775void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009776{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009777 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9778 tWDA_CbContext *pWDA;
9779 tSirHalWowlExitParams *pWowlExitParams;
9780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009781 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009782 if(NULL == pWdaParams)
9783 {
9784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009785 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009786 VOS_ASSERT(0) ;
9787 return ;
9788 }
9789 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9790 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9791
9792 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009793 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009794
9795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9796 vos_mem_free(pWdaParams) ;
9797
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__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009800 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009801 return ;
9802}
Jeff Johnson295189b2012-06-20 16:38:30 -07009803/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009804 * FUNCTION: WDA_WowlExitReqCallback
9805 * Free memory and send WOWL Exit RSP back to PE.
9806 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9807 */
9808void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9809{
9810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9811 tWDA_CbContext *pWDA;
9812 tSirHalWowlExitParams *pWowlExitParams;
9813
9814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9815 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9816
9817 if(NULL == pWdaParams)
9818 {
9819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9820 "%s: pWdaParams received NULL", __func__);
9821 VOS_ASSERT(0);
9822 return;
9823 }
9824
9825 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9826 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9827 pWowlExitParams->status = wdiStatus;
9828
9829 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9830 {
9831 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9832 vos_mem_free(pWdaParams);
9833 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9834 }
9835
9836 return;
9837}
9838/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009839 * FUNCTION: WDA_ProcessWowlExitReq
9840 * Request to WDI to add WOWL Bcast pattern
9841 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009842VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9843 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009844{
9845 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009846 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009847 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9848 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9849 sizeof(WDI_WowlExitReqParamsType)) ;
9850 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009852 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009853 if(NULL == wdiWowlExitInfo)
9854 {
9855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009856 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009857 VOS_ASSERT(0);
9858 return VOS_STATUS_E_NOMEM;
9859 }
9860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9861 if(NULL == pWdaParams)
9862 {
9863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009864 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009865 VOS_ASSERT(0);
9866 vos_mem_free(wdiWowlExitInfo);
9867 return VOS_STATUS_E_NOMEM;
9868 }
9869
9870 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9871 pWowlExitParams->bssIdx;
9872
Yue Ma7f44bbe2013-04-12 11:47:39 -07009873 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9874 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009875
9876 /* Store param pointer as passed in by caller */
9877 /* store Params pass it to WDI */
9878 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9879 pWdaParams->pWdaContext = pWDA;
9880 pWdaParams->wdaMsgParam = pWowlExitParams;
9881
9882 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009883 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009884
Jeff Johnson43971f52012-07-17 12:26:56 -07009885 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009886 {
9887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9888 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009889 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9891 vos_mem_free(pWdaParams->wdaMsgParam);
9892 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009894 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009895}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009896/*
9897 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9898 * Request to WDI to determine whether a given station is capable of
9899 * using HW-based frame translation
9900 */
9901v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9902 tANI_U8 staIdx)
9903{
9904 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9905}
Jeff Johnson295189b2012-06-20 16:38:30 -07009906/*
9907 * FUNCTION: WDA_NvDownloadReqCallback
9908 * send NV Download RSP back to PE
9909 */
9910void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9911 void* pUserData)
9912{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009913
9914 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9915 tWDA_CbContext *pWDA;
9916
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009918 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009919
9920 if(NULL == pWdaParams)
9921 {
9922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009923 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009924 VOS_ASSERT(0) ;
9925 return ;
9926 }
9927
9928 pWDA = pWdaParams->pWdaContext;
9929
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009931 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9932 vos_mem_free(pWdaParams);
9933
Jeff Johnson295189b2012-06-20 16:38:30 -07009934 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 return ;
9936}
Jeff Johnson295189b2012-06-20 16:38:30 -07009937/*
9938 * FUNCTION: WDA_ProcessNvDownloadReq
9939 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9940 */
9941VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9942{
9943 /* Initialize the local Variables*/
9944 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9945 v_VOID_t *pNvBuffer=NULL;
9946 v_SIZE_t bufferSize = 0;
9947 WDI_Status status = WDI_STATUS_E_FAILURE;
9948 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009949 tWDA_ReqParams *pWdaParams ;
9950
Jeff Johnson295189b2012-06-20 16:38:30 -07009951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009952 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009953 if(NULL == pWDA)
9954 {
9955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009956 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009957 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009958 return VOS_STATUS_E_FAILURE;
9959 }
9960
9961 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -07009962 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
9963
Jeff Johnson295189b2012-06-20 16:38:30 -07009964 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9965 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009966 if(NULL == wdiNvDownloadReqParam)
9967 {
9968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009969 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009970 VOS_ASSERT(0);
9971 return VOS_STATUS_E_NOMEM;
9972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009973 /* Copy Params to wdiNvDownloadReqParam*/
9974 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9975 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009976
9977 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9978 if(NULL == pWdaParams)
9979 {
9980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009981 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009982 VOS_ASSERT(0);
9983 vos_mem_free(wdiNvDownloadReqParam);
9984 return VOS_STATUS_E_NOMEM;
9985 }
9986
Jeff Johnson295189b2012-06-20 16:38:30 -07009987 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009988 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9989 pWdaParams->wdaMsgParam = NULL;
9990 pWdaParams->pWdaContext = pWDA;
9991
9992
Jeff Johnson295189b2012-06-20 16:38:30 -07009993 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009994
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009996 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9997
Jeff Johnson295189b2012-06-20 16:38:30 -07009998 if(IS_WDI_STATUS_FAILURE(status))
9999 {
10000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10001 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010002 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10003 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010005 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010006}
10007/*
10008 * FUNCTION: WDA_FlushAcReqCallback
10009 * send Flush AC RSP back to TL
10010 */
10011void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10012{
10013 vos_msg_t wdaMsg = {0} ;
10014 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10015 tFlushACReq *pFlushACReqParams;
10016 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010018 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010019 if(NULL == pWdaParams)
10020 {
10021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010022 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 VOS_ASSERT(0) ;
10024 return ;
10025 }
10026
10027 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10028 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10029 if(NULL == pFlushACRspParams)
10030 {
10031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010032 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010034 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 return ;
10036 }
10037 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10038 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10039 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10040 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10041 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010042 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010043 vos_mem_free(pWdaParams->wdaMsgParam) ;
10044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10045 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10047 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10048 // POST message to TL
10049 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10050
Jeff Johnson295189b2012-06-20 16:38:30 -070010051 return ;
10052}
Jeff Johnson295189b2012-06-20 16:38:30 -070010053/*
10054 * FUNCTION: WDA_ProcessFlushAcReq
10055 * Request to WDI to Update the DELBA REQ params.
10056 */
10057VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10058 tFlushACReq *pFlushAcReqParams)
10059{
10060 WDI_Status status = WDI_STATUS_SUCCESS ;
10061 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10062 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10063 sizeof(WDI_FlushAcReqParamsType)) ;
10064 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010065 if(NULL == wdiFlushAcReqParam)
10066 {
10067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010069 VOS_ASSERT(0);
10070 return VOS_STATUS_E_NOMEM;
10071 }
10072 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10073 if(NULL == pWdaParams)
10074 {
10075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010077 VOS_ASSERT(0);
10078 vos_mem_free(wdiFlushAcReqParam);
10079 return VOS_STATUS_E_NOMEM;
10080 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010082 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010083 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10084 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10085 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10086 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 /* Store Flush AC pointer, as this will be used for response */
10088 /* store Params pass it to WDI */
10089 pWdaParams->pWdaContext = pWDA;
10090 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10091 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010092 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10093 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010094 if(IS_WDI_STATUS_FAILURE(status))
10095 {
10096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10097 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10098 vos_mem_free(pWdaParams->wdaMsgParam) ;
10099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10100 vos_mem_free(pWdaParams) ;
10101 //TODO: respond to TL with failure
10102 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010104}
Jeff Johnson295189b2012-06-20 16:38:30 -070010105/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010106 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010107 *
10108 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010109void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010110{
10111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10112 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010113 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010114
10115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010116 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010117 if(NULL == pWdaParams)
10118 {
10119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010120 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010121 VOS_ASSERT(0) ;
10122 return ;
10123 }
10124 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10125 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10126 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10127 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10128 {
10129 pWDA->wdaAmpSessionOn = VOS_FALSE;
10130 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010131 vos_mem_free(pWdaParams->wdaMsgParam) ;
10132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10133 vos_mem_free(pWdaParams) ;
10134 /*
10135 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10136 * param here
10137 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010138 return ;
10139}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010140/*
10141 * FUNCTION: WDA_BtAmpEventReqCallback
10142 * Free memory.
10143 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10144 */
10145void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10146{
10147 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10148 tWDA_CbContext *pWDA;
10149 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010150
Yue Ma7f44bbe2013-04-12 11:47:39 -070010151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10152 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10153
10154 if(NULL == pWdaParams)
10155 {
10156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10157 "%s: pWdaParams received NULL", __func__);
10158 VOS_ASSERT(0);
10159 return;
10160 }
10161
10162 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10163 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10164
10165 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10166 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10167 {
10168 pWDA->wdaAmpSessionOn = VOS_FALSE;
10169 }
10170
10171 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10172 {
10173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10174 vos_mem_free(pWdaParams->wdaMsgParam);
10175 vos_mem_free(pWdaParams);
10176 }
10177
10178 return;
10179}
Jeff Johnson295189b2012-06-20 16:38:30 -070010180/*
10181 * FUNCTION: WDA_ProcessBtAmpEventReq
10182 * Request to WDI to Update with BT AMP events.
10183 */
10184VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10185 tSmeBtAmpEvent *pBtAmpEventParams)
10186{
10187 WDI_Status status = WDI_STATUS_SUCCESS ;
10188 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10189 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10190 sizeof(WDI_BtAmpEventParamsType)) ;
10191 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010193 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 if(NULL == wdiBtAmpEventParam)
10195 {
10196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010197 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010198 VOS_ASSERT(0);
10199 return VOS_STATUS_E_NOMEM;
10200 }
10201 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10202 if(NULL == pWdaParams)
10203 {
10204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010206 VOS_ASSERT(0);
10207 vos_mem_free(wdiBtAmpEventParam);
10208 return VOS_STATUS_E_NOMEM;
10209 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010210 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10211 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010212 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10213 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010214 /* Store BT AMP event pointer, as this will be used for response */
10215 /* store Params pass it to WDI */
10216 pWdaParams->pWdaContext = pWDA;
10217 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10218 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010219 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010220 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010221 if(IS_WDI_STATUS_FAILURE(status))
10222 {
10223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10224 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10225 vos_mem_free(pWdaParams->wdaMsgParam) ;
10226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10227 vos_mem_free(pWdaParams) ;
10228 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10230 {
10231 pWDA->wdaAmpSessionOn = VOS_TRUE;
10232 }
10233 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010234}
10235
Jeff Johnson295189b2012-06-20 16:38:30 -070010236/*
10237 * FUNCTION: WDA_FTMCommandReqCallback
10238 * Handle FTM CMD response came from HAL
10239 * Route responce to HDD FTM
10240 */
10241void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10242 void *usrData)
10243{
10244 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10246 {
10247 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010248 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010249 return;
10250 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 /* Release Current FTM Command Request */
10252 vos_mem_free(pWDA->wdaFTMCmdReq);
10253 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 /* Post FTM Responce to HDD FTM */
10255 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010256 return;
10257}
Jeff Johnson295189b2012-06-20 16:38:30 -070010258/*
10259 * FUNCTION: WDA_ProcessFTMCommand
10260 * Send FTM command to WDI
10261 */
10262VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10263 tPttMsgbuffer *pPTTFtmCmd)
10264{
10265 WDI_Status status = WDI_STATUS_SUCCESS;
10266 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 ftmCMDReq = (WDI_FTMCommandReqType *)
10268 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10269 if(NULL == ftmCMDReq)
10270 {
10271 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10272 "WDA FTM Command buffer alloc fail");
10273 return VOS_STATUS_E_NOMEM;
10274 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10276 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 /* Send command to WDI */
10279 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010280 return status;
10281}
Jeff Johnsone7245742012-09-05 17:12:55 -070010282#ifdef FEATURE_OEM_DATA_SUPPORT
10283/*
10284 * FUNCTION: WDA_StartOemDataReqCallback
10285 *
10286 */
10287void WDA_StartOemDataReqCallback(
10288 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10289 void* pUserData)
10290{
10291 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010292 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10293 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010294 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010295
Jeff Johnsone7245742012-09-05 17:12:55 -070010296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010297 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010298
10299 if(NULL == pWdaParams)
10300 {
10301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010302 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010303 VOS_ASSERT(0) ;
10304 return ;
10305 }
10306 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10307
Jeff Johnsone7245742012-09-05 17:12:55 -070010308 if(NULL == pWDA)
10309 {
10310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010311 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010312 VOS_ASSERT(0);
10313 return ;
10314 }
10315
10316 /*
10317 * Allocate memory for response params sent to PE
10318 */
10319 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10320
10321 // Check if memory is allocated for OemdataMeasRsp Params.
10322 if(NULL == pOemDataRspParams)
10323 {
10324 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10325 "OEM DATA WDA callback alloc fail");
10326 VOS_ASSERT(0) ;
10327 return;
10328 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010329
Jeff Johnsone7245742012-09-05 17:12:55 -070010330 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10332 vos_mem_free(pWdaParams->wdaMsgParam);
10333 vos_mem_free(pWdaParams) ;
10334
Jeff Johnsone7245742012-09-05 17:12:55 -070010335 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010336 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010337 * Also, here success always means that we have atleast one BSSID.
10338 */
10339 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10340
10341 //enable Tx
10342 status = WDA_ResumeDataTx(pWDA);
10343 if(status != VOS_STATUS_SUCCESS)
10344 {
10345 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10346 }
10347 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10348 return ;
10349}
10350/*
10351 * FUNCTION: WDA_ProcessStartOemDataReq
10352 * Send Start Oem Data Req to WDI
10353 */
10354VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10355 tStartOemDataReq *pOemDataReqParams)
10356{
10357 WDI_Status status = WDI_STATUS_SUCCESS;
10358 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010359 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010360
10361 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10362
10363 if(NULL == wdiOemDataReqParams)
10364 {
10365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010366 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010367 VOS_ASSERT(0);
10368 return VOS_STATUS_E_NOMEM;
10369 }
10370
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010371 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10372 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10373 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10374 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010375
10376 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10377
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10379 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010380 {
10381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010383 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010384 vos_mem_free(pOemDataReqParams);
10385 VOS_ASSERT(0);
10386 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010387 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010388
Bernald44a1ae2013-01-09 08:30:39 -080010389 pWdaParams->pWdaContext = (void*)pWDA;
10390 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10391 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010392
10393 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10394 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010395
10396 if(IS_WDI_STATUS_FAILURE(status))
10397 {
10398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10399 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10401 vos_mem_free(pWdaParams->wdaMsgParam);
10402 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010403 }
10404 return CONVERT_WDI2VOS_STATUS(status) ;
10405}
10406#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010407/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010408 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 *
10410 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010411void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010412{
10413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010415 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 if(NULL == pWdaParams)
10417 {
10418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010419 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010420 VOS_ASSERT(0) ;
10421 return ;
10422 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010423
10424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10425 vos_mem_free(pWdaParams->wdaMsgParam);
10426 vos_mem_free(pWdaParams);
10427
10428 return ;
10429}
10430/*
10431 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10432 * Free memory.
10433 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10434 */
10435void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10436{
10437 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10438
10439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10440 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10441
10442 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010443 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10445 "%s: pWdaParams received NULL", __func__);
10446 VOS_ASSERT(0);
10447 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010448 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010449
10450 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010451 {
10452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010453 vos_mem_free(pWdaParams->wdaMsgParam);
10454 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010456
10457 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010458}
Jeff Johnson295189b2012-06-20 16:38:30 -070010459#ifdef WLAN_FEATURE_GTK_OFFLOAD
10460/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010461 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010462 *
10463 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010464void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010465 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010466{
10467 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10468
10469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010470 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010471 if(NULL == pWdaParams)
10472 {
10473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10474 "%s: pWdaParams received NULL", __func__);
10475 VOS_ASSERT(0);
10476 return;
10477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010478
Jeff Johnson295189b2012-06-20 16:38:30 -070010479 vos_mem_free(pWdaParams->wdaMsgParam) ;
10480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10481 vos_mem_free(pWdaParams) ;
10482
10483 //print a msg, nothing else to do
10484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010485 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010486
10487 return ;
10488}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010489/*
10490 * FUNCTION: WDA_GTKOffloadReqCallback
10491 * Free memory.
10492 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10493 */
10494void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10495{
10496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010497
Yue Ma7f44bbe2013-04-12 11:47:39 -070010498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10499 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10500
10501 if(NULL == pWdaParams)
10502 {
10503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10504 "%s: pWdaParams received NULL", __func__);
10505 VOS_ASSERT(0);
10506 return;
10507 }
10508
10509 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10510 {
10511 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10512 vos_mem_free(pWdaParams->wdaMsgParam);
10513 vos_mem_free(pWdaParams);
10514 }
10515
10516 return;
10517}
Jeff Johnson295189b2012-06-20 16:38:30 -070010518/*
10519 * FUNCTION: WDA_ProcessGTKOffloadReq
10520 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10521 * to broadcast traffic (sta mode).
10522 */
10523VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10524 tpSirGtkOffloadParams pGtkOffloadParams)
10525{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010526 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010527 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10528 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10529 sizeof(WDI_GtkOffloadReqMsg)) ;
10530 tWDA_ReqParams *pWdaParams ;
10531
10532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010533 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010534
10535 if(NULL == wdiGtkOffloadReqMsg)
10536 {
10537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010538 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 VOS_ASSERT(0);
10540 return VOS_STATUS_E_NOMEM;
10541 }
10542
10543 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10544 if(NULL == pWdaParams)
10545 {
10546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010547 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010548 VOS_ASSERT(0);
10549 vos_mem_free(wdiGtkOffloadReqMsg);
10550 return VOS_STATUS_E_NOMEM;
10551 }
10552
10553 //
10554 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10555 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010556
10557 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010558 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010559
Jeff Johnson295189b2012-06-20 16:38:30 -070010560 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10561 // Copy KCK
10562 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10563 // Copy KEK
10564 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10565 // Copy KeyReplayCounter
10566 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10567 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10568
Yue Ma7f44bbe2013-04-12 11:47:39 -070010569 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10570 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010571
Jeff Johnson295189b2012-06-20 16:38:30 -070010572
10573 /* Store Params pass it to WDI */
10574 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10575 pWdaParams->pWdaContext = pWDA;
10576 /* Store param pointer as passed in by caller */
10577 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10578
Yue Ma7f44bbe2013-04-12 11:47:39 -070010579 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010580
10581 if(IS_WDI_STATUS_FAILURE(status))
10582 {
10583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10584 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10586 vos_mem_free(pWdaParams->wdaMsgParam);
10587 vos_mem_free(pWdaParams);
10588 }
10589
10590 return CONVERT_WDI2VOS_STATUS(status) ;
10591}
10592
10593/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010594 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 *
10596 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010597void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010598 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010599{
10600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10601 tWDA_CbContext *pWDA;
10602 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053010603 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070010604 vos_msg_t vosMsg;
10605
10606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010607 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053010608
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010609 if(NULL == pWdaParams)
10610 {
10611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10612 "%s: pWdaParams received NULL", __func__);
10613 VOS_ASSERT(0);
10614 return;
10615 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010616
Nirav Shah374de6e2014-02-13 16:40:01 +053010617 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
10618 if(NULL == pGtkOffloadGetInfoRsp)
10619 {
10620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10621 "%s: vos_mem_malloc failed ", __func__);
10622 VOS_ASSERT(0);
10623 return;
10624 }
10625
Jeff Johnson295189b2012-06-20 16:38:30 -070010626 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10627 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10628
10629 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10630 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10631
10632 /* Message Header */
10633 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010634 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010635
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010636 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10637 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10638 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10639 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10640 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010641
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010642 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10643 pwdiGtkOffloadGetInfoRsparams->bssId,
10644 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010645 /* VOS message wrapper */
10646 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10647 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10648 vosMsg.bodyval = 0;
10649
10650 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10651 {
10652 /* free the mem and return */
10653 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10654 }
10655
10656 vos_mem_free(pWdaParams->wdaMsgParam) ;
10657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10658 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010659
10660 return;
10661}
10662/*
10663 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10664 * Free memory and send RSP back to SME.
10665 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10666 */
10667void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10668{
10669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10670 vos_msg_t vosMsg;
10671
10672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10673 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10674
10675 if(NULL == pWdaParams)
10676 {
10677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10678 "%s: pWdaParams received NULL", __func__);
10679 VOS_ASSERT(0);
10680 return;
10681 }
10682
10683 /* VOS message wrapper */
10684 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10685 vosMsg.bodyptr = NULL;
10686 vosMsg.bodyval = 0;
10687
10688 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10689 {
10690 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10691 vos_mem_free(pWdaParams->wdaMsgParam);
10692 vos_mem_free(pWdaParams);
10693 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10694 }
10695
10696 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010697}
10698#endif
10699
10700/*
10701 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10702 * Request to WDI to set Tx Per Tracking configurations
10703 */
10704VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10705{
10706 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010707 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010708 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10709 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10710 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10711 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010713 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010714 if(NULL == pwdiSetTxPerTrackingReqParams)
10715 {
10716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010717 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010718 vos_mem_free(pTxPerTrackingParams);
10719 VOS_ASSERT(0);
10720 return VOS_STATUS_E_NOMEM;
10721 }
10722 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10723 if(NULL == pWdaParams)
10724 {
10725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010726 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010727 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10728 vos_mem_free(pTxPerTrackingParams);
10729 VOS_ASSERT(0);
10730 return VOS_STATUS_E_NOMEM;
10731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010732 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10733 pTxPerTrackingParams->ucTxPerTrackingEnable;
10734 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10735 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10736 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10737 pTxPerTrackingParams->ucTxPerTrackingRatio;
10738 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10739 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010740 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10741 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010742 /* Store param pointer as passed in by caller */
10743 /* store Params pass it to WDI
10744 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10745 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10746 pWdaParams->pWdaContext = pWDA;
10747 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010748 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010749 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010750 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 {
10752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10753 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010754 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010755 vos_mem_free(pWdaParams->wdaMsgParam) ;
10756 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10757 vos_mem_free(pWdaParams) ;
10758 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010759 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010760
10761}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010762/*
10763 * FUNCTION: WDA_HALDumpCmdCallback
10764 * Send the VOS complete .
10765 */
10766void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10767 void* pUserData)
10768{
10769 tANI_U8 *buffer = NULL;
10770 tWDA_CbContext *pWDA = NULL;
10771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 if(NULL == pWdaParams)
10773 {
10774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010775 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 VOS_ASSERT(0) ;
10777 return ;
10778 }
10779
10780 pWDA = pWdaParams->pWdaContext;
10781 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010782 if(wdiRspParams->usBufferLen > 0)
10783 {
10784 /*Copy the Resp data to UMAC supplied buffer*/
10785 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010787 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10788 vos_mem_free(pWdaParams);
10789
10790 /* Indicate VOSS about the start complete */
10791 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010792 return ;
10793}
10794
Jeff Johnson295189b2012-06-20 16:38:30 -070010795/*
10796 * FUNCTION: WDA_ProcessHALDumpCmdReq
10797 * Send Dump command to WDI
10798 */
10799VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10800 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10801 tANI_U32 arg4, tANI_U8 *pBuffer)
10802{
10803 WDI_Status status = WDI_STATUS_SUCCESS;
10804 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10805 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10806 tWDA_ReqParams *pWdaParams ;
10807 pVosContextType pVosContext = NULL;
10808 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10810 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053010811 if(pVosContext)
10812 {
10813 if (pVosContext->isLogpInProgress)
10814 {
10815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
10816 "%s:LOGP in Progress. Ignore!!!", __func__);
10817 return VOS_STATUS_E_BUSY;
10818 }
10819 }
10820 else
10821 {
10822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10823 "%s: VOS Context Null", __func__);
10824 return VOS_STATUS_E_RESOURCES;
10825 }
10826
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10828 if(NULL == pWdaParams)
10829 {
10830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 return VOS_STATUS_E_NOMEM;
10833 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010834 /* Allocate memory WDI request structure*/
10835 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10836 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10837 if(NULL == wdiHALDumpCmdReqParam)
10838 {
10839 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10840 "WDA HAL DUMP Command buffer alloc fail");
10841 vos_mem_free(pWdaParams);
10842 return WDI_STATUS_E_FAILURE;
10843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 /* Extract the arguments */
10846 wdiHalDumpCmdInfo->command = cmd;
10847 wdiHalDumpCmdInfo->argument1 = arg1;
10848 wdiHalDumpCmdInfo->argument2 = arg2;
10849 wdiHalDumpCmdInfo->argument3 = arg3;
10850 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010851 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010852 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10853
10854 /* Response message will be passed through the buffer */
10855 pWdaParams->wdaMsgParam = (void *)pBuffer;
10856
10857 /* store Params pass it to WDI */
10858 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010859 /* Send command to WDI */
10860 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010861 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010862 if ( vStatus != VOS_STATUS_SUCCESS )
10863 {
10864 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10865 {
10866 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010867 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010868 }
10869 else
10870 {
10871 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010872 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010873 }
10874 VOS_ASSERT(0);
10875 }
10876 return status;
10877}
Jeff Johnson295189b2012-06-20 16:38:30 -070010878#ifdef WLAN_FEATURE_GTK_OFFLOAD
10879/*
10880 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10881 * Request to WDI to get GTK Offload Information
10882 */
10883VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10884 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10885{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010886 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010887 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10888 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10889 tWDA_ReqParams *pWdaParams ;
10890
10891 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10892 {
10893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010894 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010895 VOS_ASSERT(0);
10896 return VOS_STATUS_E_NOMEM;
10897 }
10898
10899 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10900 if(NULL == pWdaParams)
10901 {
10902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010904 VOS_ASSERT(0);
10905 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10906 return VOS_STATUS_E_NOMEM;
10907 }
10908
Yue Ma7f44bbe2013-04-12 11:47:39 -070010909 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10910 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010911
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 /* Store Params pass it to WDI */
10913 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10914 pWdaParams->pWdaContext = pWDA;
10915 /* Store param pointer as passed in by caller */
10916 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10917
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010918 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010919 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010920
Yue Ma7f44bbe2013-04-12 11:47:39 -070010921 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010922
10923 if(IS_WDI_STATUS_FAILURE(status))
10924 {
10925 /* failure returned by WDI API */
10926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10927 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10929 vos_mem_free(pWdaParams) ;
10930 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10931 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10932 }
10933
10934 return CONVERT_WDI2VOS_STATUS(status) ;
10935}
10936#endif // WLAN_FEATURE_GTK_OFFLOAD
10937
10938/*
Yue Mab9c86f42013-08-14 15:59:08 -070010939 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10940 *
10941 */
10942VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10943 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10944{
10945 WDI_Status wdiStatus;
10946 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10947
10948 addPeriodicTxPtrnParams =
10949 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10950
10951 if (NULL == addPeriodicTxPtrnParams)
10952 {
10953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10954 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10955 __func__);
10956
10957 return VOS_STATUS_E_NOMEM;
10958 }
10959
10960 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10961 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10962
10963 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10964 addPeriodicTxPtrnParams->pUserData = pWDA;
10965
10966 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10967
10968 if (WDI_STATUS_PENDING == wdiStatus)
10969 {
10970 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10971 "Pending received for %s:%d", __func__, __LINE__ );
10972 }
10973 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10974 {
10975 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10976 "Failure in %s:%d", __func__, __LINE__ );
10977 }
10978
10979 vos_mem_free(addPeriodicTxPtrnParams);
10980
10981 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10982}
10983
10984/*
10985 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10986 *
10987 */
10988VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10989 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10990{
10991 WDI_Status wdiStatus;
10992 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10993
10994 delPeriodicTxPtrnParams =
10995 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10996
10997 if (NULL == delPeriodicTxPtrnParams)
10998 {
10999 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11000 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11001 __func__);
11002
11003 return VOS_STATUS_E_NOMEM;
11004 }
11005
11006 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11007 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11008
11009 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11010 delPeriodicTxPtrnParams->pUserData = pWDA;
11011
11012 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11013
11014 if (WDI_STATUS_PENDING == wdiStatus)
11015 {
11016 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11017 "Pending received for %s:%d", __func__, __LINE__ );
11018 }
11019 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11020 {
11021 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11022 "Failure in %s:%d", __func__, __LINE__ );
11023 }
11024
11025 vos_mem_free(delPeriodicTxPtrnParams);
11026
11027 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11028}
11029
Rajeev79dbe4c2013-10-05 11:03:42 +053011030#ifdef FEATURE_WLAN_BATCH_SCAN
11031/*
11032 * FUNCTION: WDA_ProcessStopBatchScanInd
11033 *
11034 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11035 *
11036 * PARAM:
11037 * pWDA: pointer to WDA context
11038 * pReq: pointer to stop batch scan request
11039 */
11040VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11041 tSirStopBatchScanInd *pReq)
11042{
11043 WDI_Status wdiStatus;
11044 WDI_StopBatchScanIndType wdiReq;
11045
11046 wdiReq.param = pReq->param;
11047
11048 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11049
11050 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11051 {
11052 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11053 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11054 }
11055
11056 vos_mem_free(pReq);
11057
11058 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11059}
11060/*==========================================================================
11061 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11062
11063 DESCRIPTION
11064 API to pull batch scan result from FW
11065
11066 PARAMETERS
11067 pWDA: Pointer to WDA context
11068 pGetBatchScanReq: Pointer to get batch scan result indication
11069
11070 RETURN VALUE
11071 NONE
11072
11073===========================================================================*/
11074VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11075 tSirTriggerBatchScanResultInd *pReq)
11076{
11077 WDI_Status wdiStatus;
11078 WDI_TriggerBatchScanResultIndType wdiReq;
11079
11080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11081 "------> %s " ,__func__);
11082
11083 wdiReq.param = pReq->param;
11084
11085 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11086
11087 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11088 {
11089 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11090 "Trigger batch scan result ind failed %s:%d",
11091 __func__, wdiStatus);
11092 }
11093
11094 vos_mem_free(pReq);
11095
11096 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11097}
11098
11099/*==========================================================================
11100 FUNCTION WDA_SetBatchScanRespCallback
11101
11102 DESCRIPTION
11103 API to process set batch scan response from FW
11104
11105 PARAMETERS
11106 pRsp: Pointer to set batch scan response
11107 pUserData: Pointer to user data
11108
11109 RETURN VALUE
11110 NONE
11111
11112===========================================================================*/
11113void WDA_SetBatchScanRespCallback
11114(
11115 WDI_SetBatchScanRspType *pRsp,
11116 void* pUserData
11117)
11118{
11119 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11120 tpAniSirGlobal pMac;
11121 void *pCallbackContext;
11122 tWDA_CbContext *pWDA = NULL ;
11123 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11124
11125
11126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11127 "<------ %s " ,__func__);
11128 if (NULL == pWdaParams)
11129 {
11130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11131 "%s: pWdaParams received NULL", __func__);
11132 VOS_ASSERT(0) ;
11133 return ;
11134 }
11135
11136 /*extract WDA context*/
11137 pWDA = pWdaParams->pWdaContext;
11138 if (NULL == pWDA)
11139 {
11140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11141 "%s:pWDA is NULL can't invole HDD callback",
11142 __func__);
11143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11144 vos_mem_free(pWdaParams->wdaMsgParam);
11145 vos_mem_free(pWdaParams);
11146 VOS_ASSERT(0);
11147 return;
11148 }
11149
11150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11151 vos_mem_free(pWdaParams->wdaMsgParam);
11152 vos_mem_free(pWdaParams);
11153
11154 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11155 if (NULL == pMac)
11156 {
11157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11158 "%s:pMac is NULL", __func__);
11159 VOS_ASSERT(0);
11160 return;
11161 }
11162
11163 pHddSetBatchScanRsp =
11164 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11165 if (NULL == pHddSetBatchScanRsp)
11166 {
11167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11168 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11169 VOS_ASSERT(0);
11170 return;
11171 }
11172
11173 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11174
11175 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11176 /*call hdd callback with set batch scan response data*/
11177 if(pMac->pmc.setBatchScanReqCallback)
11178 {
11179 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11180 }
11181 else
11182 {
11183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11184 "%s:HDD callback is null", __func__);
11185 VOS_ASSERT(0);
11186 }
11187
11188 vos_mem_free(pHddSetBatchScanRsp);
11189 return ;
11190}
11191
11192/*==========================================================================
11193 FUNCTION WDA_ProcessSetBatchScanReq
11194
11195 DESCRIPTION
11196 API to send set batch scan request to WDI
11197
11198 PARAMETERS
11199 pWDA: Pointer to WDA context
11200 pSetBatchScanReq: Pointer to set batch scan req
11201
11202 RETURN VALUE
11203 NONE
11204
11205===========================================================================*/
11206VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11207 tSirSetBatchScanReq *pSetBatchScanReq)
11208{
11209 WDI_Status status;
11210 tWDA_ReqParams *pWdaParams ;
11211 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11212
11213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11214 "------> %s " ,__func__);
11215
11216 pWdiSetBatchScanReq =
11217 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11218 if (NULL == pWdiSetBatchScanReq)
11219 {
11220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11221 "%s: VOS MEM Alloc Failure", __func__);
11222 vos_mem_free(pSetBatchScanReq);
11223 VOS_ASSERT(0);
11224 return VOS_STATUS_E_NOMEM;
11225 }
11226
11227 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11228 if (NULL == pWdaParams)
11229 {
11230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11231 "%s: VOS MEM Alloc Failure", __func__);
11232 VOS_ASSERT(0);
11233 vos_mem_free(pSetBatchScanReq);
11234 vos_mem_free(pWdiSetBatchScanReq);
11235 return VOS_STATUS_E_NOMEM;
11236 }
11237
11238 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11239 pWdiSetBatchScanReq->numberOfScansToBatch =
11240 pSetBatchScanReq->numberOfScansToBatch;
11241 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11242 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11243 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11244
11245 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11246 pWdaParams->pWdaContext = pWDA;
11247 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11248
11249 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11250 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11251 if (IS_WDI_STATUS_FAILURE(status))
11252 {
11253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11254 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11256 vos_mem_free(pWdaParams->wdaMsgParam);
11257 vos_mem_free(pWdaParams);
11258 }
11259 return CONVERT_WDI2VOS_STATUS(status);
11260}
11261
11262#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011263/*
11264 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11265 *
11266 * DESCRIPTION: This function sends start/update OBSS scan
11267 * inidcation message to WDI
11268 *
11269 * PARAM:
11270 * pWDA: pointer to WDA context
11271 * pReq: pointer to start OBSS scan request
11272 */
11273VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11274 tSirHT40OBSSScanInd *pReq)
11275{
11276 WDI_Status status;
11277 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11278 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011279
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11281 "------> %s " ,__func__);
11282 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11283 wdiOBSSScanParams.pUserData = pWDA;
11284
11285 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11286 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11287 pWdiOBSSScanInd->scanType = pReq->scanType;
11288 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11289 pReq->OBSSScanActiveDwellTime;
11290 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11291 pReq->OBSSScanPassiveDwellTime;
11292 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11293 pReq->BSSChannelWidthTriggerScanInterval;
11294 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11295 pReq->BSSWidthChannelTransitionDelayFactor;
11296 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11297 pReq->OBSSScanActiveTotalPerChannel;
11298 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11299 pReq->OBSSScanPassiveTotalPerChannel;
11300 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11301 pReq->OBSSScanActivityThreshold;
11302 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11303 vos_mem_copy(pWdiOBSSScanInd->channels,
11304 pReq->channels,
11305 pReq->channelCount);
11306 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11307 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11308 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11309 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11310 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11311
11312 vos_mem_copy(pWdiOBSSScanInd->ieField,
11313 pReq->ieField,
11314 pReq->ieFieldLen);
11315
11316 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11317 if (WDI_STATUS_PENDING == status)
11318 {
11319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11320 "Pending received for %s:%d ",__func__,__LINE__ );
11321 }
11322 else if (WDI_STATUS_SUCCESS_SYNC != status)
11323 {
11324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11325 "Failure in %s:%d ",__func__,__LINE__ );
11326 }
11327 return CONVERT_WDI2VOS_STATUS(status) ;
11328}
11329/*
11330 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11331 *
11332 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11333 *
11334 * PARAM:
11335 * pWDA: pointer to WDA context
11336 * pReq: pointer to stop batch scan request
11337 */
11338VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11339 tANI_U8 *bssIdx)
11340{
11341 WDI_Status status;
11342
11343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11344 "------> %s " ,__func__);
11345
11346 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11347 if (WDI_STATUS_PENDING == status)
11348 {
11349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11350 "Pending received for %s:%d ",__func__,__LINE__ );
11351 }
11352 else if (WDI_STATUS_SUCCESS_SYNC != status)
11353 {
11354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11355 "Failure in %s:%d ",__func__,__LINE__ );
11356 }
11357 return CONVERT_WDI2VOS_STATUS(status) ;
11358}
Yue Mab9c86f42013-08-14 15:59:08 -070011359/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011360 * FUNCTION: WDA_ProcessRateUpdateInd
11361 *
11362 */
11363VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11364 tSirRateUpdateInd *pRateUpdateParams)
11365{
11366 WDI_Status wdiStatus;
11367 WDI_RateUpdateIndParams rateUpdateParams;
11368
11369 vos_mem_copy(rateUpdateParams.bssid,
11370 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11371
11372 rateUpdateParams.ucastDataRateTxFlag =
11373 pRateUpdateParams->ucastDataRateTxFlag;
11374 rateUpdateParams.reliableMcastDataRateTxFlag =
11375 pRateUpdateParams->reliableMcastDataRateTxFlag;
11376 rateUpdateParams.mcastDataRate24GHzTxFlag =
11377 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11378 rateUpdateParams.mcastDataRate5GHzTxFlag =
11379 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11380
11381 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11382 rateUpdateParams.reliableMcastDataRate =
11383 pRateUpdateParams->reliableMcastDataRate;
11384 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11385 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11386
11387 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11388 rateUpdateParams.pUserData = pWDA;
11389
11390 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11391
11392 if (WDI_STATUS_PENDING == wdiStatus)
11393 {
11394 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11395 "Pending received for %s:%d", __func__, __LINE__ );
11396 }
11397 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11398 {
11399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11400 "Failure in %s:%d", __func__, __LINE__ );
11401 }
11402
11403 vos_mem_free(pRateUpdateParams);
11404
11405 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11406}
11407
11408/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011409 * -------------------------------------------------------------------------
11410 * DATA interface with WDI for Mgmt Frames
11411 * -------------------------------------------------------------------------
11412 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011413/*
11414 * FUNCTION: WDA_TxComplete
11415 * Callback function for the WDA_TxPacket
11416 */
11417VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11418 VOS_STATUS status )
11419{
11420
11421 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11422 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011423 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011424
11425 if(NULL == wdaContext)
11426 {
11427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11428 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011429 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011430 VOS_ASSERT(0);
11431 return VOS_STATUS_E_FAILURE;
11432 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011433
11434 /*Check if frame was timed out or not*/
11435 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11436 (v_PVOID_t)&uUserData);
11437
11438 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11439 {
11440 /*Discard frame - no further processing is needed*/
11441 vos_pkt_return_packet(pData);
11442 return VOS_STATUS_SUCCESS;
11443 }
11444
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11446 if( NULL!=wdaContext->pTxCbFunc)
11447 {
11448 /*check if packet is freed already*/
11449 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
11450 {
11451 wdaContext->pTxCbFunc(pMac, pData);
11452 }
11453 else
11454 {
11455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011456 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011457 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 //Return from here since we reaching here because the packet already timeout
11459 return status;
11460 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011461 }
11462
11463 /*
11464 * Trigger the event to bring the HAL TL Tx complete function to come
11465 * out of wait
11466 * Let the coe above to complete the packet first. When this event is set,
11467 * the thread waiting for the event may run and set Vospacket_freed causing the original
11468 * packet not being freed.
11469 */
11470 status = vos_event_set(&wdaContext->txFrameEvent);
11471 if(!VOS_IS_STATUS_SUCCESS(status))
11472 {
11473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011474 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011475 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 return status;
11477}
Jeff Johnson295189b2012-06-20 16:38:30 -070011478/*
11479 * FUNCTION: WDA_TxPacket
11480 * Forward TX management frame to WDI
11481 */
11482VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11483 void *pFrmBuf,
11484 tANI_U16 frmLen,
11485 eFrameType frmType,
11486 eFrameTxDir txDir,
11487 tANI_U8 tid,
11488 pWDATxRxCompFunc pCompFunc,
11489 void *pData,
11490 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011491 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011492{
11493 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11494 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11495 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11496 tANI_U8 eventIdx = 0;
11497 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11498 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011499 if((NULL == pWDA)||(NULL == pFrmBuf))
11500 {
11501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011502 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011503 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011504 VOS_ASSERT(0);
11505 return VOS_STATUS_E_FAILURE;
11506 }
11507
11508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011509 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11511 if(NULL == pMac)
11512 {
11513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011514 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 VOS_ASSERT(0);
11516 return VOS_STATUS_E_FAILURE;
11517 }
11518
11519
11520
11521 /* store the call back function in WDA context */
11522 pWDA->pTxCbFunc = pCompFunc;
11523 /* store the call back for the function of ackTxComplete */
11524 if( pAckTxComp )
11525 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011526 if( NULL != pWDA->pAckTxCbFunc )
11527 {
11528 /* Already TxComp is active no need to active again */
11529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011530 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011531 pWDA->pAckTxCbFunc( pMac, 0);
11532 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011533
Jeff Johnsone7245742012-09-05 17:12:55 -070011534 if( VOS_STATUS_SUCCESS !=
11535 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11536 {
11537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11538 "Tx Complete timeout Timer Stop Failed ");
11539 }
11540 else
11541 {
11542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011543 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011544 }
11545 }
11546
11547 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11548 pWDA->pAckTxCbFunc = pAckTxComp;
11549 if( VOS_STATUS_SUCCESS !=
11550 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11551 {
11552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11553 "Tx Complete Timer Start Failed ");
11554 pWDA->pAckTxCbFunc = NULL;
11555 return eHAL_STATUS_FAILURE;
11556 }
11557 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011558 /* Reset the event to be not signalled */
11559 status = vos_event_reset(&pWDA->txFrameEvent);
11560 if(!VOS_IS_STATUS_SUCCESS(status))
11561 {
11562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011563 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011564 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11565 if( pAckTxComp )
11566 {
11567 pWDA->pAckTxCbFunc = NULL;
11568 if( VOS_STATUS_SUCCESS !=
11569 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11570 {
11571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11572 "Tx Complete timeout Timer Stop Failed ");
11573 }
11574 }
11575 return VOS_STATUS_E_FAILURE;
11576 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011577
11578 /* If Peer Sta mask is set don't overwrite to self sta */
11579 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011580 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011581 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011582 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011583 else
11584 {
Ganesh K08bce952012-12-13 15:04:41 -080011585 /* Get system role, use the self station if in unknown role or STA role */
11586 systemRole = wdaGetGlobalSystemRole(pMac);
11587 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11588 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080011589#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011590 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011591#endif
Ganesh K08bce952012-12-13 15:04:41 -080011592 ))
11593 {
11594 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11595 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011596 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011597
Jeff Johnsone7245742012-09-05 17:12:55 -070011598 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11599 disassoc frame reaches the HW, HAL has already deleted the peer station */
11600 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011601 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011602 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011603 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011605 /*Send Probe request frames on self sta idx*/
11606 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011607 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011608 /* Since we donot want probe responses to be retried, send probe responses
11609 through the NO_ACK queues */
11610 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11611 {
11612 //probe response is sent out using self station and no retries options.
11613 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11614 }
11615 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11616 {
11617 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11618 }
11619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011620 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
11621
11622 /*Set frame tag to 0
11623 We will use the WDA user data in order to tag a frame as expired*/
11624 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11625 (v_PVOID_t)0);
11626
11627
11628 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11629 frmLen, ucTypeSubType, tid,
11630 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11631 {
11632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011633 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011634 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
11635 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
11636 if( pAckTxComp )
11637 {
11638 pWDA->pAckTxCbFunc = NULL;
11639 if( VOS_STATUS_SUCCESS !=
11640 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11641 {
11642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11643 "Tx Complete timeout Timer Stop Failed ");
11644 }
11645 }
11646 return VOS_STATUS_E_FAILURE;
11647 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011648 /*
11649 * Wait for the event to be set by the TL, to get the response of TX
11650 * complete, this event should be set by the Callback function called by TL
11651 */
11652 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11653 &eventIdx);
11654 if(!VOS_IS_STATUS_SUCCESS(status))
11655 {
11656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11657 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011658 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011659 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11660 after the packet gets completed(packet freed once)*/
11661
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011662 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Mihir Shete40a55652014-03-02 14:14:47 +053011663 WDA_TransportChannelDebug(pMac, 1, WPAL_DEBUG_TX_DESC_RESYNC);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011664
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011665 /*Tag Frame as timed out for later deletion*/
11666 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11667 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11668
Jeff Johnson295189b2012-06-20 16:38:30 -070011669 /* check whether the packet was freed already,so need not free again when
11670 * TL calls the WDA_Txcomplete routine
11671 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011672 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
11673 /*if(vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -070011674 {
11675 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011676 } */
11677
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 if( pAckTxComp )
11679 {
11680 pWDA->pAckTxCbFunc = NULL;
11681 if( VOS_STATUS_SUCCESS !=
11682 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11683 {
11684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11685 "Tx Complete timeout Timer Stop Failed ");
11686 }
11687 }
11688 status = VOS_STATUS_E_FAILURE;
11689 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011690#ifdef WLAN_DUMP_MGMTFRAMES
11691 if (VOS_IS_STATUS_SUCCESS(status))
11692 {
11693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11694 "%s() TX packet : SubType %d", __func__,pFc->subType);
11695 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11696 pData, frmLen);
11697 }
11698#endif
11699
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080011700 if (VOS_IS_STATUS_SUCCESS(status))
11701 {
11702 if (pMac->fEnableDebugLog & 0x1)
11703 {
11704 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
11705 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
11706 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
11707 {
11708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
11709 pFc->type, pFc->subType);
11710 }
11711 }
11712 }
11713
11714
Jeff Johnson295189b2012-06-20 16:38:30 -070011715 return status;
11716}
Jeff Johnson295189b2012-06-20 16:38:30 -070011717/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011718 * FUNCTION: WDA_ProcessDHCPStartInd
11719 * Forward DHCP Start to WDI
11720 */
11721static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11722 tAniDHCPInd *dhcpStartInd)
11723{
11724 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053011725 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011726
c_hpothu0b0cab72014-02-13 21:52:40 +053011727 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
11728 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011729 sizeof(tSirMacAddr));
11730
c_hpothu0b0cab72014-02-13 21:52:40 +053011731 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011732
c_hpothu0b0cab72014-02-13 21:52:40 +053011733 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011734 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11736 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011737 }
c_hpothu0b0cab72014-02-13 21:52:40 +053011738 else if (WDI_STATUS_SUCCESS_SYNC != status)
11739 {
11740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11741 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
11742 }
11743
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011744 vos_mem_free(dhcpStartInd);
11745 return CONVERT_WDI2VOS_STATUS(status) ;
11746}
11747
11748 /*
11749 * FUNCTION: WDA_ProcessDHCPStopInd
11750 * Forward DHCP Stop to WDI
11751 */
11752 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11753 tAniDHCPInd *dhcpStopInd)
11754 {
11755 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053011756 WDI_DHCPInd wdiDHCPInd;
11757
11758 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
11759 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11760
11761 status = WDI_dhcpStopInd(&wdiDHCPInd);
11762
11763 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011764 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11766 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011767 }
c_hpothu0b0cab72014-02-13 21:52:40 +053011768 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011769 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11771 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011772 }
c_hpothu0b0cab72014-02-13 21:52:40 +053011773
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011774 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053011775
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011776 return CONVERT_WDI2VOS_STATUS(status) ;
11777 }
11778
11779/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011780 * FUNCTION: WDA_McProcessMsg
11781 * Trigger DAL-AL to start CFG download
11782 */
11783VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11784{
11785 VOS_STATUS status = VOS_STATUS_SUCCESS;
11786 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011787 if(NULL == pMsg)
11788 {
11789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011790 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011791 VOS_ASSERT(0);
11792 return VOS_STATUS_E_FAILURE;
11793 }
11794
11795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011796 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011797
11798 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11799 if(NULL == pWDA )
11800 {
11801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011802 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011803 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011804 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011805 return VOS_STATUS_E_FAILURE;
11806 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011807 /* Process all the WDA messages.. */
11808 switch( pMsg->type )
11809 {
11810 case WNI_CFG_DNLD_REQ:
11811 {
11812 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011813 /* call WDA complete event if config download success */
11814 if( VOS_IS_STATUS_SUCCESS(status) )
11815 {
11816 vos_WDAComplete_cback(pVosContext);
11817 }
11818 else
11819 {
11820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11821 "WDA Config Download failure" );
11822 }
11823 break ;
11824 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011825 /*
11826 * Init SCAN request from PE, convert it into DAL format
11827 * and send it to DAL
11828 */
11829 case WDA_INIT_SCAN_REQ:
11830 {
11831 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11832 break ;
11833 }
11834 /* start SCAN request from PE */
11835 case WDA_START_SCAN_REQ:
11836 {
11837 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11838 break ;
11839 }
11840 /* end SCAN request from PE */
11841 case WDA_END_SCAN_REQ:
11842 {
11843 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11844 break ;
11845 }
11846 /* end SCAN request from PE */
11847 case WDA_FINISH_SCAN_REQ:
11848 {
11849 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11850 break ;
11851 }
11852 /* join request from PE */
11853 case WDA_CHNL_SWITCH_REQ:
11854 {
11855 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
11856 {
11857 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
11858 }
11859 else
11860 {
11861 WDA_ProcessChannelSwitchReq(pWDA,
11862 (tSwitchChannelParams*)pMsg->bodyptr) ;
11863 }
11864 break ;
11865 }
11866 /* ADD BSS request from PE */
11867 case WDA_ADD_BSS_REQ:
11868 {
11869 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
11870 break ;
11871 }
11872 case WDA_ADD_STA_REQ:
11873 {
11874 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
11875 break ;
11876 }
11877 case WDA_DELETE_BSS_REQ:
11878 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011879 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
11880 break ;
11881 }
11882 case WDA_DELETE_STA_REQ:
11883 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011884 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
11885 break ;
11886 }
11887 case WDA_CONFIG_PARAM_UPDATE_REQ:
11888 {
11889 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
11890 break ;
11891 }
11892 case WDA_SET_BSSKEY_REQ:
11893 {
11894 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
11895 break ;
11896 }
11897 case WDA_SET_STAKEY_REQ:
11898 {
11899 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11900 break ;
11901 }
11902 case WDA_SET_STA_BCASTKEY_REQ:
11903 {
11904 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11905 break ;
11906 }
11907 case WDA_REMOVE_BSSKEY_REQ:
11908 {
11909 WDA_ProcessRemoveBssKeyReq(pWDA,
11910 (tRemoveBssKeyParams *)pMsg->bodyptr);
11911 break ;
11912 }
11913 case WDA_REMOVE_STAKEY_REQ:
11914 {
11915 WDA_ProcessRemoveStaKeyReq(pWDA,
11916 (tRemoveStaKeyParams *)pMsg->bodyptr);
11917 break ;
11918 }
11919 case WDA_REMOVE_STA_BCASTKEY_REQ:
11920 {
11921 /* TODO: currently UMAC is not sending this request, Add the code for
11922 handling this request when UMAC supports */
11923 break;
11924 }
11925#ifdef FEATURE_WLAN_CCX
11926 case WDA_TSM_STATS_REQ:
11927 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070011928 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011929 break;
11930 }
11931#endif
11932 case WDA_UPDATE_EDCA_PROFILE_IND:
11933 {
11934 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
11935 break;
11936 }
11937 case WDA_ADD_TS_REQ:
11938 {
11939 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
11940 break;
11941 }
11942 case WDA_DEL_TS_REQ:
11943 {
11944 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11945 break;
11946 }
11947 case WDA_ADDBA_REQ:
11948 {
11949 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11950 break;
11951 }
11952 case WDA_DELBA_IND:
11953 {
11954 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11955 break;
11956 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080011957 case WDA_UPDATE_CHAN_LIST_REQ:
11958 {
11959 WDA_ProcessUpdateChannelList(pWDA,
11960 (tSirUpdateChanList *)pMsg->bodyptr);
11961 break;
11962 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011963 case WDA_SET_LINK_STATE:
11964 {
11965 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11966 break;
11967 }
11968 case WDA_GET_STATISTICS_REQ:
11969 {
11970 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11971 break;
11972 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011973#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11974 case WDA_GET_ROAM_RSSI_REQ:
11975 {
11976 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11977 break;
11978 }
11979#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 case WDA_PWR_SAVE_CFG:
11981 {
11982 if(pWDA->wdaState == WDA_READY_STATE)
11983 {
11984 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11985 }
11986 else
11987 {
11988 if(NULL != pMsg->bodyptr)
11989 {
11990 vos_mem_free(pMsg->bodyptr);
11991 }
11992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11993 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11994 }
11995 break;
11996 }
11997 case WDA_ENTER_IMPS_REQ:
11998 {
11999 if(pWDA->wdaState == WDA_READY_STATE)
12000 {
12001 WDA_ProcessEnterImpsReq(pWDA);
12002 }
12003 else
12004 {
12005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12006 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12007 }
12008 break;
12009 }
12010 case WDA_EXIT_IMPS_REQ:
12011 {
12012 if(pWDA->wdaState == WDA_READY_STATE)
12013 {
12014 WDA_ProcessExitImpsReq(pWDA);
12015 }
12016 else
12017 {
12018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12019 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12020 }
12021 break;
12022 }
12023 case WDA_ENTER_BMPS_REQ:
12024 {
12025 if(pWDA->wdaState == WDA_READY_STATE)
12026 {
12027 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12028 }
12029 else
12030 {
12031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12032 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12033 }
12034 break;
12035 }
12036 case WDA_EXIT_BMPS_REQ:
12037 {
12038 if(pWDA->wdaState == WDA_READY_STATE)
12039 {
12040 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12041 }
12042 else
12043 {
12044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12045 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12046 }
12047 break;
12048 }
12049 case WDA_ENTER_UAPSD_REQ:
12050 {
12051 if(pWDA->wdaState == WDA_READY_STATE)
12052 {
12053 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12054 }
12055 else
12056 {
12057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12058 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12059 }
12060 break;
12061 }
12062 case WDA_EXIT_UAPSD_REQ:
12063 {
12064 if(pWDA->wdaState == WDA_READY_STATE)
12065 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012066 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012067 }
12068 else
12069 {
12070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12071 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12072 }
12073 break;
12074 }
12075 case WDA_UPDATE_UAPSD_IND:
12076 {
12077 if(pWDA->wdaState == WDA_READY_STATE)
12078 {
12079 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12080 }
12081 else
12082 {
12083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12084 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12085 }
12086 break;
12087 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012088 case WDA_REGISTER_PE_CALLBACK :
12089 {
12090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12091 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12092 /*TODO: store the PE callback */
12093 /* Do Nothing? MSG Body should be freed at here */
12094 if(NULL != pMsg->bodyptr)
12095 {
12096 vos_mem_free(pMsg->bodyptr);
12097 }
12098 break;
12099 }
12100 case WDA_SYS_READY_IND :
12101 {
12102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12103 "Handling msg type WDA_SYS_READY_IND " );
12104 pWDA->wdaState = WDA_READY_STATE;
12105 if(NULL != pMsg->bodyptr)
12106 {
12107 vos_mem_free(pMsg->bodyptr);
12108 }
12109 break;
12110 }
12111 case WDA_BEACON_FILTER_IND :
12112 {
12113 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12114 break;
12115 }
12116 case WDA_BTC_SET_CFG:
12117 {
12118 /*TODO: handle this while dealing with BTC */
12119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12120 "Handling msg type WDA_BTC_SET_CFG " );
12121 /* Do Nothing? MSG Body should be freed at here */
12122 if(NULL != pMsg->bodyptr)
12123 {
12124 vos_mem_free(pMsg->bodyptr);
12125 }
12126 break;
12127 }
12128 case WDA_SIGNAL_BT_EVENT:
12129 {
12130 /*TODO: handle this while dealing with BTC */
12131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12132 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12133 /* Do Nothing? MSG Body should be freed at here */
12134 if(NULL != pMsg->bodyptr)
12135 {
12136 vos_mem_free(pMsg->bodyptr);
12137 }
12138 break;
12139 }
12140 case WDA_CFG_RXP_FILTER_REQ:
12141 {
12142 WDA_ProcessConfigureRxpFilterReq(pWDA,
12143 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12144 break;
12145 }
12146 case WDA_SET_HOST_OFFLOAD:
12147 {
12148 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12149 break;
12150 }
12151 case WDA_SET_KEEP_ALIVE:
12152 {
12153 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12154 break;
12155 }
12156#ifdef WLAN_NS_OFFLOAD
12157 case WDA_SET_NS_OFFLOAD:
12158 {
12159 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12160 break;
12161 }
12162#endif //WLAN_NS_OFFLOAD
12163 case WDA_ADD_STA_SELF_REQ:
12164 {
12165 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12166 break;
12167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012168 case WDA_DEL_STA_SELF_REQ:
12169 {
12170 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12171 break;
12172 }
12173 case WDA_WOWL_ADD_BCAST_PTRN:
12174 {
12175 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12176 break;
12177 }
12178 case WDA_WOWL_DEL_BCAST_PTRN:
12179 {
12180 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12181 break;
12182 }
12183 case WDA_WOWL_ENTER_REQ:
12184 {
12185 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12186 break;
12187 }
12188 case WDA_WOWL_EXIT_REQ:
12189 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012190 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012191 break;
12192 }
12193 case WDA_TL_FLUSH_AC_REQ:
12194 {
12195 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12196 break;
12197 }
12198 case WDA_SIGNAL_BTAMP_EVENT:
12199 {
12200 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12201 break;
12202 }
12203#ifdef WDA_UT
12204 case WDA_WDI_EVENT_MSG:
12205 {
12206 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12207 break ;
12208 }
12209#endif
12210 case WDA_UPDATE_BEACON_IND:
12211 {
12212 WDA_ProcessUpdateBeaconParams(pWDA,
12213 (tUpdateBeaconParams *)pMsg->bodyptr);
12214 break;
12215 }
12216 case WDA_SEND_BEACON_REQ:
12217 {
12218 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12219 break;
12220 }
12221 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12222 {
12223 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12224 (tSendProbeRespParams *)pMsg->bodyptr);
12225 break;
12226 }
12227#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
12228 case WDA_SET_MAX_TX_POWER_REQ:
12229 {
12230 WDA_ProcessSetMaxTxPowerReq(pWDA,
12231 (tMaxTxPowerParams *)pMsg->bodyptr);
12232 break;
12233 }
12234#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012235 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12236 {
12237 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12238 pMsg->bodyptr);
12239 break;
12240 }
schang86c22c42013-03-13 18:41:24 -070012241 case WDA_SET_TX_POWER_REQ:
12242 {
12243 WDA_ProcessSetTxPowerReq(pWDA,
12244 (tSirSetTxPowerReq *)pMsg->bodyptr);
12245 break;
12246 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012247 case WDA_SET_P2P_GO_NOA_REQ:
12248 {
12249 WDA_ProcessSetP2PGONOAReq(pWDA,
12250 (tP2pPsParams *)pMsg->bodyptr);
12251 break;
12252 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012253 /* timer related messages */
12254 case WDA_TIMER_BA_ACTIVITY_REQ:
12255 {
12256 WDA_BaCheckActivity(pWDA) ;
12257 break ;
12258 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012259
12260 /* timer related messages */
12261 case WDA_TIMER_TRAFFIC_STATS_IND:
12262 {
12263 WDA_TimerTrafficStatsInd(pWDA);
12264 break;
12265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012266#ifdef WLAN_FEATURE_VOWIFI_11R
12267 case WDA_AGGR_QOS_REQ:
12268 {
12269 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12270 break;
12271 }
12272#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012273 case WDA_FTM_CMD_REQ:
12274 {
12275 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12276 break ;
12277 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012278#ifdef FEATURE_OEM_DATA_SUPPORT
12279 case WDA_START_OEM_DATA_REQ:
12280 {
12281 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12282 break;
12283 }
12284#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012285 /* Tx Complete Time out Indication */
12286 case WDA_TX_COMPLETE_TIMEOUT_IND:
12287 {
12288 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12289 break;
12290 }
12291 case WDA_WLAN_SUSPEND_IND:
12292 {
12293 WDA_ProcessWlanSuspendInd(pWDA,
12294 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12295 break;
12296 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012297 case WDA_WLAN_RESUME_REQ:
12298 {
12299 WDA_ProcessWlanResumeReq(pWDA,
12300 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12301 break;
12302 }
12303
12304 case WDA_UPDATE_CF_IND:
12305 {
12306 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12307 pMsg->bodyptr = NULL;
12308 break;
12309 }
12310#ifdef FEATURE_WLAN_SCAN_PNO
12311 case WDA_SET_PNO_REQ:
12312 {
12313 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12314 break;
12315 }
12316 case WDA_UPDATE_SCAN_PARAMS_REQ:
12317 {
12318 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12319 break;
12320 }
12321 case WDA_SET_RSSI_FILTER_REQ:
12322 {
12323 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12324 break;
12325 }
12326#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012327#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012328 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012329 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012330 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012331 break;
12332 }
12333#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012334 case WDA_SET_TX_PER_TRACKING_REQ:
12335 {
12336 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12337 break;
12338 }
12339
12340#ifdef WLAN_FEATURE_PACKET_FILTERING
12341 case WDA_8023_MULTICAST_LIST_REQ:
12342 {
12343 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12344 break;
12345 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012346 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12347 {
12348 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12349 break;
12350 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012351 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12352 {
12353 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12354 break;
12355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012356 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12357 {
12358 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12359 break;
12360 }
12361#endif // WLAN_FEATURE_PACKET_FILTERING
12362
12363
12364 case WDA_TRANSMISSION_CONTROL_IND:
12365 {
12366 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12367 break;
12368 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012369 case WDA_SET_POWER_PARAMS_REQ:
12370 {
12371 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12372 break;
12373 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012374#ifdef WLAN_FEATURE_GTK_OFFLOAD
12375 case WDA_GTK_OFFLOAD_REQ:
12376 {
12377 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12378 break;
12379 }
12380
12381 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12382 {
12383 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12384 break;
12385 }
12386#endif //WLAN_FEATURE_GTK_OFFLOAD
12387
12388 case WDA_SET_TM_LEVEL_REQ:
12389 {
12390 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12391 break;
12392 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012393
Mohit Khanna4a70d262012-09-11 16:30:12 -070012394 case WDA_UPDATE_OP_MODE:
12395 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012396 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12397 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12398 {
12399 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12400 }
12401 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012402 {
12403 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12404 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12405 else
12406 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012407 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012408 }
12409 else
12410 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012411 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012412 break;
12413 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012414#ifdef WLAN_FEATURE_11W
12415 case WDA_EXCLUDE_UNENCRYPTED_IND:
12416 {
12417 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12418 break;
12419 }
12420#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012421#ifdef FEATURE_WLAN_TDLS
12422 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12423 {
12424 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12425 break;
12426 }
12427#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012428 case WDA_DHCP_START_IND:
12429 {
12430 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12431 break;
12432 }
12433 case WDA_DHCP_STOP_IND:
12434 {
12435 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12436 break;
12437 }
Leo Chang9056f462013-08-01 19:21:11 -070012438#ifdef FEATURE_WLAN_LPHB
12439 case WDA_LPHB_CONF_REQ:
12440 {
12441 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12442 break;
12443 }
12444#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012445 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12446 {
12447 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12448 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12449 break;
12450 }
12451 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12452 {
12453 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12454 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12455 break;
12456 }
12457
Rajeev79dbe4c2013-10-05 11:03:42 +053012458#ifdef FEATURE_WLAN_BATCH_SCAN
12459 case WDA_SET_BATCH_SCAN_REQ:
12460 {
12461 WDA_ProcessSetBatchScanReq(pWDA,
12462 (tSirSetBatchScanReq *)pMsg->bodyptr);
12463 break;
12464 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012465 case WDA_RATE_UPDATE_IND:
12466 {
12467 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12468 break;
12469 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012470 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12471 {
12472 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12473 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12474 break;
12475 }
12476 case WDA_STOP_BATCH_SCAN_IND:
12477 {
12478 WDA_ProcessStopBatchScanInd(pWDA,
12479 (tSirStopBatchScanInd *)pMsg->bodyptr);
12480 break;
12481 }
12482#endif
12483
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012484 case WDA_HT40_OBSS_SCAN_IND:
12485 {
12486 WDA_ProcessHT40OBSSScanInd(pWDA,
12487 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12488 break;
12489 }
12490 case WDA_HT40_OBSS_STOP_SCAN_IND:
12491 {
12492 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12493 (tANI_U8*)pMsg->bodyptr);
12494 break;
12495 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012496 default:
12497 {
12498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12499 "No Handling for msg type %x in WDA "
12500 ,pMsg->type);
12501 /* Do Nothing? MSG Body should be freed at here */
12502 if(NULL != pMsg->bodyptr)
12503 {
12504 vos_mem_free(pMsg->bodyptr);
12505 }
12506 //WDA_VOS_ASSERT(0) ;
12507 }
12508 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012509 return status ;
12510}
12511
Jeff Johnson295189b2012-06-20 16:38:30 -070012512/*
12513 * FUNCTION: WDA_LowLevelIndCallback
12514 * IND API callback from WDI, send Ind to PE
12515 */
12516void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12517 void* pUserData )
12518{
12519 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12520#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12521 tSirRSSINotification rssiNotification;
12522#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012523 if(NULL == pWDA)
12524 {
12525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012526 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012527 VOS_ASSERT(0);
12528 return ;
12529 }
12530
12531 switch(wdiLowLevelInd->wdiIndicationType)
12532 {
12533 case WDI_RSSI_NOTIFICATION_IND:
12534 {
12535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12536 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012537#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12538 rssiNotification.bReserved =
12539 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12540 rssiNotification.bRssiThres1NegCross =
12541 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12542 rssiNotification.bRssiThres1PosCross =
12543 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12544 rssiNotification.bRssiThres2NegCross =
12545 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12546 rssiNotification.bRssiThres2PosCross =
12547 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12548 rssiNotification.bRssiThres3NegCross =
12549 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12550 rssiNotification.bRssiThres3PosCross =
12551 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012552 rssiNotification.avgRssi = (v_S7_t)
12553 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012554 WLANTL_BMPSRSSIRegionChangedNotification(
12555 pWDA->pVosContext,
12556 &rssiNotification);
12557#endif
12558 break ;
12559 }
12560 case WDI_MISSED_BEACON_IND:
12561 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012562 tpSirSmeMissedBeaconInd pMissBeacInd =
12563 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12565 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012566 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012567 if(NULL == pMissBeacInd)
12568 {
12569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12570 "%s: VOS MEM Alloc Failure", __func__);
12571 break;
12572 }
12573 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12574 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12575 pMissBeacInd->bssIdx =
12576 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12577 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012578 break ;
12579 }
12580 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12581 {
12582 /* TODO: Decode Ind and send Ind to PE */
12583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12584 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12585 break ;
12586 }
12587
12588 case WDI_MIC_FAILURE_IND:
12589 {
12590 tpSirSmeMicFailureInd pMicInd =
12591 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12592
12593 if(NULL == pMicInd)
12594 {
12595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012596 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012597 break;
12598 }
12599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12600 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012601 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12602 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12603 vos_mem_copy(pMicInd->bssId,
12604 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12605 sizeof(tSirMacAddr));
12606 vos_mem_copy(pMicInd->info.srcMacAddr,
12607 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12608 sizeof(tSirMacAddr));
12609 vos_mem_copy(pMicInd->info.taMacAddr,
12610 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12611 sizeof(tSirMacAddr));
12612 vos_mem_copy(pMicInd->info.dstMacAddr,
12613 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12614 sizeof(tSirMacAddr));
12615 vos_mem_copy(pMicInd->info.rxMacAddr,
12616 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12617 sizeof(tSirMacAddr));
12618 pMicInd->info.multicast =
12619 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12620 pMicInd->info.keyId=
12621 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12622 pMicInd->info.IV1=
12623 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12624 vos_mem_copy(pMicInd->info.TSC,
12625 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012626 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12627 (void *)pMicInd , 0) ;
12628 break ;
12629 }
12630 case WDI_FATAL_ERROR_IND:
12631 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012632 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012633 /* TODO: Decode Ind and send Ind to PE */
12634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12635 "Received WDI_FATAL_ERROR_IND from WDI ");
12636 break ;
12637 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012638 case WDI_DEL_STA_IND:
12639 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012640 tpDeleteStaContext pDelSTACtx =
12641 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12642
12643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12644 "Received WDI_DEL_STA_IND from WDI ");
12645 if(NULL == pDelSTACtx)
12646 {
12647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012649 break;
12650 }
12651 vos_mem_copy(pDelSTACtx->addr2,
12652 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12653 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012654 vos_mem_copy(pDelSTACtx->bssId,
12655 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12656 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012657 pDelSTACtx->assocId =
12658 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12659 pDelSTACtx->reasonCode =
12660 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12661 pDelSTACtx->staId =
12662 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012663 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12664 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012665 break ;
12666 }
12667 case WDI_COEX_IND:
12668 {
12669 tANI_U32 index;
12670 vos_msg_t vosMsg;
12671 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12672 if(NULL == pSmeCoexInd)
12673 {
12674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012675 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012676 break;
12677 }
12678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12679 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012680 /* Message Header */
12681 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12682 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012683 /* Info from WDI Indication */
12684 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12685 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12686 {
12687 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12688 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012689 /* VOS message wrapper */
12690 vosMsg.type = eWNI_SME_COEX_IND;
12691 vosMsg.bodyptr = (void *)pSmeCoexInd;
12692 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012693 /* Send message to SME */
12694 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12695 {
12696 /* free the mem and return */
12697 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12698 }
12699 else
12700 {
12701 /* DEBUG */
12702 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12703 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12704 pSmeCoexInd->coexIndType,
12705 pSmeCoexInd->coexIndData[0],
12706 pSmeCoexInd->coexIndData[1],
12707 pSmeCoexInd->coexIndData[2],
12708 pSmeCoexInd->coexIndData[3]);
12709 }
12710 break;
12711 }
12712 case WDI_TX_COMPLETE_IND:
12713 {
12714 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12715 /* Calling TxCompleteAck Indication from wda context*/
12716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12717 "Complete Indication received from HAL");
12718 if( pWDA->pAckTxCbFunc )
12719 {
12720 if( VOS_STATUS_SUCCESS !=
12721 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12722 {
12723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12724 "Tx Complete timeout Timer Stop Failed ");
12725 }
12726 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12727 pWDA->pAckTxCbFunc = NULL;
12728 }
12729 else
12730 {
12731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12732 "Tx Complete Indication is received after timeout ");
12733 }
12734 break;
12735 }
Viral Modid86bde22012-12-10 13:09:21 -080012736 case WDI_P2P_NOA_START_IND :
12737 {
12738 tSirP2PNoaStart *pP2pNoaStart =
12739 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12740
12741 if (NULL == pP2pNoaStart)
12742 {
12743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12744 "Memory allocation failure, "
12745 "WDI_P2P_NOA_START_IND not forwarded");
12746 break;
12747 }
12748 pP2pNoaStart->status =
12749 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12750 pP2pNoaStart->bssIdx =
12751 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12752 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12753 (void *)pP2pNoaStart , 0) ;
12754 break;
12755 }
12756
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012757#ifdef FEATURE_WLAN_TDLS
12758 case WDI_TDLS_IND :
12759 {
12760 tSirTdlsInd *pTdlsInd =
12761 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12762
12763 if (NULL == pTdlsInd)
12764 {
12765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12766 "Memory allocation failure, "
12767 "WDI_TDLS_IND not forwarded");
12768 break;
12769 }
12770 pTdlsInd->status =
12771 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12772 pTdlsInd->assocId =
12773 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12774 pTdlsInd->staIdx =
12775 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12776 pTdlsInd->reasonCode =
12777 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12778 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12779 (void *)pTdlsInd , 0) ;
12780 break;
12781 }
12782#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012783 case WDI_P2P_NOA_ATTR_IND :
12784 {
12785 tSirP2PNoaAttr *pP2pNoaAttr =
12786 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12788 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012789 if (NULL == pP2pNoaAttr)
12790 {
12791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12792 "Memory allocation failure, "
12793 "WDI_P2P_NOA_ATTR_IND not forwarded");
12794 break;
12795 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012796 pP2pNoaAttr->index =
12797 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12798 pP2pNoaAttr->oppPsFlag =
12799 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12800 pP2pNoaAttr->ctWin =
12801 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12802
12803 pP2pNoaAttr->uNoa1IntervalCnt =
12804 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12805 pP2pNoaAttr->uNoa1Duration =
12806 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12807 pP2pNoaAttr->uNoa1Interval =
12808 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12809 pP2pNoaAttr->uNoa1StartTime =
12810 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012811 pP2pNoaAttr->uNoa2IntervalCnt =
12812 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12813 pP2pNoaAttr->uNoa2Duration =
12814 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12815 pP2pNoaAttr->uNoa2Interval =
12816 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12817 pP2pNoaAttr->uNoa2StartTime =
12818 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012819 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12820 (void *)pP2pNoaAttr , 0) ;
12821 break;
12822 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012823#ifdef FEATURE_WLAN_SCAN_PNO
12824 case WDI_PREF_NETWORK_FOUND_IND:
12825 {
12826 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012827 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12828 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12829 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12830 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12831
Jeff Johnson295189b2012-06-20 16:38:30 -070012832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12833 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012834 if (NULL == pPrefNetworkFoundInd)
12835 {
12836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12837 "Memory allocation failure, "
12838 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053012839 if (NULL !=
12840 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12841 {
12842 wpalMemoryFree(
12843 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
12844 );
12845 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12846 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012847 break;
12848 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012849 /* Message Header */
12850 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012851 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070012852
12853 /* Info from WDI Indication */
12854 pPrefNetworkFoundInd->ssId.length =
12855 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012857 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
12858 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
12859 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070012860 if (NULL !=
12861 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12862 {
12863 pPrefNetworkFoundInd->frameLength =
12864 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12865 vos_mem_copy( pPrefNetworkFoundInd->data,
12866 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
12867 pPrefNetworkFoundInd->frameLength);
12868 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
12869 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12870 }
12871 else
12872 {
12873 pPrefNetworkFoundInd->frameLength = 0;
12874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012875 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070012876 /* VOS message wrapper */
12877 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
12878 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
12879 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012880 /* Send message to SME */
12881 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12882 {
12883 /* free the mem and return */
12884 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
12885 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 break;
12887 }
12888#endif // FEATURE_WLAN_SCAN_PNO
12889
12890#ifdef WLAN_WAKEUP_EVENTS
12891 case WDI_WAKE_REASON_IND:
12892 {
12893 vos_msg_t vosMsg;
12894 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
12895 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
12896 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
12897
12898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12899 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
12900 wdiLowLevelInd->wdiIndicationType,
12901 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
12902 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
12903 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12904
12905 if (NULL == pWakeReasonInd)
12906 {
12907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12908 "Memory allocation failure, "
12909 "WDI_WAKE_REASON_IND not forwarded");
12910 break;
12911 }
12912
12913 vos_mem_zero(pWakeReasonInd, allocSize);
12914
12915 /* Message Header */
12916 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
12917 pWakeReasonInd->mesgLen = allocSize;
12918
12919 /* Info from WDI Indication */
12920 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
12921 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
12922 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
12923 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
12924 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
12925 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
12926 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
12927 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12928
12929 /* VOS message wrapper */
12930 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
12931 vosMsg.bodyptr = (void *) pWakeReasonInd;
12932 vosMsg.bodyval = 0;
12933
12934 /* Send message to SME */
12935 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12936 {
12937 /* free the mem and return */
12938 vos_mem_free((v_VOID_t *) pWakeReasonInd);
12939 }
12940
12941 break;
12942 }
12943#endif // WLAN_WAKEUP_EVENTS
12944
12945 case WDI_TX_PER_HIT_IND:
12946 {
12947 vos_msg_t vosMsg;
12948 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
12949 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
12950 /* VOS message wrapper */
12951 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
12952 vosMsg.bodyptr = NULL;
12953 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012954 /* Send message to SME */
12955 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12956 {
12957 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
12958 }
12959 break;
12960 }
12961
Leo Chang9056f462013-08-01 19:21:11 -070012962#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070012963 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070012964 {
Leo Changd9df8aa2013-09-26 13:32:26 -070012965 vos_msg_t vosMsg;
12966 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012967
Leo Changd9df8aa2013-09-26 13:32:26 -070012968 lphbInd =
12969 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
12970 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070012971 {
12972 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12973 "%s: LPHB IND buffer alloc Fail", __func__);
12974 return ;
12975 }
12976
Leo Changd9df8aa2013-09-26 13:32:26 -070012977 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070012978 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070012979 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070012980 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070012981 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070012982 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
12983
12984 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070012985 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070012986 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
12987
Leo Changd9df8aa2013-09-26 13:32:26 -070012988 vosMsg.type = eWNI_SME_LPHB_IND;
12989 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012990 vosMsg.bodyval = 0;
12991 /* Send message to SME */
12992 if (VOS_STATUS_SUCCESS !=
12993 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12994 {
12995 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12996 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070012997 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070012998 }
12999 break;
13000 }
13001#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013002 case WDI_PERIODIC_TX_PTRN_FW_IND:
13003 {
13004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13005 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13006 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13007 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13008 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13009 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13010 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13011
13012 break;
13013 }
Leo Chang9056f462013-08-01 19:21:11 -070013014
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013015 case WDI_IBSS_PEER_INACTIVITY_IND:
13016 {
13017 tSirIbssPeerInactivityInd *pIbssInd =
13018 (tSirIbssPeerInactivityInd *)
13019 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13020
13021 if (NULL == pIbssInd)
13022 {
13023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13024 "Memory allocation failure, "
13025 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13026 break;
13027 }
13028
13029 pIbssInd->bssIdx =
13030 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13031 pIbssInd->staIdx =
13032 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13033 vos_mem_copy(pIbssInd->peerAddr,
13034 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13035 sizeof(tSirMacAddr));
13036 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13037 break;
13038 }
13039
Rajeev79dbe4c2013-10-05 11:03:42 +053013040#ifdef FEATURE_WLAN_BATCH_SCAN
13041 case WDI_BATCH_SCAN_RESULT_IND:
13042 {
13043 void *pBatchScanResult;
13044 void *pCallbackContext;
13045 tpAniSirGlobal pMac;
13046
13047 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13048 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13049
13050 /*sanity check*/
13051 if(NULL == pWDA)
13052 {
13053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13054 "%s:pWDA is NULL", __func__);
13055 VOS_ASSERT(0);
13056 return;
13057 }
13058
13059 pBatchScanResult =
13060 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13061 if (NULL == pBatchScanResult)
13062 {
13063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13064 "%s:Batch scan result from FW is null can't invoke HDD callback",
13065 __func__);
13066 VOS_ASSERT(0);
13067 return;
13068 }
13069
13070 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13071 if (NULL == pMac)
13072 {
13073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13074 "%s:pMac is NULL", __func__);
13075 VOS_ASSERT(0);
13076 return;
13077 }
13078
13079 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13080 /*call hdd callback with set batch scan response data*/
13081 if(pMac->pmc.batchScanResultCallback)
13082 {
13083 pMac->pmc.batchScanResultCallback(pCallbackContext,
13084 pBatchScanResult);
13085 }
13086 else
13087 {
13088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13089 "%s:HDD callback is null", __func__);
13090 VOS_ASSERT(0);
13091 }
13092 break;
13093 }
13094#endif
13095
Leo Chang0b0e45a2013-12-15 15:18:55 -080013096#ifdef FEATURE_WLAN_CH_AVOID
13097 case WDI_CH_AVOID_IND:
13098 {
13099 vos_msg_t vosMsg;
13100 tSirChAvoidIndType *chAvoidInd;
13101
13102 chAvoidInd =
13103 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13104 if (NULL == chAvoidInd)
13105 {
13106 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13107 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13108 return ;
13109 }
13110
13111 chAvoidInd->avoidRangeCount =
13112 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13113 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13114 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13115 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13116
13117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13118 "%s : WDA CH avoid notification", __func__);
13119
13120 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13121 vosMsg.bodyptr = chAvoidInd;
13122 vosMsg.bodyval = 0;
13123 /* Send message to SME */
13124 if (VOS_STATUS_SUCCESS !=
13125 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13126 {
13127 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13128 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13129 vos_mem_free(chAvoidInd);
13130 }
13131 break;
13132 }
13133#endif /* FEATURE_WLAN_CH_AVOID */
13134
Jeff Johnson295189b2012-06-20 16:38:30 -070013135 default:
13136 {
13137 /* TODO error */
13138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13139 "Received UNKNOWN Indication from WDI ");
13140 }
13141 }
13142 return ;
13143}
13144
Jeff Johnson295189b2012-06-20 16:38:30 -070013145/*
13146 * BA related processing in WDA.
13147 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013148void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
13149 void* pUserData)
13150{
13151 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13152 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070013153 if(NULL == pWdaParams)
13154 {
13155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013156 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013157 VOS_ASSERT(0) ;
13158 return ;
13159 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013160 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070013161 vos_mem_free(pWdaParams->wdaMsgParam) ;
13162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13163 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013165 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013166 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
13167 {
13168 tANI_U8 i = 0 ;
13169 tBaActivityInd *baActivityInd = NULL ;
13170 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
13171 tANI_U8 allocSize = sizeof(tBaActivityInd)
13172 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
13173 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
13174 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013175 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013176 if(NULL == baActivityInd)
13177 {
13178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013180 VOS_ASSERT(0) ;
13181 return;
13182 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013183 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13184 sizeof(tSirMacAddr)) ;
13185 baActivityInd->baCandidateCnt = baCandidateCount ;
13186
13187 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13188 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13189
13190 for(i = 0 ; i < baCandidateCount ; i++)
13191 {
13192 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013193 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13194 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013195 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13196 {
13197 baCandidate->baInfo[tid].fBaEnable =
13198 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13199 baCandidate->baInfo[tid].startingSeqNum =
13200 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13201 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013202 wdiBaCandidate++ ;
13203 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013205 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13206 }
13207 else
13208 {
13209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13210 "BA Trigger RSP with Failure received ");
13211 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013212 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013213}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013214
13215
13216/*
13217 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13218 * during MCC
13219 */
13220void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13221{
13222 wpt_uint32 enabled;
13223 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13224 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13225 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13226
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013227 if (NULL == pMac )
13228 {
13229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13230 "%s: Invoked with invalid MAC context ", __func__ );
13231 VOS_ASSERT(0);
13232 return;
13233 }
13234
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013235 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13236 != eSIR_SUCCESS)
13237 {
13238 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13239 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13240 return;
13241 }
13242
13243 if(!enabled)
13244 {
13245 return;
13246 }
13247
13248 if(NULL == pWDA)
13249 {
13250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13251 "%s:WDA context is NULL", __func__);
13252 VOS_ASSERT(0);
13253 return;
13254 }
13255
13256 if(activate)
13257 {
13258 if( VOS_STATUS_SUCCESS !=
13259 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13260 {
13261 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13262 "Traffic Stats Timer Start Failed ");
13263 return;
13264 }
13265 WDI_DS_ActivateTrafficStats();
13266 }
13267 else
13268 {
13269 WDI_DS_DeactivateTrafficStats();
13270 WDI_DS_ClearTrafficStats();
13271
13272 if( VOS_STATUS_SUCCESS !=
13273 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13274 {
13275 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13276 "Traffic Stats Timer Stop Failed ");
13277 return;
13278 }
13279 }
13280}
13281
13282/*
13283 * Traffic Stats Timer handler
13284 */
13285void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13286{
13287 WDI_Status wdiStatus;
13288 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13289 WDI_TrafficStatsIndType trafficStatsIndParams;
13290 wpt_uint32 length, enabled;
13291 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13292
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013293 if (NULL == pMac )
13294 {
13295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13296 "%s: Invoked with invalid MAC context ", __func__ );
13297 VOS_ASSERT(0);
13298 return;
13299 }
13300
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013301 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13302 != eSIR_SUCCESS)
13303 {
13304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13305 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13306 return;
13307 }
13308
13309 if(!enabled)
13310 {
13311 WDI_DS_DeactivateTrafficStats();
13312 return;
13313 }
13314
13315 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13316
13317 if(pWdiTrafficStats != NULL)
13318 {
13319 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13320 trafficStatsIndParams.length = length;
13321 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013322 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013323 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13324 trafficStatsIndParams.pUserData = pWDA;
13325
13326 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13327
13328 if(WDI_STATUS_PENDING == wdiStatus)
13329 {
13330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13331 "Pending received for %s:%d ",__func__,__LINE__ );
13332 }
13333 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13334 {
13335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13336 "Failure in %s:%d ",__func__,__LINE__ );
13337 }
13338
13339 WDI_DS_ClearTrafficStats();
13340 }
13341 else
13342 {
13343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13344 "pWdiTrafficStats is Null");
13345 }
13346
13347 if( VOS_STATUS_SUCCESS !=
13348 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13349 {
13350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13351 "Traffic Stats Timer Start Failed ");
13352 return;
13353 }
13354}
13355
Jeff Johnson295189b2012-06-20 16:38:30 -070013356/*
13357 * BA Activity check timer handler
13358 */
13359void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13360{
13361 tANI_U8 curSta = 0 ;
13362 tANI_U8 tid = 0 ;
13363 tANI_U8 size = 0 ;
13364 tANI_U8 baCandidateCount = 0 ;
13365 tANI_U8 newBaCandidate = 0 ;
13366 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13367
13368 if(NULL == pWDA)
13369 {
13370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013371 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013372 VOS_ASSERT(0);
13373 return ;
13374 }
13375 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13376 {
13377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13378 "Inconsistent STA entries in WDA");
13379 VOS_ASSERT(0) ;
13380 }
13381 /* walk through all STA entries and find out TX packet count */
13382 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13383 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013384#ifdef WLAN_SOFTAP_VSTA_FEATURE
13385 // We can only do BA on "hard" STAs.
13386 if (!(IS_HWSTA_IDX(curSta)))
13387 {
13388 continue;
13389 }
13390#endif //WLAN_SOFTAP_VSTA_FEATURE
13391 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13392 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013393 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013394 tANI_U32 txPktCount = 0 ;
13395 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013396 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013397 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13398 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013399 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13400 curSta, tid, &txPktCount)))
13401 {
13402#if 0
13403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13404 "************* %d:%d, %d ",curSta, txPktCount,
13405 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13406#endif
13407 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013408 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013409 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13410 curSta, tid)))
13411 {
13412 /* get prepare for sending message to HAL */
13413 //baCandidate[baCandidateCount].staIdx = curSta ;
13414 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13415 newBaCandidate = WDA_ENABLE_BA ;
13416 }
13417 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13418 }
13419 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013420 /* fill the entry for all the sta with given TID's */
13421 if(WDA_ENABLE_BA == newBaCandidate)
13422 {
13423 /* move to next BA candidate */
13424 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13425 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13426 baCandidateCount++ ;
13427 newBaCandidate = WDA_DISABLE_BA ;
13428 }
13429 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013430 /* prepare and send message to hal */
13431 if( 0 < baCandidateCount)
13432 {
13433 WDI_Status status = WDI_STATUS_SUCCESS ;
13434 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13435 tWDA_ReqParams *pWdaParams =
13436 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013437 if(NULL == pWdaParams)
13438 {
13439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013441 VOS_ASSERT(0) ;
13442 return;
13443 }
13444 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13445 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13446 if(NULL == wdiTriggerBaReq)
13447 {
13448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013449 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013450 VOS_ASSERT(0) ;
13451 vos_mem_free(pWdaParams);
13452 return;
13453 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013454 do
13455 {
13456 WDI_TriggerBAReqinfoType *triggerBaInfo =
13457 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13458 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13459 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13460 * for each request */
13461 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13462 triggerBaInfo->ucBASessionID = 0;
13463 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13464 } while(0) ;
13465 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13466 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 pWdaParams->pWdaContext = pWDA;
13469 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13470 pWdaParams->wdaMsgParam = NULL;
13471 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13472 WDA_TriggerBaReqCallback, pWdaParams) ;
13473 if(IS_WDI_STATUS_FAILURE(status))
13474 {
13475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13476 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13477 vos_mem_free(pWdaParams->wdaMsgParam) ;
13478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13479 vos_mem_free(pWdaParams) ;
13480 }
13481 }
13482 else
13483 {
13484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13485 "There is no TID for initiating BA");
13486 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013487 if( VOS_STATUS_SUCCESS !=
13488 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13489 {
13490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13491 "BA Activity Timer Stop Failed ");
13492 return ;
13493 }
13494 if( VOS_STATUS_SUCCESS !=
13495 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13496 {
13497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13498 "BA Activity Timer Start Failed ");
13499 return;
13500 }
13501 return ;
13502}
Jeff Johnson295189b2012-06-20 16:38:30 -070013503/*
13504 * WDA common routine to create timer used by WDA.
13505 */
13506static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13507{
Jeff Johnson295189b2012-06-20 16:38:30 -070013508 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13509 tANI_U32 val = 0 ;
13510 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13511
13512 if(NULL == pMac)
13513 {
13514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013515 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013516 VOS_ASSERT(0);
13517 return VOS_STATUS_E_FAILURE;
13518 }
13519 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13520 != eSIR_SUCCESS)
13521 {
13522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13523 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13524 return VOS_STATUS_E_FAILURE;
13525 }
13526 val = SYS_MS_TO_TICKS(val) ;
13527
13528 /* BA activity check timer */
13529 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13530 "BA Activity Check timer", WDA_TimerHandler,
13531 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13532 if(status != TX_SUCCESS)
13533 {
13534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13535 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013536 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013537 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013538 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013539 /* Tx Complete Timeout timer */
13540 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13541 "Tx Complete Check timer", WDA_TimerHandler,
13542 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013543 if(status != TX_SUCCESS)
13544 {
13545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13546 "Unable to create Tx Complete Timeout timer");
13547 /* Destroy timer of BA activity check timer */
13548 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13549 if(status != TX_SUCCESS)
13550 {
13551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13552 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013553 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013554 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013555 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013556 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013557
13558 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13559
13560 /* Traffic Stats timer */
13561 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13562 "Traffic Stats timer", WDA_TimerHandler,
13563 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13564 if(status != TX_SUCCESS)
13565 {
13566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13567 "Unable to create traffic stats timer");
13568 /* Destroy timer of BA activity check timer */
13569 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13570 if(status != TX_SUCCESS)
13571 {
13572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13573 "Unable to Destroy BA activity timer");
13574 }
13575 /* Destroy timer of tx complete timer */
13576 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13577 if(status != TX_SUCCESS)
13578 {
13579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13580 "Unable to Tx complete timer");
13581 }
13582 return VOS_STATUS_E_FAILURE ;
13583 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013584 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013585}
Jeff Johnson295189b2012-06-20 16:38:30 -070013586/*
13587 * WDA common routine to destroy timer used by WDA.
13588 */
13589static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13590{
13591 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013592 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13593 if(status != TX_SUCCESS)
13594 {
13595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13596 "Unable to Destroy Tx Complete Timeout timer");
13597 return eSIR_FAILURE ;
13598 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013599 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13600 if(status != TX_SUCCESS)
13601 {
13602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13603 "Unable to Destroy BA activity timer");
13604 return eSIR_FAILURE ;
13605 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013606 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13607 if(status != TX_SUCCESS)
13608 {
13609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13610 "Unable to Destroy traffic stats timer");
13611 return eSIR_FAILURE ;
13612 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013613 return eSIR_SUCCESS ;
13614}
Jeff Johnson295189b2012-06-20 16:38:30 -070013615/*
13616 * WDA timer handler.
13617 */
13618void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13619{
13620 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13621 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013622 /*
13623 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13624 */
13625 wdaMsg.type = timerInfo ;
13626 wdaMsg.bodyptr = NULL;
13627 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013628 /* post the message.. */
13629 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13630 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13631 {
13632 vosStatus = VOS_STATUS_E_BADMSG;
13633 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013634}
Jeff Johnson295189b2012-06-20 16:38:30 -070013635/*
13636 * WDA Tx Complete timeout Indication.
13637 */
13638void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13639{
13640 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013641 if( pWDA->pAckTxCbFunc )
13642 {
13643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013644 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013645 pWDA->pAckTxCbFunc( pMac, 0);
13646 pWDA->pAckTxCbFunc = NULL;
13647 }
13648 else
13649 {
13650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013651 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013652 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013653}
Jeff Johnson295189b2012-06-20 16:38:30 -070013654/*
13655 * WDA Set REG Domain to VOS NV
13656 */
Abhishek Singha306a442013-11-07 18:39:01 +053013657eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13658 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013659{
Abhishek Singha306a442013-11-07 18:39:01 +053013660 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013661 {
13662 return eHAL_STATUS_INVALID_PARAMETER;
13663 }
13664 return eHAL_STATUS_SUCCESS;
13665}
Jeff Johnson295189b2012-06-20 16:38:30 -070013666
Jeff Johnson295189b2012-06-20 16:38:30 -070013667#ifdef FEATURE_WLAN_SCAN_PNO
13668/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013669 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013670 *
13671 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013672void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013673{
13674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013676 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013677 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013678 {
13679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013680 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013681 VOS_ASSERT(0) ;
13682 return ;
13683 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013684
Yue Ma7f44bbe2013-04-12 11:47:39 -070013685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13686 vos_mem_free(pWdaParams->wdaMsgParam);
13687 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013688
13689 return ;
13690}
Jeff Johnson295189b2012-06-20 16:38:30 -070013691/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013692 * FUNCTION: WDA_PNOScanReqCallback
13693 * Free memory.
13694 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13695 */
13696void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013697{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013698 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13699
13700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13701 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13702
13703 if(NULL == pWdaParams)
13704 {
13705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13706 "%s: pWdaParams received NULL", __func__);
13707 VOS_ASSERT(0);
13708 return;
13709 }
13710
13711 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13712 {
13713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13714 vos_mem_free(pWdaParams->wdaMsgParam);
13715 vos_mem_free(pWdaParams);
13716 }
13717
13718 return;
13719}
13720/*
13721 * FUNCTION: WDA_UpdateScanParamsRespCallback
13722 *
13723 */
13724void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13725{
13726 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013728 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013729 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013730 {
13731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013732 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013733 VOS_ASSERT(0) ;
13734 return ;
13735 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013736
13737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13738 vos_mem_free(pWdaParams->wdaMsgParam);
13739 vos_mem_free(pWdaParams);
13740
Jeff Johnson295189b2012-06-20 16:38:30 -070013741 return ;
13742}
Jeff Johnson295189b2012-06-20 16:38:30 -070013743/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013744 * FUNCTION: WDA_UpdateScanParamsReqCallback
13745 * Free memory.
13746 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13747 */
13748void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13749{
13750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13751
13752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13753 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13754
13755 if(NULL == pWdaParams)
13756 {
13757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13758 "%s: pWdaParams received NULL", __func__);
13759 VOS_ASSERT(0);
13760 return;
13761 }
13762
13763 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13764 {
13765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13766 vos_mem_free(pWdaParams->wdaMsgParam);
13767 vos_mem_free(pWdaParams);
13768 }
13769
13770 return;
13771}
13772/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013773 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13774 * Request to WDI to set Preferred Network List.Offload
13775 */
13776VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13777 tSirPNOScanReq *pPNOScanReqParams)
13778{
Jeff Johnson43971f52012-07-17 12:26:56 -070013779 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013780 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13781 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13782 tWDA_ReqParams *pWdaParams ;
13783 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013785 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013786 if(NULL == pwdiPNOScanReqInfo)
13787 {
13788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013789 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013790 VOS_ASSERT(0);
13791 return VOS_STATUS_E_NOMEM;
13792 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013793 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13794 if(NULL == pWdaParams)
13795 {
13796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013797 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013798 VOS_ASSERT(0);
13799 vos_mem_free(pwdiPNOScanReqInfo);
13800 return VOS_STATUS_E_NOMEM;
13801 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013802 //
13803 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13804 //
13805 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13806 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013807 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13808 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13809 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013810 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13811 {
13812 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13813 &pPNOScanReqParams->aNetworks[i],
13814 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13815 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013816 /*Scan timer intervals*/
13817 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13818 &pPNOScanReqParams->scanTimers,
13819 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013820 /*Probe template for 2.4GHz band*/
13821 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
13822 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13823 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013824 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
13825 pPNOScanReqParams->p24GProbeTemplate,
13826 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070013827 /*Probe template for 5GHz band*/
13828 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
13829 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13830 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013831 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
13832 pPNOScanReqParams->p5GProbeTemplate,
13833 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013834 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
13835 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013836
Jeff Johnson295189b2012-06-20 16:38:30 -070013837 /* Store Params pass it to WDI */
13838 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
13839 pWdaParams->pWdaContext = pWDA;
13840 /* Store param pointer as passed in by caller */
13841 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013842 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013843 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013844 if(IS_WDI_STATUS_FAILURE(status))
13845 {
13846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13847 "Failure in Set PNO REQ WDI API, free all the memory " );
13848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13849 vos_mem_free(pWdaParams->wdaMsgParam);
13850 pWdaParams->wdaWdiApiMsgParam = NULL;
13851 pWdaParams->wdaMsgParam = NULL;
13852 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013853 return CONVERT_WDI2VOS_STATUS(status) ;
13854}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013855
13856#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13857
13858void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
13859{
13860 /*Convert the CSR Auth types to WDI Auth types */
13861 switch (csrAuthType)
13862 {
13863 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
13864 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13865 break;
13866#ifdef FEATURE_WLAN_CCX
13867 case eCSR_AUTH_TYPE_CCKM_WPA:
13868 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
13869 break;
13870#endif
13871 case eCSR_AUTH_TYPE_WPA:
13872 *AuthType = eWDA_AUTH_TYPE_WPA;
13873 break;
13874 case eCSR_AUTH_TYPE_WPA_PSK:
13875 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
13876 break;
13877#ifdef FEATURE_WLAN_CCX
13878 case eCSR_AUTH_TYPE_CCKM_RSN:
13879 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
13880 break;
13881#endif
13882 case eCSR_AUTH_TYPE_RSN:
13883 *AuthType = eWDA_AUTH_TYPE_RSN;
13884 break;
13885 case eCSR_AUTH_TYPE_RSN_PSK:
13886 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
13887 break;
13888#if defined WLAN_FEATURE_VOWIFI_11R
13889 case eCSR_AUTH_TYPE_FT_RSN:
13890 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
13891 break;
13892 case eCSR_AUTH_TYPE_FT_RSN_PSK:
13893 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
13894 break;
13895#endif
13896#ifdef FEATURE_WLAN_WAPI
13897 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
13898 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
13899 break;
13900 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
13901 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
13902 break;
13903#endif /* FEATURE_WLAN_WAPI */
13904 case eCSR_AUTH_TYPE_SHARED_KEY:
13905 case eCSR_AUTH_TYPE_AUTOSWITCH:
13906 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13907 break;
13908#if 0
13909 case eCSR_AUTH_TYPE_SHARED_KEY:
13910 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
13911 break;
13912 case eCSR_AUTH_TYPE_AUTOSWITCH:
13913 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
13914#endif
13915 default:
13916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13917 "%s: Unknown Auth Type", __func__);
13918 break;
13919 }
13920}
13921void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
13922{
13923 switch (csrEncrType)
13924 {
13925 case eCSR_ENCRYPT_TYPE_NONE:
13926 *EncrType = WDI_ED_NONE;
13927 break;
13928 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
13929 case eCSR_ENCRYPT_TYPE_WEP40:
13930 *EncrType = WDI_ED_WEP40;
13931 break;
13932 case eCSR_ENCRYPT_TYPE_WEP104:
13933 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
13934 *EncrType = WDI_ED_WEP104;
13935 break;
13936 case eCSR_ENCRYPT_TYPE_TKIP:
13937 *EncrType = WDI_ED_TKIP;
13938 break;
13939 case eCSR_ENCRYPT_TYPE_AES:
13940 *EncrType = WDI_ED_CCMP;
13941 break;
13942#ifdef WLAN_FEATURE_11W
13943 case eCSR_ENCRYPT_TYPE_AES_CMAC:
13944 *EncrType = WDI_ED_AES_128_CMAC;
13945 break;
13946#endif
13947#ifdef FEATURE_WLAN_WAPI
13948 case eCSR_ENCRYPT_TYPE_WPI:
13949 *EncrType = WDI_ED_WPI;
13950 break;
13951#endif
13952 case eCSR_ENCRYPT_TYPE_ANY:
13953 *EncrType = WDI_ED_ANY;
13954 break;
13955
13956 default:
13957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13958 "%s: Unknown Encryption Type", __func__);
13959 break;
13960 }
13961}
13962
13963/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013964 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013965 * Request to WDI to set Roam Offload Scan
13966 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013967VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013968 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
13969{
13970 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013971 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
13972 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013973 tWDA_ReqParams *pWdaParams ;
13974 v_U8_t csrAuthType;
13975 WDI_RoamNetworkType *pwdiRoamNetworkType;
13976 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
13977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13978 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013979 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013980 {
13981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13982 "%s: VOS MEM Alloc Failure", __func__);
13983 VOS_ASSERT(0);
13984 return VOS_STATUS_E_NOMEM;
13985 }
13986 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13987 if (NULL == pWdaParams)
13988 {
13989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13990 "%s: VOS MEM Alloc Failure", __func__);
13991 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013992 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013993 return VOS_STATUS_E_NOMEM;
13994 }
13995
13996 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013997 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013998 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013999 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
14000 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014001 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
14002 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
14003 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
14004 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
14005 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
14006 sizeof(pwdiRoamNetworkType->currAPbssid));
14007 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
14008 csrAuthType);
14009 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
14010 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
14011 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
14012 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
14013 pwdiRoamOffloadScanInfo->LookupThreshold =
14014 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080014015 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
14016 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014017 pwdiRoamOffloadScanInfo->RoamRssiDiff =
14018 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080014019 pwdiRoamOffloadScanInfo->MAWCEnabled =
14020 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014021 pwdiRoamOffloadScanInfo->Command =
14022 pRoamOffloadScanReqParams->Command ;
14023 pwdiRoamOffloadScanInfo->StartScanReason =
14024 pRoamOffloadScanReqParams->StartScanReason ;
14025 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
14026 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
14027 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
14028 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
14029 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
14030 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
14031 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
14032 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
14033 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
14034 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
14035 pwdiRoamOffloadScanInfo->IsCCXEnabled =
14036 pRoamOffloadScanReqParams->IsCCXEnabled ;
14037 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
14038 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
14039 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
14040 pwdiRoamNetworkType->ssId.ucLength =
14041 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
14042 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
14043 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
14044 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
14045 pwdiRoamNetworkType->ChannelCount =
14046 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
14047 pwdiRoamOffloadScanInfo->ChannelCacheType =
14048 pRoamOffloadScanReqParams->ChannelCacheType;
14049 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
14050 pRoamOffloadScanReqParams->ValidChannelList,
14051 pRoamOffloadScanReqParams->ValidChannelCount);
14052 pwdiRoamOffloadScanInfo->ValidChannelCount =
14053 pRoamOffloadScanReqParams->ValidChannelCount;
14054 pwdiRoamOffloadScanInfo->us24GProbeSize =
14055 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14056 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14057 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
14058 pRoamOffloadScanReqParams->p24GProbeTemplate,
14059 pwdiRoamOffloadScanInfo->us24GProbeSize);
14060 pwdiRoamOffloadScanInfo->us5GProbeSize =
14061 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14062 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14063 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
14064 pRoamOffloadScanReqParams->p5GProbeTemplate,
14065 pwdiRoamOffloadScanInfo->us5GProbeSize);
14066 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
14067 pRoamOffloadScanReqParams->MDID.mdiePresent;
14068 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
14069 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014070 pwdiRoamOffloadScanInfo->nProbes =
14071 pRoamOffloadScanReqParams->nProbes;
14072 pwdiRoamOffloadScanInfo->HomeAwayTime =
14073 pRoamOffloadScanReqParams->HomeAwayTime;
14074 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014075 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014076 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014077 pWdaParams->pWdaContext = pWDA;
14078 /* Store param pointer as passed in by caller */
14079 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014080 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014081 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
14082 if(IS_WDI_STATUS_FAILURE(status))
14083 {
14084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14085 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
14086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14087 vos_mem_free(pWdaParams->wdaMsgParam);
14088 pWdaParams->wdaWdiApiMsgParam = NULL;
14089 pWdaParams->wdaMsgParam = NULL;
14090 }
14091 return CONVERT_WDI2VOS_STATUS(status) ;
14092}
14093#endif
14094
Jeff Johnson295189b2012-06-20 16:38:30 -070014095/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014096 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014097 *
14098 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014099void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014100{
14101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14102
14103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014104 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014105
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014106 if(NULL == pWdaParams)
14107 {
14108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014109 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014110 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014111 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014112 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014113
Jeff Johnson295189b2012-06-20 16:38:30 -070014114 vos_mem_free(pWdaParams->wdaMsgParam) ;
14115 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14116 vos_mem_free(pWdaParams) ;
14117
14118 return ;
14119}
14120/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014121 * FUNCTION: WDA_RssiFilterReqCallback
14122 * Free memory.
14123 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
14124 */
14125void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14126{
14127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14128
14129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14130 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14131
14132 if(NULL == pWdaParams)
14133 {
14134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14135 "%s: pWdaParams received NULL", __func__);
14136 VOS_ASSERT(0);
14137 return;
14138 }
14139
14140 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14141 {
14142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14143 vos_mem_free(pWdaParams->wdaMsgParam);
14144 vos_mem_free(pWdaParams);
14145 }
14146
14147 return;
14148}
14149/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014150 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14151 * Request to WDI to set Preferred Network List.Offload
14152 */
14153VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
14154 tSirSetRSSIFilterReq* pRssiFilterParams)
14155{
Jeff Johnson43971f52012-07-17 12:26:56 -070014156 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014157 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
14158 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
14159 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014161 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014162 if(NULL == pwdiSetRssiFilterReqInfo)
14163 {
14164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014165 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014166 VOS_ASSERT(0);
14167 return VOS_STATUS_E_NOMEM;
14168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014169 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14170 if(NULL == pWdaParams)
14171 {
14172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014173 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014174 VOS_ASSERT(0);
14175 vos_mem_free(pwdiSetRssiFilterReqInfo);
14176 return VOS_STATUS_E_NOMEM;
14177 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014178 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014179 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
14180 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014181
Jeff Johnson295189b2012-06-20 16:38:30 -070014182 /* Store Params pass it to WDI */
14183 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14184 pWdaParams->pWdaContext = pWDA;
14185 /* Store param pointer as passed in by caller */
14186 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014187 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014188 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014189 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014190 if(IS_WDI_STATUS_FAILURE(status))
14191 {
14192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14193 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14195 vos_mem_free(pWdaParams->wdaMsgParam);
14196 pWdaParams->wdaWdiApiMsgParam = NULL;
14197 pWdaParams->wdaMsgParam = NULL;
14198 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014199 return CONVERT_WDI2VOS_STATUS(status) ;
14200}
14201
Jeff Johnson295189b2012-06-20 16:38:30 -070014202/*
14203 * FUNCTION: WDA_ProcessUpdateScanParams
14204 * Request to WDI to update Scan Parameters
14205 */
14206VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14207 tSirUpdateScanParams *pUpdateScanParams)
14208{
Jeff Johnson43971f52012-07-17 12:26:56 -070014209 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014210 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14211 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14212 sizeof(WDI_UpdateScanParamsInfoType)) ;
14213 tWDA_ReqParams *pWdaParams ;
14214 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014216 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014217 if(NULL == wdiUpdateScanParamsInfoType)
14218 {
14219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014220 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014221 VOS_ASSERT(0);
14222 return VOS_STATUS_E_NOMEM;
14223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014224 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14225 if ( NULL == pWdaParams )
14226 {
14227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014228 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014229 VOS_ASSERT(0);
14230 vos_mem_free(wdiUpdateScanParamsInfoType);
14231 return VOS_STATUS_E_NOMEM;
14232 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014233 //
14234 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14235 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14237 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14238 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14239 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014240 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014241 pUpdateScanParams->b11dEnabled,
14242 pUpdateScanParams->b11dResolved,
14243 pUpdateScanParams->ucChannelCount,
14244 pUpdateScanParams->usPassiveMinChTime,
14245 pUpdateScanParams->usPassiveMaxChTime,
14246 pUpdateScanParams->usActiveMinChTime,
14247 pUpdateScanParams->usActiveMaxChTime,
14248 sizeof(tSirUpdateScanParams),
14249 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14250
Jeff Johnson295189b2012-06-20 16:38:30 -070014251 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14252 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014253 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14254 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014255 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14256 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014257 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14258 pUpdateScanParams->usActiveMaxChTime;
14259 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14260 pUpdateScanParams->usActiveMinChTime;
14261 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14262 pUpdateScanParams->usPassiveMaxChTime;
14263 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14264 pUpdateScanParams->usPassiveMinChTime;
14265
Jeff Johnson295189b2012-06-20 16:38:30 -070014266 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014267 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14268 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014269
Jeff Johnson295189b2012-06-20 16:38:30 -070014270 for ( i = 0; i <
14271 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14272 i++)
14273 {
14274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14275 "Update Scan Parameters channel: %d",
14276 pUpdateScanParams->aChannels[i]);
14277
14278 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14279 pUpdateScanParams->aChannels[i];
14280 }
14281
Yue Ma7f44bbe2013-04-12 11:47:39 -070014282 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14283 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014284
Jeff Johnson295189b2012-06-20 16:38:30 -070014285 /* Store Params pass it to WDI */
14286 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
14287 pWdaParams->pWdaContext = pWDA;
14288 /* Store param pointer as passed in by caller */
14289 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014290
Jeff Johnson295189b2012-06-20 16:38:30 -070014291
14292
14293 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014294 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014295 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014296 if(IS_WDI_STATUS_FAILURE(status))
14297 {
14298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14299 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14301 vos_mem_free(pWdaParams->wdaMsgParam);
14302 vos_mem_free(pWdaParams);
14303 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014304 return CONVERT_WDI2VOS_STATUS(status) ;
14305}
14306#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014307
14308#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14309/*
14310 * FUNCTION: WDA_RoamOffloadScanReqCallback
14311 *
14312 */
14313void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14314{
14315 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014316 vos_msg_t vosMsg;
14317 wpt_uint8 reason = 0;
14318
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014320 "<------ %s " ,__func__);
14321 if (NULL == pWdaParams)
14322 {
14323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14324 "%s: pWdaParams received NULL", __func__);
14325 VOS_ASSERT(0) ;
14326 return ;
14327 }
14328 if ( pWdaParams != NULL )
14329 {
14330 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14331 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014332 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14334 }
14335 if ( pWdaParams->wdaMsgParam != NULL)
14336 {
14337 vos_mem_free(pWdaParams->wdaMsgParam);
14338 }
14339
14340 vos_mem_free(pWdaParams) ;
14341 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014342 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14343 vosMsg.bodyptr = NULL;
14344 if (WDI_STATUS_SUCCESS != status)
14345 {
14346 reason = 0;
14347 }
14348 vosMsg.bodyval = reason;
14349 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14350 {
14351 /* free the mem and return */
14352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014353 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014354 }
14355
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014356 return ;
14357}
14358#endif
14359
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014360/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014361 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014362 *
14363 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014364void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014365{
14366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14367
14368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14369 "<------ %s " ,__func__);
14370
14371 if(NULL == pWdaParams)
14372 {
14373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14374 "%s: pWdaParams received NULL", __func__);
14375 VOS_ASSERT(0);
14376 return;
14377 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014378
14379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14380 vos_mem_free(pWdaParams->wdaMsgParam);
14381 vos_mem_free(pWdaParams);
14382
14383 return;
14384}
14385/*
14386 * FUNCTION: WDA_SetPowerParamsReqCallback
14387 * Free memory.
14388 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14389 */
14390void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14391{
14392 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14393
14394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14395 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14396
14397 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014398 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14400 "%s: pWdaParams received NULL", __func__);
14401 VOS_ASSERT(0);
14402 return;
14403 }
14404
14405 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14406 {
14407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14408 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014409 vos_mem_free(pWdaParams);
14410 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014411
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014412 return;
14413}
14414
Jeff Johnson295189b2012-06-20 16:38:30 -070014415#ifdef WLAN_FEATURE_PACKET_FILTERING
14416/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014417 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014418 *
14419 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014420void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014421 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14422 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014423{
14424 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014426 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014427 if(NULL == pWdaParams)
14428 {
14429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014430 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014431 VOS_ASSERT(0) ;
14432 return ;
14433 }
14434
14435 vos_mem_free(pWdaParams->wdaMsgParam) ;
14436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14437 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014438 //print a msg, nothing else to do
14439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014440 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014441 return ;
14442}
Jeff Johnson295189b2012-06-20 16:38:30 -070014443/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014444 * FUNCTION: WDA_8023MulticastListReqCallback
14445 * Free memory.
14446 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14447 */
14448void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14449{
14450 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14451
14452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14453 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14454
14455 if(NULL == pWdaParams)
14456 {
14457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14458 "%s: pWdaParams received NULL", __func__);
14459 VOS_ASSERT(0);
14460 return;
14461 }
14462
14463 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14464 {
14465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14466 vos_mem_free(pWdaParams->wdaMsgParam);
14467 vos_mem_free(pWdaParams);
14468 }
14469
14470 return;
14471}
14472/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014473 * FUNCTION: WDA_Process8023MulticastListReq
14474 * Request to WDI to add 8023 Multicast List
14475 */
14476VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14477 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14478{
Jeff Johnson43971f52012-07-17 12:26:56 -070014479 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014480 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14481 tWDA_ReqParams *pWdaParams ;
14482 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014484 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014485 pwdiFltPktSetMcListReqParamsType =
14486 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14487 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14488 ) ;
14489 if(NULL == pwdiFltPktSetMcListReqParamsType)
14490 {
14491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014493 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_mem_free(pwdiFltPktSetMcListReqParamsType);
14501 return VOS_STATUS_E_NOMEM;
14502 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014503
Jeff Johnson295189b2012-06-20 16:38:30 -070014504 //
14505 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14506 //
14507 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014508 pRcvFltMcAddrList->ulMulticastAddrCnt;
14509
14510 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14511 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14512 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14513 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14514
Jeff Johnson295189b2012-06-20 16:38:30 -070014515 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14516 {
14517 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14518 &(pRcvFltMcAddrList->multicastAddr[i]),
14519 sizeof(tSirMacAddr));
14520 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014521 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14522 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014523
Jeff Johnson295189b2012-06-20 16:38:30 -070014524 /* Store Params pass it to WDI */
14525 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14526 pWdaParams->pWdaContext = pWDA;
14527 /* Store param pointer as passed in by caller */
14528 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014529 status = WDI_8023MulticastListReq(
14530 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014531 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014532 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014533 if(IS_WDI_STATUS_FAILURE(status))
14534 {
14535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14536 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14538 vos_mem_free(pWdaParams->wdaMsgParam);
14539 vos_mem_free(pWdaParams);
14540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014541 return CONVERT_WDI2VOS_STATUS(status) ;
14542}
Jeff Johnson295189b2012-06-20 16:38:30 -070014543/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014544 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014545 *
14546 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014547void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014548 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14549 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014550{
14551 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014553 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014554 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014555 if(NULL == pWdaParams)
14556 {
14557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014558 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014559 VOS_ASSERT(0) ;
14560 return ;
14561 }
14562
14563 vos_mem_free(pWdaParams->wdaMsgParam) ;
14564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14565 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014566 //print a msg, nothing else to do
14567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014568 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014569 return ;
14570}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014571
14572/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014573 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14574 * Free memory.
14575 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014576 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014577void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014578 void* pUserData)
14579{
14580 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14581
14582 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14583 "<------ %s, wdiStatus: %d",
14584 __func__, wdiStatus);
14585
14586 if (NULL == pWdaParams)
14587 {
14588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14589 "%s: Invalid pWdaParams pointer", __func__);
14590 VOS_ASSERT(0);
14591 return;
14592 }
14593
14594 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14595 {
14596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14597 vos_mem_free(pWdaParams->wdaMsgParam);
14598 vos_mem_free(pWdaParams);
14599 }
14600
14601 return;
14602}
14603
Jeff Johnson295189b2012-06-20 16:38:30 -070014604/*
14605 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14606 * Request to WDI to set Receive Filters
14607 */
14608VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14609 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14610{
Jeff Johnson43971f52012-07-17 12:26:56 -070014611 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014612 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14613 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14614 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14615 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14616 tWDA_ReqParams *pWdaParams ;
14617 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014619 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014620 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14621 {
14622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014624 VOS_ASSERT(0);
14625 return VOS_STATUS_E_NOMEM;
14626 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014627 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14628 if(NULL == pWdaParams)
14629 {
14630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014632 VOS_ASSERT(0);
14633 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14634 return VOS_STATUS_E_NOMEM;
14635 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014636 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14637 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14638 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14639 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014640 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14641 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14642
14643 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14644 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014645
14646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14647 "FID %d FT %d NParams %d CT %d",
14648 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14649 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14650 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14651 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014652 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14653 {
14654 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14655 &pRcvPktFilterCfg->paramsData[i],
14656 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014658 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014659 pwdiSetRcvPktFilterReqParamsType->
14660 wdiPktFilterCfg.paramsData[i].protocolLayer,
14661 pwdiSetRcvPktFilterReqParamsType->
14662 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014664 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014665 pwdiSetRcvPktFilterReqParamsType->
14666 wdiPktFilterCfg.paramsData[i].dataOffset,
14667 pwdiSetRcvPktFilterReqParamsType->
14668 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014670 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014671 pwdiSetRcvPktFilterReqParamsType->
14672 wdiPktFilterCfg.paramsData[i].compareData[0],
14673 pwdiSetRcvPktFilterReqParamsType->
14674 wdiPktFilterCfg.paramsData[i].compareData[1],
14675 pwdiSetRcvPktFilterReqParamsType->
14676 wdiPktFilterCfg.paramsData[i].compareData[2],
14677 pwdiSetRcvPktFilterReqParamsType->
14678 wdiPktFilterCfg.paramsData[i].compareData[3],
14679 pwdiSetRcvPktFilterReqParamsType->
14680 wdiPktFilterCfg.paramsData[i].compareData[4],
14681 pwdiSetRcvPktFilterReqParamsType->
14682 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014684 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014685 pwdiSetRcvPktFilterReqParamsType->
14686 wdiPktFilterCfg.paramsData[i].dataMask[0],
14687 pwdiSetRcvPktFilterReqParamsType->
14688 wdiPktFilterCfg.paramsData[i].dataMask[1],
14689 pwdiSetRcvPktFilterReqParamsType->
14690 wdiPktFilterCfg.paramsData[i].dataMask[2],
14691 pwdiSetRcvPktFilterReqParamsType->
14692 wdiPktFilterCfg.paramsData[i].dataMask[3],
14693 pwdiSetRcvPktFilterReqParamsType->
14694 wdiPktFilterCfg.paramsData[i].dataMask[4],
14695 pwdiSetRcvPktFilterReqParamsType->
14696 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014697 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014698 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014699 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014700 /* Store Params pass it to WDI */
14701 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14702 pWdaParams->pWdaContext = pWDA;
14703 /* Store param pointer as passed in by caller */
14704 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014705 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014706 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014707 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014708 if(IS_WDI_STATUS_FAILURE(status))
14709 {
14710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14711 "Failure in SetFilter(),free all the memory,status %d ",status);
14712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14713 vos_mem_free(pWdaParams->wdaMsgParam);
14714 vos_mem_free(pWdaParams);
14715 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014716 return CONVERT_WDI2VOS_STATUS(status) ;
14717}
Jeff Johnson295189b2012-06-20 16:38:30 -070014718/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014719 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014720 *
14721 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014722void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014723 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14724 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014725{
14726 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14727 tWDA_CbContext *pWDA;
14728 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14729 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14730 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14731 tANI_U8 i;
14732 vos_msg_t vosMsg;
14733
14734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014735 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014736 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14737
Jeff Johnsone7245742012-09-05 17:12:55 -070014738 if(NULL == pRcvFltPktMatchCntRsp)
14739 {
14740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014741 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014742 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014743 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014744 return ;
14745 }
14746
Jeff Johnson295189b2012-06-20 16:38:30 -070014747 if(NULL == pWdaParams)
14748 {
14749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014750 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014751 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014752 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014753 return ;
14754 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014755 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14756 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014757 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14758 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14759
14760 /* Message Header */
14761 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14762 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14763
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014764 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014765
14766 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14767 {
14768 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14769 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14770 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014771 /* VOS message wrapper */
14772 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14773 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14774 vosMsg.bodyval = 0;
14775 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14776 {
14777 /* free the mem and return */
14778 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14779 }
14780
14781 vos_mem_free(pWdaParams->wdaMsgParam) ;
14782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14783 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014784
14785 return;
14786}
14787/*
14788 * FUNCTION: WDA_FilterMatchCountReqCallback
14789 * Free memory and send RSP back to SME.
14790 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14791 */
14792void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14793{
14794 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14795 vos_msg_t vosMsg;
14796
14797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14798 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14799
14800 if(NULL == pWdaParams)
14801 {
14802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14803 "%s: pWdaParams received NULL", __func__);
14804 VOS_ASSERT(0);
14805 return;
14806 }
14807
14808 /* VOS message wrapper */
14809 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14810 vosMsg.bodyptr = NULL;
14811 vosMsg.bodyval = 0;
14812
14813 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14814 {
14815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14816 vos_mem_free(pWdaParams->wdaMsgParam);
14817 vos_mem_free(pWdaParams);
14818 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
14819 }
14820
14821 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070014822}
Jeff Johnson295189b2012-06-20 16:38:30 -070014823/*
14824 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
14825 * Request to WDI to get PC Filter Match Count
14826 */
14827VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
14828{
Jeff Johnson43971f52012-07-17 12:26:56 -070014829 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014830 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
14831 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
14832 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014834 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014835 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
14836 {
14837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014839 VOS_ASSERT(0);
14840 return VOS_STATUS_E_NOMEM;
14841 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014842 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14843 if(NULL == pWdaParams)
14844 {
14845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014847 VOS_ASSERT(0);
14848 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
14849 return VOS_STATUS_E_NOMEM;
14850 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014851
Yue Ma7f44bbe2013-04-12 11:47:39 -070014852 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
14853 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014854
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014855 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
14856 pRcvFltPktMatchRsp->bssId,
14857 sizeof(wpt_macAddr));
14858
Jeff Johnson295189b2012-06-20 16:38:30 -070014859 /* Store Params pass it to WDI */
14860 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
14861 pWdaParams->pWdaContext = pWDA;
14862 /* Store param pointer as passed in by caller */
14863 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070014864 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014865 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014866 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014867 if(IS_WDI_STATUS_FAILURE(status))
14868 {
14869 /* failure returned by WDI API */
14870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14871 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
14872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14873 vos_mem_free(pWdaParams) ;
14874 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
14875 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
14876 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014877 return CONVERT_WDI2VOS_STATUS(status) ;
14878}
Jeff Johnson295189b2012-06-20 16:38:30 -070014879/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014880 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014881 *
14882 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014883void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014884 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
14885 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014886{
14887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014889 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014890/* WDA_VOS_ASSERT(NULL != pWdaParams); */
14891 if(NULL == pWdaParams)
14892 {
14893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014894 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014895 VOS_ASSERT(0) ;
14896 return ;
14897 }
14898
14899 vos_mem_free(pWdaParams->wdaMsgParam) ;
14900 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14901 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014902 //print a msg, nothing else to do
14903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014904 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014905 return ;
14906}
Jeff Johnson295189b2012-06-20 16:38:30 -070014907/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014908 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
14909 * Free memory.
14910 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
14911 */
14912void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14913{
14914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14915
14916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14917 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14918
14919 if(NULL == pWdaParams)
14920 {
14921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14922 "%s: Invalid pWdaParams pointer", __func__);
14923 VOS_ASSERT(0);
14924 return;
14925 }
14926
14927 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14928 {
14929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14930 vos_mem_free(pWdaParams->wdaMsgParam);
14931 vos_mem_free(pWdaParams);
14932 }
14933
14934 return;
14935}
14936/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014937 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
14938 * Request to WDI to clear Receive Filters
14939 */
14940VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
14941 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
14942{
Jeff Johnson43971f52012-07-17 12:26:56 -070014943 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014944 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
14945 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
14946 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014948 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014949 if(NULL == pwdiRcvFltPktClearReqParamsType)
14950 {
14951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014952 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014953 VOS_ASSERT(0);
14954 return VOS_STATUS_E_NOMEM;
14955 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014956 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14957 if(NULL == pWdaParams)
14958 {
14959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014960 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014961 VOS_ASSERT(0);
14962 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
14963 return VOS_STATUS_E_NOMEM;
14964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014965 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
14966 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014967 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
14968 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
14969 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
14970 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014971
Yue Ma7f44bbe2013-04-12 11:47:39 -070014972 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014973 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014974 /* Store Params pass it to WDI */
14975 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
14976 pWdaParams->pWdaContext = pWDA;
14977 /* Store param pointer as passed in by caller */
14978 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014979 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014980 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014981 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014982 if(IS_WDI_STATUS_FAILURE(status))
14983 {
14984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14985 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
14986 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080014987 vos_mem_free(pWdaParams->wdaMsgParam);
14988 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014989 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014990 return CONVERT_WDI2VOS_STATUS(status) ;
14991}
14992#endif // WLAN_FEATURE_PACKET_FILTERING
14993
Jeff Johnson295189b2012-06-20 16:38:30 -070014994/*
14995 * FUNCTION: WDA_ProcessSetPowerParamsReq
14996 * Request to WDI to set power params
14997 */
14998VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
14999 tSirSetPowerParamsReq *pPowerParams)
15000{
Jeff Johnson43971f52012-07-17 12:26:56 -070015001 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015002 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
15003 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015004 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015006 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015007 if(NULL == pwdiSetPowerParamsReqInfo)
15008 {
15009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015010 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015011 VOS_ASSERT(0);
15012 return VOS_STATUS_E_NOMEM;
15013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015014 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15015 if(NULL == pWdaParams)
15016 {
15017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015018 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015019 VOS_ASSERT(0);
15020 vos_mem_free(pwdiSetPowerParamsReqInfo);
15021 return VOS_STATUS_E_NOMEM;
15022 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015023
Jeff Johnson295189b2012-06-20 16:38:30 -070015024
15025 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
15026 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070015027 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
15028 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070015029 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
15030 pPowerParams->uListenInterval;
15031 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
15032 pPowerParams->uBcastMcastFilter;
15033 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
15034 pPowerParams->uEnableBET;
15035 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
15036 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070015037 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
15038 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015039 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
15040 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015041
Jeff Johnson295189b2012-06-20 16:38:30 -070015042 /* Store Params pass it to WDI */
15043 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
15044 pWdaParams->pWdaContext = pWDA;
15045 /* Store param pointer as passed in by caller */
15046 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015047 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015048 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015049 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015050 if(IS_WDI_STATUS_FAILURE(status))
15051 {
15052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15053 "Failure in Set power params REQ WDI API, free all the memory " );
15054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15055 vos_mem_free(pWdaParams->wdaMsgParam);
15056 pWdaParams->wdaWdiApiMsgParam = NULL;
15057 pWdaParams->wdaMsgParam = NULL;
15058 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015059 return CONVERT_WDI2VOS_STATUS(status) ;
15060}
15061
15062/*
15063 * FUNCTION: WDA_SetTmLevelRspCallback
15064 * Set TM Level response
15065 */
15066void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
15067{
15068 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15069
15070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015071 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015072
15073 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) ;
15078 return ;
15079 }
15080
15081 /* Dose not need to send notification to upper layer
15082 * Just free allocated resources */
15083 if( pWdaParams != NULL )
15084 {
15085 if( pWdaParams->wdaWdiApiMsgParam != NULL )
15086 {
15087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15088 }
15089 vos_mem_free(pWdaParams->wdaMsgParam) ;
15090 vos_mem_free(pWdaParams) ;
15091 }
15092}
15093
15094/*
15095 * FUNCTION: WDA_ProcessSetTmLevelReq
15096 * Set TM Level request
15097 */
15098VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
15099 tAniSetTmLevelReq *setTmLevelReq)
15100{
15101 WDI_Status status = WDI_STATUS_SUCCESS ;
15102 tWDA_ReqParams *pWdaParams ;
15103 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
15104 (WDI_SetTmLevelReqType *)vos_mem_malloc(
15105 sizeof(WDI_SetTmLevelReqType)) ;
15106 if(NULL == wdiSetTmLevelReq)
15107 {
15108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015109 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015110 VOS_ASSERT(0);
15111 return VOS_STATUS_E_NOMEM;
15112 }
15113
15114 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15115 if(NULL == pWdaParams)
15116 {
15117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015118 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015119 VOS_ASSERT(0);
15120 vos_mem_free(wdiSetTmLevelReq);
15121 return VOS_STATUS_E_NOMEM;
15122 }
15123
15124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015125 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015126
15127 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
15128 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
15129
15130 pWdaParams->pWdaContext = pWDA;
15131 pWdaParams->wdaMsgParam = setTmLevelReq;
15132 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
15133
15134 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
15135 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
15136
15137 if(IS_WDI_STATUS_FAILURE(status))
15138 {
15139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080015140 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070015141 vos_mem_free(pWdaParams->wdaMsgParam) ;
15142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15143 vos_mem_free(pWdaParams) ;
15144 }
15145
15146 return CONVERT_WDI2VOS_STATUS(status) ;
15147}
15148
15149VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
15150 tpTxControlParams pTxCtrlParam)
15151{
15152 VOS_STATUS wdaStatus;
15153
15154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015155 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015156 if( pTxCtrlParam == NULL )
15157 {
15158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015159 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015160 return VOS_STATUS_E_FAILURE;
15161 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015162 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
15163 {
15164 wdaStatus = WDA_SuspendDataTx(pWDA);
15165 }
15166 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
15167 {
15168 wdaStatus = WDA_ResumeDataTx(pWDA);
15169 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015170 return wdaStatus;
15171}
15172
15173 /* FUNCTION WDA_featureCapsExchange
15174 * WDA API to invoke capability exchange between host and FW.
15175 */
15176void WDA_featureCapsExchange(v_PVOID_t pVosContext)
15177{
15178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015179 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015180 WDI_featureCapsExchangeReq( NULL, pVosContext);
15181}
15182
Yathish9f22e662012-12-10 14:21:35 -080015183/* FUNCTION WDA_disableCapablityFeature
15184 * WDA API to diable Active mode offload in host.
15185 */
15186void WDA_disableCapablityFeature(tANI_U8 feature_index)
15187{
15188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15189 "%s:enter", __func__ );
15190 WDI_disableCapablityFeature(feature_index);
15191}
15192
Jeff Johnson295189b2012-06-20 16:38:30 -070015193 /* FUNCTION WDA_getHostWlanFeatCaps
15194 * Wrapper for WDI API, that will return if the feature (enum value).passed
15195 * to this API is supported or not in Host
15196 * return value
15197 * 0 - implies feature is NOT Supported
15198 * any non zero value - implies feature is SUPPORTED
15199 */
15200tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15201{
15202 return WDI_getHostWlanFeatCaps(featEnumValue);
15203}
15204
15205 /* FUNCTION WDA_getFwWlanFeatCaps
15206 * Wrapper for WDI API, that will return if the feature (enum value).passed
15207 * to this API is supported or not in FW
15208 * return value
15209 * 0 - implies feature is NOT Supported
15210 * any non zero value - implies feature is SUPPORTED
15211 */
15212tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15213{
15214 return WDI_getFwWlanFeatCaps(featEnumValue);
15215}
15216
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015217
Jeff Johnson295189b2012-06-20 16:38:30 -070015218/*
15219 * FUNCTION: WDA_shutdown
15220 * Shutdown WDA/WDI without handshaking with Riva.
15221 * Synchronous function.
15222 */
15223VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15224{
15225 WDI_Status wdiStatus;
15226 //tANI_U8 eventIdx = 0;
15227 VOS_STATUS status = VOS_STATUS_SUCCESS;
15228 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015229 if (NULL == pWDA)
15230 {
15231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015232 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015233 VOS_ASSERT(0);
15234 return VOS_STATUS_E_FAILURE;
15235 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015236 /* FTM mode stay START_STATE */
15237 if( (WDA_READY_STATE != pWDA->wdaState) &&
15238 (WDA_INIT_STATE != pWDA->wdaState) &&
15239 (WDA_START_STATE != pWDA->wdaState) )
15240 {
15241 VOS_ASSERT(0);
15242 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015243
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015244 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15245 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015246 {
15247 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015248 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015249 }
Leo Chang9d76f622013-08-23 16:34:52 -070015250 else
15251 {
15252 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15253 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015254
Jeff Johnson295189b2012-06-20 16:38:30 -070015255 /* call WDI shutdown */
15256 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015257 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15258 {
15259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15260 "error in WDA Stop" );
15261 status = VOS_STATUS_E_FAILURE;
15262 }
15263 /* WDI stop is synchrnous, shutdown is complete when it returns */
15264 pWDA->wdaState = WDA_STOP_STATE;
15265
Jeff Johnson295189b2012-06-20 16:38:30 -070015266 /* shutdown should perform the stop & close actions. */
15267 /* Destroy the event */
15268 status = vos_event_destroy(&pWDA->txFrameEvent);
15269 if(!VOS_IS_STATUS_SUCCESS(status))
15270 {
15271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015272 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015273 status = VOS_STATUS_E_FAILURE;
15274 }
15275 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15276 if(!VOS_IS_STATUS_SUCCESS(status))
15277 {
15278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015279 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015280 status = VOS_STATUS_E_FAILURE;
15281 }
15282 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15283 if(!VOS_IS_STATUS_SUCCESS(status))
15284 {
15285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015286 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015287 status = VOS_STATUS_E_FAILURE;
15288 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015289 /* free WDA context */
15290 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15291 if ( !VOS_IS_STATUS_SUCCESS(status) )
15292 {
15293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15294 "error in WDA close " );
15295 status = VOS_STATUS_E_FAILURE;
15296 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015297 return status;
15298}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015299
Jeff Johnsone7245742012-09-05 17:12:55 -070015300/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015301 * FUNCTION: WDA_setNeedShutdown
15302 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015303 */
15304
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015305void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015306{
15307 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015308 if(pWDA == NULL)
15309 {
15310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15311 "Could not get the WDA Context pointer" );
15312 return;
15313 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015314 pWDA->needShutdown = TRUE;
15315}
15316/*
15317 * FUNCTION: WDA_needShutdown
15318 * WDA needs a shutdown
15319 */
15320
15321v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15322{
15323 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015324 if(pWDA == NULL)
15325 {
15326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15327 "Could not get the WDA Context pointer" );
15328 return 0;
15329 }
15330 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015331}
15332
Mohit Khanna4a70d262012-09-11 16:30:12 -070015333#ifdef WLAN_FEATURE_11AC
15334/*
15335 * FUNCTION: WDA_SetBeaconFilterReqCallback
15336 *
15337 */
15338void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15339{
15340 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015342 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015343 if(NULL == pWdaParams)
15344 {
15345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015346 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015347 VOS_ASSERT(0) ;
15348 return ;
15349 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015350
Mohit Khanna4a70d262012-09-11 16:30:12 -070015351 vos_mem_free(pWdaParams->wdaMsgParam) ;
15352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15353 vos_mem_free(pWdaParams) ;
15354 /*
15355 * No respone required for SetBeaconFilter req so just free the request
15356 * param here
15357 */
15358
15359 return ;
15360}
15361
15362VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15363 tUpdateVHTOpMode *pData)
15364{
15365 WDI_Status status = WDI_STATUS_SUCCESS ;
15366 tWDA_ReqParams *pWdaParams ;
15367 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15368 sizeof(WDI_UpdateVHTOpMode)) ;
15369 if(NULL == wdiTemp)
15370 {
15371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015372 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015373 VOS_ASSERT(0);
15374 return VOS_STATUS_E_NOMEM;
15375 }
15376 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15377 if(NULL == pWdaParams)
15378 {
15379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015380 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015381 VOS_ASSERT(0);
15382 vos_mem_free(wdiTemp);
15383 return VOS_STATUS_E_NOMEM;
15384 }
15385
15386 wdiTemp->opMode = pData->opMode;
15387 wdiTemp->staId = pData->staId;
15388
15389 pWdaParams->pWdaContext = pWDA;
15390 /* Store Req pointer, as this will be used for response */
15391 pWdaParams->wdaMsgParam = (void *)pData;
15392 /* store Params pass it to WDI */
15393 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15394
15395 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15396
15397 if(IS_WDI_STATUS_FAILURE(status))
15398 {
15399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15400 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15402 vos_mem_free(pWdaParams->wdaMsgParam);
15403 vos_mem_free(pWdaParams);
15404 }
15405 return CONVERT_WDI2VOS_STATUS(status) ;
15406}
15407#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015408
15409/*==========================================================================
15410 FUNCTION WDA_TransportChannelDebug
15411
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015412 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015413 Display Transport Channel debugging information
15414 User may request to display DXE channel snapshot
15415 Or if host driver detects any abnormal stcuk may display
15416
15417 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015418 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015419 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053015420 debugFlags : Enable stall detect features
15421 defined by WPAL_DeviceDebugFlags
15422 These features may effect
15423 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015424
15425 RETURN VALUE
15426 NONE
15427
15428===========================================================================*/
15429void WDA_TransportChannelDebug
15430(
schang6295e542013-03-12 15:31:23 -070015431 tpAniSirGlobal pMac,
15432 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053015433 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015434)
15435{
Mihir Shete40a55652014-03-02 14:14:47 +053015436 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015437 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015438}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015439
15440/*==========================================================================
15441 FUNCTION WDA_SetEnableSSR
15442
15443 DESCRIPTION
15444 API to enable/disable SSR on WDI timeout
15445
15446 PARAMETERS
15447 enableSSR : enable/disable SSR
15448
15449 RETURN VALUE
15450 NONE
15451
15452===========================================================================*/
15453void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15454{
15455 WDI_SetEnableSSR(enableSSR);
15456}
Leo Chang9056f462013-08-01 19:21:11 -070015457
15458#ifdef FEATURE_WLAN_LPHB
15459/*
15460 * FUNCTION: WDA_LPHBconfRspCallback
15461 *
15462 */
15463void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15464{
15465 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15466
15467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15468 "<------ %s " ,__func__);
15469 if (NULL == pWdaParams)
15470 {
15471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15472 "%s: pWdaParams received NULL", __func__);
15473 VOS_ASSERT(0) ;
15474 return ;
15475 }
15476
15477 /* Do not need to send notification to upper layer
15478 * Just free allocated resources */
15479 if (pWdaParams != NULL)
15480 {
15481 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15482 {
15483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15484 }
15485 vos_mem_free(pWdaParams->wdaMsgParam) ;
15486 vos_mem_free(pWdaParams) ;
15487 }
15488
15489 return;
15490}
15491
15492/*
15493 * FUNCTION: WDA_ProcessLPHBConfReq
15494 *
15495 */
15496VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15497 tSirLPHBReq *pData)
15498{
15499 WDI_Status wdiStatus;
15500 tWDA_ReqParams *pWdaParams ;
15501
15502 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15503 "------> %s " , __func__);
15504
15505 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15506 if (NULL == pWdaParams)
15507 {
15508 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15509 "%s: VOS MEM Alloc Failure", __func__);
15510 VOS_ASSERT(0);
15511 vos_mem_free(pData);
15512 return VOS_STATUS_E_NOMEM;
15513 }
15514
15515 pWdaParams->pWdaContext = pWDA;
15516 pWdaParams->wdaMsgParam = (void *)pData;
15517 pWdaParams->wdaWdiApiMsgParam = NULL;
15518
15519 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15520 if (WDI_STATUS_PENDING == wdiStatus)
15521 {
15522 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15523 "Pending received for %s:%d ", __func__, __LINE__);
15524 }
15525 else if (WDI_STATUS_SUCCESS != wdiStatus)
15526 {
15527 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15528 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15529 vos_mem_free(pWdaParams->wdaMsgParam);
15530 vos_mem_free(pWdaParams);
15531 }
15532
15533 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15534}
15535#endif /* FEATURE_WLAN_LPHB */
15536