blob: ce2b9833b0cae8b0ba1cb072bcf14b98a1deeec5 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * Copyright (c) 2012-2014 Qualcomm Atheros, Inc.
24 * All Rights Reserved.
25 * Qualcomm Atheros Confidential and Proprietary.
26 *
27 */
28
Jeff Johnson295189b2012-06-20 16:38:30 -070029
30/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070031 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070032 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070033 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070034 The functions externalized by this module are to be called ONLY by other
35 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070036 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070037 Are listed for each API below.
38
Jeff Johnson295189b2012-06-20 16:38:30 -070039 Copyright (c) 2010-2011 QUALCOMM Incorporated.
40 All Rights Reserved.
41 Qualcomm Confidential and Proprietary
42===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070043/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070044 EDIT HISTORY FOR FILE
45
Jeff Johnson295189b2012-06-20 16:38:30 -070046 This section contains comments describing changes made to the module.
47 Notice that changes are listed in reverse chronological order.
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 $Header$$DateTime$$Author$
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 when who what, where, why
52---------- --- -------------------------------------------------
5310/05/2011 haparna Adding support for Keep Alive Feature
542010-12-30 smiryala UMAC convergence changes
552010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
56===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070057#include "vos_mq.h"
58#include "vos_api.h"
59#include "vos_packet.h"
60#include "vos_nvitem.h"
61#include "sirApi.h"
62#include "wlan_qct_pal_packet.h"
63#include "wlan_qct_wda.h"
64#include "wlan_qct_wda_msg.h"
65#include "wlan_qct_wdi_cfg.h"
66#include "wlan_qct_wdi.h"
67#include "wlan_qct_wdi_ds.h"
68#include "wlan_hal_cfg.h"
69/**********************/
70#include "wniApi.h"
71#include "cfgApi.h"
72#include "limApi.h"
73#include "wlan_qct_tl.h"
74#include "wlan_qct_tli_ba.h"
75#include "limUtils.h"
76#include "btcApi.h"
77#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070078#include "pttMsgApi.h"
79#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070080/* Used MACRO's */
81/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080082#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070083#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
84#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070085#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070086#define CONVERT_WDI2SIR_STATUS(x) \
87 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
88
89#define IS_WDI_STATUS_FAILURE(status) \
90 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070091#define CONVERT_WDI2VOS_STATUS(x) \
92 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
93
94/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070095#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070096#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define WDA_GET_BA_TXFLAG(a, b, c) \
98 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
99
100#define WDA_SET_BA_TXFLAG(a, b, c) \
101 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
102
103#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
104 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700105#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
106 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700107/* timer related Macros */
108#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
109 tx_timer_create(a, b, c, d, e, f, g)
110#define WDA_START_TIMER(a) tx_timer_activate(a)
111#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
112#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700113#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700114
115#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
116 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800121#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700122
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700123#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700124
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700125#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700126#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
127 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
128 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
129
130#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
131#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800132#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
133
Jeff Johnson295189b2012-06-20 16:38:30 -0700134/* extern declarations */
135extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700136extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
137
Jeff Johnson295189b2012-06-20 16:38:30 -0700138/* forward declarations */
139void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
140 void *pBodyptr, tANI_U32 bodyVal) ;
141VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
142 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700143VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
144VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
145
146extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
147 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
148void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
149 tANI_U32 *pConfig) ;
150void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
151 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
152void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
153 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
154void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
155 void* pUserData ) ;
156static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
157static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
158void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800159void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700160void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161#ifdef WLAN_FEATURE_VOWIFI_11R
162VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
163#endif /* WLAN_FEATURE_VOWIFI_11R */
164
Jeff Johnson295189b2012-06-20 16:38:30 -0700165void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
166void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
167VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700168#ifdef FEATURE_WLAN_SCAN_PNO
169static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
170static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
171static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
172#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700173#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700174VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700175void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
176void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
177void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
178#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700179#ifdef WLAN_FEATURE_PACKET_FILTERING
180static VOS_STATUS WDA_Process8023MulticastListReq (
181 tWDA_CbContext *pWDA,
182 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
183 );
184static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
185 tWDA_CbContext *pWDA,
186 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
187 );
188static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
189 tWDA_CbContext *pWDA,
190 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
191 );
192static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltPktClearParam *pRcvFltPktClearParam
195 );
196#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700197VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700198static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
199 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700200VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
201 v_U8_t *pDefaultKeyId,
202 v_U8_t *pNumKeys,
203 WDI_KeysType *pWdiKeys );
204
205#ifdef WLAN_FEATURE_GTK_OFFLOAD
206static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
207static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
208#endif // WLAN_FEATURE_GTK_OFFLOAD
209
210VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
211 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700212#ifdef WLAN_FEATURE_11AC
213VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
214 tUpdateVHTOpMode *pData);
215#endif
Leo Chang9056f462013-08-01 19:21:11 -0700216
217#ifdef FEATURE_WLAN_LPHB
218VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
219 tSirLPHBReq *pData);
220#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700221/*
222 * FUNCTION: WDA_open
223 * Allocate the WDA context
224 */
225VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
226 tMacOpenParameters *pMacParams )
227{
228 tWDA_CbContext *wdaContext;
229 VOS_STATUS status;
230 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700231 /* Allocate WDA context */
232 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
233 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
234 if(!VOS_IS_STATUS_SUCCESS(status))
235 {
236 return VOS_STATUS_E_NOMEM;
237 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700238 /*__asm int 3;*/
239 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
240
241 /* Initialize data structures */
242 wdaContext->pVosContext = pVosContext;
243 wdaContext->wdaState = WDA_INIT_STATE;
244 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
245
246 /* Initialize WDA-WDI synchronization event */
247 status = vos_event_init(&wdaContext->wdaWdiEvent);
248 if(!VOS_IS_STATUS_SUCCESS(status))
249 {
250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800251 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800252 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700253 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700254 /* Init Frame transfer event */
255 status = vos_event_init(&wdaContext->txFrameEvent);
256 if(!VOS_IS_STATUS_SUCCESS(status))
257 {
258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800259 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800260 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700261 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700262 status = vos_event_init(&wdaContext->suspendDataTxEvent);
263 if(!VOS_IS_STATUS_SUCCESS(status))
264 {
265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800266 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800267 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
270 if(!VOS_IS_STATUS_SUCCESS(status))
271 {
272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800273 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800274 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700277 wdaContext->driverMode = pMacParams->driverType;
278 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
279 &wdiDevCapability, pMacParams->driverType))
280 {
281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
282 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800283 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700284 }
285 else
286 {
287 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
288 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
289 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700290 /* update max STA in WDA used for BA */
291 wdaContext->wdaMaxSta = pMacParams->maxStation;
292 /* store the frameTransRequired flag in wdaContext, to send this to HAL
293 * in WDA_Start
294 */
295 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
296 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700297 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800298
299error:
300 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
301 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302}
303
Jeff Johnson295189b2012-06-20 16:38:30 -0700304/*
305 * FUNCTION: WDA_preStart
306 * Trigger DAL-AL to start CFG download
307 */
308VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
309{
310 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
311 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700312 /*
313 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
314 */
315 wdaMsg.type = WNI_CFG_DNLD_REQ ;
316 wdaMsg.bodyptr = NULL;
317 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 /* post the message.. */
319 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
320 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
321 {
322 vosStatus = VOS_STATUS_E_BADMSG;
323 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 return( vosStatus );
325}
Jeff Johnson295189b2012-06-20 16:38:30 -0700326/*
327 * FUNCTION: WDA_wdiStartCallback
328 * Once WDI_Start is finished, WDI start callback will be called by WDI
329 * to indicate completion of WDI_Start.
330 */
331void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
332 void *pVosContext)
333{
334 tWDA_CbContext *wdaContext;
335 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 if (NULL == pVosContext)
337 {
338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700339 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700340 return;
341 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700342 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
343 if (NULL == wdaContext)
344 {
345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700346 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700347 return;
348 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700349 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
350 {
351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700352 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700353 }
354 else
355 {
356 wdaContext->wdaState = WDA_START_STATE;
357 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700358 /* extract and save version information from the Start Response */
359 wdaContext->wcnssWlanCompiledVersion.major =
360 wdiRspParams->wlanCompiledVersion.major;
361 wdaContext->wcnssWlanCompiledVersion.minor =
362 wdiRspParams->wlanCompiledVersion.minor;
363 wdaContext->wcnssWlanCompiledVersion.version =
364 wdiRspParams->wlanCompiledVersion.version;
365 wdaContext->wcnssWlanCompiledVersion.revision =
366 wdiRspParams->wlanCompiledVersion.revision;
367 wdaContext->wcnssWlanReportedVersion.major =
368 wdiRspParams->wlanReportedVersion.major;
369 wdaContext->wcnssWlanReportedVersion.minor =
370 wdiRspParams->wlanReportedVersion.minor;
371 wdaContext->wcnssWlanReportedVersion.version =
372 wdiRspParams->wlanReportedVersion.version;
373 wdaContext->wcnssWlanReportedVersion.revision =
374 wdiRspParams->wlanReportedVersion.revision;
375 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
376 wdiRspParams->wcnssSoftwareVersion,
377 sizeof(wdaContext->wcnssSoftwareVersionString));
378 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
379 wdiRspParams->wcnssHardwareVersion,
380 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 /* Notify WDA_start that WDI_Start has completed */
382 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700383 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700384 {
385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700386 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700387 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 return;
389}
390
Jeff Johnson295189b2012-06-20 16:38:30 -0700391/*
392 * FUNCTION: WDA_start
393 * Prepare TLV configuration and call WDI_Start.
394 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700395VOS_STATUS WDA_start(v_PVOID_t pVosContext)
396{
397 tWDA_CbContext *wdaContext;
398 VOS_STATUS status;
399 WDI_Status wdiStatus;
400 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700401 if (NULL == pVosContext)
402 {
403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700404 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700405 return VOS_STATUS_E_FAILURE;
406 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700407 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
408 if (NULL == wdaContext)
409 {
410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700411 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700412 return VOS_STATUS_E_FAILURE;
413 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 /* Non-FTM mode, WDA status for START must be INIT
415 * FTM mode, WDA Status for START can be INIT or STOP */
416 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
417 (WDA_STOP_STATE != wdaContext->wdaState) )
418 {
419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
420 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700421 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 return VOS_STATUS_E_FAILURE;
423 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 /* initialize the wdiStartParam. Note that we can create this on
425 the stack since we won't exit until WDI_Start() completes or
426 times out */
427 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 /* prepare the config TLV for the WDI */
430 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
431 if ( !VOS_IS_STATUS_SUCCESS(status) )
432 {
433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700434 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700435 return VOS_STATUS_E_FAILURE;
436 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700437 /* note from here onwards if an error occurs we must
438 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
440 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
441 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 /* initialize the WDA-WDI synchronization event */
443 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 /* call WDI start */
445 wdiStatus = WDI_Start(&wdiStartParam,
446 (WDI_StartRspCb)WDA_wdiStartCallback,
447 (v_VOID_t *)pVosContext);
448 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
449 {
450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700451 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 vos_mem_free(wdiStartParam.pConfigBuffer);
453 return VOS_STATUS_E_FAILURE;
454 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 /* wait for WDI start to invoke our callback */
456 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
457 WDA_WDI_START_TIMEOUT );
458 if ( !VOS_IS_STATUS_SUCCESS(status) )
459 {
460 if ( VOS_STATUS_E_TIMEOUT == status )
461 {
462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700463 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 }
465 else
466 {
467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
468 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700469 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 }
471 vos_mem_free(wdiStartParam.pConfigBuffer);
472 return VOS_STATUS_E_FAILURE;
473 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700474 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700475 /* we no longer need the config TLV */
476 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 /* if we are not in the START state then WDI_Start() failed */
478 if (WDA_START_STATE != wdaContext->wdaState)
479 {
480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700481 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 return VOS_STATUS_E_FAILURE;
483 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700484 /* FTM mode does not need to monitor BA activity */
485 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
486 {
487 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800488 if(VOS_STATUS_SUCCESS == status)
489 {
490 wdaContext->wdaTimersCreated = VOS_TRUE;
491 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700492 }
Leo Chang9d76f622013-08-23 16:34:52 -0700493 else
494 {
495 vos_event_init(&wdaContext->ftmStopDoneEvent);
496 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700497 return status;
498}
499
Jeff Johnson295189b2012-06-20 16:38:30 -0700500/*
501 * FUNCTION: WDA_prepareConfigTLV
502 * Function to prepare CFG for DAL(WDA)
503 */
504VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
505 WDI_StartReqParamsType *wdiStartParams )
506{
507 /* get pMac to acess CFG data base */
508 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
509 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
510 tHalCfg *tlvStruct = NULL ;
511 tANI_U8 *tlvStructStart = NULL ;
512 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
513 v_PVOID_t *configParam;
514 tANI_U32 configParamSize;
515 tANI_U32 *configDataValue;
516 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700517 tANI_U8 i;
518
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 if ((NULL == pMac)||(NULL == wdaContext))
520 {
521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700522 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 VOS_ASSERT(0);
524 return VOS_STATUS_E_FAILURE;
525 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
527 WNI_CFG_STA_ID_LEN +
528 WNI_CFG_EDCA_WME_ACBK_LEN +
529 WNI_CFG_EDCA_WME_ACBE_LEN +
530 WNI_CFG_EDCA_WME_ACVI_LEN +
531 WNI_CFG_EDCA_WME_ACVO_LEN +
532 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 /* malloc memory for all configs in one shot */
534 configParam = vos_mem_malloc(configParamSize);
535
536 if(NULL == configParam )
537 {
538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700539 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700540 VOS_ASSERT(0) ;
541 return VOS_STATUS_E_NOMEM;
542 }
543 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700544 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 tlvStruct = (tHalCfg *)configParam;
546 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 /* TODO: Remove Later */
548 /* QWLAN_HAL_CFG_STA_ID */
549 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
550 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
551 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
552 eSIR_SUCCESS)
553 {
554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
555 "Failed to get value for WNI_CFG_STA_ID");
556 goto handle_failure;
557 }
558 tlvStruct->length = strLength ;
559 /* calculate the pad bytes to have the CFG in aligned format */
560 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
561 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700562 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
563 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700564 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
565 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
566 tlvStruct->length = sizeof(tANI_U32);
567 configDataValue = (tANI_U32 *)(tlvStruct + 1);
568 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
569 != eSIR_SUCCESS)
570 {
571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
572 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
573 goto handle_failure;
574 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700575 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
576 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700577 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
578 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
579 tlvStruct->length = sizeof(tANI_U32);
580 configDataValue = (tANI_U32 *)(tlvStruct + 1);
581 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
582 eSIR_SUCCESS)
583 {
584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
585 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
586 goto handle_failure;
587 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700588 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
589 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700590 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
591 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
592 tlvStruct->length = sizeof(tANI_U32);
593 configDataValue = (tANI_U32 *)(tlvStruct + 1);
594 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
595 != eSIR_SUCCESS)
596 {
597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
598 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
599 goto handle_failure;
600 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700601 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
602 + sizeof(tHalCfg) + tlvStruct->length)) ;
603
604 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
605 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
606 tlvStruct->length = sizeof(tANI_U32);
607 configDataValue = (tANI_U32 *)(tlvStruct + 1);
608 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
609 configDataValue ) != eSIR_SUCCESS)
610 {
611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
612 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
613 goto handle_failure;
614 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700615 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
616 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700617 /* QWLAN_HAL_CFG_CAL_PERIOD */
618 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
619 tlvStruct->length = sizeof(tANI_U32);
620 configDataValue = (tANI_U32 *)(tlvStruct + 1);
621 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
622 != eSIR_SUCCESS)
623 {
624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
625 "Failed to get value for WNI_CFG_CAL_PERIOD");
626 goto handle_failure;
627 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700628 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
629 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700630 /* QWLAN_HAL_CFG_CAL_CONTROL */
631 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
632 tlvStruct->length = sizeof(tANI_U32);
633 configDataValue = (tANI_U32 *)(tlvStruct + 1);
634 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
635 != eSIR_SUCCESS)
636 {
637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
638 "Failed to get value for WNI_CFG_CAL_CONTROL");
639 goto handle_failure;
640 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700641 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
642 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700643 /* QWLAN_HAL_CFG_PROXIMITY */
644 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
645 tlvStruct->length = sizeof(tANI_U32);
646 configDataValue = (tANI_U32 *)(tlvStruct + 1);
647 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
648 != eSIR_SUCCESS)
649 {
650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
651 "Failed to get value for WNI_CFG_PROXIMITY");
652 goto handle_failure;
653 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700654 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
655 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700656 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
657 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
658 tlvStruct->length = sizeof(tANI_U32);
659 configDataValue = (tANI_U32 *)(tlvStruct + 1);
660 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
661 != eSIR_SUCCESS)
662 {
663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
664 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
665 goto handle_failure;
666 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700667 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
668 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700669 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
670 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
671 tlvStruct->length = sizeof(tANI_U32);
672 configDataValue = (tANI_U32 *)(tlvStruct + 1);
673 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
674 eSIR_SUCCESS)
675 {
676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
677 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
678 goto handle_failure;
679 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
681 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700682 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
683 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
684 tlvStruct->length = sizeof(tANI_U32);
685 configDataValue = (tANI_U32 *)(tlvStruct + 1);
686 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
687 configDataValue ) != eSIR_SUCCESS)
688 {
689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
690 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
691 goto handle_failure;
692 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700693 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
694 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700695 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
696 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
697 tlvStruct->length = sizeof(tANI_U32);
698 configDataValue = (tANI_U32 *)(tlvStruct + 1);
699 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
700 eSIR_SUCCESS)
701 {
702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
703 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
704 goto handle_failure;
705 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700706 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
707 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700708 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
709 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
710 tlvStruct->length = sizeof(tANI_U32);
711 configDataValue = (tANI_U32 *)(tlvStruct + 1);
712 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
713 eSIR_SUCCESS)
714 {
715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
716 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
717 goto handle_failure;
718 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700719 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
720 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700721 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
722 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
723 tlvStruct->length = sizeof(tANI_U32);
724 configDataValue = (tANI_U32 *)(tlvStruct + 1);
725 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
726 eSIR_SUCCESS)
727 {
728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
729 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
730 goto handle_failure;
731 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700732 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
733 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700734 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
735 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
736 tlvStruct->length = sizeof(tANI_U32);
737 configDataValue = (tANI_U32 *)(tlvStruct + 1);
738 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
739 configDataValue ) != eSIR_SUCCESS)
740 {
741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
742 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
743 goto handle_failure;
744 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700745 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
746 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700747 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
748 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
749 tlvStruct->length = sizeof(tANI_U32);
750 configDataValue = (tANI_U32 *)(tlvStruct + 1);
751 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
752 configDataValue ) != eSIR_SUCCESS)
753 {
754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
755 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
756 goto handle_failure;
757 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700758 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
759 + sizeof(tHalCfg) + tlvStruct->length));
760
761 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
762 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
763 tlvStruct->length = sizeof(tANI_U32);
764 configDataValue = (tANI_U32 *)(tlvStruct + 1);
765 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
766 configDataValue ) != eSIR_SUCCESS)
767 {
768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
769 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
770 goto handle_failure;
771 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700772 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
773 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700774 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
775 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
776 tlvStruct->length = sizeof(tANI_U32);
777 configDataValue = (tANI_U32 *)(tlvStruct + 1);
778 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
779 configDataValue ) != eSIR_SUCCESS)
780 {
781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
782 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
783 goto handle_failure;
784 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700785 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
786 + sizeof(tHalCfg) + tlvStruct->length));
787
788 /* QWLAN_HAL_CFG_FIXED_RATE */
789 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
790 tlvStruct->length = sizeof(tANI_U32);
791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
792 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
793 != eSIR_SUCCESS)
794 {
795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
796 "Failed to get value for WNI_CFG_FIXED_RATE");
797 goto handle_failure;
798 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700799 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
800 + sizeof(tHalCfg) + tlvStruct->length));
801
802 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
803 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
804 tlvStruct->length = sizeof(tANI_U32);
805 configDataValue = (tANI_U32 *)(tlvStruct + 1);
806 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
807 != eSIR_SUCCESS)
808 {
809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
810 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
811 goto handle_failure;
812 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700813 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
814 + sizeof(tHalCfg) + tlvStruct->length));
815
816 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
817 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
818 tlvStruct->length = sizeof(tANI_U32);
819 configDataValue = (tANI_U32 *)(tlvStruct + 1);
820 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
821 configDataValue ) != eSIR_SUCCESS)
822 {
823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
824 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
825 goto handle_failure;
826 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700827 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
828 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700829 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
830 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
831 tlvStruct->length = sizeof(tANI_U32);
832 configDataValue = (tANI_U32 *)(tlvStruct + 1);
833 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
834 configDataValue ) != eSIR_SUCCESS)
835 {
836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
837 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
838 goto handle_failure;
839 }
840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
841 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700842 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
843 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
844 tlvStruct->length = sizeof(tANI_U32);
845 configDataValue = (tANI_U32 *)(tlvStruct + 1);
846 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
847 configDataValue ) != eSIR_SUCCESS)
848 {
849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
850 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
851 goto handle_failure;
852 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700853 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
854 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700855 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
856 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
857 tlvStruct->length = sizeof(tANI_U32);
858 configDataValue = (tANI_U32 *)(tlvStruct + 1);
859 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
860 configDataValue ) != eSIR_SUCCESS)
861 {
862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
863 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
864 goto handle_failure;
865 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700866 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
867 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700868 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
869 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
870 tlvStruct->length = sizeof(tANI_U32);
871 configDataValue = (tANI_U32 *)(tlvStruct + 1);
872 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
873 configDataValue ) != eSIR_SUCCESS)
874 {
875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
876 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
877 goto handle_failure;
878 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700879 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
880 + sizeof(tHalCfg) + tlvStruct->length);
881
Jeff Johnson295189b2012-06-20 16:38:30 -0700882 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
883 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
884 tlvStruct->length = sizeof(tANI_U32);
885 configDataValue = (tANI_U32 *)(tlvStruct + 1);
886 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
887 configDataValue ) != eSIR_SUCCESS)
888 {
889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
890 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
891 goto handle_failure;
892 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700893 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
894 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700895 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
896 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
897 tlvStruct->length = sizeof(tANI_U32);
898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
899 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
900 configDataValue ) != eSIR_SUCCESS)
901 {
902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
903 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
904 goto handle_failure;
905 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
907 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700908 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
909 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
910 tlvStruct->length = sizeof(tANI_U32);
911 configDataValue = (tANI_U32 *)(tlvStruct + 1);
912 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
913 eSIR_SUCCESS)
914 {
915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
916 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
917 goto handle_failure;
918 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700919 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
920 + sizeof(tHalCfg) + tlvStruct->length);
921
922 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
923 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
927 configDataValue ) != eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
936 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700948 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
949 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
950 tlvStruct->length = sizeof(tANI_U32);
951 configDataValue = (tANI_U32 *)(tlvStruct + 1);
952 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
953 configDataValue ) != eSIR_SUCCESS)
954 {
955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
956 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
957 goto handle_failure;
958 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700959 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
960 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700961 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
962 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
963 tlvStruct->length = sizeof(tANI_U32);
964 configDataValue = (tANI_U32 *)(tlvStruct + 1);
965 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
966 configDataValue ) != eSIR_SUCCESS)
967 {
968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
969 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
970 goto handle_failure;
971 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700972 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
973 + sizeof(tHalCfg) + tlvStruct->length);
974
975 /* QWLAN_HAL_CFG_STATS_PERIOD */
976 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
980 eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_STATS_PERIOD");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700988 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
989 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
990 tlvStruct->length = sizeof(tANI_U32);
991 configDataValue = (tANI_U32 *)(tlvStruct + 1);
992 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
993 eSIR_SUCCESS)
994 {
995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
996 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
997 goto handle_failure;
998 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700999 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1000 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001001 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1002 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1003 tlvStruct->length = sizeof(tANI_U32);
1004 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1005 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1006 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001007 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1008 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001009 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1010 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1011 tlvStruct->length = sizeof(tANI_U32);
1012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1013 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1014 != eSIR_SUCCESS)
1015 {
1016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1017 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1018 goto handle_failure;
1019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001020 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1021 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001022 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1023 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1024 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1025 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1026 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1027 &strLength) != eSIR_SUCCESS)
1028 {
1029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1030 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1031 goto handle_failure;
1032 }
1033 tlvStruct->length = strLength;
1034 /* calculate the pad bytes to have the CFG in aligned format */
1035 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1036 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001037 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1038 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001039 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1040 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1041 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1042 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1043 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1044 &strLength) != eSIR_SUCCESS)
1045 {
1046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1047 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1048 goto handle_failure;
1049 }
1050 tlvStruct->length = strLength;
1051 /* calculate the pad bytes to have the CFG in aligned format */
1052 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1053 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1057 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1058 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1060 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1061 &strLength) != eSIR_SUCCESS)
1062 {
1063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1064 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1065 goto handle_failure;
1066 }
1067 tlvStruct->length = strLength;
1068 /* calculate the pad bytes to have the CFG in aligned format */
1069 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1070 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1072 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001073 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1074 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1075 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1077 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1078 &strLength) != eSIR_SUCCESS)
1079 {
1080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1081 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1082 goto handle_failure;
1083 }
1084 tlvStruct->length = strLength;
1085 /* calculate the pad bytes to have the CFG in aligned format */
1086 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1087 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001088 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1089 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001090 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1091 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1092 tlvStruct->length = sizeof(tANI_U32);
1093 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1094 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1095 != eSIR_SUCCESS)
1096 {
1097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1098 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1099 goto handle_failure;
1100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001101 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1102 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001103 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1104 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1105 tlvStruct->length = sizeof(tANI_U32);
1106 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1107 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1108 != eSIR_SUCCESS)
1109 {
1110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1111 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1112 goto handle_failure;
1113 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001114 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1115 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001116 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1117 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1118 tlvStruct->length = sizeof(tANI_U32);
1119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1120 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1121 != eSIR_SUCCESS)
1122 {
1123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1124 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1125 goto handle_failure;
1126 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001127 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1128 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001129 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1130 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1131 tlvStruct->length = sizeof(tANI_U32);
1132 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1133 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1134 != eSIR_SUCCESS)
1135 {
1136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1137 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1138 goto handle_failure;
1139 }
1140 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1141 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001142 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1143 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1144 tlvStruct->length = sizeof(tANI_U32);
1145 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1146 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1147 != eSIR_SUCCESS)
1148 {
1149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1150 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1151 goto handle_failure;
1152 }
1153 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1154 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001155 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1156 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1157 tlvStruct->length = sizeof(tANI_U32);
1158 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1159 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1160 != eSIR_SUCCESS)
1161 {
1162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1163 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1164 goto handle_failure;
1165 }
1166 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1167 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001168 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1169 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1170 tlvStruct->length = sizeof(tANI_U32);
1171 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1172 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1173 != eSIR_SUCCESS)
1174 {
1175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1176 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1177 goto handle_failure;
1178 }
1179 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1180 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001181 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1182 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1183 tlvStruct->length = sizeof(tANI_U32);
1184 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1185 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1186 != eSIR_SUCCESS)
1187 {
1188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1189 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1190 goto handle_failure;
1191 }
1192 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1193 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001194 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1195 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1196 tlvStruct->length = sizeof(tANI_U32);
1197 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1198 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1199 != eSIR_SUCCESS)
1200 {
1201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1202 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1203 goto handle_failure;
1204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001205 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1206 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001207 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1208 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1209 tlvStruct->length = sizeof(tANI_U32);
1210 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1211 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1212 != eSIR_SUCCESS)
1213 {
1214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1215 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1216 goto handle_failure;
1217 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001218 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1219 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001220 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1221 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1222 tlvStruct->length = sizeof(tANI_U32);
1223 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1224 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1225 != eSIR_SUCCESS)
1226 {
1227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1228 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1229 goto handle_failure;
1230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001231 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1232 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001233 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1234 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1235 * into FW, so the parameters are added here.
1236 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001237 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1238 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1239 tlvStruct->length = sizeof(tANI_U32);
1240 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1241 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1242 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1243 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001244 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1245 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1246 tlvStruct->length = sizeof(tANI_U32);
1247 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1248 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1249 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1250 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001251 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1252 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1253 tlvStruct->length = sizeof(tANI_U32);
1254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1255 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1256 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1257 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001258 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1259 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1260 tlvStruct->length = sizeof(tANI_U32);
1261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1262 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1264 + sizeof(tHalCfg) + tlvStruct->length) ;
1265
1266 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1267 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1268 tlvStruct->length = sizeof(tANI_U32);
1269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1270 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1271 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1272 + sizeof(tHalCfg) + tlvStruct->length) ;
1273
1274 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1275 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1276 tlvStruct->length = sizeof(tANI_U32);
1277 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1278 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1279 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1280 + sizeof(tHalCfg) + tlvStruct->length) ;
1281
1282 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1283 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1284 tlvStruct->length = sizeof(tANI_U32);
1285 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1286 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1287 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1288 + sizeof(tHalCfg) + tlvStruct->length) ;
1289
1290 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1291 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1292 tlvStruct->length = sizeof(tANI_U32);
1293 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1294 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1295 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1296 + sizeof(tHalCfg) + tlvStruct->length) ;
1297
1298 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1299 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1300 tlvStruct->length = sizeof(tANI_U32);
1301 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1302 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1303 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1304 + sizeof(tHalCfg) + tlvStruct->length) ;
1305
1306 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1307 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1308 tlvStruct->length = sizeof(tANI_U32);
1309 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1310 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1311 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1312 + sizeof(tHalCfg) + tlvStruct->length) ;
1313
1314 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1315 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1316 tlvStruct->length = sizeof(tANI_U32);
1317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1318 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1319 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1320 + sizeof(tHalCfg) + tlvStruct->length) ;
1321
1322 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1323 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1324 tlvStruct->length = sizeof(tANI_U32);
1325 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1326 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1327 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1328 + sizeof(tHalCfg) + tlvStruct->length) ;
1329
1330 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1331 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1335 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1336 + sizeof(tHalCfg) + tlvStruct->length) ;
1337
1338 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1339 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1340 tlvStruct->length = sizeof(tANI_U32);
1341 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1342 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1343 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1344 + sizeof(tHalCfg) + tlvStruct->length) ;
1345
1346 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1347 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1348 tlvStruct->length = sizeof(tANI_U32);
1349 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1350 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1351 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1352 + sizeof(tHalCfg) + tlvStruct->length) ;
1353
1354 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1355 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1356 tlvStruct->length = sizeof(tANI_U32);
1357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1358 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1359 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1360 + sizeof(tHalCfg) + tlvStruct->length) ;
1361
Wilson Tsaof8b37942013-09-06 10:49:00 -07001362 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1363 {
1364 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1365 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1366 tlvStruct->length = sizeof(tANI_U32);
1367 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1368 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1369 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1370 + sizeof(tHalCfg) + tlvStruct->length) ;
1371
1372 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1373 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1374 tlvStruct->length = sizeof(tANI_U32);
1375 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1376 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1377 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1378 + sizeof(tHalCfg) + tlvStruct->length) ;
1379
1380 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1381 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1382 tlvStruct->length = sizeof(tANI_U32);
1383 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1384 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1385 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1386 + sizeof(tHalCfg) + tlvStruct->length) ;
1387
1388 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1389 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1390 tlvStruct->length = sizeof(tANI_U32);
1391 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1392 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1393 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1394 + sizeof(tHalCfg) + tlvStruct->length) ;
1395 }
1396
1397 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1398 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1399 tlvStruct->length = sizeof(tANI_U32);
1400 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1401 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1402 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1403 + sizeof(tHalCfg) + tlvStruct->length) ;
1404
1405 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1406 {
1407 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1408 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1409 tlvStruct->length = sizeof(tANI_U32);
1410 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1411 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1412 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1413 + sizeof(tHalCfg) + tlvStruct->length) ;
1414 }
1415
1416 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1417 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1418 tlvStruct->length = sizeof(tANI_U32);
1419 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1420 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1421 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1422 + sizeof(tHalCfg) + tlvStruct->length) ;
1423
Jeff Johnson32d95a32012-09-10 13:15:23 -07001424 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001425 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1426 tlvStruct->length = sizeof(tANI_U32);
1427 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1428 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1429 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1430 wcnssCompiledApiVersion.minor,
1431 wcnssCompiledApiVersion.version,
1432 wcnssCompiledApiVersion.revision);
1433 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1434 + sizeof(tHalCfg) + tlvStruct->length) ;
1435
Jeff Johnsond13512a2012-07-17 11:42:19 -07001436 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1437 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1438 tlvStruct->length = sizeof(tANI_U32);
1439 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1440 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1441 configDataValue ) != eSIR_SUCCESS)
1442 {
1443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1444 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1445 goto handle_failure;
1446 }
1447
1448 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1449 + sizeof(tHalCfg) + tlvStruct->length) ;
1450 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1451 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1455 configDataValue ) != eSIR_SUCCESS)
1456 {
1457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1458 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1459 goto handle_failure;
1460 }
1461
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464
1465 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1466 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1467 tlvStruct->length = sizeof(tANI_U32);
1468 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1469 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1470 != eSIR_SUCCESS)
1471 {
1472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1473 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1474 goto handle_failure;
1475 }
1476
1477 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1478 + sizeof(tHalCfg) + tlvStruct->length) ;
1479
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001480 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1481 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1482 tlvStruct->length = sizeof(tANI_U32);
1483 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1484 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1485 != eSIR_SUCCESS)
1486 {
1487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1488 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1489 goto handle_failure;
1490 }
1491
1492 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1493 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001494#ifdef WLAN_SOFTAP_VSTA_FEATURE
1495 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1496 tlvStruct->length = sizeof(tANI_U32);
1497 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1498 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1499 != eSIR_SUCCESS)
1500 {
1501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1502 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1503 goto handle_failure;
1504 }
1505
1506 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1507 + sizeof(tHalCfg) + tlvStruct->length) ;
1508#endif
1509
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001510 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1511 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1512 tlvStruct->length = sizeof(tANI_U32);
1513 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1514
1515 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1516 != eSIR_SUCCESS)
1517 {
1518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1519 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1520 goto handle_failure;
1521 }
1522
1523 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1524 + sizeof(tHalCfg) + tlvStruct->length) ;
1525
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301526/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1527 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1528 tlvStruct->length = sizeof(tANI_U32);
1529 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1530 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1531 configDataValue ) != eSIR_SUCCESS)
1532 {
1533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1534 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1535 goto handle_failure;
1536 }
1537
1538 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1539 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301540#ifdef FEATURE_WLAN_TDLS
1541 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1542 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1543 tlvStruct->length = sizeof(tANI_U32);
1544 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1545 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1546 configDataValue ) != eSIR_SUCCESS)
1547 {
1548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1549 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1550 goto handle_failure;
1551 }
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
1554
1555 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1556 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1560 configDataValue ) != eSIR_SUCCESS)
1561 {
1562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1563 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1564 goto handle_failure;
1565 }
1566 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1567 + sizeof(tHalCfg) + tlvStruct->length) ;
1568 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1569 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1570 tlvStruct->length = sizeof(tANI_U32);
1571 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1572 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1573 configDataValue ) != eSIR_SUCCESS)
1574 {
1575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1576 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1577 goto handle_failure;
1578 }
1579 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1580 + sizeof(tHalCfg) + tlvStruct->length) ;
1581 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1582 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1583 tlvStruct->length = sizeof(tANI_U32);
1584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1585 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1586 configDataValue ) != eSIR_SUCCESS)
1587 {
1588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1589 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1590 goto handle_failure;
1591 }
1592 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1593 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301594 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1595 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1596 tlvStruct->length = sizeof(tANI_U32);
1597 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1598 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1599 configDataValue ) != eSIR_SUCCESS)
1600 {
1601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1602 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1603 goto handle_failure;
1604 }
1605 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1606 + sizeof(tHalCfg) + tlvStruct->length) ;
1607
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301608#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301609
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001610 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1611 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1612 tlvStruct->length = sizeof(tANI_U32);
1613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1614 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1615 configDataValue ) != eSIR_SUCCESS)
1616 {
1617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1618 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1619 goto handle_failure;
1620 }
1621
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001624
1625 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1626 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1630 != eSIR_SUCCESS)
1631 {
1632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1633 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1634 goto handle_failure;
1635 }
1636 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1637 + sizeof(tHalCfg) + tlvStruct->length));
1638
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301639 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1640 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1641 tlvStruct->length = sizeof(tANI_U32);
1642 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1643 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1644 configDataValue ) != eSIR_SUCCESS)
1645 {
1646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1647 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1648 goto handle_failure;
1649 }
1650
1651 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1652 + sizeof(tHalCfg) + tlvStruct->length) ;
1653
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301654 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1655 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1656 tlvStruct->length = sizeof(tANI_U32);
1657 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1658 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1659 configDataValue ) != eSIR_SUCCESS)
1660 {
1661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1662 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1663 goto handle_failure;
1664 }
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
1667
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301668 /* QWLAN_HAL_CFG_ATH_DISABLE */
1669 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1673 configDataValue ) != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_ATH_DISABLE");
1677 goto handle_failure;
1678 }
1679 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1680 + sizeof(tHalCfg) + tlvStruct->length) ;
1681
c_hpothu6d7dc922013-12-02 12:36:41 +05301682 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1683 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1684 tlvStruct->length = sizeof(tANI_U32);
1685 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1686 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1687 configDataValue ) != eSIR_SUCCESS)
1688 {
1689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1690 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1691 goto handle_failure;
1692 }
1693 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1694 + sizeof(tHalCfg) + tlvStruct->length) ;
1695
1696 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1697 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1698 tlvStruct->length = sizeof(tANI_U32);
1699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1700 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1701 configDataValue ) != eSIR_SUCCESS)
1702 {
1703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1704 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1705 goto handle_failure;
1706 }
1707 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1708 + sizeof(tHalCfg) + tlvStruct->length) ;
1709
1710 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1711 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1712 tlvStruct->length = sizeof(tANI_U32);
1713 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1714 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1715 configDataValue ) != eSIR_SUCCESS)
1716 {
1717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1718 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1719 goto handle_failure;
1720 }
1721 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1722 + sizeof(tHalCfg) + tlvStruct->length) ;
1723
1724 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1725 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1726 tlvStruct->length = sizeof(tANI_U32);
1727 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1728 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1729 configDataValue ) != eSIR_SUCCESS)
1730 {
1731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1732 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1733 goto handle_failure;
1734 }
1735 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1736 + sizeof(tHalCfg) + tlvStruct->length) ;
1737
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301738 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1739 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1740 tlvStruct->length = sizeof(tANI_U32);
1741 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1742 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1743 configDataValue ) != eSIR_SUCCESS)
1744 {
1745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1746 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1747 goto handle_failure;
1748 }
1749 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1750 + sizeof(tHalCfg) + tlvStruct->length) ;
1751
1752 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1753 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1754 tlvStruct->length = sizeof(tANI_U32);
1755 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1756 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1757 configDataValue ) != eSIR_SUCCESS)
1758 {
1759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1760 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1761 goto handle_failure;
1762 }
1763 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1764 + sizeof(tHalCfg) + tlvStruct->length) ;
1765
1766 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1767 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1768 tlvStruct->length = sizeof(tANI_U32);
1769 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1770 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1771 configDataValue ) != eSIR_SUCCESS)
1772 {
1773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1774 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1775 goto handle_failure;
1776 }
1777 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1778 + sizeof(tHalCfg) + tlvStruct->length) ;
1779
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001780 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1781 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1782 tlvStruct->length = sizeof(tANI_U32);
1783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1784 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1785 configDataValue ) != eSIR_SUCCESS)
1786 {
1787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1788 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1789 goto handle_failure;
1790 }
1791 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1792 + sizeof(tHalCfg) + tlvStruct->length) ;
1793
Jeff Johnson295189b2012-06-20 16:38:30 -07001794 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001795#ifdef WLAN_DEBUG
1796 {
1797 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1799 "****** Dumping CFG TLV ***** ");
1800 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1801 {
1802 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1803 "%02x %02x %02x %02x %02x %02x %02x %02x",
1804 tlvStructStart[i],
1805 tlvStructStart[i+1],
1806 tlvStructStart[i+2],
1807 tlvStructStart[i+3],
1808 tlvStructStart[i+4],
1809 tlvStructStart[i+5],
1810 tlvStructStart[i+6],
1811 tlvStructStart[i+7]);
1812 }
1813 /* Dump the bytes in the last line*/
1814 for (; i < wdiStartParams->usConfigBufferLen; i++)
1815 {
1816 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1817 "%02x ",tlvStructStart[i]);
1818 }
1819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1820 "**************************** ");
1821 }
1822#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001823 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001824handle_failure:
1825 vos_mem_free(configParam);
1826 return VOS_STATUS_E_FAILURE;
1827}
Jeff Johnson295189b2012-06-20 16:38:30 -07001828/*
1829 * FUNCTION: WDA_wdiCompleteCB
1830 * call the voss call back function
1831 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001832void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001833{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001834 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1835 tWDA_CbContext *wdaContext;
1836
1837 if(NULL == pWdaParams)
1838 {
1839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001840 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001841 VOS_ASSERT(0) ;
1842 return ;
1843 }
1844
1845 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1846
Jeff Johnson295189b2012-06-20 16:38:30 -07001847 if (NULL == wdaContext)
1848 {
1849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001850 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001851 return ;
1852 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001853
Jeff Johnson295189b2012-06-20 16:38:30 -07001854 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001855 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001856 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001858 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001859 vos_mem_free(pWdaParams);
1860
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 if(WDI_STATUS_SUCCESS != status)
1862 {
1863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1864 "WDI stop callback returned failure" );
1865 VOS_ASSERT(0) ;
1866 }
1867 else
1868 {
1869 wdaContext->wdaState = WDA_STOP_STATE;
1870 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001871
Leo Chang9d76f622013-08-23 16:34:52 -07001872 /* FTM Driver stop procedure should be synced.
1873 * Stop and Close will happen on same context */
1874 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1875 {
1876 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1877 {
1878 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1879 "%s: FTM Stop Event Set Fail", __func__);
1880 VOS_ASSERT(0);
1881 }
1882 }
1883
Jeff Johnson295189b2012-06-20 16:38:30 -07001884 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001885 vos_WDAComplete_cback(wdaContext->pVosContext);
1886
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 return ;
1888}
Jeff Johnson295189b2012-06-20 16:38:30 -07001889/*
1890 * FUNCTION: WDA_stop
1891 * call WDI_stop
1892 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001893VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1894{
1895 WDI_Status wdiStatus;
1896 VOS_STATUS status = VOS_STATUS_SUCCESS;
1897 WDI_StopReqParamsType *wdiStopReq;
1898 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001899 tWDA_ReqParams *pWdaParams ;
1900
Jeff Johnson295189b2012-06-20 16:38:30 -07001901 if (NULL == pWDA)
1902 {
1903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001904 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001905 VOS_ASSERT(0);
1906 return VOS_STATUS_E_FAILURE;
1907 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001908 if (pWDA->wdiFailed == true)
1909 {
1910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001911 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001912 return VOS_STATUS_E_ALREADY;
1913 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001914
Jeff Johnson295189b2012-06-20 16:38:30 -07001915 /* FTM mode stay START_STATE */
1916 if( (WDA_READY_STATE != pWDA->wdaState) &&
1917 (WDA_INIT_STATE != pWDA->wdaState) &&
1918 (WDA_START_STATE != pWDA->wdaState) )
1919 {
1920 VOS_ASSERT(0);
1921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001922 wdiStopReq = (WDI_StopReqParamsType *)
1923 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1924 if(NULL == wdiStopReq)
1925 {
1926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001928 VOS_ASSERT(0);
1929 return VOS_STATUS_E_NOMEM;
1930 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001931
Jeff Johnson295189b2012-06-20 16:38:30 -07001932 wdiStopReq->wdiStopReason = reason;
1933 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001934
1935 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1936 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001937 {
1938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001940 VOS_ASSERT(0);
1941 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001942 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001944
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001945 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1946 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001947 {
1948 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001949 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001951
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001952 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1953 pWdaParams->wdaMsgParam = NULL;
1954 pWdaParams->pWdaContext = pWDA;
1955
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 /* call WDI stop */
1957 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001958 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1959
Jeff Johnson295189b2012-06-20 16:38:30 -07001960 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1961 {
1962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1963 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1965 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001966 status = VOS_STATUS_E_FAILURE;
1967 }
Leo Chang9d76f622013-08-23 16:34:52 -07001968
1969 /* FTM Driver stop procedure should be synced.
1970 * Stop and Close will happen on same context */
1971 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1972 {
1973 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1974 WDI_RESPONSE_TIMEOUT);
1975 if (status != VOS_STATUS_SUCCESS)
1976 {
1977 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1978 "%s: FTM Stop Timepoout", __func__);
1979 VOS_ASSERT(0);
1980 vos_event_reset(&pWDA->ftmStopDoneEvent);
1981 }
1982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001983 return status;
1984}
Jeff Johnson295189b2012-06-20 16:38:30 -07001985/*
1986 * FUNCTION: WDA_close
1987 * call WDI_close and free the WDA context
1988 */
1989VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1990{
Jeff Johnson43971f52012-07-17 12:26:56 -07001991 VOS_STATUS status = VOS_STATUS_SUCCESS;
1992 WDI_Status wstatus;
1993 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001994 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001995 if (NULL == wdaContext)
1996 {
1997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001998 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 return VOS_STATUS_E_FAILURE;
2000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002001 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2002 (WDA_STOP_STATE != wdaContext->wdaState))
2003 {
2004 VOS_ASSERT(0);
2005 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002006 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002007 wstatus = WDI_Close();
2008 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 {
2010 status = VOS_STATUS_E_FAILURE;
2011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002012 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002014 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2015 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002018 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002019 status = VOS_STATUS_E_FAILURE;
2020 }
2021
Jeff Johnson43971f52012-07-17 12:26:56 -07002022 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002023 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002024 {
2025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002026 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 status = VOS_STATUS_E_FAILURE;
2028 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002029 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002030 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002033 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 status = VOS_STATUS_E_FAILURE;
2035 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002036 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002037 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002038 {
2039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002040 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002041 status = VOS_STATUS_E_FAILURE;
2042 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002043 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002044 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002045 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 {
2047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2048 "error in WDA close " );
2049 status = VOS_STATUS_E_FAILURE;
2050 }
2051 return status;
2052}
Jeff Johnson295189b2012-06-20 16:38:30 -07002053/*
2054 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2055 * returns 1 if the compiled version is greater than or equal to the input version
2056 */
2057
2058uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2059{
2060 VOS_STATUS status = VOS_STATUS_SUCCESS;
2061 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2062 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002063 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2065 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2066 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2067 (compiledVersion.revision >= revision)))
2068 return 1;
2069 else
2070 return 0;
2071}
Jeff Johnson295189b2012-06-20 16:38:30 -07002072/*
2073 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2074 * returns 1 if the compiled version is greater than or equal to the input version
2075 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002076uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2077{
2078 VOS_STATUS status = VOS_STATUS_SUCCESS;
2079 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2080 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002082 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2083 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2084 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2085 (reportedVersion.revision >= revision)))
2086 return 1;
2087 else
2088 return 0;
2089}
Jeff Johnson295189b2012-06-20 16:38:30 -07002090/*
2091 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2092 * Returns the version of the WCNSS WLAN API with which the HOST
2093 * device driver was compiled
2094 */
2095VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2096 tSirVersionType *pVersion)
2097{
2098 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002099 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002100 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 if ((NULL == pvosGCtx) || (NULL == pVersion))
2102 {
2103 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002104 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002105 VOS_ASSERT(0);
2106 return VOS_STATUS_E_FAILURE;
2107 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002108 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2109 if (NULL == pWDA )
2110 {
2111 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002112 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002113 VOS_ASSERT(0);
2114 return VOS_STATUS_E_FAILURE;
2115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002116 *pVersion = pWDA->wcnssWlanCompiledVersion;
2117 return VOS_STATUS_SUCCESS;
2118}
Jeff Johnson295189b2012-06-20 16:38:30 -07002119/*
2120 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2121 * Returns the version of the WCNSS WLAN API with which the WCNSS
2122 * device driver was compiled
2123 */
2124VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2125 tSirVersionType *pVersion)
2126{
2127 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002128 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002129 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002130 if ((NULL == pvosGCtx) || (NULL == pVersion))
2131 {
2132 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002133 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002134 VOS_ASSERT(0);
2135 return VOS_STATUS_E_FAILURE;
2136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2138 if (NULL == pWDA )
2139 {
2140 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002141 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002142 VOS_ASSERT(0);
2143 return VOS_STATUS_E_FAILURE;
2144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002145 *pVersion = pWDA->wcnssWlanReportedVersion;
2146 return VOS_STATUS_SUCCESS;
2147}
Jeff Johnson295189b2012-06-20 16:38:30 -07002148/*
2149 * FUNCTION: WDA_GetWcnssSoftwareVersion
2150 * Returns the WCNSS Software version string
2151 */
2152VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2153 tANI_U8 *pVersion,
2154 tANI_U32 versionBufferSize)
2155{
2156 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002158 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 if ((NULL == pvosGCtx) || (NULL == pVersion))
2160 {
2161 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002162 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002163 VOS_ASSERT(0);
2164 return VOS_STATUS_E_FAILURE;
2165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002166 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2167 if (NULL == pWDA )
2168 {
2169 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002170 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 VOS_ASSERT(0);
2172 return VOS_STATUS_E_FAILURE;
2173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002174 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2175 return VOS_STATUS_SUCCESS;
2176}
Jeff Johnson295189b2012-06-20 16:38:30 -07002177/*
2178 * FUNCTION: WDA_GetWcnssHardwareVersion
2179 * Returns the WCNSS Hardware version string
2180 */
2181VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2182 tANI_U8 *pVersion,
2183 tANI_U32 versionBufferSize)
2184{
2185 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002186 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002187 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002188 if ((NULL == pvosGCtx) || (NULL == pVersion))
2189 {
2190 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002191 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002192 VOS_ASSERT(0);
2193 return VOS_STATUS_E_FAILURE;
2194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002195 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2196 if (NULL == pWDA )
2197 {
2198 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002199 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002200 VOS_ASSERT(0);
2201 return VOS_STATUS_E_FAILURE;
2202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2204 return VOS_STATUS_SUCCESS;
2205}
Jeff Johnson295189b2012-06-20 16:38:30 -07002206/*
2207 * FUNCTION: WDA_WniCfgDnld
2208 * Trigger CFG Download
2209 */
2210VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2211{
2212 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002213 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 v_VOID_t *pFileImage = NULL;
2215 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 v_VOID_t *pCfgBinary = NULL;
2217 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002219
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 if (NULL == pMac )
2221 {
2222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002223 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 VOS_ASSERT(0);
2225 return VOS_STATUS_E_FAILURE;
2226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 /* get the number of bytes in the CFG Binary... */
2228 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2229 &cbFileImageSize );
2230 if ( VOS_STATUS_E_NOMEM != vosStatus )
2231 {
2232 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2233 "Error obtaining binary size" );
2234 goto fail;
2235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 // malloc a buffer to read in the Configuration binary file.
2237 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 if ( NULL == pFileImage )
2239 {
2240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2241 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2242 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002243 vosStatus = VOS_STATUS_E_NOMEM;
2244 goto fail;
2245 }
2246
2247 /* Get the entire CFG file image... */
2248 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2249 &cbFileImageSize );
2250 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2251 {
2252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2253 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2254 cbFileImageSize );
2255 goto fail;
2256 }
2257
2258 /*
2259 * Validate the binary image. This function will return a pointer
2260 * and length where the CFG binary is located within the binary image file.
2261 */
2262 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2263 &pCfgBinary, &cbCfgBinarySize );
2264 if ( VOS_FALSE == bStatus )
2265 {
2266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2267 "Error: Cannot find STA CFG in binary image file" );
2268 vosStatus = VOS_STATUS_E_FAILURE;
2269 goto fail;
2270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002271 /*
2272 * TODO: call the config download function
2273 * for now calling the existing cfg download API
2274 */
2275 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002276 vosStatus = VOS_STATUS_SUCCESS;
2277
2278 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002279
2280fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002281 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002282 return vosStatus;
2283}
Jeff Johnson295189b2012-06-20 16:38:30 -07002284/* -----------------------------------------------------------------
2285 * WDI interface
2286 * -----------------------------------------------------------------
2287 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002288/*
2289 * FUNCTION: WDA_suspendDataTxCallback
2290 * call back function called from TL after suspend Transmission
2291 */
2292VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2293 v_U8_t* ucSTAId,
2294 VOS_STATUS vosStatus)
2295{
2296 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002298 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 if (NULL == pWDA )
2300 {
2301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002302 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 VOS_ASSERT(0);
2304 return VOS_STATUS_E_FAILURE;
2305 }
2306 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2307 {
2308 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2309 }
2310 else
2311 {
2312 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2313 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 /* Trigger the event to bring the WDA TL suspend function to come
2315 * out of wait*/
2316 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2317 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2318 {
2319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002320 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 /* If TL suspended had timedout before this callback was called, resume back
2323 * TL.*/
2324 if (pWDA->txSuspendTimedOut)
2325 {
2326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002327 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 WDA_ResumeDataTx(pWDA);
2329 pWDA->txSuspendTimedOut = FALSE;
2330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002331 return VOS_STATUS_SUCCESS;
2332}
Jeff Johnson295189b2012-06-20 16:38:30 -07002333/*
2334 * FUNCTION: WDA_suspendDataTx
2335 * Update TL to suspend the data Transmission
2336 */
2337VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2338{
2339 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2340 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002341
2342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002343 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 if (pWDA->txSuspendTimedOut)
2346 {
2347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002348 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002349 return status;
2350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002351 /* Reset the event to be not signalled */
2352 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2353 if(!VOS_IS_STATUS_SUCCESS(status))
2354 {
2355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002356 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 return VOS_STATUS_E_FAILURE;
2358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002360 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 WDA_SuspendDataTxCallback);
2362 if(status != VOS_STATUS_SUCCESS)
2363 {
2364 return status;
2365 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002366 /* Wait for the event to be set by the TL, to get the response of
2367 * suspending the TX queues, this event should be set by the Callback
2368 * function called by TL*/
2369 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2370 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2371 if(!VOS_IS_STATUS_SUCCESS(status))
2372 {
2373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2374 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002375 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 /* Set this flag to true when TL suspend times out, so that when TL
2377 * suspend eventually happens and calls the callback, TL can be resumed
2378 * right away by looking at this flag when true.*/
2379 pWDA->txSuspendTimedOut = TRUE;
2380 }
2381 else
2382 {
2383 pWDA->txSuspendTimedOut = FALSE;
2384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2386 {
2387 status = VOS_STATUS_SUCCESS;
2388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002389 return status;
2390}
Jeff Johnson295189b2012-06-20 16:38:30 -07002391/*
2392 * FUNCTION: WDA_resumeDataTx
2393 * Update TL to resume the data Transmission
2394 */
2395VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2396{
2397 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002398
2399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002400 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002401
2402 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 return status;
2404}
Jeff Johnson295189b2012-06-20 16:38:30 -07002405/*
2406 * FUNCTION: WDA_InitScanReqCallback
2407 * Trigger Init SCAN callback
2408 */
2409void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2410{
2411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2412 tWDA_CbContext *pWDA;
2413 tInitScanParams *pWDA_ScanParam ;
2414 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 if(NULL == pWdaParams)
2418 {
2419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002420 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 VOS_ASSERT(0) ;
2422 return ;
2423 }
2424 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2425 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002426 if(NULL == pWDA_ScanParam)
2427 {
2428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002429 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002430 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2432 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002433 return ;
2434 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 if(WDI_STATUS_SUCCESS != wdiStatus)
2436 {
2437 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002438 if(VOS_STATUS_SUCCESS != status)
2439 {
2440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002441 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002442 }
2443 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002444 /* free WDI command buffer */
2445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002447
Jeff Johnson295189b2012-06-20 16:38:30 -07002448
2449 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002450 /* without converting the Status to Failure or Success Just
2451 pass the same status to lim */
2452 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 /* send SCAN RSP message back to PE */
2454 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002455 return ;
2456}
2457
2458/*
2459 * FUNCTION: WDA_ProcessInitScanReq
2460 * Trigger Init SCAN in DAL
2461 */
2462VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2463 tInitScanParams *initScanParams)
2464{
2465 WDI_Status status = WDI_STATUS_SUCCESS ;
2466 WDI_InitScanReqParamsType *wdiInitScanParam =
2467 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2468 sizeof(WDI_InitScanReqParamsType)) ;
2469 tWDA_ReqParams *pWdaParams;
2470 tANI_U8 i = 0;
2471
2472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002473 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 if(NULL == wdiInitScanParam)
2475 {
2476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002477 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 VOS_ASSERT(0);
2479 return VOS_STATUS_E_NOMEM;
2480 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2482 if(NULL == pWdaParams)
2483 {
2484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 VOS_ASSERT(0);
2487 vos_mem_free(wdiInitScanParam);
2488 return VOS_STATUS_E_NOMEM;
2489 }
2490
2491 /* Copy init Scan params to WDI structure */
2492 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2493 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2494 sizeof(tSirMacAddr)) ;
2495 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2496 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2497 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002498 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2499 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002500 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2501 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2503 {
2504 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2505 initScanParams->scanEntry.bssIdx[i] ;
2506 }
2507
2508 /* if Frame length, copy macMgmtHdr or WDI structure */
2509 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2510 {
2511 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2512 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2513 }
2514 wdiInitScanParam->wdiReqStatusCB = NULL ;
2515
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 /* Store Init Req pointer, as this will be used for response */
2517 pWdaParams->pWdaContext = pWDA;
2518 pWdaParams->wdaMsgParam = initScanParams;
2519 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 /* first try to suspend TX */
2521 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 if(WDI_STATUS_SUCCESS != status)
2523 {
2524 goto handleWdiFailure;
2525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 /* call DAL API to pass init scan request to DAL */
2527 status = WDI_InitScanReq(wdiInitScanParam,
2528 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 if(IS_WDI_STATUS_FAILURE(status))
2530 {
2531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2532 "error in WDA Init Scan, Resume Tx " );
2533 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 VOS_ASSERT(0) ;
2535
2536 goto handleWdiFailure;
2537 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002539handleWdiFailure:
2540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2541 "Failure in WDI Api, free all the memory " );
2542 /* free WDI command buffer */
2543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2544 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 /* send Failure to PE */
2546 initScanParams->status = eSIR_FAILURE ;
2547 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 return CONVERT_WDI2VOS_STATUS(status) ;
2549}
2550
Jeff Johnson295189b2012-06-20 16:38:30 -07002551/*
2552 * FUNCTION: WDA_StartScanReqCallback
2553 * send Start SCAN RSP back to PE
2554 */
2555void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2556 void* pUserData)
2557{
2558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2559 tWDA_CbContext *pWDA;
2560 tStartScanParams *pWDA_ScanParam;
2561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002562 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 if(NULL == pWdaParams)
2564 {
2565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002566 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 VOS_ASSERT(0) ;
2568 return ;
2569 }
2570 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2571 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002572 if(NULL == pWDA_ScanParam)
2573 {
2574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002575 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002577 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 return ;
2579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2581 {
2582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002583 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002584 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002585 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 return ;
2587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2589 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002590
Jeff Johnson295189b2012-06-20 16:38:30 -07002591
2592 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002593 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002594 /* send SCAN RSP message back to PE */
2595 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 return ;
2597}
2598
Jeff Johnson295189b2012-06-20 16:38:30 -07002599/*
2600 * FUNCTION: WDA_ProcessStartScanReq
2601 * Trigger start SCAN in WDI
2602 */
2603VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2604 tStartScanParams *startScanParams)
2605{
2606 WDI_Status status = WDI_STATUS_SUCCESS;
2607 WDI_StartScanReqParamsType *wdiStartScanParams =
2608 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2609 sizeof(WDI_StartScanReqParamsType)) ;
2610 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 if(NULL == wdiStartScanParams)
2614 {
2615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002617 VOS_ASSERT(0);
2618 return VOS_STATUS_E_NOMEM;
2619 }
2620 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2621 if(NULL == pWdaParams)
2622 {
2623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 VOS_ASSERT(0);
2626 vos_mem_free(wdiStartScanParams);
2627 return VOS_STATUS_E_NOMEM;
2628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002629 /* Copy init Scan params to WDI structure */
2630 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2631 wdiStartScanParams->wdiReqStatusCB = NULL ;
2632
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 /* Store Init Req pointer, as this will be used for response */
2634 /* store Params pass it to WDI */
2635 pWdaParams->pWdaContext = pWDA;
2636 pWdaParams->wdaMsgParam = startScanParams;
2637 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 /* call DAL API to pass init scan request to DAL */
2639 status = WDI_StartScanReq(wdiStartScanParams,
2640 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 /* failure returned by WDI API */
2642 if(IS_WDI_STATUS_FAILURE(status))
2643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2645 "Failure in Start Scan WDI API, free all the memory "
2646 "It should be due to previous abort scan." );
2647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2648 vos_mem_free(pWdaParams) ;
2649 startScanParams->status = eSIR_FAILURE ;
2650 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 return CONVERT_WDI2VOS_STATUS(status) ;
2653}
Jeff Johnson295189b2012-06-20 16:38:30 -07002654/*
2655 * FUNCTION: WDA_EndScanReqCallback
2656 * END SCAN callback
2657 */
2658void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2659{
2660 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2661 tWDA_CbContext *pWDA;
2662 tEndScanParams *endScanParam;
2663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002664 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 if(NULL == pWdaParams)
2666 {
2667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002668 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 VOS_ASSERT(0) ;
2670 return ;
2671 }
2672 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2673 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 if(NULL == endScanParam)
2675 {
2676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002677 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2680 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 return ;
2682 }
2683
2684 /* Free WDI command buffer */
2685 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2686 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002687 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002688 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 /* send response back to PE */
2690 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2691 return ;
2692}
2693
Jeff Johnson295189b2012-06-20 16:38:30 -07002694/*
2695 * FUNCTION: WDA_ProcessEndScanReq
2696 * Trigger END SCAN in WDI
2697 */
2698VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2699 tEndScanParams *endScanParams)
2700{
2701 WDI_Status status = WDI_STATUS_SUCCESS;
2702 WDI_EndScanReqParamsType *wdiEndScanParams =
2703 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2704 sizeof(WDI_EndScanReqParamsType)) ;
2705 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002707 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 if(NULL == wdiEndScanParams)
2709 {
2710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002711 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 VOS_ASSERT(0);
2713 return VOS_STATUS_E_NOMEM;
2714 }
2715 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2716 if(NULL == pWdaParams)
2717 {
2718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002719 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 VOS_ASSERT(0);
2721 vos_mem_free(wdiEndScanParams);
2722 return VOS_STATUS_E_NOMEM;
2723 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002724 /* Copy init Scan params to WDI structure */
2725 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2726 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 /* Store Init Req pointer, as this will be used for response */
2728 /* store Params pass it to WDI */
2729 pWdaParams->pWdaContext = pWDA;
2730 pWdaParams->wdaMsgParam = endScanParams;
2731 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 /* call DAL API to pass init scan request to DAL */
2733 status = WDI_EndScanReq(wdiEndScanParams,
2734 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002735 if(IS_WDI_STATUS_FAILURE(status))
2736 {
2737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2738 "Failure in End Scan WDI API, free all the memory "
2739 "It should be due to previous abort scan." );
2740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2741 vos_mem_free(pWdaParams) ;
2742 endScanParams->status = eSIR_FAILURE ;
2743 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 return CONVERT_WDI2VOS_STATUS(status) ;
2746}
Jeff Johnson295189b2012-06-20 16:38:30 -07002747/*
2748 * FUNCTION: WDA_FinishScanReqCallback
2749 * Trigger Finish SCAN callback
2750 */
2751void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2752{
2753 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2754 tWDA_CbContext *pWDA;
2755 tFinishScanParams *finishScanParam;
2756 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002758 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 if(NULL == pWdaParams)
2760 {
2761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002762 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 VOS_ASSERT(0) ;
2764 return ;
2765 }
2766
2767 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2768 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002769 if(NULL == finishScanParam)
2770 {
2771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002772 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2775 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 return ;
2777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2779 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 /*
2781 * Now Resume TX, if we reached here means, TX is already suspended, we
2782 * have to resume it unconditionaly
2783 */
2784 status = WDA_ResumeDataTx(pWDA) ;
2785
2786 if(VOS_STATUS_SUCCESS != status)
2787 {
2788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002789 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002791 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2793 return ;
2794}
Jeff Johnson295189b2012-06-20 16:38:30 -07002795/*
2796 * FUNCTION: WDA_ProcessFinshScanReq
2797 * Trigger Finish SCAN in WDI
2798 */
2799VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2800 tFinishScanParams *finishScanParams)
2801{
2802 WDI_Status status = WDI_STATUS_SUCCESS;
2803 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2804 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2805 sizeof(WDI_FinishScanReqParamsType)) ;
2806 tWDA_ReqParams *pWdaParams ;
2807 tANI_U8 i = 0;
2808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002809 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 if(NULL == wdiFinishScanParams)
2811 {
2812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 VOS_ASSERT(0);
2815 return VOS_STATUS_E_NOMEM;
2816 }
2817 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2818 if(NULL == pWdaParams)
2819 {
2820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002821 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 VOS_ASSERT(0);
2823 vos_mem_free(wdiFinishScanParams);
2824 return VOS_STATUS_E_NOMEM;
2825 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002826 /* Copy init Scan params to WDI structure */
2827 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2828 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2829 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2831 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2832 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2833 finishScanParams->frameLength ;
2834 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2835 finishScanParams->currentOperChannel ;
2836 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2837 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2838 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2840 {
2841 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2842 finishScanParams->scanEntry.bssIdx[i] ;
2843 }
2844
2845
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 /* if Frame length, copy macMgmtHdr ro WDI structure */
2847 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2848 {
2849 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2850 &finishScanParams->macMgmtHdr,
2851 sizeof(WDI_MacMgmtHdr)) ;
2852 }
2853 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 /* Store Init Req pointer, as this will be used for response */
2855 /* store Params pass it to WDI */
2856 pWdaParams->pWdaContext = pWDA;
2857 pWdaParams->wdaMsgParam = finishScanParams;
2858 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 /* call DAL API to pass init scan request to DAL */
2860 status = WDI_FinishScanReq(wdiFinishScanParams,
2861 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002862
Jeff Johnson295189b2012-06-20 16:38:30 -07002863
2864 /*
2865 * WDI API returns failure..
2866 */
2867 if(IS_WDI_STATUS_FAILURE( status))
2868 {
2869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2870 "Failure in Finish Scan WDI API, free all the memory " );
2871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2872 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 finishScanParams->status = eSIR_FAILURE ;
2874 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 return CONVERT_WDI2VOS_STATUS(status) ;
2877}
Jeff Johnson295189b2012-06-20 16:38:30 -07002878/*---------------------------------------------------------------------
2879 * ASSOC API's
2880 *---------------------------------------------------------------------
2881 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002882/*
2883 * FUNCTION: WDA_JoinReqCallback
2884 * Trigger Init SCAN callback
2885 */
2886void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2887{
2888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2889 tWDA_CbContext *pWDA;
2890 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002892 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002893 if(NULL == pWdaParams)
2894 {
2895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002896 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 VOS_ASSERT(0) ;
2898 return ;
2899 }
2900 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2901 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2903 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 /* reset macBSSID */
2905 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 /* reset macSTASelf */
2907 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002908 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 return ;
2911}
Jeff Johnson295189b2012-06-20 16:38:30 -07002912/*
2913 * FUNCTION: WDA_ProcessJoinReq
2914 * Trigger Join REQ in WDI
2915 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002916VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2917 tSwitchChannelParams* joinReqParam)
2918{
2919 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 WDI_JoinReqParamsType *wdiJoinReqParam =
2921 (WDI_JoinReqParamsType *)vos_mem_malloc(
2922 sizeof(WDI_JoinReqParamsType)) ;
2923 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002925 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002926 if(NULL == wdiJoinReqParam)
2927 {
2928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002929 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002930 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002931 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 return VOS_STATUS_E_NOMEM;
2933 }
2934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2935 if(NULL == pWdaParams)
2936 {
2937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002939 VOS_ASSERT(0);
2940 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002941 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002942 return VOS_STATUS_E_NOMEM;
2943 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002944
2945 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2946 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2947 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2948 {
2949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2950 "%s: received join request when BSSID or self-STA is NULL "
2951 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002952 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002953 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2954 VOS_ASSERT(0);
2955 vos_mem_free(wdiJoinReqParam);
2956 vos_mem_free(pWdaParams);
2957 joinReqParam->status = eSIR_FAILURE ;
2958 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2959 return VOS_STATUS_E_INVAL;
2960 }
2961
Jeff Johnson295189b2012-06-20 16:38:30 -07002962 /* copy the BSSID for pWDA */
2963 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2964 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002965 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2966 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2968 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002969#ifdef WLAN_FEATURE_VOWIFI
2970 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2971 joinReqParam->maxTxPower ;
2972#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2974 joinReqParam->localPowerConstraint ;
2975#endif
2976 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2977 joinReqParam->secondaryChannelOffset ;
2978 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2979
2980 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 /* Store Init Req pointer, as this will be used for response */
2982 /* store Params pass it to WDI */
2983 pWdaParams->pWdaContext = pWDA;
2984 pWdaParams->wdaMsgParam = joinReqParam;
2985 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002986 status = WDI_JoinReq(wdiJoinReqParam,
2987 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 if(IS_WDI_STATUS_FAILURE(status))
2989 {
2990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2991 "Failure in Join WDI API, free all the memory " );
2992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2993 vos_mem_free(pWdaParams) ;
2994 joinReqParam->status = eSIR_FAILURE ;
2995 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 return CONVERT_WDI2VOS_STATUS(status) ;
2998}
Jeff Johnson295189b2012-06-20 16:38:30 -07002999/*
3000 * FUNCTION: WDA_SwitchChannelReqCallback
3001 * send Switch channel RSP back to PE
3002 */
3003void WDA_SwitchChannelReqCallback(
3004 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3005{
3006 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3007 tWDA_CbContext *pWDA;
3008 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003010 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 if(NULL == pWdaParams)
3012 {
3013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003014 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 VOS_ASSERT(0) ;
3016 return ;
3017 }
3018 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3019 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3020
3021#ifdef WLAN_FEATURE_VOWIFI
3022 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3023#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3025 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003027 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 return ;
3030}
Jeff Johnson295189b2012-06-20 16:38:30 -07003031/*
3032 * FUNCTION: WDA_ProcessChannelSwitchReq
3033 * Request to WDI to switch channel REQ params.
3034 */
3035VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3036 tSwitchChannelParams *pSwitchChanParams)
3037{
3038 WDI_Status status = WDI_STATUS_SUCCESS ;
3039 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3040 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3041 sizeof(WDI_SwitchChReqParamsType)) ;
3042 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003044 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 if(NULL == wdiSwitchChanParam)
3046 {
3047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003048 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003049 VOS_ASSERT(0);
3050 return VOS_STATUS_E_NOMEM;
3051 }
3052 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3053 if(NULL == pWdaParams)
3054 {
3055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003056 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 VOS_ASSERT(0);
3058 vos_mem_free(wdiSwitchChanParam);
3059 return VOS_STATUS_E_NOMEM;
3060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3062#ifndef WLAN_FEATURE_VOWIFI
3063 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3064 pSwitchChanParams->localPowerConstraint;
3065#endif
3066 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3067 pSwitchChanParams->secondaryChannelOffset;
3068 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 /* Store req pointer, as this will be used for response */
3070 /* store Params pass it to WDI */
3071 pWdaParams->pWdaContext = pWDA;
3072 pWdaParams->wdaMsgParam = pSwitchChanParams;
3073 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003074#ifdef WLAN_FEATURE_VOWIFI
3075 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3076 = pSwitchChanParams->maxTxPower;
3077 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3078 pSwitchChanParams ->selfStaMacAddr,
3079 sizeof(tSirMacAddr));
3080#endif
3081 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3082 pSwitchChanParams->bssId,
3083 sizeof(tSirMacAddr));
3084
3085 status = WDI_SwitchChReq(wdiSwitchChanParam,
3086 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003087 if(IS_WDI_STATUS_FAILURE(status))
3088 {
3089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3090 "Failure in process channel switch Req WDI API, free all the memory " );
3091 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3092 vos_mem_free(pWdaParams) ;
3093 pSwitchChanParams->status = eSIR_FAILURE ;
3094 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 return CONVERT_WDI2VOS_STATUS(status) ;
3097}
Jeff Johnson295189b2012-06-20 16:38:30 -07003098/*
3099 * FUNCTION: WDA_ConfigBssReqCallback
3100 * config BSS Req Callback, called by WDI
3101 */
3102void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3103 ,void* pUserData)
3104{
3105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3106 tWDA_CbContext *pWDA;
3107 tAddBssParams *configBssReqParam;
3108 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 if(NULL == pWdaParams)
3112 {
3113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 VOS_ASSERT(0) ;
3116 return ;
3117 }
3118 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3119 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3120 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003122 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3124 {
3125 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3126 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3128 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3129 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3130
3131 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3132 {
3133 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3134 {
3135 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3136 staConfigBssParam->staType = STA_ENTRY_BSSID;
3137 }
3138 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3139 (staConfigBssParam->staType == STA_ENTRY_SELF))
3140 {
3141 /* This is the 1st add BSS Req for the BTAMP STA */
3142 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3143 staConfigBssParam->staType = STA_ENTRY_BSSID;
3144 }
3145 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3146 (staConfigBssParam->staType == STA_ENTRY_PEER))
3147 {
3148 /* This is the 2nd ADD BSS Request that is sent
3149 * on the BTAMP STA side. The Sta type is
3150 * set to STA_ENTRY_PEER here.*/
3151 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3152 }
3153 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3154 (staConfigBssParam->staType == STA_ENTRY_SELF))
3155 {
3156 /* statype is already set by PE.
3157 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3158 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3159 staConfigBssParam->staType = STA_ENTRY_BSSID;
3160 }
3161 else
3162 {
3163 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3164 staConfigBssParam->staType = STA_ENTRY_PEER;
3165 }
3166 }
3167 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3168 {
3169 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3170 staConfigBssParam->staType = STA_ENTRY_SELF;
3171 }
3172 else
3173 {
3174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3175 "Invalid operation mode specified");
3176 VOS_ASSERT(0);
3177 }
3178
3179 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3184 sizeof(tSirMacAddr));
3185 staConfigBssParam->txChannelWidthSet =
3186 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3188 staConfigBssParam->htCapable)
3189 {
3190 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3191 wdiConfigBssRsp->ucBSSIdx;
3192 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3193 WDA_VALID_STA_INDEX ;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3196 wdiConfigBssRsp->ucBSSIdx,
3197 wdiConfigBssRsp->ucSTAIdx))
3198 {
3199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003200 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 VOS_ASSERT(0) ;
3202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003206 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_ASSERT(0) ;
3208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003209#ifdef WLAN_FEATURE_VOWIFI
3210 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3211#endif
3212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3214 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 return ;
3217}
Jeff Johnson295189b2012-06-20 16:38:30 -07003218/*
3219 * FUNCTION: WDA_UpdateEdcaParamsForAC
3220 * Update WDI EDCA params with PE edca params
3221 */
3222void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3223 WDI_EdcaParamRecord *wdiEdcaParam,
3224 tSirMacEdcaParamRecord *macEdcaParam)
3225{
3226 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3227 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3228 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3229 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3230 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3231 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3232}
Jeff Johnson295189b2012-06-20 16:38:30 -07003233/*
3234 * FUNCTION: WDA_ProcessConfigBssReq
3235 * Configure BSS before starting Assoc with AP
3236 */
3237VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3238 tAddBssParams* configBssReqParam)
3239{
3240 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303241 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003244 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303245 if (NULL == configBssReqParam)
3246 {
3247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3248 "%s: configBssReqParam is NULL", __func__);
3249 return VOS_STATUS_E_INVAL;
3250 }
3251
3252 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3253 sizeof(WDI_ConfigBSSReqParamsType)) ;
3254
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 if(NULL == wdiConfigBssReqParam)
3256 {
3257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003258 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 VOS_ASSERT(0);
3260 return VOS_STATUS_E_NOMEM;
3261 }
3262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3263 if(NULL == pWdaParams)
3264 {
3265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 VOS_ASSERT(0);
3268 vos_mem_free(wdiConfigBssReqParam);
3269 return VOS_STATUS_E_NOMEM;
3270 }
Kiran4a17ebe2013-01-31 10:43:43 -08003271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3272 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3275 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 /* Store Init Req pointer, as this will be used for response */
3277 /* store Params pass it to WDI */
3278 pWdaParams->pWdaContext = pWDA;
3279 pWdaParams->wdaMsgParam = configBssReqParam;
3280 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3282 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 if(IS_WDI_STATUS_FAILURE(status))
3284 {
3285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3286 "Failure in Config BSS WDI API, free all the memory " );
3287 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3288 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003292 return CONVERT_WDI2VOS_STATUS(status) ;
3293}
Jeff Johnson295189b2012-06-20 16:38:30 -07003294#ifdef ENABLE_HAL_COMBINED_MESSAGES
3295/*
3296 * FUNCTION: WDA_PostAssocReqCallback
3297 * Post ASSOC req callback, send RSP back to PE
3298 */
3299void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3300 void* pUserData)
3301{
3302 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3303 tPostAssocParams *postAssocReqParam =
3304 (tPostAssocParams *)pWDA->wdaMsgParam ;
3305 /*STA context within the BSS Params*/
3306 tAddStaParams *staPostAssocParam =
3307 &postAssocReqParam->addBssParams.staContext ;
3308 /*STA Params for self STA*/
3309 tAddStaParams *selfStaPostAssocParam =
3310 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003314 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003315 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3316 {
3317 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3318 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3319 sizeof(tSirMacAddr)) ;
3320 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3321 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3322 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3324 }
3325 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3326 pWDA->wdaWdiApiMsgParam = NULL;
3327 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 return ;
3330}
Jeff Johnson295189b2012-06-20 16:38:30 -07003331/*
3332 * FUNCTION: WDA_ProcessPostAssocReq
3333 * Trigger POST ASSOC processing in WDI
3334 */
3335VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3336 tPostAssocParams *postAssocReqParam)
3337{
Jeff Johnson295189b2012-06-20 16:38:30 -07003338 WDI_Status status = WDI_STATUS_SUCCESS ;
3339
3340 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3341 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3342 sizeof(WDI_PostAssocReqParamsType)) ;
3343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003344 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003345
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 if(NULL == wdiPostAssocReqParam)
3347 {
3348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 VOS_ASSERT(0);
3351 return VOS_STATUS_E_NOMEM;
3352 }
3353
3354 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3355 {
3356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003357 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003358 VOS_ASSERT(0);
3359 return VOS_STATUS_E_FAILURE;
3360 }
3361
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 /* update BSS params into WDI structure */
3363 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3364 &postAssocReqParam->addBssParams) ;
3365 /* update STA params into WDI structure */
3366 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3367 &postAssocReqParam->addStaParams) ;
3368
3369 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3370 postAssocReqParam->addBssParams.highPerformance;
3371 WDA_UpdateEdcaParamsForAC(pWDA,
3372 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3373 &postAssocReqParam->addBssParams.acbe);
3374 WDA_UpdateEdcaParamsForAC(pWDA,
3375 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3376 &postAssocReqParam->addBssParams.acbk);
3377 WDA_UpdateEdcaParamsForAC(pWDA,
3378 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3379 &postAssocReqParam->addBssParams.acvi);
3380 WDA_UpdateEdcaParamsForAC(pWDA,
3381 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3382 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 /* Store Init Req pointer, as this will be used for response */
3384 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 /* store Params pass it to WDI */
3386 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3388 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 if(IS_WDI_STATUS_FAILURE(status))
3390 {
3391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3392 "Failure in Post Assoc WDI API, free all the memory " );
3393 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3394 pWDA->wdaWdiApiMsgParam = NULL;
3395 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003396 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 return CONVERT_WDI2VOS_STATUS(status) ;
3400}
3401#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003402/*
3403 * FUNCTION: WDA_AddStaReqCallback
3404 * ADD STA req callback, send RSP back to PE
3405 */
3406void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3407 void* pUserData)
3408{
3409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3410 tWDA_CbContext *pWDA;
3411 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003413 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003414 if(NULL == pWdaParams)
3415 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 VOS_ASSERT(0) ;
3418 return ;
3419 }
3420 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3421 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003423 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3425 {
3426 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3427 /*TODO: UMAC structure doesn't have these fields*/
3428 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3429 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3430 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3431 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3432 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3433 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003434#ifdef FEATURE_WLAN_TDLS
3435 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3436 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3437#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003438 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003439#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003440 {
3441 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3442 wdiConfigStaRsp->ucBssIdx;
3443 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3444 WDA_VALID_STA_INDEX ;
3445 }
3446 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3447 {
3448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003449 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 VOS_ASSERT(0) ;
3451 return ;
3452 }
3453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3455 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003456 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 return ;
3458}
Jeff Johnson295189b2012-06-20 16:38:30 -07003459/*
3460 * FUNCTION: WDA_ConfigStaReq
3461 * Trigger Config STA processing in WDI
3462 */
3463VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3464 tAddStaParams *addStaReqParam)
3465{
Jeff Johnson295189b2012-06-20 16:38:30 -07003466 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003467 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3468 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3469 sizeof(WDI_ConfigSTAReqParamsType)) ;
3470 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003472 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003473 if(NULL == wdiConfigStaReqParam)
3474 {
3475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003476 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 VOS_ASSERT(0);
3478 return VOS_STATUS_E_NOMEM;
3479 }
3480 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3481 if(NULL == pWdaParams)
3482 {
3483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 VOS_ASSERT(0);
3486 vos_mem_free(wdiConfigStaReqParam);
3487 return VOS_STATUS_E_NOMEM;
3488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003490 /* update STA params into WDI structure */
3491 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3492 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 /* Store Init Req pointer, as this will be used for response */
3494 /* store Params pass it to WDI */
3495 pWdaParams->pWdaContext = pWDA;
3496 pWdaParams->wdaMsgParam = addStaReqParam;
3497 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3499 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 if(IS_WDI_STATUS_FAILURE(status))
3501 {
3502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3503 "Failure in Config STA WDI API, free all the memory " );
3504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3505 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 return CONVERT_WDI2VOS_STATUS(status) ;
3510}
Jeff Johnson295189b2012-06-20 16:38:30 -07003511/*
3512 * FUNCTION: WDA_DelBSSReqCallback
3513 * Dens DEL BSS RSP back to PE
3514 */
3515void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3516 void* pUserData)
3517{
3518 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3519 tWDA_CbContext *pWDA;
3520 tDeleteBssParams *delBssReqParam;
3521 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003523 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 if(NULL == pWdaParams)
3525 {
3526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003527 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 VOS_ASSERT(0) ;
3529 return ;
3530 }
3531 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3532 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003533 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3535 {
3536 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3537 sizeof(tSirMacAddr)) ;
3538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003539 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3540 {
3541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003542 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 VOS_ASSERT(0) ;
3544 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3546 {
3547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003548 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 VOS_ASSERT(0) ;
3550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3552 {
3553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003554 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 VOS_ASSERT(0) ;
3556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3558 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 /* reset the the system role*/
3560 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3561
3562 /* Reset the BA related information */
3563 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3564 {
3565 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3566 {
3567 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3568 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3569 /* Reset framesTxed counters here */
3570 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3571 {
3572 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3573 }
3574 }
3575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 return ;
3578}
3579
Jeff Johnson295189b2012-06-20 16:38:30 -07003580/*
3581 * FUNCTION: WDA_ProcessDelBssReq
3582 * Init DEL BSS req with WDI
3583 */
3584VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3585 tDeleteBssParams *delBssParam)
3586{
3587 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3589 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3590 sizeof(WDI_DelBSSReqParamsType)) ;
3591 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003593 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003594 if(NULL == wdiDelBssReqParam)
3595 {
3596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 VOS_ASSERT(0);
3599 return VOS_STATUS_E_NOMEM;
3600 }
3601 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3602 if(NULL == pWdaParams)
3603 {
3604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003605 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 VOS_ASSERT(0);
3607 vos_mem_free(wdiDelBssReqParam);
3608 return VOS_STATUS_E_NOMEM;
3609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003610 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3611 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3612
3613 /* Store Init Req pointer, as this will be used for response */
3614 /* store Params pass it to WDI */
3615 pWdaParams->pWdaContext = pWDA;
3616 pWdaParams->wdaMsgParam = delBssParam;
3617 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003618 status = WDI_DelBSSReq(wdiDelBssReqParam,
3619 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003620 if(IS_WDI_STATUS_FAILURE(status))
3621 {
3622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3623 "Failure in Del BSS WDI API, free all the memory " );
3624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3625 vos_mem_free(pWdaParams) ;
3626 delBssParam->status = eSIR_FAILURE ;
3627 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 return CONVERT_WDI2VOS_STATUS(status) ;
3630}
Jeff Johnson295189b2012-06-20 16:38:30 -07003631/*
3632 * FUNCTION: WDA_DelSTAReqCallback
3633 * Dens DEL STA RSP back to PE
3634 */
3635void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3636 void* pUserData)
3637{
3638 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3639 tWDA_CbContext *pWDA;
3640 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003642 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 if(NULL == pWdaParams)
3644 {
3645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003646 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003647 VOS_ASSERT(0) ;
3648 return ;
3649 }
3650 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3651 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003652 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3654 {
3655 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3656 {
3657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003658 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 VOS_ASSERT(0) ;
3660 }
3661 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3662 }
3663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3664 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003665 /*Reset the BA information corresponding to this STAIdx */
3666 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3667 WDA_INVALID_STA_INDEX;
3668 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3669
3670 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 return ;
3672}
Jeff Johnson295189b2012-06-20 16:38:30 -07003673/*
3674 * FUNCTION: WDA_ProcessDelStaReq
3675 * Init DEL STA req with WDI
3676 */
3677VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3678 tDeleteStaParams *delStaParam)
3679{
3680 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3682 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3683 sizeof(WDI_DelSTAReqParamsType)) ;
3684 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003686 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003687 if(NULL == wdiDelStaReqParam)
3688 {
3689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003690 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 VOS_ASSERT(0);
3692 return VOS_STATUS_E_NOMEM;
3693 }
3694 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3695 if(NULL == pWdaParams)
3696 {
3697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003698 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003699 VOS_ASSERT(0);
3700 vos_mem_free(wdiDelStaReqParam);
3701 return VOS_STATUS_E_NOMEM;
3702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003703 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3704 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 /* Store Init Req pointer, as this will be used for response */
3706 /* store Params pass it to WDI */
3707 pWdaParams->pWdaContext = pWDA;
3708 pWdaParams->wdaMsgParam = delStaParam;
3709 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003710 status = WDI_DelSTAReq(wdiDelStaReqParam,
3711 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 if(IS_WDI_STATUS_FAILURE(status))
3713 {
3714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3715 "Failure in Del STA WDI API, free all the memory status = %d",
3716 status );
3717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3718 vos_mem_free(pWdaParams) ;
3719 delStaParam->status = eSIR_FAILURE ;
3720 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003722 return CONVERT_WDI2VOS_STATUS(status) ;
3723}
Jeff Johnson295189b2012-06-20 16:38:30 -07003724void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3725{
3726 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3727 tWDA_CbContext *pWDA;
3728 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003731 if(NULL == pWdaParams)
3732 {
3733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003734 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003735 VOS_ASSERT(0) ;
3736 return ;
3737 }
3738 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3739 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3741 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3743 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3744 pwdiAddSTASelfRsp->macSelfSta,
3745 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003746 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003747 return ;
3748}
Jeff Johnson295189b2012-06-20 16:38:30 -07003749/*
3750 * FUNCTION: WDA_ProcessAddStaSelfReq
3751 *
3752 */
3753VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3754{
3755 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003756 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3758 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3759 sizeof(WDI_AddSTASelfReqParamsType)) ;
3760 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003762 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003763 if( NULL == wdiAddStaSelfReq )
3764 {
3765 VOS_ASSERT( 0 );
3766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003767 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 return( VOS_STATUS_E_NOMEM );
3769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003770 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 if( NULL == pWdaParams )
3772 {
3773 VOS_ASSERT( 0 );
3774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003775 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003776 vos_mem_free(wdiAddStaSelfReq) ;
3777 return( VOS_STATUS_E_NOMEM );
3778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003779 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003780 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003781 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 /* Store Init Req pointer, as this will be used for response */
3783 /* store Params pass it to WDI */
3784 pWdaParams->pWdaContext = pWDA;
3785 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3786 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003787 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003788
Jeff Johnson43971f52012-07-17 12:26:56 -07003789 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003790 {
3791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3792 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003793 wstatus );
3794 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3796 vos_mem_free(pWdaParams) ;
3797 pAddStaSelfReq->status = eSIR_FAILURE ;
3798 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3799 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003800 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003801}
Jeff Johnson295189b2012-06-20 16:38:30 -07003802/*
3803 * FUNCTION: WDA_DelSTASelfRespCallback
3804 *
3805 */
3806void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3807 wdiDelStaSelfRspParams , void* pUserData)
3808{
3809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3810 tWDA_CbContext *pWDA;
3811 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003813 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003814 if (NULL == pWdaParams)
3815 {
3816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003817 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003818 VOS_ASSERT(0);
3819 return;
3820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003821 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3822 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003824 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003825
3826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3827 vos_mem_free(pWdaParams) ;
3828
3829 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003830 return ;
3831}
Jeff Johnson295189b2012-06-20 16:38:30 -07003832/*
3833 * FUNCTION: WDA_DelSTASelfReqCallback
3834 *
3835 */
3836void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3837 void* pUserData)
3838{
3839 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3840 tWDA_CbContext *pWDA;
3841 tDelStaSelfParams *delStaSelfParams;
3842
3843 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303844 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003845 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003846
3847 if (NULL == pWdaParams)
3848 {
3849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003850 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 VOS_ASSERT(0);
3852 return;
3853 }
3854
3855 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3856 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3857
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003858 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003859
3860 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3861 {
3862 VOS_ASSERT(0);
3863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3864 vos_mem_free(pWdaParams) ;
3865 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3866 }
3867
3868 return ;
3869}
3870
3871/*
3872 * FUNCTION: WDA_DelSTASelfReq
3873 * Trigger Config STA processing in WDI
3874 */
3875VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3876 tDelStaSelfParams* pDelStaSelfReqParam)
3877{
3878 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003879 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 tWDA_ReqParams *pWdaParams = NULL;
3881 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3882 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3883 sizeof(WDI_DelSTASelfReqParamsType)) ;
3884
Jeff Johnson295189b2012-06-20 16:38:30 -07003885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003887 if( NULL == wdiDelStaSelfReq )
3888 {
3889 VOS_ASSERT( 0 );
3890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003891 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 return( VOS_STATUS_E_NOMEM );
3893 }
3894
3895 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3896 if( NULL == pWdaParams )
3897 {
3898 VOS_ASSERT( 0 );
3899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003900 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 vos_mem_free(wdiDelStaSelfReq) ;
3902 return( VOS_STATUS_E_NOMEM );
3903 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 pWdaParams->pWdaContext = pWDA;
3905 /* Store param pointer as passed in by caller */
3906 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3907 /* store Params pass it to WDI */
3908 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003909 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3910 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3911
3912 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3913 wdiDelStaSelfReq->pUserData = pWdaParams;
3914
Jeff Johnson43971f52012-07-17 12:26:56 -07003915 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003916 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3917
Jeff Johnson43971f52012-07-17 12:26:56 -07003918 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003919 {
3920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3921 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3922 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003923 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3925 vos_mem_free(pWdaParams) ;
3926 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3927 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3928 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003929 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003930}
3931
Jeff Johnson295189b2012-06-20 16:38:30 -07003932/*
3933 * FUNCTION: WDA_SendMsg
3934 * Send Message back to PE
3935 */
3936void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3937 void *pBodyptr, tANI_U32 bodyVal)
3938{
3939 tSirMsgQ msg = {0} ;
3940 tANI_U32 status = VOS_STATUS_SUCCESS ;
3941 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 msg.type = msgType;
3943 msg.bodyval = bodyVal;
3944 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003946 if (VOS_STATUS_SUCCESS != status)
3947 {
3948 if(NULL != pBodyptr)
3949 {
3950 vos_mem_free(pBodyptr);
3951 }
3952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003953 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003954 VOS_ASSERT(0) ;
3955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 return ;
3957}
Jeff Johnson295189b2012-06-20 16:38:30 -07003958/*
3959 * FUNCTION: WDA_UpdateBSSParams
3960 * Translated WDA/PE BSS info into WDI BSS info..
3961 */
3962void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3963 WDI_ConfigBSSReqInfoType *wdiBssParams,
3964 tAddBssParams *wdaBssParams)
3965{
3966 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003967 /* copy bssReq Params to WDI structure */
3968 vos_mem_copy(wdiBssParams->macBSSID,
3969 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3970 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3971 sizeof(tSirMacAddr)) ;
3972 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3973 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3974 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 wdiBssParams->ucShortSlotTimeSupported =
3976 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3978 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3979 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3980 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3981 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3982
3983 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3984 wdiBssParams->ucTXOPProtectionFullSupport =
3985 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003986 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3987 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003989 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3990 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3991 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3992 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3993
Chet Lanctot186b5732013-03-18 10:26:30 -07003994 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3995
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 /* copy SSID into WDI structure */
3997 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3998 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3999 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4001 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004003#ifdef WLAN_FEATURE_VOWIFI
4004 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4005#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004008#ifdef WLAN_FEATURE_VOWIFI_11R
4009 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004010 if(wdiBssParams->bExtSetStaKeyParamValid)
4011 {
4012 /* copy set STA key params to WDI structure */
4013 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4014 wdaBssParams->extSetStaKeyParam.staIdx;
4015 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4016 wdaBssParams->extSetStaKeyParam.encType;
4017 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4018 wdaBssParams->extSetStaKeyParam.wepType;
4019 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4020 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004021 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4022 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004023 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004024 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4025 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4026 {
4027 WDA_GetWepKeysFromCfg( pWDA,
4028 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4029 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4030 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4031 }
4032 else
4033 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4035 keyIndex++)
4036 {
4037 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4038 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4039 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4040 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4041 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4042 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4044 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4045 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4046 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4047 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4048 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4049 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4050 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4053 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004054 }
4055 }
4056 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4057 }
4058 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4059 {
4060 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4061 sizeof(wdaBssParams->extSetStaKeyParam) );
4062 }
4063#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004064#ifdef WLAN_FEATURE_11AC
4065 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4066 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4067#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004068
4069 return ;
4070}
Jeff Johnson295189b2012-06-20 16:38:30 -07004071/*
4072 * FUNCTION: WDA_UpdateSTAParams
4073 * Translated WDA/PE BSS info into WDI BSS info..
4074 */
4075void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4076 WDI_ConfigStaReqInfoType *wdiStaParams,
4077 tAddStaParams *wdaStaParams)
4078{
4079 tANI_U8 i = 0;
4080 /* Update STA params */
4081 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4082 sizeof(tSirMacAddr)) ;
4083 wdiStaParams->usAssocId = wdaStaParams->assocId;
4084 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004085 wdiStaParams->staIdx = wdaStaParams->staIdx;
4086
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 wdiStaParams->ucShortPreambleSupported =
4088 wdaStaParams->shortPreambleSupported;
4089 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4090 sizeof(tSirMacAddr)) ;
4091 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4092
4093 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4094
4095 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4096 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4097 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4098 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4099 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4100 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4101 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4102
4103 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4104 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004105 wdiStaParams->wdiSupportedRates.opRateMode =
4106 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4108 {
4109 wdiStaParams->wdiSupportedRates.llbRates[i] =
4110 wdaStaParams->supportedRates.llbRates[i];
4111 }
4112 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4113 {
4114 wdiStaParams->wdiSupportedRates.llaRates[i] =
4115 wdaStaParams->supportedRates.llaRates[i];
4116 }
4117 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4118 {
4119 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4120 wdaStaParams->supportedRates.aniLegacyRates[i];
4121 }
4122 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4123 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004124#ifdef WLAN_FEATURE_11AC
4125 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4126 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4127 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4128 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4129#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004130 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4131 {
4132 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4133 wdaStaParams->supportedRates.supportedMCSSet[i];
4134 }
4135 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4136 wdaStaParams->supportedRates.rxHighestDataRate;
4137
4138 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4139
4140 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4141
4142 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4143 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4144 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4145
4146 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4147 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4148 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4149 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004151#ifdef WLAN_FEATURE_11AC
4152 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4153 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004154 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004155#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004156 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4157 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 return ;
4159}
Jeff Johnson295189b2012-06-20 16:38:30 -07004160/*
4161 * -------------------------------------------------------------------------
4162 * CFG update to WDI
4163 * -------------------------------------------------------------------------
4164 */
4165
4166 /*
4167 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4168 * Convert the WNI CFG ID to HAL CFG ID
4169 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004170static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004171{
4172 switch(wniCfgId)
4173 {
4174 case WNI_CFG_STA_ID:
4175 return QWLAN_HAL_CFG_STA_ID;
4176 case WNI_CFG_CURRENT_TX_ANTENNA:
4177 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4178 case WNI_CFG_CURRENT_RX_ANTENNA:
4179 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4180 case WNI_CFG_LOW_GAIN_OVERRIDE:
4181 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4182 case WNI_CFG_POWER_STATE_PER_CHAIN:
4183 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4184 case WNI_CFG_CAL_PERIOD:
4185 return QWLAN_HAL_CFG_CAL_PERIOD;
4186 case WNI_CFG_CAL_CONTROL:
4187 return QWLAN_HAL_CFG_CAL_CONTROL;
4188 case WNI_CFG_PROXIMITY:
4189 return QWLAN_HAL_CFG_PROXIMITY;
4190 case WNI_CFG_NETWORK_DENSITY:
4191 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4192 case WNI_CFG_MAX_MEDIUM_TIME:
4193 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4194 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4195 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4196 case WNI_CFG_RTS_THRESHOLD:
4197 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4198 case WNI_CFG_SHORT_RETRY_LIMIT:
4199 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4200 case WNI_CFG_LONG_RETRY_LIMIT:
4201 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4202 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4203 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4204 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4205 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4206 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4207 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4208 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4209 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4210 case WNI_CFG_FIXED_RATE:
4211 return QWLAN_HAL_CFG_FIXED_RATE;
4212 case WNI_CFG_RETRYRATE_POLICY:
4213 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4214 case WNI_CFG_RETRYRATE_SECONDARY:
4215 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4216 case WNI_CFG_RETRYRATE_TERTIARY:
4217 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4218 case WNI_CFG_FORCE_POLICY_PROTECTION:
4219 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4220 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4221 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4222 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4223 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4224 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4225 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4226 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4227 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4228 case WNI_CFG_MAX_BA_SESSIONS:
4229 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4230 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4231 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4232 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4233 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4234 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4235 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4236 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4237 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4238 case WNI_CFG_STATS_PERIOD:
4239 return QWLAN_HAL_CFG_STATS_PERIOD;
4240 case WNI_CFG_CFP_MAX_DURATION:
4241 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4242#if 0 /*This is not part of CFG*/
4243 case WNI_CFG_FRAME_TRANS_ENABLED:
4244 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4245#endif
4246 case WNI_CFG_DTIM_PERIOD:
4247 return QWLAN_HAL_CFG_DTIM_PERIOD;
4248 case WNI_CFG_EDCA_WME_ACBK:
4249 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4250 case WNI_CFG_EDCA_WME_ACBE:
4251 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4252 case WNI_CFG_EDCA_WME_ACVI:
4253 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4254 case WNI_CFG_EDCA_WME_ACVO:
4255 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4256#if 0
4257 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4258 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4259 case WNI_CFG_TELE_BCN_TRANS_LI:
4260 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4261 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4262 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4263 case WNI_CFG_TELE_BCN_MAX_LI:
4264 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4265 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4266 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4267#endif
4268 case WNI_CFG_ENABLE_CLOSE_LOOP:
4269 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004270 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4271 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 default:
4273 {
4274 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004275 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 wniCfgId);
4277 return VOS_STATUS_E_INVAL;
4278 }
4279 }
4280}
Jeff Johnson295189b2012-06-20 16:38:30 -07004281/*
4282 * FUNCTION: WDA_UpdateCfgCallback
4283 *
4284 */
4285void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4286{
4287 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4288 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4289 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 /*
4293 * currently there is no response message is expected between PE and
4294 * WDA, Failure return from WDI is a ASSERT condition
4295 */
4296 if(WDI_STATUS_SUCCESS != wdiStatus)
4297 {
4298 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004299 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4301 }
4302
4303 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4304 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4305 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 return ;
4307}
Jeff Johnson295189b2012-06-20 16:38:30 -07004308/*
4309 * FUNCTION: WDA_UpdateCfg
4310 *
4311 */
4312VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4313{
4314
4315 WDI_Status status = WDI_STATUS_SUCCESS ;
4316 tANI_U32 val =0;
4317 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4318 tHalCfg *configData;
4319 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4320 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004322 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 if (NULL == pMac )
4324 {
4325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004326 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 return VOS_STATUS_E_FAILURE;
4328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 if(WDA_START_STATE != pWDA->wdaState)
4330 {
4331 return VOS_STATUS_E_FAILURE;
4332 }
4333
4334 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4335 {
4336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004337 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 VOS_ASSERT(0);
4339 return VOS_STATUS_E_FAILURE;
4340 }
4341
4342 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4343 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 if(NULL == wdiCfgReqParam)
4345 {
4346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004348 VOS_ASSERT(0);
4349 return VOS_STATUS_E_NOMEM;
4350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4352 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004353 if(NULL == wdiCfgReqParam->pConfigBuffer)
4354 {
4355 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004357 vos_mem_free(wdiCfgReqParam);
4358 VOS_ASSERT(0);
4359 return VOS_STATUS_E_NOMEM;
4360 }
4361
4362 /*convert the WNI CFG Id to HAL CFG Id*/
4363 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4364 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4365
4366 /*TODO: revisit this for handling string parameters */
4367 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4368 &val) != eSIR_SUCCESS)
4369 {
4370 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004371 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004372 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4373 vos_mem_free(wdiCfgReqParam);
4374 return eSIR_FAILURE;
4375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4377 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4378 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4379 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4380 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4381
4382 /* store Params pass it to WDI */
4383 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004384#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4385 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4386 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 if(IS_WDI_STATUS_FAILURE(status))
4388 {
4389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4390 "Failure in Update CFG WDI API, free all the memory " );
4391 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4392 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4393 pWDA->wdaWdiCfgApiMsgParam = NULL;
4394 /* Failure is not expected */
4395 VOS_ASSERT(0) ;
4396 }
4397#else
4398 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4399 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4400 pWDA->wdaWdiCfgApiMsgParam = NULL;
4401#endif
4402 return CONVERT_WDI2VOS_STATUS(status) ;
4403}
4404
Jeff Johnson295189b2012-06-20 16:38:30 -07004405VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4406 v_U8_t *pDefaultKeyId,
4407 v_U8_t *pNumKeys,
4408 WDI_KeysType *pWdiKeys )
4409{
4410 v_U32_t i, j, defKeyId = 0;
4411 v_U32_t val = SIR_MAC_KEY_LENGTH;
4412 VOS_STATUS status = WDI_STATUS_SUCCESS;
4413 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 if (NULL == pMac )
4415 {
4416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004417 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004418 return VOS_STATUS_E_FAILURE;
4419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4421 &defKeyId ))
4422 {
4423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4424 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4425 }
4426
4427 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 /* Need to extract ALL of the configured WEP Keys */
4429 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4430 {
4431 val = SIR_MAC_KEY_LENGTH;
4432 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4433 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4434 pWdiKeys[j].key,
4435 &val ))
4436 {
4437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004438 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004439 }
4440 else
4441 {
4442 pWdiKeys[j].keyId = (tANI_U8) i;
4443 /*
4444 * Actually, a DC (Don't Care) because
4445 * this is determined (and set) by PE/MLME
4446 */
4447 pWdiKeys[j].unicast = 0;
4448 /*
4449 * Another DC (Don't Care)
4450 */
4451 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4452 /* Another DC (Don't Care). Unused for WEP */
4453 pWdiKeys[j].paeRole = 0;
4454 /* Determined from wlan_cfgGetStr() above.*/
4455 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 j++;
4457 *pNumKeys = (tANI_U8) j;
4458 }
4459 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 return status;
4461}
Jeff Johnson295189b2012-06-20 16:38:30 -07004462/*
4463 * FUNCTION: WDA_SetBssKeyReqCallback
4464 * send SET BSS key RSP back to PE
4465 */
4466void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4467{
4468 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4469 tWDA_CbContext *pWDA;
4470 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004472 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 if(NULL == pWdaParams)
4474 {
4475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004476 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 VOS_ASSERT(0) ;
4478 return ;
4479 }
4480 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4481 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4483 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004484 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 return ;
4487}
Jeff Johnson295189b2012-06-20 16:38:30 -07004488/*
4489 * FUNCTION: WDA_ProcessSetBssKeyReq
4490 * Request to WDI for programming the BSS key( key for
4491 * broadcast/multicast frames Encryption)
4492 */
4493VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4494 tSetBssKeyParams *setBssKeyParams )
4495{
4496 WDI_Status status = WDI_STATUS_SUCCESS ;
4497 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4498 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4499 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4500 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004501 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004503 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004504 if(NULL == wdiSetBssKeyParam)
4505 {
4506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 VOS_ASSERT(0);
4509 return VOS_STATUS_E_NOMEM;
4510 }
4511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4512 if(NULL == pWdaParams)
4513 {
4514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004516 VOS_ASSERT(0);
4517 vos_mem_free(wdiSetBssKeyParam);
4518 return VOS_STATUS_E_NOMEM;
4519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 /* copy set BSS params to WDI structure */
4522 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4523 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4524 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 if(setBssKeyParams->encType != eSIR_ED_NONE)
4526 {
4527 if( setBssKeyParams->numKeys == 0 &&
4528 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4529 setBssKeyParams->encType == eSIR_ED_WEP104))
4530 {
4531 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4533 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4534 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4535 }
4536 else
4537 {
4538 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4539 {
4540 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4541 setBssKeyParams->key[keyIndex].keyId;
4542 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4543 setBssKeyParams->key[keyIndex].unicast;
4544 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4545 setBssKeyParams->key[keyIndex].keyDirection;
4546 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4547 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4548 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4549 setBssKeyParams->key[keyIndex].paeRole;
4550 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4551 setBssKeyParams->key[keyIndex].keyLength;
4552 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4553 setBssKeyParams->key[keyIndex].key,
4554 SIR_MAC_MAX_KEY_LENGTH);
4555 }
4556 }
4557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4559 setBssKeyParams->singleTidRc;
4560 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 /* Store set key pointer, as this will be used for response */
4562 /* store Params pass it to WDI */
4563 pWdaParams->pWdaContext = pWDA;
4564 pWdaParams->wdaMsgParam = setBssKeyParams;
4565 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004566 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4567 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4568
4569 if(IS_WDI_STATUS_FAILURE(status))
4570 {
4571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4572 "Failure in Set BSS Key Req WDI API, free all the memory " );
4573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4574 vos_mem_free(pWdaParams) ;
4575 setBssKeyParams->status = eSIR_FAILURE ;
4576 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 return CONVERT_WDI2VOS_STATUS(status) ;
4579}
Jeff Johnson295189b2012-06-20 16:38:30 -07004580/*
4581 * FUNCTION: WDA_RemoveBssKeyReqCallback
4582 * send SET BSS key RSP back to PE
4583 */
4584void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4585{
4586 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4587 tWDA_CbContext *pWDA;
4588 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004590 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004591 if(NULL == pWdaParams)
4592 {
4593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004594 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 VOS_ASSERT(0) ;
4596 return ;
4597 }
4598 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4599 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4601 vos_mem_free(pWdaParams) ;
4602
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004603 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004605 return ;
4606}
Jeff Johnson295189b2012-06-20 16:38:30 -07004607/*
4608 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4609 * Request to WDI to remove the BSS key( key for broadcast/multicast
4610 * frames Encryption)
4611 */
4612VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4613 tRemoveBssKeyParams *removeBssKeyParams )
4614{
4615 WDI_Status status = WDI_STATUS_SUCCESS ;
4616 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4617 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4618 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4619 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004621 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004622 if(NULL == wdiRemoveBssKeyParam)
4623 {
4624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 VOS_ASSERT(0);
4627 return VOS_STATUS_E_NOMEM;
4628 }
4629 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4630 if(NULL == pWdaParams)
4631 {
4632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 VOS_ASSERT(0);
4635 vos_mem_free(wdiRemoveBssKeyParam);
4636 return VOS_STATUS_E_NOMEM;
4637 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 /* copy Remove BSS key params to WDI structure*/
4639 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4640 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4641 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4642 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4643 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 /* Store remove key pointer, as this will be used for response */
4645 /* store Params pass it to WDI */
4646 pWdaParams->pWdaContext = pWDA;
4647 pWdaParams->wdaMsgParam = removeBssKeyParams;
4648 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4650 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004651 if(IS_WDI_STATUS_FAILURE(status))
4652 {
4653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4654 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4656 vos_mem_free(pWdaParams) ;
4657 removeBssKeyParams->status = eSIR_FAILURE ;
4658 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4659 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004660 return CONVERT_WDI2VOS_STATUS(status) ;
4661}
Jeff Johnson295189b2012-06-20 16:38:30 -07004662/*
4663 * FUNCTION: WDA_SetBssKeyReqCallback
4664 * send SET BSS key RSP back to PE
4665 */
4666void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4667{
4668 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4669 tWDA_CbContext *pWDA;
4670 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004672 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 if(NULL == pWdaParams)
4674 {
4675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004676 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004677 VOS_ASSERT(0) ;
4678 return ;
4679 }
4680 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4681 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4683 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004684 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 return ;
4687}
Jeff Johnson295189b2012-06-20 16:38:30 -07004688/*
4689 * FUNCTION: WDA_ProcessSetStaKeyReq
4690 * Request to WDI for programming the STA key( key for Unicast frames
4691 * Encryption)
4692 */
4693VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4694 tSetStaKeyParams *setStaKeyParams )
4695{
4696 WDI_Status status = WDI_STATUS_SUCCESS ;
4697 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4698 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4699 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4700 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004703 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 if(NULL == wdiSetStaKeyParam)
4705 {
4706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 VOS_ASSERT(0);
4709 return VOS_STATUS_E_NOMEM;
4710 }
4711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4712 if(NULL == pWdaParams)
4713 {
4714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 VOS_ASSERT(0);
4717 vos_mem_free(wdiSetStaKeyParam);
4718 return VOS_STATUS_E_NOMEM;
4719 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004720 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 /* copy set STA key params to WDI structure */
4723 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4724 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4725 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4726 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 if(setStaKeyParams->encType != eSIR_ED_NONE)
4728 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004729 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4731 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4732 {
4733 WDA_GetWepKeysFromCfg( pWDA,
4734 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4735 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4736 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4737 }
4738 else
4739 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4741 keyIndex++)
4742 {
4743 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4744 setStaKeyParams->key[keyIndex].keyId;
4745 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4746 setStaKeyParams->key[keyIndex].unicast;
4747 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4748 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004749 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4750 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4751 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4752 setStaKeyParams->key[keyIndex].paeRole;
4753 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4754 setStaKeyParams->key[keyIndex].keyLength;
4755 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4756 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4757 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4758 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4759 {
4760 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4761 }
4762 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4764 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004765 }
4766 }
4767 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4768 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004769 /* Store set key pointer, as this will be used for response */
4770 /* store Params pass it to WDI */
4771 pWdaParams->pWdaContext = pWDA;
4772 pWdaParams->wdaMsgParam = setStaKeyParams;
4773 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4775 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 if(IS_WDI_STATUS_FAILURE(status))
4777 {
4778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4779 "Failure in set STA Key Req WDI API, free all the memory " );
4780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4781 vos_mem_free(pWdaParams) ;
4782 setStaKeyParams->status = eSIR_FAILURE ;
4783 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4784 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004785 return CONVERT_WDI2VOS_STATUS(status) ;
4786}
Jeff Johnson295189b2012-06-20 16:38:30 -07004787/*
4788 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4789 * send SET Bcast STA key RSP back to PE
4790 */
4791void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4792{
4793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4794 tWDA_CbContext *pWDA;
4795 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004797 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 if(NULL == pWdaParams)
4799 {
4800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004801 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004802 VOS_ASSERT(0) ;
4803 return ;
4804 }
4805 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4806 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4808 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004809 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 return ;
4812}
4813
Jeff Johnson295189b2012-06-20 16:38:30 -07004814/*
4815 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4816 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4817 * Encryption)
4818 */
4819VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4820 tSetStaKeyParams *setStaKeyParams )
4821{
4822 WDI_Status status = WDI_STATUS_SUCCESS ;
4823 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4824 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4825 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4826 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004829 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004830 if(NULL == wdiSetStaKeyParam)
4831 {
4832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004833 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004834 VOS_ASSERT(0);
4835 return VOS_STATUS_E_NOMEM;
4836 }
4837 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4838 if(NULL == pWdaParams)
4839 {
4840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004841 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 VOS_ASSERT(0);
4843 vos_mem_free(wdiSetStaKeyParam);
4844 return VOS_STATUS_E_NOMEM;
4845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004848 /* copy set STA key params to WDI structure */
4849 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4850 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4851 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4852 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 if(setStaKeyParams->encType != eSIR_ED_NONE)
4854 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4856 keyIndex++)
4857 {
4858 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4859 setStaKeyParams->key[keyIndex].keyId;
4860 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4861 setStaKeyParams->key[keyIndex].unicast;
4862 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4863 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4865 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4866 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4867 setStaKeyParams->key[keyIndex].paeRole;
4868 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4869 setStaKeyParams->key[keyIndex].keyLength;
4870 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4871 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4874 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 }
4876 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 /* Store set key pointer, as this will be used for response */
4878 /* store Params pass it to WDI */
4879 pWdaParams->pWdaContext = pWDA;
4880 pWdaParams->wdaMsgParam = setStaKeyParams;
4881 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4883 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 if(IS_WDI_STATUS_FAILURE(status))
4885 {
4886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4887 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4889 vos_mem_free(pWdaParams) ;
4890 setStaKeyParams->status = eSIR_FAILURE ;
4891 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 return CONVERT_WDI2VOS_STATUS(status) ;
4894}
Jeff Johnson295189b2012-06-20 16:38:30 -07004895/*
4896 * FUNCTION: WDA_RemoveStaKeyReqCallback
4897 * send SET BSS key RSP back to PE
4898 */
4899void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4900{
4901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4902 tWDA_CbContext *pWDA;
4903 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004905 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 if(NULL == pWdaParams)
4907 {
4908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004909 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 VOS_ASSERT(0) ;
4911 return ;
4912 }
4913 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4914 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4916 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004917 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004918 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004919 return ;
4920}
4921
Jeff Johnson295189b2012-06-20 16:38:30 -07004922/*
4923 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4924 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4925 */
4926VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4927 tRemoveStaKeyParams *removeStaKeyParams )
4928{
4929 WDI_Status status = WDI_STATUS_SUCCESS ;
4930 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4931 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4932 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4933 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004935 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 if(NULL == wdiRemoveStaKeyParam)
4937 {
4938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004939 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004940 VOS_ASSERT(0);
4941 return VOS_STATUS_E_NOMEM;
4942 }
4943 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4944 if(NULL == pWdaParams)
4945 {
4946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 VOS_ASSERT(0);
4949 vos_mem_free(wdiRemoveStaKeyParam);
4950 return VOS_STATUS_E_NOMEM;
4951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 /* copy remove STA key params to WDI structure*/
4953 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4954 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4955 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4956 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4957 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 /* Store remove key pointer, as this will be used for response */
4959 /* store Params pass it to WDI */
4960 pWdaParams->pWdaContext = pWDA;
4961 pWdaParams->wdaMsgParam = removeStaKeyParams;
4962 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004963 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4964 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 if(IS_WDI_STATUS_FAILURE(status))
4966 {
4967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4968 "Failure in remove STA Key Req WDI API, free all the memory " );
4969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4970 vos_mem_free(pWdaParams) ;
4971 removeStaKeyParams->status = eSIR_FAILURE ;
4972 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004974 return CONVERT_WDI2VOS_STATUS(status) ;
4975}
Jeff Johnson295189b2012-06-20 16:38:30 -07004976/*
4977 * FUNCTION: WDA_IsHandleSetLinkStateReq
4978 * Update the WDA state and return the status to handle this message or not
4979 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004980WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4981 tWDA_CbContext *pWDA,
4982 tLinkStateParams *linkStateParams)
4983{
4984 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004985 switch(linkStateParams->state)
4986 {
4987 case eSIR_LINK_PREASSOC_STATE:
4988 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4989 /*
4990 * set the WDA state to PRE ASSOC
4991 * copy the BSSID into pWDA to use it in join request and return,
4992 * No need to handle these messages.
4993 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004994 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4995 {
4996 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004998 }
4999 else
5000 {
5001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005002 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005003 VOS_ASSERT(0);
5004 }
5005
5006 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5007 {
5008 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005010 }
5011 else
5012 {
5013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005014 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005015 VOS_ASSERT(0);
5016 }
5017
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5019 *channel and after ) so reset the WDA state to ready when the second
5020 * time UMAC issue the link state with PREASSOC
5021 */
5022 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5023 {
5024 /* RESET WDA state back to WDA_READY_STATE */
5025 pWDA->wdaState = WDA_READY_STATE;
5026 }
5027 else
5028 {
5029 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5030 }
5031 //populate linkState info in WDACbCtxt
5032 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005033 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005034 default:
5035 if(pWDA->wdaState != WDA_READY_STATE)
5036 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005037 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5038 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5039 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5040 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5041 *the ASSERT in WDA_Stop during module unload.*/
5042 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5043 {
5044 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005045 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005046 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005047 else
5048 {
5049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005050 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005051 status = WDA_IGNORE_SET_LINK_STATE;
5052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005053 }
5054 break;
5055 }
5056
5057 return status;
5058}
Jeff Johnson295189b2012-06-20 16:38:30 -07005059/*
5060 * FUNCTION: WDA_SetLinkStateCallback
5061 * call back function for set link state from WDI
5062 */
5063void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5064{
5065 tWDA_CbContext *pWDA;
5066 tLinkStateParams *linkStateParams;
5067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005069 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 if(NULL == pWdaParams)
5071 {
5072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005073 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 VOS_ASSERT(0) ;
5075 return ;
5076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 /*
5080 * In STA mode start the BA activity check timer after association
5081 * and in AP mode start BA activity check timer after BSS start */
5082 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5083 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005084 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5085 ((status == WDI_STATUS_SUCCESS) &&
5086 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005087 {
5088 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005090 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005091 /*
5092 * No respone required for WDA_SET_LINK_STATE so free the request
5093 * param here
5094 */
5095 if( pWdaParams != NULL )
5096 {
5097 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5098 {
5099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5100 }
5101 vos_mem_free(pWdaParams);
5102 }
5103 return ;
5104}
Jeff Johnson295189b2012-06-20 16:38:30 -07005105/*
5106 * FUNCTION: WDA_ProcessSetLinkState
5107 * Request to WDI to set the link status.
5108 */
5109VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5110 tLinkStateParams *linkStateParams)
5111{
5112 WDI_Status status = WDI_STATUS_SUCCESS ;
5113 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5114 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5115 sizeof(WDI_SetLinkReqParamsType)) ;
5116 tWDA_ReqParams *pWdaParams ;
5117 tpAniSirGlobal pMac;
5118 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5119
5120 if(NULL == pMac)
5121 {
5122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005123 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005125 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 return VOS_STATUS_E_FAILURE;
5127 }
5128
5129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005130 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005131 if(NULL == wdiSetLinkStateParam)
5132 {
5133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 VOS_ASSERT(0);
5136 return VOS_STATUS_E_NOMEM;
5137 }
5138 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5139 if(NULL == pWdaParams)
5140 {
5141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005142 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005143 VOS_ASSERT(0);
5144 vos_mem_free(wdiSetLinkStateParam);
5145 return VOS_STATUS_E_NOMEM;
5146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 if(WDA_IGNORE_SET_LINK_STATE ==
5148 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5149 {
5150 status = WDI_STATUS_E_FAILURE;
5151 }
5152 else
5153 {
5154 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5155 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005156 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5157 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005158 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5159 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 pWdaParams->pWdaContext = pWDA;
5161 /* Store remove key pointer, as this will be used for response */
5162 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 /* store Params pass it to WDI */
5164 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5165 /* Stop Timer only other than GO role and concurrent session */
5166 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005167 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5169 {
5170 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5173 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 if(IS_WDI_STATUS_FAILURE(status))
5175 {
5176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5177 "Failure in set link state Req WDI API, free all the memory " );
5178 }
5179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 if(IS_WDI_STATUS_FAILURE(status))
5181 {
5182 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005183 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005184 vos_mem_free(pWdaParams);
5185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005186 return CONVERT_WDI2VOS_STATUS(status) ;
5187}
Jeff Johnson295189b2012-06-20 16:38:30 -07005188/*
5189 * FUNCTION: WDA_GetStatsReqParamsCallback
5190 * send the response to PE with Stats received from WDI
5191 */
5192void WDA_GetStatsReqParamsCallback(
5193 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5194 void* pUserData)
5195{
5196 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5197 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5198
5199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005200 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 pGetPEStatsRspParams =
5202 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5203 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5204
5205 if(NULL == pGetPEStatsRspParams)
5206 {
5207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005208 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 VOS_ASSERT(0);
5210 return;
5211 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5213 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5214 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5215 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005216
5217 //Fill the Session Id Properly in PE
5218 pGetPEStatsRspParams->sessionId = 0;
5219 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005220 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005221 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5222 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 vos_mem_copy( pGetPEStatsRspParams + 1,
5224 wdiGetStatsRsp + 1,
5225 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005226 /* send response to UMAC*/
5227 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5228
5229 return;
5230}
5231
Jeff Johnson295189b2012-06-20 16:38:30 -07005232/*
5233 * FUNCTION: WDA_ProcessGetStatsReq
5234 * Request to WDI to get the statistics
5235 */
5236VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5237 tAniGetPEStatsReq *pGetStatsParams)
5238{
5239 WDI_Status status = WDI_STATUS_SUCCESS ;
5240 WDI_GetStatsReqParamsType wdiGetStatsParam;
5241 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005243 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5245 pGetStatsParams->staId;
5246 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5247 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 status = WDI_GetStatsReq(&wdiGetStatsParam,
5250 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005251 if(IS_WDI_STATUS_FAILURE(status))
5252 {
5253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5254 "Failure in Get Stats Req WDI API, free all the memory " );
5255 pGetPEStatsRspParams =
5256 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5257 if(NULL == pGetPEStatsRspParams)
5258 {
5259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005260 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005261 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005262 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005263 return VOS_STATUS_E_NOMEM;
5264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005265 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5266 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5267 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5268 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5269 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5270 (void *)pGetPEStatsRspParams, 0) ;
5271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 /* Free the request message */
5273 vos_mem_free(pGetStatsParams);
5274 return CONVERT_WDI2VOS_STATUS(status);
5275}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005276
5277#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5278/*
5279 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5280 * send the response to PE with roam Rssi received from WDI
5281 */
5282void WDA_GetRoamRssiReqParamsCallback(
5283 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5284 void* pUserData)
5285{
5286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5287 tWDA_CbContext *pWDA = NULL;
5288 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5289 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5291 "<------ %s " ,__func__);
5292 if(NULL == pWdaParams)
5293 {
5294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5295 "%s: pWdaParams received NULL", __func__);
5296 VOS_ASSERT(0) ;
5297 return ;
5298 }
5299 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5300 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5301
5302 if(NULL == pGetRoamRssiReqParams)
5303 {
5304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5305 "%s: pGetRoamRssiReqParams received NULL", __func__);
5306 VOS_ASSERT(0);
5307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5308 vos_mem_free(pWdaParams);
5309 return ;
5310 }
5311 pGetRoamRssiRspParams =
5312 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5313
5314 if(NULL == pGetRoamRssiRspParams)
5315 {
5316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5317 "%s: VOS MEM Alloc Failure", __func__);
5318 VOS_ASSERT(0);
5319 return;
5320 }
5321 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5322 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005323 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005324 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5325 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5326
5327 /* Assign get roam rssi req (backup) in to the response */
5328 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5329
5330 /* free WDI command buffer */
5331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5332 vos_mem_free(pWdaParams) ;
5333
5334 /* send response to UMAC*/
5335 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5336
5337 return;
5338}
5339
5340
5341
5342/*
5343 * FUNCTION: WDA_ProcessGetRoamRssiReq
5344 * Request to WDI to get the statistics
5345 */
5346VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5347 tAniGetRssiReq *pGetRoamRssiParams)
5348{
5349 WDI_Status status = WDI_STATUS_SUCCESS ;
5350 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5351 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5352 tWDA_ReqParams *pWdaParams = NULL;
5353
5354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5355 "------> %s " ,__func__);
5356 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5357 pGetRoamRssiParams->staId;
5358 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5359
5360 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5361 if(NULL == pWdaParams)
5362 {
5363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5364 "%s: VOS MEM Alloc Failure", __func__);
5365 VOS_ASSERT(0);
5366 return VOS_STATUS_E_NOMEM;
5367 }
5368
5369 /* Store Init Req pointer, as this will be used for response */
5370 pWdaParams->pWdaContext = pWDA;
5371
5372 /* Take Get roam Rssi req backup as it stores the callback to be called after
5373 receiving the response */
5374 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5375 pWdaParams->wdaWdiApiMsgParam = NULL;
5376
5377 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5378 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5379 if(IS_WDI_STATUS_FAILURE(status))
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5382 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5383 pGetRoamRssiRspParams =
5384 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5385 if(NULL == pGetRoamRssiRspParams)
5386 {
5387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5388 "%s: VOS MEM Alloc Failure", __func__);
5389 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305390 vos_mem_free(pGetRoamRssiParams);
5391 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005392 return VOS_STATUS_E_NOMEM;
5393 }
5394 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5395 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5396 pGetRoamRssiRspParams->rssi = 0;
5397 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5398 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5399 (void *)pGetRoamRssiRspParams, 0) ;
5400 }
5401 return CONVERT_WDI2VOS_STATUS(status);
5402}
5403#endif
5404
5405
Jeff Johnson295189b2012-06-20 16:38:30 -07005406/*
5407 * FUNCTION: WDA_UpdateEDCAParamCallback
5408 * call back function for Update EDCA params from WDI
5409 */
5410void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5411{
5412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5413 tEdcaParams *pEdcaParams;
5414
5415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 if(NULL == pWdaParams)
5418 {
5419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005420 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005421 VOS_ASSERT(0) ;
5422 return ;
5423 }
5424 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5426 vos_mem_free(pWdaParams);
5427 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 return ;
5429}
Jeff Johnson295189b2012-06-20 16:38:30 -07005430/*
5431 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5432 * Request to WDI to Update the EDCA params.
5433 */
5434VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5435 tEdcaParams *pEdcaParams)
5436{
5437 WDI_Status status = WDI_STATUS_SUCCESS ;
5438 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5439 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5440 sizeof(WDI_UpdateEDCAParamsType)) ;
5441 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005443 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 if(NULL == wdiEdcaParam)
5445 {
5446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005447 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005448 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005449 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005450 return VOS_STATUS_E_NOMEM;
5451 }
5452 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5453 if(NULL == pWdaParams)
5454 {
5455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005456 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005457 VOS_ASSERT(0);
5458 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005459 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 return VOS_STATUS_E_NOMEM;
5461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005462 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005463 /*
5464 Since firmware is not using highperformance flag, we have removed
5465 this flag from wdiEDCAInfo structure to match sizeof the structure
5466 between host and firmware.In future if we are planning to use
5467 highperformance flag then Please define this flag in wdiEDCAInfo
5468 structure, update it here and send it to firmware. i.e.
5469 Following is the original line which we removed as part of the fix
5470 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5471 pEdcaParams->highPerformance;
5472 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005473 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5474 &pEdcaParams->acbe);
5475 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5476 &pEdcaParams->acbk);
5477 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5478 &pEdcaParams->acvi);
5479 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5480 &pEdcaParams->acvo);
5481 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 pWdaParams->pWdaContext = pWDA;
5483 /* Store remove key pointer, as this will be used for response */
5484 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 /* store Params pass it to WDI */
5486 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005487 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5488 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005489 if(IS_WDI_STATUS_FAILURE(status))
5490 {
5491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5492 "Failure in Update EDCA Params WDI API, free all the memory " );
5493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5494 vos_mem_free(pWdaParams);
5495 vos_mem_free(pEdcaParams);
5496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 return CONVERT_WDI2VOS_STATUS(status) ;
5498}
Jeff Johnson295189b2012-06-20 16:38:30 -07005499/*
5500 * FUNCTION: WDA_AddBAReqCallback
5501 * send ADD BA RSP back to PE
5502 */
5503void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5504 void* pUserData)
5505{
5506 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5507 tWDA_CbContext *pWDA;
5508 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005510 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 if(NULL == pWdaParams)
5512 {
5513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005514 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005515 VOS_ASSERT(0) ;
5516 return ;
5517 }
5518 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5519 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5521 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005522 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 return ;
5525}
5526
Jeff Johnson295189b2012-06-20 16:38:30 -07005527/*
5528 * FUNCTION: WDA_ProcessAddBAReq
5529 * Request to WDI to Update the ADDBA REQ params.
5530 */
5531VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5532 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5533{
Jeff Johnson43971f52012-07-17 12:26:56 -07005534 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5536 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5537 sizeof(WDI_AddBAReqParamsType)) ;
5538 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005540 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 if(NULL == wdiAddBAReqParam)
5542 {
5543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005545 VOS_ASSERT(0);
5546 return VOS_STATUS_E_NOMEM;
5547 }
5548 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5549 if(NULL == pWdaParams)
5550 {
5551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 VOS_ASSERT(0);
5554 vos_mem_free(wdiAddBAReqParam);
5555 return VOS_STATUS_E_NOMEM;
5556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 do
5558 {
5559 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005560 wdiAddBaInfo->ucSTAIdx = staIdx ;
5561 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5562 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 } while(0) ;
5564 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 pWdaParams->pWdaContext = pWDA;
5566 /* store Params pass it to WDI */
5567 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5568 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005569 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5570 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005571
Jeff Johnson43971f52012-07-17 12:26:56 -07005572 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 {
5574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005575 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5576 status = CONVERT_WDI2VOS_STATUS(wstatus);
5577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 vos_mem_free(pWdaParams);
5579 pAddBAReqParams->status = eSIR_FAILURE;
5580 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5581 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005582 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005583}
Jeff Johnson295189b2012-06-20 16:38:30 -07005584/*
5585 * FUNCTION: WDA_AddBASessionReqCallback
5586 * send ADD BA SESSION RSP back to PE/(or TL)
5587 */
5588void WDA_AddBASessionReqCallback(
5589 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5590{
5591 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5592 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5593 tWDA_CbContext *pWDA;
5594 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005596 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 if(NULL == pWdaParams)
5598 {
5599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005600 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 VOS_ASSERT(0) ;
5602 return ;
5603 }
5604 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5605 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005606 if( NULL == pAddBAReqParams )
5607 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005609 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5612 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 return ;
5614 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005615 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5616 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005617 /*
5618 * if WDA in update TL state, update TL with BA session parama and send
5619 * another request to HAL(/WDI) (ADD_BA_REQ)
5620 */
5621
5622 if((VOS_STATUS_SUCCESS ==
5623 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5624 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5625 {
5626 /* Update TL with BA info received from HAL/WDI */
5627 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5628 wdiAddBaSession->usBaSessionID,
5629 wdiAddBaSession->ucSTAIdx,
5630 wdiAddBaSession->ucBaTID,
5631 wdiAddBaSession->ucBaBufferSize,
5632 wdiAddBaSession->ucWinSize,
5633 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5635 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5636 }
5637 else
5638 {
5639 pAddBAReqParams->status =
5640 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5641
5642 /* Setting Flag to indicate that Set BA is success */
5643 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5644 {
5645 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5646 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5647 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5648 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005649 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 /*Reset the WDA state to READY */
5652 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 return ;
5654}
5655
Jeff Johnson295189b2012-06-20 16:38:30 -07005656/*
5657 * FUNCTION: WDA_ProcessAddBASessionReq
5658 * Request to WDI to Update the ADDBA REQ params.
5659 */
5660VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5661 tAddBAParams *pAddBAReqParams)
5662{
5663 WDI_Status status = WDI_STATUS_SUCCESS ;
5664 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5665 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5666 sizeof(WDI_AddBASessionReqParamsType)) ;
5667 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005668 WLANTL_STAStateType tlSTAState = 0;
5669
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005671 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005672 if(NULL == wdiAddBASessionReqParam)
5673 {
5674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005675 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005676 VOS_ASSERT(0);
5677 return VOS_STATUS_E_NOMEM;
5678 }
5679 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5680 if(NULL == pWdaParams)
5681 {
5682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 VOS_ASSERT(0);
5685 vos_mem_free(wdiAddBASessionReqParam);
5686 return VOS_STATUS_E_NOMEM;
5687 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005688 /*
5689 * Populate ADD BA parameters and pass these paarmeters to WDI.
5690 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5691 * the state to track if these is BA recipient case or BA initiator
5692 * case.
5693 */
5694 do
5695 {
5696 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5697 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5698 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5699 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5700 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5701 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5702 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005703 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5705 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5706 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5707 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5708 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005709 /* check the BA direction and update state accordingly */
5710 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5711 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5712 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5713
5714 }while(0) ;
5715 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 pWdaParams->pWdaContext = pWDA;
5717 /* Store ADD BA pointer, as this will be used for response */
5718 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5719 /* store Params pass it to WDI */
5720 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005721
5722 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5723 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5724 */
5725 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5726 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5727 {
5728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005729 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005730 status = WDI_STATUS_E_NOT_ALLOWED;
5731 pAddBAReqParams->status =
5732 CONVERT_WDI2SIR_STATUS(status) ;
5733 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5734 /*Reset the WDA state to READY */
5735 pWDA->wdaState = WDA_READY_STATE;
5736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5737 vos_mem_free(pWdaParams);
5738
5739 return CONVERT_WDI2VOS_STATUS(status) ;
5740 }
5741
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5743 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 if(IS_WDI_STATUS_FAILURE(status))
5745 {
5746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005747 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005749 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005750 pAddBAReqParams->status =
5751 CONVERT_WDI2SIR_STATUS(status) ;
5752 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005753 /*Reset the WDA state to READY */
5754 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 vos_mem_free(pWdaParams);
5757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005759}
Jeff Johnson295189b2012-06-20 16:38:30 -07005760/*
5761 * FUNCTION: WDA_DelBANotifyTL
5762 * send DEL BA IND to TL
5763 */
5764void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5765 tDelBAParams *pDelBAReqParams)
5766{
5767 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5768 //tSirMsgQ msg;
5769 vos_msg_t vosMsg;
5770 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005771 if(NULL == pDelBAInd)
5772 {
5773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 VOS_ASSERT(0) ;
5776 return;
5777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005778 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5779 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5780 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5781 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005782
Jeff Johnson295189b2012-06-20 16:38:30 -07005783
5784 vosMsg.type = WDA_DELETEBA_IND;
5785 vosMsg.bodyptr = pDelBAInd;
5786 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5787 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5788 {
5789 vosStatus = VOS_STATUS_E_BADMSG;
5790 }
5791}
Jeff Johnson295189b2012-06-20 16:38:30 -07005792/*
5793 * FUNCTION: WDA_DelBAReqCallback
5794 * send DEL BA RSP back to PE
5795 */
5796void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5797{
5798 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5799 tWDA_CbContext *pWDA;
5800 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005802 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005803 if(NULL == pWdaParams)
5804 {
5805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005806 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005807 VOS_ASSERT(0) ;
5808 return ;
5809 }
5810 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5811 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005812 /* Notify TL about DEL BA in case of recipinet */
5813 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5814 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5815 {
5816 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 /*
5819 * No respone required for WDA_DELBA_IND so just free the request
5820 * param here
5821 */
5822 vos_mem_free(pDelBAReqParams);
5823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5824 vos_mem_free(pWdaParams);
5825 return ;
5826}
5827
Jeff Johnson295189b2012-06-20 16:38:30 -07005828/*
5829 * FUNCTION: WDA_ProcessDelBAReq
5830 * Request to WDI to Update the DELBA REQ params.
5831 */
5832VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5833 tDelBAParams *pDelBAReqParams)
5834{
5835 WDI_Status status = WDI_STATUS_SUCCESS ;
5836 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5837 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5838 sizeof(WDI_DelBAReqParamsType)) ;
5839 tWDA_ReqParams *pWdaParams ;
5840 tANI_U16 staIdx = 0;
5841 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005843 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 if(NULL == wdiDelBAReqParam)
5845 {
5846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005848 VOS_ASSERT(0);
5849 return VOS_STATUS_E_NOMEM;
5850 }
5851 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5852 if(NULL == pWdaParams)
5853 {
5854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 VOS_ASSERT(0);
5857 vos_mem_free(wdiDelBAReqParam);
5858 return VOS_STATUS_E_NOMEM;
5859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005860 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5861 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5862 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5863 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 pWdaParams->pWdaContext = pWDA;
5865 /* Store DEL BA pointer, as this will be used for response */
5866 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005867 /* store Params pass it to WDI */
5868 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5870 * maintained in WDA, so that WDA can retry for another BA session
5871 */
5872 staIdx = pDelBAReqParams->staIdx;
5873 tid = pDelBAReqParams->baTID;
5874 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 status = WDI_DelBAReq(wdiDelBAReqParam,
5876 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 if(IS_WDI_STATUS_FAILURE(status))
5878 {
5879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5880 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5882 vos_mem_free(pWdaParams->wdaMsgParam);
5883 vos_mem_free(pWdaParams);
5884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005886}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08005887
5888/*
5889 * FUNCTION: WDA_UpdateChReqCallback
5890 *
5891 */
5892void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
5893{
5894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5895 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam =
5896 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
5897 WDI_UpdateChannelReqType *pwdiUpdateChanReqType =
5898 &pwdiUpdateChReqParam->wdiUpdateChanParams;
5899 WDI_UpdateChannelReqinfoType *pChanInfoType =
5900 pwdiUpdateChanReqType->pchanParam;
5901 tSirUpdateChanList *pChanList =
5902 (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
5903
5904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5905 "<------ %s " ,__func__);
5906 if(NULL == pWdaParams)
5907 {
5908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5909 "%s: pWdaParams received NULL", __func__);
5910 VOS_ASSERT(0);
5911 return;
5912 }
5913
5914 /*
5915 * currently there is no response message is expected between PE and
5916 * WDA, Failure return from WDI is a ASSERT condition
5917 */
5918 vos_mem_free(pChanInfoType);
5919 vos_mem_free(pChanList);
5920 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5921 vos_mem_free(pWdaParams);
5922
5923 return;
5924}
5925
5926/*
5927 * FUNCTION: WDA_ProcessUpdateChannelList
5928 * Request to WDI to Update the ChannelList params.
5929 */
5930VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
5931 tSirUpdateChanList *pChanList)
5932{
5933 WDI_Status status = WDI_STATUS_SUCCESS;
5934 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
5935 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
5936 WDI_UpdateChannelReqinfoType *pChanInfoType;
5937 tWDA_ReqParams *pWdaParams;
5938 wpt_uint8 i;
5939
5940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5941 "------> %s " ,__func__);
5942 if(NULL == pChanList)
5943 {
5944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5945 "%s: NULL pChanList", __func__);
5946 VOS_ASSERT(0);
5947 return VOS_STATUS_E_INVAL;
5948 }
5949
5950 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
5951 {
5952 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5953 "Update channel list capability Not Supported");
5954 vos_mem_free(pChanList);
5955 return VOS_STATUS_E_INVAL;
5956 }
5957
5958 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
5959 sizeof(WDI_UpdateChReqParamsType));
5960 if(NULL == pwdiUpdateChReqParam)
5961 {
5962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5963 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
5964 __func__);
5965 VOS_ASSERT(0);
5966 vos_mem_free(pChanList);
5967 return VOS_STATUS_E_NOMEM;
5968 }
5969 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
5970 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
5971 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
5972 pChanList->numChan);
5973 if(NULL == pChanInfoType)
5974 {
5975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5976 "%s: VOS MEM Alloc Failure", __func__);
5977 VOS_ASSERT(0);
5978 vos_mem_free(pChanList);
5979 vos_mem_free(pwdiUpdateChReqParam);
5980 return VOS_STATUS_E_NOMEM;
5981 }
5982 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
5983 * pChanList->numChan);
5984 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
5985
5986 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
5987 if(NULL == pWdaParams)
5988 {
5989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5990 "%s: VOS MEM Alloc Failure", __func__);
5991 VOS_ASSERT(0);
5992 vos_mem_free(pChanList);
5993 vos_mem_free(pChanInfoType);
5994 vos_mem_free(pwdiUpdateChReqParam);
5995 return VOS_STATUS_E_NOMEM;
5996 }
5997 pwdiUpdateChanReqType->numchan = pChanList->numChan;
5998
5999 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6000 {
6001 pChanInfoType->mhz =
6002 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6003
6004 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6005 pChanInfoType->band_center_freq2 = 0;
6006
6007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6008 "chan[%d] = %u", i, pChanInfoType->mhz);
6009 if (pChanList->chanParam[i].dfsSet)
6010 {
6011 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6013 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6014 pChanList->chanParam[i].dfsSet);
6015 }
6016
6017 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6018 {
6019 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6020 }
6021 else
6022 {
6023 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6024 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6025 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6026 }
6027
6028 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6029 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6030
6031 pChanInfoType++;
6032 }
6033
6034 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6035 pWdaParams->pWdaContext = pWDA;
6036 pWdaParams->wdaMsgParam = (void *)pChanList;
6037 /* store Params pass it to WDI */
6038 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6039 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6040 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6041 if(IS_WDI_STATUS_FAILURE(status))
6042 {
6043 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6044 "Failure in Update Channel REQ Params WDI API, free all the memory");
6045 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6046 vos_mem_free(pwdiUpdateChReqParam);
6047 vos_mem_free(pWdaParams->wdaMsgParam);
6048 vos_mem_free(pWdaParams);
6049 }
6050 return CONVERT_WDI2VOS_STATUS(status);
6051}
6052
Jeff Johnson295189b2012-06-20 16:38:30 -07006053/*
6054 * FUNCTION: WDA_AddTSReqCallback
6055 * send ADD TS RSP back to PE
6056 */
6057void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6058{
6059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6060 tWDA_CbContext *pWDA;
6061 tAddTsParams *pAddTsReqParams;
6062
6063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006064 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006065 if(NULL == pWdaParams)
6066 {
6067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006068 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 VOS_ASSERT(0) ;
6070 return ;
6071 }
6072 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6073 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6074 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6075 vos_mem_free(pWdaParams);
6076
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006077 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006079 return ;
6080}
6081
Jeff Johnson295189b2012-06-20 16:38:30 -07006082/*
6083 * FUNCTION: WDA_ProcessAddTSReq
6084 * Request to WDI to Update the ADD TS REQ params.
6085 */
6086VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6087 tAddTsParams *pAddTsReqParams)
6088{
6089 WDI_Status status = WDI_STATUS_SUCCESS ;
6090 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6091 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6092 sizeof(WDI_AddTSReqParamsType)) ;
6093 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006095 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 if(NULL == wdiAddTSReqParam)
6097 {
6098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 VOS_ASSERT(0);
6101 return VOS_STATUS_E_NOMEM;
6102 }
6103 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6104 if(NULL == pWdaParams)
6105 {
6106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006108 VOS_ASSERT(0);
6109 vos_mem_free(wdiAddTSReqParam);
6110 return VOS_STATUS_E_NOMEM;
6111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6113 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006114 //TS IE
6115 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6116 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6117 pAddTsReqParams->tspec.length;
6118
6119 //TS IE : TS INFO : TRAFFIC
6120 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6121 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6122 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6123 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6124 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6125 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6126 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6127 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6128 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6129 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6130 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6131 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6132 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6133 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6134 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6135 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6136
6137 //TS IE : TS INFO : SCHEDULE
6138 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6139 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6140 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6141 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006142 //TS IE
6143 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6144 pAddTsReqParams->tspec.nomMsduSz;
6145 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6146 pAddTsReqParams->tspec.maxMsduSz;
6147 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6148 pAddTsReqParams->tspec.minSvcInterval;
6149 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6150 pAddTsReqParams->tspec.maxSvcInterval;
6151 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6152 pAddTsReqParams->tspec.inactInterval;
6153 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6154 pAddTsReqParams->tspec.suspendInterval;
6155 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6156 pAddTsReqParams->tspec.svcStartTime;
6157 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6158 pAddTsReqParams->tspec.minDataRate;
6159 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6160 pAddTsReqParams->tspec.meanDataRate;
6161 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6162 pAddTsReqParams->tspec.peakDataRate;
6163 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6164 pAddTsReqParams->tspec.maxBurstSz;
6165 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6166 pAddTsReqParams->tspec.delayBound;
6167 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6168 pAddTsReqParams->tspec.minPhyRate;
6169 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6170 pAddTsReqParams->tspec.surplusBw;
6171 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6172 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006173 /* TODO: tAddTsParams doesn't have the following fields */
6174#if 0
6175 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6176 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6177 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6178 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6179#endif
6180 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6181
6182 pWdaParams->pWdaContext = pWDA;
6183 /* Store ADD TS pointer, as this will be used for response */
6184 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 /* store Params pass it to WDI */
6186 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006187 status = WDI_AddTSReq(wdiAddTSReqParam,
6188 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006189 if(IS_WDI_STATUS_FAILURE(status))
6190 {
6191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6192 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6194 vos_mem_free(pWdaParams);
6195 pAddTsReqParams->status = eSIR_FAILURE ;
6196 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6197 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006199}
6200
Jeff Johnson295189b2012-06-20 16:38:30 -07006201/*
6202 * FUNCTION: WDA_DelTSReqCallback
6203 * send DEL TS RSP back to PE
6204 */
6205void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6206{
6207 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006209 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6211 vos_mem_free(pWdaParams->wdaMsgParam) ;
6212 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 /*
6214 * No respone required for WDA_DEL_TS_REQ so just free the request
6215 * param here
6216 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 return ;
6218}
6219
Jeff Johnson295189b2012-06-20 16:38:30 -07006220/*
6221 * FUNCTION: WDA_ProcessDelTSReq
6222 * Request to WDI to Update the DELTS REQ params.
6223 */
6224VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6225 tDelTsParams *pDelTSReqParams)
6226{
6227 WDI_Status status = WDI_STATUS_SUCCESS ;
6228 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6229 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6230 sizeof(WDI_DelTSReqParamsType)) ;
6231 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006233 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006234 if(NULL == wdiDelTSReqParam)
6235 {
6236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006237 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006238 VOS_ASSERT(0);
6239 return VOS_STATUS_E_NOMEM;
6240 }
6241 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6242 if(NULL == pWdaParams)
6243 {
6244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006246 VOS_ASSERT(0);
6247 vos_mem_free(wdiDelTSReqParam);
6248 return VOS_STATUS_E_NOMEM;
6249 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6251 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6252 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6253 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6254 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 pWdaParams->pWdaContext = pWDA;
6256 /* Store DEL TS pointer, as this will be used for response */
6257 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 /* store Params pass it to WDI */
6259 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006260 status = WDI_DelTSReq(wdiDelTSReqParam,
6261 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 if(IS_WDI_STATUS_FAILURE(status))
6263 {
6264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6265 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6267 vos_mem_free(pWdaParams->wdaMsgParam);
6268 vos_mem_free(pWdaParams);
6269 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006271}
Jeff Johnson295189b2012-06-20 16:38:30 -07006272/*
6273 * FUNCTION: WDA_UpdateBeaconParamsCallback
6274 * Free the memory. No need to send any response to PE in this case
6275 */
6276void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6277{
6278 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006280 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006281 if(NULL == pWdaParams)
6282 {
6283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006284 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 VOS_ASSERT(0) ;
6286 return ;
6287 }
6288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6289 vos_mem_free(pWdaParams->wdaMsgParam) ;
6290 vos_mem_free(pWdaParams);
6291 /*
6292 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6293 * param here
6294 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006295 return ;
6296}
Jeff Johnson295189b2012-06-20 16:38:30 -07006297/*
6298 * FUNCTION: WDA_ProcessUpdateBeaconParams
6299 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6300 */
6301VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6302 tUpdateBeaconParams *pUpdateBeaconParams)
6303{
6304 WDI_Status status = WDI_STATUS_SUCCESS ;
6305 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6306 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6307 sizeof(WDI_UpdateBeaconParamsType)) ;
6308 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006310 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006311 if(NULL == wdiUpdateBeaconParams)
6312 {
6313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006314 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006315 VOS_ASSERT(0);
6316 return VOS_STATUS_E_NOMEM;
6317 }
6318 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6319 if(NULL == pWdaParams)
6320 {
6321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006322 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006323 VOS_ASSERT(0);
6324 vos_mem_free(wdiUpdateBeaconParams);
6325 return VOS_STATUS_E_NOMEM;
6326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6328 pUpdateBeaconParams->bssIdx;
6329 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6330 pUpdateBeaconParams->fShortPreamble;
6331 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6332 pUpdateBeaconParams->fShortSlotTime;
6333 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6334 pUpdateBeaconParams->beaconInterval;
6335 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6336 pUpdateBeaconParams->llaCoexist;
6337 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6338 pUpdateBeaconParams->llbCoexist;
6339 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6340 pUpdateBeaconParams->llgCoexist;
6341 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6342 pUpdateBeaconParams->ht20MhzCoexist;
6343 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6344 pUpdateBeaconParams->llnNonGFCoexist;
6345 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6346 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6347 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6348 pUpdateBeaconParams->fRIFSMode;
6349 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6350 pUpdateBeaconParams->paramChangeBitmap;
6351 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6352
6353 pWdaParams->pWdaContext = pWDA;
6354 /* Store UpdateBeacon Req pointer, as this will be used for response */
6355 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006356 /* store Params pass it to WDI */
6357 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6359 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6360 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 if(IS_WDI_STATUS_FAILURE(status))
6362 {
6363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6364 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6366 vos_mem_free(pWdaParams->wdaMsgParam);
6367 vos_mem_free(pWdaParams);
6368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006369 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006370}
Jeff Johnson295189b2012-06-20 16:38:30 -07006371#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006372/*
6373 * FUNCTION: WDA_TSMStatsReqCallback
6374 * send TSM Stats RSP back to PE
6375 */
6376void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6377{
6378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6379 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006380 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6381 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006382
6383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006384 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006385 if(NULL == pWdaParams)
6386 {
6387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006388 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 VOS_ASSERT(0) ;
6390 return ;
6391 }
6392 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006393 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6394
6395 if(NULL == pGetTsmStatsReqParams)
6396 {
6397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6398 "%s: pGetTsmStatsReqParams received NULL", __func__);
6399 VOS_ASSERT(0);
6400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6401 vos_mem_free(pWdaParams);
6402 return;
6403 }
6404
6405 pTsmRspParams =
6406 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006407 if( NULL == pTsmRspParams )
6408 {
6409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006410 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006411 VOS_ASSERT( 0 );
6412 return ;
6413 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006414 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6415 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6416 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6417
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6419 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6420 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6421 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6422 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6423 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6424 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6425 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6426 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6427 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006428
6429 /* Assign get tsm stats req req (backup) in to the response */
6430 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6431
6432 /* free WDI command buffer */
6433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6434 vos_mem_free(pWdaParams);
6435
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 return ;
6438}
6439
6440
Jeff Johnson295189b2012-06-20 16:38:30 -07006441/*
6442 * FUNCTION: WDA_ProcessTsmStatsReq
6443 * Request to WDI to get the TSM Stats params.
6444 */
6445VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006446 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006447{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006448 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006449 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006450 tWDA_ReqParams *pWdaParams = NULL;
6451 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6452
Jeff Johnson295189b2012-06-20 16:38:30 -07006453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006454 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006455 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6456 sizeof(WDI_TSMStatsReqParamsType));
6457 if(NULL == wdiTSMReqParam)
6458 {
6459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006461 VOS_ASSERT(0);
6462 return VOS_STATUS_E_NOMEM;
6463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006464 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6465 if(NULL == pWdaParams)
6466 {
6467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006469 VOS_ASSERT(0);
6470 vos_mem_free(wdiTSMReqParam);
6471 return VOS_STATUS_E_NOMEM;
6472 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006473 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6474 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6475 pTsmStats->bssId,
6476 sizeof(wpt_macAddr));
6477 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6478
6479 pWdaParams->pWdaContext = pWDA;
6480 /* Store TSM Stats pointer, as this will be used for response */
6481 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006482 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 status = WDI_TSMStatsReq(wdiTSMReqParam,
6484 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006485 if(IS_WDI_STATUS_FAILURE(status))
6486 {
6487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6488 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006489 vos_mem_free(pWdaParams);
6490
6491 pGetTsmStatsRspParams =
6492 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6493 if(NULL == pGetTsmStatsRspParams)
6494 {
6495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6496 "%s: VOS MEM Alloc Failure", __func__);
6497 VOS_ASSERT(0);
6498 vos_mem_free(pTsmStats);
6499 return VOS_STATUS_E_NOMEM;
6500 }
6501 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6502 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6503 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6504
6505 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006507 return CONVERT_WDI2VOS_STATUS(status) ;
6508}
6509#endif
6510/*
6511 * FUNCTION: WDA_SendBeaconParamsCallback
6512 * No need to send any response to PE in this case
6513 */
6514void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6515{
6516
Jeff Johnson295189b2012-06-20 16:38:30 -07006517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006518 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006519 return ;
6520}
Jeff Johnson295189b2012-06-20 16:38:30 -07006521/*
6522 * FUNCTION: WDA_ProcessSendBeacon
6523 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6524 * start beacon trasmission
6525 */
6526VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6527 tSendbeaconParams *pSendbeaconParams)
6528{
6529 WDI_Status status = WDI_STATUS_SUCCESS ;
6530 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006532 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6534 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6535 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6536 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006537 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6538 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306539 /* p2pIeOffset should be atleast greater than timIeOffset */
6540 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6541 (pSendbeaconParams->p2pIeOffset <
6542 pSendbeaconParams->timIeOffset))
6543 {
6544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6545 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6546 VOS_ASSERT( 0 );
6547 return WDI_STATUS_E_FAILURE;
6548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006549 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6550 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006551 /* Copy the beacon template to local buffer */
6552 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6553 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6554 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6555
Jeff Johnson295189b2012-06-20 16:38:30 -07006556 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6557 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006558 if(IS_WDI_STATUS_FAILURE(status))
6559 {
6560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6561 "Failure in SEND BEACON REQ Params WDI API" );
6562 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 vos_mem_free(pSendbeaconParams);
6564 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006565}
Jeff Johnson295189b2012-06-20 16:38:30 -07006566/*
6567 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6568 * No need to send any response to PE in this case
6569 */
6570void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6571{
Jeff Johnson295189b2012-06-20 16:38:30 -07006572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006573 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006574 return ;
6575}
6576
Jeff Johnson295189b2012-06-20 16:38:30 -07006577/*
6578 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6579 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6580 * send probe response
6581 */
6582VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6583 tSendProbeRespParams *pSendProbeRspParams)
6584{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006585 WDI_Status status = WDI_STATUS_SUCCESS;
6586 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6587 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006589 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006590
6591 if (!wdiSendProbeRspParam)
6592 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6593
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006595 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006596 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006597 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006598 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006599 /* Copy the Probe Response template to local buffer */
6600 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006601 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 pSendProbeRspParams->pProbeRespTemplate,
6603 pSendProbeRspParams->probeRespTemplateLen);
6604 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006605 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006606 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6607 WDI_PROBE_REQ_BITMAP_IE_LEN);
6608
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006609 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006610
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006611 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006612 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006613 if(IS_WDI_STATUS_FAILURE(status))
6614 {
6615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6616 "Failure in SEND Probe RSP Params WDI API" );
6617 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006619 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006620 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006621}
Jeff Johnson295189b2012-06-20 16:38:30 -07006622#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6623/*
6624 * FUNCTION: WDA_SetMaxTxPowerCallBack
6625 * send the response to PE with power value received from WDI
6626 */
6627void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6628 void* pUserData)
6629{
6630 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6631 tWDA_CbContext *pWDA = NULL;
6632 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6633
6634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006635 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 if(NULL == pWdaParams)
6637 {
6638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006639 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006640 VOS_ASSERT(0) ;
6641 return ;
6642 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006643 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6644 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006645 if( NULL == pMaxTxPowerParams )
6646 {
6647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006648 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006649 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006650 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6651 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006652 return ;
6653 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006654
Jeff Johnson295189b2012-06-20 16:38:30 -07006655
6656 /*need to free memory for the pointers used in the
6657 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6659 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006661
Jeff Johnson295189b2012-06-20 16:38:30 -07006662
6663 /* send response to UMAC*/
6664 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6665
6666 return;
6667}
Jeff Johnson295189b2012-06-20 16:38:30 -07006668/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006669 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 * Request to WDI to send set Max Tx Power Request
6671 */
6672 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6673 tMaxTxPowerParams *MaxTxPowerParams)
6674{
6675 WDI_Status status = WDI_STATUS_SUCCESS;
6676 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6677 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006678
Jeff Johnson295189b2012-06-20 16:38:30 -07006679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006680 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006681
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6683 sizeof(WDI_SetMaxTxPowerParamsType));
6684 if(NULL == wdiSetMaxTxPowerParams)
6685 {
6686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 VOS_ASSERT(0);
6689 return VOS_STATUS_E_NOMEM;
6690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6692 if(NULL == pWdaParams)
6693 {
6694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006696 vos_mem_free(wdiSetMaxTxPowerParams);
6697 VOS_ASSERT(0);
6698 return VOS_STATUS_E_NOMEM;
6699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006700 /* Copy.Max.Tx.Power Params to WDI structure */
6701 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6702 MaxTxPowerParams->bssId,
6703 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6705 MaxTxPowerParams->selfStaMacAddr,
6706 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6708 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006709 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 pWdaParams->pWdaContext = pWDA;
6711 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006712 /* store Params pass it to WDI */
6713 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6715 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 if(IS_WDI_STATUS_FAILURE(status))
6717 {
6718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6719 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6721 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006722 /* send response to UMAC*/
6723 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006724 }
6725 return CONVERT_WDI2VOS_STATUS(status);
6726
6727}
Jeff Johnson295189b2012-06-20 16:38:30 -07006728#endif
schang86c22c42013-03-13 18:41:24 -07006729
6730/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006731 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6732 * send the response to PE with power value received from WDI
6733 */
6734void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6735 *pwdiSetMaxTxPowerPerBandRsp,
6736 void* pUserData)
6737{
6738 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6739 tWDA_CbContext *pWDA = NULL;
6740 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6741
6742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6743 "<------ %s ", __func__);
6744 if (NULL == pWdaParams)
6745 {
6746 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6747 "%s: pWdaParams received NULL", __func__);
6748 VOS_ASSERT(0);
6749 return ;
6750 }
6751 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6752 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6753 if ( NULL == pMxTxPwrPerBandParams )
6754 {
6755 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6756 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6757 VOS_ASSERT(0);
6758 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6759 vos_mem_free(pWdaParams);
6760 return;
6761 }
6762
6763 /*need to free memory for the pointers used in the
6764 WDA Process.Set Max Tx Power Req function*/
6765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6766 vos_mem_free(pWdaParams);
6767 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6768
6769 /* send response to UMAC*/
6770 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6771 pMxTxPwrPerBandParams, 0);
6772
6773 return;
6774}
6775
6776/*
6777 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6778 * Request to WDI to send set Max Tx Power Per band Request
6779 */
6780 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6781 tMaxTxPowerPerBandParams
6782 *MaxTxPowerPerBandParams)
6783{
6784 WDI_Status status = WDI_STATUS_SUCCESS;
6785 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6786 tWDA_ReqParams *pWdaParams = NULL;
6787
6788 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6789 "------> %s ", __func__);
6790
6791 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6792 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6793
6794 if (NULL == wdiSetMxTxPwrPerBandParams)
6795 {
6796 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6797 "%s: VOS MEM Alloc Failure", __func__);
6798 VOS_ASSERT(0);
6799 return VOS_STATUS_E_NOMEM;
6800 }
6801 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6802 if (NULL == pWdaParams)
6803 {
6804 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6805 "%s: VOS MEM Alloc Failure", __func__);
6806 vos_mem_free(wdiSetMxTxPwrPerBandParams);
6807 VOS_ASSERT(0);
6808 return VOS_STATUS_E_NOMEM;
6809 }
6810 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
6811 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
6812 MaxTxPowerPerBandParams->bandInfo;
6813 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
6814 MaxTxPowerPerBandParams->power;
6815 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
6816 pWdaParams->pWdaContext = pWDA;
6817 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
6818 /* store Params pass it to WDI */
6819 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
6820 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
6821 WDA_SetMaxTxPowerPerBandCallBack,
6822 pWdaParams);
6823 if (IS_WDI_STATUS_FAILURE(status))
6824 {
6825 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6826 "Failure in SET MAX TX Power REQ Params WDI API,"
6827 " free all the memory");
6828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6829 vos_mem_free(pWdaParams);
6830 /* send response to UMAC*/
6831 WDA_SendMsg(pWDA,
6832 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6833 MaxTxPowerPerBandParams, 0);
6834 }
6835 return CONVERT_WDI2VOS_STATUS(status);
6836}
6837
6838/*
schang86c22c42013-03-13 18:41:24 -07006839 * FUNCTION: WDA_SetTxPowerCallBack
6840 * send the response to PE with power value received from WDI
6841 */
6842void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6843 void* pUserData)
6844{
6845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6846 tWDA_CbContext *pWDA = NULL;
6847 tSirSetTxPowerReq *pTxPowerParams = NULL;
6848
6849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6850 "<------ %s ", __func__);
6851 if(NULL == pWdaParams)
6852 {
6853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6854 "%s: pWdaParams received NULL", __func__);
6855 VOS_ASSERT(0) ;
6856 return ;
6857 }
6858 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6859 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6860 if(NULL == pTxPowerParams)
6861 {
6862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6863 "%s: pTxPowerParams received NULL " ,__func__);
6864 VOS_ASSERT(0);
6865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6866 vos_mem_free(pWdaParams);
6867 return ;
6868 }
6869
6870 /*need to free memory for the pointers used in the
6871 WDA Process.Set Max Tx Power Req function*/
6872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6873 vos_mem_free(pWdaParams);
6874
6875 /* send response to UMAC*/
6876 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6877 return;
6878}
6879
6880/*
6881 * FUNCTION: WDA_ProcessSetTxPowerReq
6882 * Request to WDI to send set Tx Power Request
6883 */
6884 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6885 tSirSetTxPowerReq *txPowerParams)
6886{
6887 WDI_Status status = WDI_STATUS_SUCCESS;
6888 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6889 tWDA_ReqParams *pWdaParams = NULL;
6890
6891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6892 "------> %s ", __func__);
6893
6894 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6895 sizeof(WDI_SetTxPowerParamsType));
6896 if(NULL == wdiSetTxPowerParams)
6897 {
6898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6899 "%s: VOS MEM Alloc Failure", __func__);
6900 VOS_ASSERT(0);
6901 return VOS_STATUS_E_NOMEM;
6902 }
6903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6904 if(NULL == pWdaParams)
6905 {
6906 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6907 "%s: VOS MEM Alloc Failure", __func__);
6908 vos_mem_free(wdiSetTxPowerParams);
6909 VOS_ASSERT(0);
6910 return VOS_STATUS_E_NOMEM;
6911 }
6912 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6913 txPowerParams->bssIdx;
6914 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6915 txPowerParams->mwPower;
6916 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6917 pWdaParams->pWdaContext = pWDA;
6918 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6919 /* store Params pass it to WDI */
6920 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6921 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6922 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6923 if(IS_WDI_STATUS_FAILURE(status))
6924 {
6925 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6926 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6928 vos_mem_free(pWdaParams);
6929 /* send response to UMAC*/
6930 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6931 }
6932 return CONVERT_WDI2VOS_STATUS(status);
6933}
6934
Jeff Johnson295189b2012-06-20 16:38:30 -07006935/*
6936 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6937 * Free the memory. No need to send any response to PE in this case
6938 */
6939void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6940{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006941 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6942
Jeff Johnson295189b2012-06-20 16:38:30 -07006943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006944 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006945
6946 if(NULL == pWdaParams)
6947 {
6948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006949 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006950 VOS_ASSERT(0) ;
6951 return ;
6952 }
6953
6954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6955 vos_mem_free(pWdaParams->wdaMsgParam) ;
6956 vos_mem_free(pWdaParams);
6957
Jeff Johnson295189b2012-06-20 16:38:30 -07006958 /*
6959 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6960 * so just free the request param here
6961 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006962 return ;
6963}
6964
Jeff Johnson295189b2012-06-20 16:38:30 -07006965/*
6966 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6967 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6968 */
6969VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6970 tP2pPsParams *pP2pPsConfigParams)
6971{
6972 WDI_Status status = WDI_STATUS_SUCCESS ;
6973 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6974 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6975 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006976 tWDA_ReqParams *pWdaParams = NULL;
6977
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006979 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 if(NULL == wdiSetP2PGONOAReqParam)
6981 {
6982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006984 VOS_ASSERT(0);
6985 return VOS_STATUS_E_NOMEM;
6986 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006987
6988 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6989 if(NULL == pWdaParams)
6990 {
6991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006992 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006993 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006994 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006995 VOS_ASSERT(0);
6996 return VOS_STATUS_E_NOMEM;
6997 }
6998
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7000 pP2pPsConfigParams->opp_ps;
7001 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7002 pP2pPsConfigParams->ctWindow;
7003 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7004 pP2pPsConfigParams->count;
7005 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7006 pP2pPsConfigParams->duration;
7007 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7008 pP2pPsConfigParams->interval;
7009 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7010 pP2pPsConfigParams->single_noa_duration;
7011 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7012 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007013
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7015 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007016 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7017
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007019 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7020 pWdaParams->pWdaContext = pWDA;
7021
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007023 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7024
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 if(IS_WDI_STATUS_FAILURE(status))
7026 {
7027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7028 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7030 vos_mem_free(pWdaParams->wdaMsgParam);
7031 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007033 return CONVERT_WDI2VOS_STATUS(status);
7034
Jeff Johnson295189b2012-06-20 16:38:30 -07007035}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307036
7037#ifdef FEATURE_WLAN_TDLS
7038/*
7039 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7040 * Free the memory. No need to send any response to PE in this case
7041 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307042void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7043 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307044{
7045 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7046 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307047 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307048
7049
7050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7051 "<------ %s " ,__func__);
7052 if(NULL == pWdaParams)
7053 {
7054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7055 "%s: pWdaParams received NULL", __func__);
7056 VOS_ASSERT(0) ;
7057 return ;
7058 }
7059 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7060
7061 if(NULL == pWdaParams)
7062 {
7063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7064 "%s: pWdaParams received NULL", __func__);
7065 VOS_ASSERT(0) ;
7066 return ;
7067 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307068 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7069 if( NULL == pTdlsLinkEstablishParams )
7070 {
7071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7072 "%s: pTdlsLinkEstablishParams "
7073 "received NULL " ,__func__);
7074 VOS_ASSERT(0);
7075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7076 vos_mem_free(pWdaParams);
7077 return ;
7078 }
7079 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7080 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307082 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307083 /* send response to UMAC*/
7084 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7085
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307086 return ;
7087}
7088
7089VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7090 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7091{
7092 WDI_Status status = WDI_STATUS_SUCCESS ;
7093 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7094 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7095 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7096 tWDA_ReqParams *pWdaParams = NULL;
7097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7098 "------> %s " ,__func__);
7099 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7100 {
7101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7102 "%s: VOS MEM Alloc Failure", __func__);
7103 VOS_ASSERT(0);
7104 return VOS_STATUS_E_NOMEM;
7105 }
7106 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7107 if(NULL == pWdaParams)
7108 {
7109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7110 "%s: VOS MEM Alloc Failure", __func__);
7111 vos_mem_free(pTdlsLinkEstablishParams);
7112 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7113 VOS_ASSERT(0);
7114 return VOS_STATUS_E_NOMEM;
7115 }
7116 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307117 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307118 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307119 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307120 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307121 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307122 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307123 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307124 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307125 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307126 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7127 pTdlsLinkEstablishParams->isOffChannelSupported;
7128
7129 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7130 pTdlsLinkEstablishParams->validChannels,
7131 pTdlsLinkEstablishParams->validChannelsLen);
7132
7133 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7134 pTdlsLinkEstablishParams->validChannelsLen;
7135
7136 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7137 pTdlsLinkEstablishParams->validOperClasses,
7138 pTdlsLinkEstablishParams->validOperClassesLen);
7139 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7140 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307141
7142 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7143 /* Store msg pointer from PE, as this will be used for response */
7144 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7145 /* store Params pass it to WDI */
7146 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7147 pWdaParams->pWdaContext = pWDA;
7148
7149 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7150 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7151 WDA_SetTDLSLinkEstablishReqParamsCallback,
7152 pWdaParams);
7153 if(IS_WDI_STATUS_FAILURE(status))
7154 {
7155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7156 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7158 vos_mem_free(pWdaParams->wdaMsgParam);
7159 vos_mem_free(pWdaParams);
7160 }
7161 return CONVERT_WDI2VOS_STATUS(status);
7162}
7163#endif
7164
7165
Jeff Johnson295189b2012-06-20 16:38:30 -07007166#ifdef WLAN_FEATURE_VOWIFI_11R
7167/*
7168 * FUNCTION: WDA_AggrAddTSReqCallback
7169 * send ADD AGGREGATED TS RSP back to PE
7170 */
7171void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7172{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007173 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7174 tWDA_CbContext *pWDA;
7175 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007178 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007179 if(NULL == pWdaParams)
7180 {
7181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007182 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007183 VOS_ASSERT(0) ;
7184 return ;
7185 }
7186
7187 pWDA = pWdaParams->pWdaContext;
7188 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007189
7190 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7191 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007192 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007195
7196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7197 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 return ;
7199}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007200/*
7201 * FUNCTION: WDA_ProcessAddTSReq
7202 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7203 */
7204VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7205 tAggrAddTsParams *pAggrAddTsReqParams)
7206{
7207 WDI_Status status = WDI_STATUS_SUCCESS ;
7208 int i;
7209 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007210 tWDA_ReqParams *pWdaParams = NULL;
7211
7212
Jeff Johnson295189b2012-06-20 16:38:30 -07007213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007214 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007215 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7216 sizeof(WDI_AggrAddTSReqParamsType)) ;
7217 if(NULL == wdiAggrAddTSReqParam)
7218 {
7219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007220 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 VOS_ASSERT(0);
7222 return VOS_STATUS_E_NOMEM;
7223 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007224
7225
7226 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7227 if(NULL == pWdaParams)
7228 {
7229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007230 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007231 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007232 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007233 VOS_ASSERT(0);
7234 return VOS_STATUS_E_NOMEM;
7235 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007236 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7237 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7238 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007239 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7240 {
7241 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7242 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7243 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7245 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7246 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7247 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7248 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7249 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7250 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7251 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7252 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7253 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7254 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7255 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7256 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7257 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7258 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7259 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007260 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7261 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007262 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7263 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7264 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7265 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7266 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7267 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7268 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7269 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7270 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7271 pAggrAddTsReqParams->tspec[i].inactInterval;
7272 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7273 pAggrAddTsReqParams->tspec[i].suspendInterval;
7274 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7275 pAggrAddTsReqParams->tspec[i].svcStartTime;
7276 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7277 pAggrAddTsReqParams->tspec[i].minDataRate;
7278 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7279 pAggrAddTsReqParams->tspec[i].meanDataRate;
7280 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7281 pAggrAddTsReqParams->tspec[i].peakDataRate;
7282 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7283 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7284 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7285 pAggrAddTsReqParams->tspec[i].delayBound;
7286 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7287 pAggrAddTsReqParams->tspec[i].minPhyRate;
7288 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7289 pAggrAddTsReqParams->tspec[i].surplusBw;
7290 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7291 pAggrAddTsReqParams->tspec[i].mediumTime;
7292 }
7293
7294 /* TODO: tAggrAddTsParams doesn't have the following fields */
7295#if 0
7296 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7297 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7298 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7299 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7300#endif
7301 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7302
7303 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007304 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007306 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7307
7308 pWdaParams->pWdaContext = pWDA;
7309
Jeff Johnson295189b2012-06-20 16:38:30 -07007310 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007311 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7312
Jeff Johnson295189b2012-06-20 16:38:30 -07007313 if(IS_WDI_STATUS_FAILURE(status))
7314 {
7315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7316 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7318 vos_mem_free(pWdaParams);
7319
7320 /* send the failure response back to PE*/
7321 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7322 {
7323 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7324 }
7325
7326 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7327 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 return CONVERT_WDI2VOS_STATUS(status) ;
7330}
7331#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007332/*
7333 * FUNCTION: WDA_EnterImpsReqCallback
7334 * send Enter IMPS RSP back to PE
7335 */
7336void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
7337{
7338 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007340 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007341 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 return ;
7343}
Jeff Johnson295189b2012-06-20 16:38:30 -07007344/*
7345 * FUNCTION: WDA_ProcessEnterImpsReq
7346 * Request to WDI to Enter IMPS power state.
7347 */
7348VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7349{
7350 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007352 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007353 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007354 if(IS_WDI_STATUS_FAILURE(status))
7355 {
7356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7357 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007358 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007359 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007360 return CONVERT_WDI2VOS_STATUS(status) ;
7361}
Jeff Johnson295189b2012-06-20 16:38:30 -07007362/*
7363 * FUNCTION: WDA_ExitImpsReqCallback
7364 * send Exit IMPS RSP back to PE
7365 */
7366void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7367{
7368 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007370 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007371 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007372 return ;
7373}
Jeff Johnson295189b2012-06-20 16:38:30 -07007374/*
7375 * FUNCTION: WDA_ProcessExitImpsReq
7376 * Request to WDI to Exit IMPS power state.
7377 */
7378VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7379{
7380 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007382 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007383 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 if(IS_WDI_STATUS_FAILURE(status))
7385 {
7386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7387 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007388 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007390 return CONVERT_WDI2VOS_STATUS(status) ;
7391}
Jeff Johnson295189b2012-06-20 16:38:30 -07007392/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007393 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007394 * send Enter BMPS RSP back to PE
7395 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007396void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007397{
7398 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7399 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007400 tEnterBmpsParams *pEnterBmpsRspParams;
7401
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007403 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 if(NULL == pWdaParams)
7405 {
7406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007407 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 VOS_ASSERT(0) ;
7409 return ;
7410 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007411
7412 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7413 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7414
7415 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007416 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007417
7418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007419 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007420 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7421
Jeff Johnson295189b2012-06-20 16:38:30 -07007422 return ;
7423}
Jeff Johnson295189b2012-06-20 16:38:30 -07007424/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007425 * FUNCTION: WDA_EnterBmpsReqCallback
7426 * Free memory and send Enter BMPS RSP back to PE.
7427 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7428 */
7429void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7430{
7431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7432 tWDA_CbContext *pWDA;
7433 tEnterBmpsParams *pEnterBmpsRspParams;
7434
7435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7436 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7437
7438 if(NULL == pWdaParams)
7439 {
7440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7441 "%s: pWdaParams received NULL", __func__);
7442 VOS_ASSERT(0);
7443 return;
7444 }
7445
7446 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7447 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7448 pEnterBmpsRspParams->status = wdiStatus;
7449
7450 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7451 {
7452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7453 vos_mem_free(pWdaParams);
7454 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7455 }
7456
7457 return;
7458}
7459/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 * FUNCTION: WDA_ProcessEnterBmpsReq
7461 * Request to WDI to Enter BMPS power state.
7462 */
7463VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7464 tEnterBmpsParams *pEnterBmpsReqParams)
7465{
7466 WDI_Status status = WDI_STATUS_SUCCESS;
7467 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7468 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007470 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7472 {
7473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007474 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 VOS_ASSERT(0);
7476 return VOS_STATUS_E_FAILURE;
7477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7479 if (NULL == wdiEnterBmpsReqParams)
7480 {
7481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007484 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7485 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007486 return VOS_STATUS_E_NOMEM;
7487 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7489 if (NULL == pWdaParams)
7490 {
7491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 VOS_ASSERT(0);
7494 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007495 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7496 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007497 return VOS_STATUS_E_NOMEM;
7498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7500 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7501 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7502 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 // For CCX and 11R Roaming
7504 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7505 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7506 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007507 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7508 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007509
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 /* Store param pointer as passed in by caller */
7511 /* store Params pass it to WDI */
7512 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007513 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007516 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 if (IS_WDI_STATUS_FAILURE(status))
7518 {
7519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7520 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007522 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007523 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007524 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 return CONVERT_WDI2VOS_STATUS(status);
7527}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007528
7529
7530static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7531 WDI_Status wdiStatus,
7532 tExitBmpsParams *pExitBmpsReqParams)
7533{
7534 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7535
7536 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7537}
7538
7539
Jeff Johnson295189b2012-06-20 16:38:30 -07007540/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007541 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007542 * send Exit BMPS RSP back to PE
7543 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007544void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007545{
7546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7547 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007548 tExitBmpsParams *pExitBmpsRspParams;
7549
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007551 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007552 if(NULL == pWdaParams)
7553 {
7554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007555 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 VOS_ASSERT(0) ;
7557 return ;
7558 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007559
7560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7561 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7562
7563 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007564 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007565
Jeff Johnson295189b2012-06-20 16:38:30 -07007566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7567 vos_mem_free(pWdaParams) ;
7568
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007569 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 return ;
7571}
Jeff Johnson295189b2012-06-20 16:38:30 -07007572/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007573 * FUNCTION: WDA_ExitBmpsReqCallback
7574 * Free memory and send Exit BMPS RSP back to PE.
7575 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7576 */
7577void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7578{
7579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7580 tWDA_CbContext *pWDA;
7581 tExitBmpsParams *pExitBmpsRspParams;
7582
7583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7584 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7585
7586 if(NULL == pWdaParams)
7587 {
7588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7589 "%s: pWdaParams received NULL", __func__);
7590 VOS_ASSERT(0);
7591 return;
7592 }
7593
7594 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7595 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7596 pExitBmpsRspParams->status = wdiStatus;
7597
7598 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7599 {
7600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7601 vos_mem_free(pWdaParams);
7602 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7603 }
7604
7605 return;
7606}
7607/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007608 * FUNCTION: WDA_ProcessExitBmpsReq
7609 * Request to WDI to Exit BMPS power state.
7610 */
7611VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7612 tExitBmpsParams *pExitBmpsReqParams)
7613{
7614 WDI_Status status = WDI_STATUS_SUCCESS ;
7615 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7616 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7617 sizeof(WDI_ExitBmpsReqParamsType)) ;
7618 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007620 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007621 if(NULL == wdiExitBmpsReqParams)
7622 {
7623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007625 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007626 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007627 return VOS_STATUS_E_NOMEM;
7628 }
7629 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7630 if(NULL == pWdaParams)
7631 {
7632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007634 VOS_ASSERT(0);
7635 vos_mem_free(wdiExitBmpsReqParams);
7636 return VOS_STATUS_E_NOMEM;
7637 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007638 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007639
7640 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7641
Yue Ma7f44bbe2013-04-12 11:47:39 -07007642 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7643 wdiExitBmpsReqParams->pUserData = pWdaParams;
7644
Jeff Johnson295189b2012-06-20 16:38:30 -07007645 /* Store param pointer as passed in by caller */
7646 /* store Params pass it to WDI */
7647 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7648 pWdaParams->pWdaContext = pWDA;
7649 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007650 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007651 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007652 if(IS_WDI_STATUS_FAILURE(status))
7653 {
7654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7655 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7657 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007658 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007660 return CONVERT_WDI2VOS_STATUS(status) ;
7661}
Jeff Johnson295189b2012-06-20 16:38:30 -07007662/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007663 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007664 * send Enter UAPSD RSP back to PE
7665 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007666void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007667{
7668 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7669 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007670 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007672 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 if(NULL == pWdaParams)
7674 {
7675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007676 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 VOS_ASSERT(0) ;
7678 return ;
7679 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007680
7681 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7682 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7683
7684 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007685 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007686
Jeff Johnson295189b2012-06-20 16:38:30 -07007687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7688 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007689 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007690 return ;
7691}
Jeff Johnson295189b2012-06-20 16:38:30 -07007692/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007693 * FUNCTION: WDA_EnterUapsdReqCallback
7694 * Free memory and send Enter UAPSD RSP back to PE.
7695 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7696 */
7697void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7698{
7699 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7700 tWDA_CbContext *pWDA;
7701 tUapsdParams *pEnterUapsdRsqParams;
7702
7703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7704 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7705
7706 if(NULL == pWdaParams)
7707 {
7708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7709 "%s: pWdaParams received NULL", __func__);
7710 VOS_ASSERT(0);
7711 return;
7712 }
7713
7714 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7715 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7716 pEnterUapsdRsqParams->status = wdiStatus;
7717
7718 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7719 {
7720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7721 vos_mem_free(pWdaParams);
7722 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7723 }
7724
7725 return;
7726}
7727/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 * FUNCTION: WDA_ProcessEnterUapsdReq
7729 * Request to WDI to Enter UAPSD power state.
7730 */
7731VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7732 tUapsdParams *pEnterUapsdReqParams)
7733{
7734 WDI_Status status = WDI_STATUS_SUCCESS ;
7735 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7736 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7737 sizeof(WDI_EnterUapsdReqParamsType)) ;
7738 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007740 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007741 if(NULL == wdiEnterUapsdReqParams)
7742 {
7743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007744 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 VOS_ASSERT(0);
7746 return VOS_STATUS_E_NOMEM;
7747 }
7748 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7749 if(NULL == pWdaParams)
7750 {
7751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007752 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007753 VOS_ASSERT(0);
7754 vos_mem_free(wdiEnterUapsdReqParams);
7755 return VOS_STATUS_E_NOMEM;
7756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007757 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7758 pEnterUapsdReqParams->beDeliveryEnabled;
7759 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7760 pEnterUapsdReqParams->beTriggerEnabled;
7761 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7762 pEnterUapsdReqParams->bkDeliveryEnabled;
7763 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7764 pEnterUapsdReqParams->bkTriggerEnabled;
7765 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7766 pEnterUapsdReqParams->viDeliveryEnabled;
7767 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7768 pEnterUapsdReqParams->viTriggerEnabled;
7769 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7770 pEnterUapsdReqParams->voDeliveryEnabled;
7771 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7772 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007773 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007774
Yue Ma7f44bbe2013-04-12 11:47:39 -07007775 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7776 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007777
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 /* Store param pointer as passed in by caller */
7779 /* store Params pass it to WDI */
7780 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7781 pWdaParams->pWdaContext = pWDA;
7782 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007784 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 if(IS_WDI_STATUS_FAILURE(status))
7786 {
7787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7788 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7789 vos_mem_free(pWdaParams->wdaMsgParam) ;
7790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7791 vos_mem_free(pWdaParams) ;
7792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 return CONVERT_WDI2VOS_STATUS(status) ;
7794}
Jeff Johnson295189b2012-06-20 16:38:30 -07007795/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007796 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 * send Exit UAPSD RSP back to PE
7798 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007799void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007800{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007801
7802 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7803 tWDA_CbContext *pWDA;
7804 tExitUapsdParams *pExitUapsdRspParams;
7805
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007807 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007808 if(NULL == pWdaParams)
7809 {
7810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007811 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007812 VOS_ASSERT(0);
7813 return;
7814 }
7815
7816 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7817 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7818
7819 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007820 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007821
7822 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7823 vos_mem_free(pWdaParams) ;
7824
7825 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007826 return ;
7827}
Jeff Johnson295189b2012-06-20 16:38:30 -07007828/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007829 * FUNCTION: WDA_ExitUapsdReqCallback
7830 * Free memory and send Exit UAPSD RSP back to PE.
7831 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7832 */
7833void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7834{
7835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7836 tWDA_CbContext *pWDA;
7837 tExitUapsdParams *pExitUapsdRspParams;
7838
7839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7840 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7841
7842 if(NULL == pWdaParams)
7843 {
7844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7845 "%s: pWdaParams received NULL", __func__);
7846 VOS_ASSERT(0);
7847 return;
7848 }
7849
7850 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7851 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7852 pExitUapsdRspParams->status = wdiStatus;
7853
7854 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7855 {
7856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7857 vos_mem_free(pWdaParams);
7858 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7859 }
7860
7861 return;
7862}
7863/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007864 * FUNCTION: WDA_ProcessExitUapsdReq
7865 * Request to WDI to Exit UAPSD power state.
7866 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007867VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7868 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007869{
7870 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007871 tWDA_ReqParams *pWdaParams ;
7872 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7873 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7874 sizeof(WDI_ExitUapsdReqParamsType)) ;
7875
Jeff Johnson295189b2012-06-20 16:38:30 -07007876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007877 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007878
7879 if(NULL == wdiExitUapsdReqParams)
7880 {
7881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007882 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007883 VOS_ASSERT(0);
7884 return VOS_STATUS_E_NOMEM;
7885 }
7886 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7887 if(NULL == pWdaParams)
7888 {
7889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007890 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007891 VOS_ASSERT(0);
7892 vos_mem_free(wdiExitUapsdReqParams);
7893 return VOS_STATUS_E_NOMEM;
7894 }
7895
7896 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007897 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7898 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007899
7900 /* Store param pointer as passed in by caller */
7901 /* store Params pass it to WDI */
7902 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7903 pWdaParams->pWdaContext = pWDA;
7904 pWdaParams->wdaMsgParam = pExitUapsdParams;
7905
Yue Ma7f44bbe2013-04-12 11:47:39 -07007906 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007907 if(IS_WDI_STATUS_FAILURE(status))
7908 {
7909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7910 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007911 vos_mem_free(pWdaParams->wdaMsgParam) ;
7912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7913 vos_mem_free(pWdaParams) ;
7914
Jeff Johnson295189b2012-06-20 16:38:30 -07007915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 return CONVERT_WDI2VOS_STATUS(status) ;
7917}
7918
Jeff Johnson295189b2012-06-20 16:38:30 -07007919/*
7920 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7921 *
7922 */
7923void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7924{
7925 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007927 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 if(NULL == pWdaParams)
7929 {
7930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007931 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 VOS_ASSERT(0) ;
7933 return ;
7934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007935 if( pWdaParams != NULL )
7936 {
7937 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7938 {
7939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7940 }
7941 if( pWdaParams->wdaMsgParam != NULL )
7942 {
7943 vos_mem_free(pWdaParams->wdaMsgParam) ;
7944 }
7945 vos_mem_free(pWdaParams) ;
7946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007947 return ;
7948}
Jeff Johnson295189b2012-06-20 16:38:30 -07007949/*
7950 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7951 * Request to WDI to set the power save params at start.
7952 */
7953VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7954 tSirPowerSaveCfg *pPowerSaveCfg)
7955{
7956 WDI_Status status = WDI_STATUS_SUCCESS ;
7957 tHalCfg *tlvStruct = NULL ;
7958 tANI_U8 *tlvStructStart = NULL ;
7959 v_PVOID_t *configParam;
7960 tANI_U32 configParamSize;
7961 tANI_U32 *configDataValue;
7962 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7963 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007965 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7967 {
7968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007969 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007971 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007972 return VOS_STATUS_E_FAILURE;
7973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007974 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7975 if (NULL == wdiPowerSaveCfg)
7976 {
7977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007980 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007981 return VOS_STATUS_E_NOMEM;
7982 }
7983 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7984 if(NULL == pWdaParams)
7985 {
7986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007987 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 VOS_ASSERT(0);
7989 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007990 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007991 return VOS_STATUS_E_NOMEM;
7992 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007993 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7994 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007995 if(NULL == configParam)
7996 {
7997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007998 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007999 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 vos_mem_free(pWdaParams);
8001 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008002 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 return VOS_STATUS_E_NOMEM;
8004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008005 vos_mem_set(configParam, configParamSize, 0);
8006 wdiPowerSaveCfg->pConfigBuffer = configParam;
8007 tlvStruct = (tHalCfg *)configParam;
8008 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008009 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8010 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8011 tlvStruct->length = sizeof(tANI_U32);
8012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8013 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008014 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8015 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008016 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8017 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8018 tlvStruct->length = sizeof(tANI_U32);
8019 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8020 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008021 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8022 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8024 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8025 tlvStruct->length = sizeof(tANI_U32);
8026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8027 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8029 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8031 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8032 tlvStruct->length = sizeof(tANI_U32);
8033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8034 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8036 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8038 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8039 tlvStruct->length = sizeof(tANI_U32);
8040 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8041 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8043 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008044 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8045 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8046 tlvStruct->length = sizeof(tANI_U32);
8047 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8048 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008049 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8050 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008051 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8052 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8053 tlvStruct->length = sizeof(tANI_U32);
8054 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8055 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008056 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8057 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008058 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8059 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8060 tlvStruct->length = sizeof(tANI_U32);
8061 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8062 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8063 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8064 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8066 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8067 tlvStruct->length = sizeof(tANI_U32);
8068 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8069 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8070 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8071 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008072 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8073 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8074 tlvStruct->length = sizeof(tANI_U32);
8075 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8076 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008077 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8078 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8080 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8081 tlvStruct->length = sizeof(tANI_U32);
8082 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8083 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008084 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8085 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 /* store Params pass it to WDI */
8089 pWdaParams->wdaMsgParam = configParam;
8090 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8091 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8093 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008094 if(IS_WDI_STATUS_FAILURE(status))
8095 {
8096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8097 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8098 vos_mem_free(pWdaParams->wdaMsgParam);
8099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8100 vos_mem_free(pWdaParams);
8101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008102 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 return CONVERT_WDI2VOS_STATUS(status);
8104}
Jeff Johnson295189b2012-06-20 16:38:30 -07008105/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008106 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 *
8108 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008109void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008110{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8112
Jeff Johnson295189b2012-06-20 16:38:30 -07008113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008114 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008115
8116 if(NULL == pWdaParams)
8117 {
8118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8119 "%s: pWdaParams received NULL", __func__);
8120 VOS_ASSERT(0);
8121 return ;
8122 }
8123
8124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008125 vos_mem_free(pWdaParams);
8126
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 return ;
8128}
Jeff Johnson295189b2012-06-20 16:38:30 -07008129/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008130 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8131 * Free memory.
8132 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8133 */
8134void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8135{
8136 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8137
8138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8139 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8140
8141 if(NULL == pWdaParams)
8142 {
8143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8144 "%s: pWdaParams received NULL", __func__);
8145 VOS_ASSERT(0);
8146 return;
8147 }
8148
8149 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8150 {
8151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8152 vos_mem_free(pWdaParams);
8153 }
8154
8155 return;
8156}
8157/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008158 * FUNCTION: WDA_SetUapsdAcParamsReq
8159 * Request to WDI to set the UAPSD params for an ac (sta mode).
8160 */
8161VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8162 tUapsdInfo *pUapsdInfo)
8163{
8164 WDI_Status status = WDI_STATUS_SUCCESS;
8165 tWDA_CbContext *pWDA = NULL ;
8166 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8167 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8168 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8169 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008171 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008172 if(NULL == wdiUapsdParams)
8173 {
8174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008175 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 VOS_ASSERT(0);
8177 return VOS_STATUS_E_NOMEM;
8178 }
8179 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8180 if(NULL == pWdaParams)
8181 {
8182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008184 VOS_ASSERT(0);
8185 vos_mem_free(wdiUapsdParams);
8186 return VOS_STATUS_E_NOMEM;
8187 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008188 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8189 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8190 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8191 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8192 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8193 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008194 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8195 wdiUapsdParams->pUserData = pWdaParams;
8196
Jeff Johnson295189b2012-06-20 16:38:30 -07008197 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008198 pWdaParams->pWdaContext = pWDA;
8199 /* Store param pointer as passed in by caller */
8200 pWdaParams->wdaMsgParam = pUapsdInfo;
8201 /* store Params pass it to WDI */
8202 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008203 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008204 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008205 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 if(IS_WDI_STATUS_FAILURE(status))
8207 {
8208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8209 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8211 vos_mem_free(pWdaParams);
8212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8214 return VOS_STATUS_SUCCESS;
8215 else
8216 return VOS_STATUS_E_FAILURE;
8217
Jeff Johnson295189b2012-06-20 16:38:30 -07008218}
8219/*
8220 * FUNCTION: WDA_ClearUapsdAcParamsReq
8221 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8222 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8223 * and again enter the UPASD with the modified params. Hence the disable
8224 * function was kept empty.
8225 *
8226 */
8227VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8228{
8229 /* do nothing */
8230 return VOS_STATUS_SUCCESS;
8231}
Jeff Johnson295189b2012-06-20 16:38:30 -07008232/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008233 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008234 *
8235 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008236void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008237{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008238 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8239
Jeff Johnson295189b2012-06-20 16:38:30 -07008240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008241 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008242
8243 if(NULL == pWdaParams)
8244 {
8245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008246 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008247 VOS_ASSERT(0) ;
8248 return ;
8249 }
8250
8251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8252 vos_mem_free(pWdaParams->wdaMsgParam);
8253 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008254
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 //print a msg, nothing else to do
8256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008257 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 return ;
8259}
Jeff Johnson295189b2012-06-20 16:38:30 -07008260/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008261 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8262 * Free memory.
8263 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8264 */
8265void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8266{
8267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8268
8269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8270 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8271
8272 if(NULL == pWdaParams)
8273 {
8274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8275 "%s: pWdaParams received NULL", __func__);
8276 VOS_ASSERT(0);
8277 return;
8278 }
8279
8280 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8281 {
8282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8283 vos_mem_free(pWdaParams->wdaMsgParam);
8284 vos_mem_free(pWdaParams);
8285 }
8286
8287 return;
8288}
8289/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008290 * FUNCTION: WDA_UpdateUapsdParamsReq
8291 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8292 */
8293VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8294 tUpdateUapsdParams* pUpdateUapsdInfo)
8295{
8296 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008297 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8299 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8300 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008301 tWDA_ReqParams *pWdaParams = NULL;
8302
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008304 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 if(NULL == wdiUpdateUapsdParams)
8306 {
8307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008308 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008309 VOS_ASSERT(0);
8310 return VOS_STATUS_E_NOMEM;
8311 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8313 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8314 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008315 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8316 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008317
8318 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8319 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 {
8321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008322 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008324 vos_mem_free(pUpdateUapsdInfo);
8325 vos_mem_free(wdiUpdateUapsdParams);
8326 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008328 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008329 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008331 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8332 pWdaParams->pWdaContext = pWDA;
8333
Jeff Johnson43971f52012-07-17 12:26:56 -07008334 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008335 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008336 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008337
Jeff Johnson43971f52012-07-17 12:26:56 -07008338 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 {
8340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8341 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008342 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8344 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008345 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008347 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008348}
Jeff Johnson295189b2012-06-20 16:38:30 -07008349/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008350 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008351 *
8352 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008353void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008354{
8355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008357 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008358 if(WDI_STATUS_SUCCESS != wdiStatus)
8359 {
8360 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008361 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 if(NULL == pWdaParams)
8364 {
8365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008366 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008367 VOS_ASSERT(0) ;
8368 return ;
8369 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8371 vos_mem_free(pWdaParams->wdaMsgParam);
8372 vos_mem_free(pWdaParams);
8373 return ;
8374}
Jeff Johnson295189b2012-06-20 16:38:30 -07008375/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008376 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8377 * Free memory.
8378 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8379 */
8380void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8381{
8382 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8383
8384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8385 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8386
8387 if(NULL == pWdaParams)
8388 {
8389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8390 "%s: pWdaParams received NULL", __func__);
8391 VOS_ASSERT(0);
8392 return;
8393 }
8394
8395 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8396 {
8397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8398 vos_mem_free(pWdaParams->wdaMsgParam);
8399 vos_mem_free(pWdaParams);
8400 }
8401
8402 return;
8403}
8404/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8406 *
8407 */
8408VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8409 tSirWlanSetRxpFilters *pWlanSuspendParam)
8410{
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008412 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008413 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8414 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8415 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8416 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008418 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 if(NULL == wdiRxpFilterParams)
8420 {
8421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008422 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008423 VOS_ASSERT(0);
8424 vos_mem_free(pWlanSuspendParam);
8425 return VOS_STATUS_E_NOMEM;
8426 }
8427 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8428 if(NULL == pWdaParams)
8429 {
8430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008431 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008432 VOS_ASSERT(0);
8433 vos_mem_free(wdiRxpFilterParams);
8434 vos_mem_free(pWlanSuspendParam);
8435 return VOS_STATUS_E_NOMEM;
8436 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8438 pWlanSuspendParam->setMcstBcstFilter;
8439 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8440 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8441
Yue Ma7f44bbe2013-04-12 11:47:39 -07008442 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8443 wdiRxpFilterParams->pUserData = pWdaParams;
8444
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 pWdaParams->pWdaContext = pWDA;
8446 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8447 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008448 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008449 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008450 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008451 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 {
8453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8454 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008455 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8457 vos_mem_free(pWdaParams->wdaMsgParam);
8458 vos_mem_free(pWdaParams);
8459 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008460 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008461}
Jeff Johnson295189b2012-06-20 16:38:30 -07008462/*
8463 * FUNCTION: WDA_WdiIndicationCallback
8464 *
8465 */
8466void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8467 void* pUserData)
8468{
8469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008470 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008471}
Jeff Johnson295189b2012-06-20 16:38:30 -07008472/*
8473 * FUNCTION: WDA_ProcessWlanSuspendInd
8474 *
8475 */
8476VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8477 tSirWlanSuspendParam *pWlanSuspendParam)
8478{
8479 WDI_Status wdiStatus;
8480 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008482 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008483 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8484 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8485 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8486 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008488 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8489 if(WDI_STATUS_PENDING == wdiStatus)
8490 {
8491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008492 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 }
8494 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8495 {
8496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008497 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 vos_mem_free(pWlanSuspendParam);
8500 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8501}
8502
Chet Lanctot186b5732013-03-18 10:26:30 -07008503#ifdef WLAN_FEATURE_11W
8504/*
8505 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8506 *
8507 */
8508VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8509 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8510{
8511 WDI_Status wdiStatus;
8512 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8514 "------> %s ", __func__);
8515
8516 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8517 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8518 sizeof(tSirMacAddr));
8519
8520 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8521 wdiExclUnencryptParams.pUserData = pWDA;
8522
8523 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8524 if(WDI_STATUS_PENDING == wdiStatus)
8525 {
8526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8527 "Pending received for %s:%d ", __func__, __LINE__ );
8528 }
8529 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8530 {
8531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8532 "Failure in %s:%d ", __func__, __LINE__ );
8533 }
8534 vos_mem_free(pExclUnencryptParam);
8535 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8536}
8537#endif
8538
Jeff Johnson295189b2012-06-20 16:38:30 -07008539/*
8540 * FUNCTION: WDA_ProcessWlanResumeCallback
8541 *
8542 */
8543void WDA_ProcessWlanResumeCallback(
8544 WDI_SuspendResumeRspParamsType *resumeRspParams,
8545 void* pUserData)
8546{
8547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008549 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008550 if(NULL == pWdaParams)
8551 {
8552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008553 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008554 VOS_ASSERT(0) ;
8555 return ;
8556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008557 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8558 {
8559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008560 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8563 vos_mem_free(pWdaParams->wdaMsgParam);
8564 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 return ;
8566}
Jeff Johnson295189b2012-06-20 16:38:30 -07008567/*
8568 * FUNCTION: WDA_ProcessWlanResumeReq
8569 *
8570 */
8571VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8572 tSirWlanResumeParam *pWlanResumeParam)
8573{
8574 WDI_Status wdiStatus;
8575 WDI_ResumeParamsType *wdiResumeParams =
8576 (WDI_ResumeParamsType *)vos_mem_malloc(
8577 sizeof(WDI_ResumeParamsType) ) ;
8578 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008580 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008581 if(NULL == wdiResumeParams)
8582 {
8583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008584 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008585 VOS_ASSERT(0);
8586 return VOS_STATUS_E_NOMEM;
8587 }
8588 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8589 if(NULL == pWdaParams)
8590 {
8591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 VOS_ASSERT(0);
8594 vos_mem_free(wdiResumeParams);
8595 return VOS_STATUS_E_NOMEM;
8596 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8598 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008600 wdiResumeParams->wdiReqStatusCB = NULL;
8601 pWdaParams->wdaMsgParam = pWlanResumeParam;
8602 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8603 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008604 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8605 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8606 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008607 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8608 {
8609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8610 "Failure in Host Resume REQ WDI API, free all the memory " );
8611 VOS_ASSERT(0);
8612 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8613 vos_mem_free(pWdaParams->wdaMsgParam);
8614 vos_mem_free(pWdaParams);
8615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8617}
8618
Jeff Johnson295189b2012-06-20 16:38:30 -07008619/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008620 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008621 *
8622 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008623void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008624{
8625 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008627 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008628 if(NULL == pWdaParams)
8629 {
8630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008631 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 VOS_ASSERT(0) ;
8633 return ;
8634 }
8635
8636 vos_mem_free(pWdaParams->wdaMsgParam) ;
8637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8638 vos_mem_free(pWdaParams) ;
8639 /*
8640 * No respone required for SetBeaconFilter req so just free the request
8641 * param here
8642 */
8643
Jeff Johnson295189b2012-06-20 16:38:30 -07008644 return ;
8645}
Jeff Johnson295189b2012-06-20 16:38:30 -07008646/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008647 * FUNCTION: WDA_SetBeaconFilterReqCallback
8648 * Free memory.
8649 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8650 */
8651void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8652{
8653 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8654
8655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8656 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8657
8658 if(NULL == pWdaParams)
8659 {
8660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8661 "%s: pWdaParams received NULL", __func__);
8662 VOS_ASSERT(0);
8663 return;
8664 }
8665
8666 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8667 {
8668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8669 vos_mem_free(pWdaParams->wdaMsgParam);
8670 vos_mem_free(pWdaParams);
8671 }
8672
8673 return;
8674}
8675/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008676 * FUNCTION: WDA_SetBeaconFilterReq
8677 * Request to WDI to send the beacon filtering related information.
8678 */
8679VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8680 tBeaconFilterMsg* pBeaconFilterInfo)
8681{
8682 WDI_Status status = WDI_STATUS_SUCCESS;
8683 tANI_U8 *dstPtr, *srcPtr;
8684 tANI_U8 filterLength;
8685 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8686 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8687 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8688 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008690 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 if(NULL == wdiBeaconFilterInfo)
8692 {
8693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008695 VOS_ASSERT(0);
8696 return VOS_STATUS_E_NOMEM;
8697 }
8698 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8699 if(NULL == pWdaParams)
8700 {
8701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008702 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 VOS_ASSERT(0);
8704 vos_mem_free(wdiBeaconFilterInfo);
8705 return VOS_STATUS_E_NOMEM;
8706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008707 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8708 pBeaconFilterInfo->beaconInterval;
8709 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8710 pBeaconFilterInfo->capabilityInfo;
8711 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8712 pBeaconFilterInfo->capabilityMask;
8713 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008714
8715 //Fill the BssIdx
8716 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8717
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 //Fill structure with info contained in the beaconFilterTable
8719 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8720 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8721 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8722 if(WDI_BEACON_FILTER_LEN < filterLength)
8723 {
8724 filterLength = WDI_BEACON_FILTER_LEN;
8725 }
8726 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008727 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8728 wdiBeaconFilterInfo->pUserData = pWdaParams;
8729
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 /* Store param pointer as passed in by caller */
8731 /* store Params pass it to WDI */
8732 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8733 pWdaParams->pWdaContext = pWDA;
8734 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8735
Jeff Johnson295189b2012-06-20 16:38:30 -07008736 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008737 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008738 if(IS_WDI_STATUS_FAILURE(status))
8739 {
8740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8741 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8742 vos_mem_free(pWdaParams->wdaMsgParam) ;
8743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8744 vos_mem_free(pWdaParams) ;
8745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008746 return CONVERT_WDI2VOS_STATUS(status) ;
8747}
Jeff Johnson295189b2012-06-20 16:38:30 -07008748/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008749 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 *
8751 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008752void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008753{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008754 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8755
Jeff Johnson295189b2012-06-20 16:38:30 -07008756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008757 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008758
8759 if(NULL == pWdaParams)
8760 {
8761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008762 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008763 VOS_ASSERT(0) ;
8764 return ;
8765 }
8766
8767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8768 vos_mem_free(pWdaParams->wdaMsgParam);
8769 vos_mem_free(pWdaParams);
8770
Jeff Johnson295189b2012-06-20 16:38:30 -07008771 //print a msg, nothing else to do
8772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008773 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008774 return ;
8775}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008776/*
8777 * FUNCTION: WDA_RemBeaconFilterReqCallback
8778 * Free memory.
8779 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8780 */
8781void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8782{
8783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8784
8785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8786 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8787
8788 if(NULL == pWdaParams)
8789 {
8790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8791 "%s: pWdaParams received NULL", __func__);
8792 VOS_ASSERT(0);
8793 return;
8794 }
8795
8796 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8797 {
8798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8799 vos_mem_free(pWdaParams->wdaMsgParam);
8800 vos_mem_free(pWdaParams);
8801 }
8802
8803 return;
8804}
Jeff Johnson295189b2012-06-20 16:38:30 -07008805 // TODO: PE does not have this feature for now implemented,
8806 // but the support for removing beacon filter exists between
8807 // HAL and FW. This function can be called whenever PE defines
8808 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008809/*
8810 * FUNCTION: WDA_RemBeaconFilterReq
8811 * Request to WDI to send the removal of beacon filtering related information.
8812 */
8813VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8814 tRemBeaconFilterMsg* pBeaconFilterInfo)
8815{
8816 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008817 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008818 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8819 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8820 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008821 tWDA_ReqParams *pWdaParams ;
8822
Jeff Johnson295189b2012-06-20 16:38:30 -07008823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008824 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008825 if(NULL == wdiBeaconFilterInfo)
8826 {
8827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008829 VOS_ASSERT(0);
8830 return VOS_STATUS_E_NOMEM;
8831 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008832 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8833 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008834 {
8835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008838 vos_mem_free(wdiBeaconFilterInfo);
8839 vos_mem_free(pBeaconFilterInfo);
8840 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008841 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008842
8843 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8844 pBeaconFilterInfo->ucIeCount;
8845 //Fill structure with info contained in the ucRemIeId
8846 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8847 pBeaconFilterInfo->ucRemIeId,
8848 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8849 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8850 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008851
8852 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008853 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008854 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008855 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8856
8857 pWdaParams->pWdaContext = pWDA;
8858
Jeff Johnson43971f52012-07-17 12:26:56 -07008859 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008860 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008861 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 {
8863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8864 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008865 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8867 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008868 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008869 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008870 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008871}
Jeff Johnson295189b2012-06-20 16:38:30 -07008872/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008873 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008874 *
8875 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008876void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008877{
8878 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008880 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008881 if(NULL == pWdaParams)
8882 {
8883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008884 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008885 VOS_ASSERT(0) ;
8886 return ;
8887 }
8888
8889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8890 vos_mem_free(pWdaParams) ;
8891
Jeff Johnson295189b2012-06-20 16:38:30 -07008892 return ;
8893}
Jeff Johnson295189b2012-06-20 16:38:30 -07008894/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008895 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8896 * Free memory.
8897 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8898 */
8899void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8900{
8901 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8902
8903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8904 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8905
8906 if(NULL == pWdaParams)
8907 {
8908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8909 "%s: pWdaParams received NULL", __func__);
8910 VOS_ASSERT(0);
8911 return;
8912 }
8913
8914 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8915 {
8916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8917 vos_mem_free(pWdaParams);
8918 }
8919
8920 return;
8921}
8922/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008923 * FUNCTION: WDA_SetRSSIThresholdsReq
8924 * Request to WDI to set the RSSI thresholds (sta mode).
8925 */
8926VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8927{
8928 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008929 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008930 tWDA_CbContext *pWDA = NULL ;
8931 v_PVOID_t pVosContext = NULL;
8932 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8933 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8934 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8935 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008937 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008938 if(NULL == wdiRSSIThresholdsInfo)
8939 {
8940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008942 VOS_ASSERT(0);
8943 return VOS_STATUS_E_NOMEM;
8944 }
8945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8946 if(NULL == pWdaParams)
8947 {
8948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008950 VOS_ASSERT(0);
8951 vos_mem_free(wdiRSSIThresholdsInfo);
8952 return VOS_STATUS_E_NOMEM;
8953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008954 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8956 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8957 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8959 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8960 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8962 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8963 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008964 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8965 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008966 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8967 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8968
Jeff Johnson295189b2012-06-20 16:38:30 -07008969 /* Store param pointer as passed in by caller */
8970 /* store Params pass it to WDI */
8971 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8972 pWdaParams->pWdaContext = pWDA;
8973 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008974 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008975 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008976 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008977 {
8978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8979 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008980 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008981 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8982 vos_mem_free(pWdaParams) ;
8983 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008984 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008985
8986}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008987/*
Yue Madb90ac12013-04-04 13:39:13 -07008988 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008989 *
8990 */
Yue Madb90ac12013-04-04 13:39:13 -07008991void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008992{
8993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8994
8995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008996 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 if(NULL == pWdaParams)
8998 {
8999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009000 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009001 VOS_ASSERT(0) ;
9002 return ;
9003 }
9004
9005 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9006 vos_mem_free(pWdaParams->wdaMsgParam);
9007 vos_mem_free(pWdaParams) ;
9008
9009 //print a msg, nothing else to do
9010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009011 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009012 return ;
9013}
Jeff Johnson295189b2012-06-20 16:38:30 -07009014/*
Yue Madb90ac12013-04-04 13:39:13 -07009015 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009016 * Free memory.
9017 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009018 */
9019void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9020{
9021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9022
9023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9024 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9025
9026 if(NULL == pWdaParams)
9027 {
9028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9029 "%s: Invalid pWdaParams pointer", __func__);
9030 VOS_ASSERT(0);
9031 return;
9032 }
9033
9034 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9035 {
9036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9037 vos_mem_free(pWdaParams->wdaMsgParam);
9038 vos_mem_free(pWdaParams);
9039 }
9040
9041 return;
9042}
9043/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009044 * FUNCTION: WDA_ProcessHostOffloadReq
9045 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9046 * to broadcast traffic (sta mode).
9047 */
9048VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9049 tSirHostOffloadReq *pHostOffloadParams)
9050{
9051 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009052 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009053 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9054 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9055 sizeof(WDI_HostOffloadReqParamsType)) ;
9056 tWDA_ReqParams *pWdaParams ;
9057
9058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009059 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009060
9061 if(NULL == wdiHostOffloadInfo)
9062 {
9063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009065 VOS_ASSERT(0);
9066 return VOS_STATUS_E_NOMEM;
9067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009068 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9069 if(NULL == pWdaParams)
9070 {
9071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009072 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009073 VOS_ASSERT(0);
9074 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009075 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 return VOS_STATUS_E_NOMEM;
9077 }
9078
9079 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9080 pHostOffloadParams->offloadType;
9081 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9082 pHostOffloadParams->enableOrDisable;
9083
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009084 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9085 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9086
Jeff Johnson295189b2012-06-20 16:38:30 -07009087 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9088 {
9089 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9090 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9091 pHostOffloadParams->params.hostIpv4Addr,
9092 4);
9093 break;
9094 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9095 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9096 pHostOffloadParams->params.hostIpv6Addr,
9097 16);
9098 break;
9099 case SIR_IPV6_NS_OFFLOAD:
9100 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9101 pHostOffloadParams->params.hostIpv6Addr,
9102 16);
9103
9104#ifdef WLAN_NS_OFFLOAD
9105 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9106 {
9107 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9108 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9109 16);
9110 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9111 }
9112 else
9113 {
9114 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9115 }
9116
9117 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9118 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9119 16);
9120 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9121 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9122 6);
9123
9124 //Only two are supported so let's go through them without a loop
9125 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9126 {
9127 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9128 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9129 16);
9130 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9131 }
9132 else
9133 {
9134 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9135 }
9136
9137 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9138 {
9139 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9140 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9141 16);
9142 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9143 }
9144 else
9145 {
9146 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9147 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309148 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9149 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 break;
9151#endif //WLAN_NS_OFFLOAD
9152 default:
9153 {
9154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9155 "No Handling for Offload Type %x in WDA "
9156 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9157 //WDA_VOS_ASSERT(0) ;
9158 }
9159 }
Yue Madb90ac12013-04-04 13:39:13 -07009160 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9161 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009162
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009164 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 /* store Params pass it to WDI */
9166 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9167 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009168
Jeff Johnson295189b2012-06-20 16:38:30 -07009169
Jeff Johnson43971f52012-07-17 12:26:56 -07009170 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009171 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009172
Jeff Johnson43971f52012-07-17 12:26:56 -07009173 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 {
9175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9176 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009177 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9179 vos_mem_free(pWdaParams->wdaMsgParam);
9180 vos_mem_free(pWdaParams) ;
9181 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009182 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009183
9184}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009185/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009186 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009187 *
9188 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009189void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009190{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9192
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009194 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009195
9196 if(NULL == pWdaParams)
9197 {
9198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009199 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009200 VOS_ASSERT(0) ;
9201 return ;
9202 }
9203
9204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9205 vos_mem_free(pWdaParams->wdaMsgParam);
9206 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009207
Jeff Johnson295189b2012-06-20 16:38:30 -07009208 //print a msg, nothing else to do
9209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009210 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009211 return ;
9212}
Jeff Johnson295189b2012-06-20 16:38:30 -07009213/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009214 * FUNCTION: WDA_KeepAliveReqCallback
9215 * Free memory.
9216 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9217 */
9218void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9219{
9220 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9221
9222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9223 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9224
9225 if(NULL == pWdaParams)
9226 {
9227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9228 "%s: pWdaParams received NULL", __func__);
9229 VOS_ASSERT(0);
9230 return;
9231 }
9232
9233 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9234 {
9235 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9236 vos_mem_free(pWdaParams->wdaMsgParam);
9237 vos_mem_free(pWdaParams);
9238 }
9239
9240 return;
9241}
9242/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 * FUNCTION: WDA_ProcessKeepAliveReq
9244 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9245 * wakeup due to broadcast traffic (sta mode).
9246 */
9247VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9248 tSirKeepAliveReq *pKeepAliveParams)
9249{
9250 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009251 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009252 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9253 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9254 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009255 tWDA_ReqParams *pWdaParams;
9256
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009258 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 if(NULL == wdiKeepAliveInfo)
9260 {
9261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009262 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009263 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009264 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009265 return VOS_STATUS_E_NOMEM;
9266 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009267
9268 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9269 if(NULL == pWdaParams)
9270 {
9271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009272 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009273 VOS_ASSERT(0);
9274 vos_mem_free(wdiKeepAliveInfo);
9275 vos_mem_free(pKeepAliveParams);
9276 return VOS_STATUS_E_NOMEM;
9277 }
9278
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9280 pKeepAliveParams->packetType;
9281 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9282 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009283
9284 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9285 pKeepAliveParams->bssId,
9286 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009287
9288 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9289 {
9290 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9291 pKeepAliveParams->hostIpv4Addr,
9292 SIR_IPV4_ADDR_LEN);
9293 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9294 pKeepAliveParams->destIpv4Addr,
9295 SIR_IPV4_ADDR_LEN);
9296 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9297 pKeepAliveParams->destMacAddr,
9298 SIR_MAC_ADDR_LEN);
9299 }
9300 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9301 {
9302 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9303 SIR_IPV4_ADDR_LEN,
9304 0);
9305 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9306 SIR_IPV4_ADDR_LEN,
9307 0);
9308 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9309 SIR_MAC_ADDR_LEN,
9310 0);
9311 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009312 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9313 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009314
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009316 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009317 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009318 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9319 pWdaParams->pWdaContext = pWDA;
9320
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9322 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9323 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9324 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9325 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9327 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9328 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9329 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9330 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9332 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9333 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9334 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9335 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9336 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9337 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9338 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9340 "TimePeriod %d PacketType %d",
9341 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9342 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009343 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009344 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009345
Jeff Johnson43971f52012-07-17 12:26:56 -07009346 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009347 {
9348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9349 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009350 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9352 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009353 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009355 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009356
9357}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009358/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009359 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009360 *
9361 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009362void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009363 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9364 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009365{
9366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009368 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 if(NULL == pWdaParams)
9370 {
9371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009372 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 VOS_ASSERT(0) ;
9374 return ;
9375 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9377 vos_mem_free(pWdaParams->wdaMsgParam);
9378 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 return ;
9380}
Jeff Johnson295189b2012-06-20 16:38:30 -07009381/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009382 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9383 * Free memory.
9384 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9385 */
9386void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9387{
9388 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9389
9390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9391 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9392
9393 if(NULL == pWdaParams)
9394 {
9395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9396 "%s: pWdaParams received NULL", __func__);
9397 VOS_ASSERT(0);
9398 return;
9399 }
9400
9401 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9402 {
9403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9404 vos_mem_free(pWdaParams->wdaMsgParam);
9405 vos_mem_free(pWdaParams);
9406 }
9407
9408 return;
9409}
9410
9411/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9413 * Request to WDI to add WOWL Bcast pattern
9414 */
9415VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9416 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9417{
9418 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009419 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009420 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9421 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9422 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9423 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009425 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 if(NULL == wdiWowlAddBcPtrnInfo)
9427 {
9428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009430 VOS_ASSERT(0);
9431 return VOS_STATUS_E_NOMEM;
9432 }
9433 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9434 if(NULL == pWdaParams)
9435 {
9436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009437 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009438 VOS_ASSERT(0);
9439 vos_mem_free(wdiWowlAddBcPtrnInfo);
9440 return VOS_STATUS_E_NOMEM;
9441 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009442 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9443 pWowlAddBcPtrnParams->ucPatternId;
9444 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9445 pWowlAddBcPtrnParams->ucPatternByteOffset;
9446 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9447 pWowlAddBcPtrnParams->ucPatternMaskSize;
9448 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9449 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009450 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9451 {
9452 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9453 pWowlAddBcPtrnParams->ucPattern,
9454 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9455 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9456 pWowlAddBcPtrnParams->ucPatternMask,
9457 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9458 }
9459 else
9460 {
9461 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9462 pWowlAddBcPtrnParams->ucPattern,
9463 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9464 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9465 pWowlAddBcPtrnParams->ucPatternMask,
9466 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9467
9468 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9469 pWowlAddBcPtrnParams->ucPatternExt,
9470 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9471 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9472 pWowlAddBcPtrnParams->ucPatternMaskExt,
9473 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9474 }
9475
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009476 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9477 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9478
Yue Ma7f44bbe2013-04-12 11:47:39 -07009479 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9480 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009481 /* Store param pointer as passed in by caller */
9482 /* store Params pass it to WDI */
9483 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9484 pWdaParams->pWdaContext = pWDA;
9485 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009486 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009487 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009488 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009489 {
9490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9491 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009492 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009493 vos_mem_free(pWdaParams->wdaMsgParam) ;
9494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9495 vos_mem_free(pWdaParams) ;
9496 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009497 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009498
9499}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009500/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009501 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009502 *
9503 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009504void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009505 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9506 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009507{
9508 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009510 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009511 if(NULL == pWdaParams)
9512 {
9513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009514 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 VOS_ASSERT(0) ;
9516 return ;
9517 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9519 vos_mem_free(pWdaParams->wdaMsgParam);
9520 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009521 return ;
9522}
Jeff Johnson295189b2012-06-20 16:38:30 -07009523/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009524 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9525 * Free memory.
9526 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9527 */
9528void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9529{
9530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9531
9532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9533 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9534
9535 if(NULL == pWdaParams)
9536 {
9537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9538 "%s: pWdaParams received NULL", __func__);
9539 VOS_ASSERT(0);
9540 return;
9541 }
9542
9543 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9544 {
9545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9546 vos_mem_free(pWdaParams->wdaMsgParam);
9547 vos_mem_free(pWdaParams);
9548 }
9549
9550 return;
9551}
9552/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009553 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9554 * Request to WDI to delete WOWL Bcast pattern
9555 */
9556VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9557 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9558{
9559 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009560 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009561 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9562 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9563 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9564 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009566 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009567 if(NULL == wdiWowlDelBcPtrnInfo)
9568 {
9569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009571 VOS_ASSERT(0);
9572 return VOS_STATUS_E_NOMEM;
9573 }
9574 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9575 if(NULL == pWdaParams)
9576 {
9577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009579 VOS_ASSERT(0);
9580 vos_mem_free(wdiWowlDelBcPtrnInfo);
9581 return VOS_STATUS_E_NOMEM;
9582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009583 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9584 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009585
9586 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9587 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9588
Yue Ma7f44bbe2013-04-12 11:47:39 -07009589 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9590 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009591 /* Store param pointer as passed in by caller */
9592 /* store Params pass it to WDI */
9593 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9594 pWdaParams->pWdaContext = pWDA;
9595 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009596 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009597 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009598 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 {
9600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9601 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009602 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009603 vos_mem_free(pWdaParams->wdaMsgParam) ;
9604 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9605 vos_mem_free(pWdaParams) ;
9606 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009607 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009608
9609}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009610/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009611 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009612 *
9613 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009614void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009615{
9616 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9617 tWDA_CbContext *pWDA;
9618 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009620 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009621 if(NULL == pWdaParams)
9622 {
9623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009624 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009625 VOS_ASSERT(0) ;
9626 return ;
9627 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009628 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9629 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9630
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009631 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9632
Jeff Johnson295189b2012-06-20 16:38:30 -07009633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9634 vos_mem_free(pWdaParams) ;
9635
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009636 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009637 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009638 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009639 return ;
9640}
Jeff Johnson295189b2012-06-20 16:38:30 -07009641/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009642 * FUNCTION: WDA_WowlEnterReqCallback
9643 * Free memory and send WOWL Enter RSP back to PE.
9644 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9645 */
9646void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9647{
9648 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9649 tWDA_CbContext *pWDA;
9650 tSirHalWowlEnterParams *pWowlEnterParams;
9651
9652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9653 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9654
9655 if(NULL == pWdaParams)
9656 {
9657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9658 "%s: pWdaParams received NULL", __func__);
9659 VOS_ASSERT(0);
9660 return;
9661 }
9662
9663 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9664 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9665 pWowlEnterParams->status = wdiStatus;
9666
9667 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9668 {
9669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9670 vos_mem_free(pWdaParams);
9671 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9672 }
9673
9674 return;
9675}
9676/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 * FUNCTION: WDA_ProcessWowlEnterReq
9678 * Request to WDI to enter WOWL
9679 */
9680VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9681 tSirHalWowlEnterParams *pWowlEnterParams)
9682{
9683 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009684 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009685 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9686 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9687 sizeof(WDI_WowlEnterReqParamsType)) ;
9688 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009690 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009691 if(NULL == wdiWowlEnterInfo)
9692 {
9693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009695 VOS_ASSERT(0);
9696 return VOS_STATUS_E_NOMEM;
9697 }
9698 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9699 if(NULL == pWdaParams)
9700 {
9701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009702 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009703 VOS_ASSERT(0);
9704 vos_mem_free(wdiWowlEnterInfo);
9705 return VOS_STATUS_E_NOMEM;
9706 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009707
9708 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9709
Jeff Johnson295189b2012-06-20 16:38:30 -07009710 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9711 pWowlEnterParams->magicPtrn,
9712 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9714 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9716 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009717 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9718 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009719 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9720 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009721 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9722 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009723 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9724 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009725 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9726 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9728 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009729#ifdef WLAN_WAKEUP_EVENTS
9730 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9731 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9732
9733 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9734 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9735
9736 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9737 pWowlEnterParams->ucWowNetScanOffloadMatch;
9738
9739 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9740 pWowlEnterParams->ucWowGTKRekeyError;
9741
9742 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9743 pWowlEnterParams->ucWoWBSSConnLoss;
9744#endif // WLAN_WAKEUP_EVENTS
9745
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009746 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9747 pWowlEnterParams->bssIdx;
9748
Yue Ma7f44bbe2013-04-12 11:47:39 -07009749 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9750 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009751 /* Store param pointer as passed in by caller */
9752 /* store Params pass it to WDI */
9753 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9754 pWdaParams->pWdaContext = pWDA;
9755 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009756 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009757 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009758 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009759 {
9760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9761 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009762 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009763 vos_mem_free(pWdaParams->wdaMsgParam) ;
9764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9765 vos_mem_free(pWdaParams) ;
9766 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009767 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009768
9769}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009770/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009771 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009772 *
9773 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009774void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009775{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9777 tWDA_CbContext *pWDA;
9778 tSirHalWowlExitParams *pWowlExitParams;
9779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009780 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009781 if(NULL == pWdaParams)
9782 {
9783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009784 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009785 VOS_ASSERT(0) ;
9786 return ;
9787 }
9788 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9789 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9790
9791 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009792 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009793
9794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9795 vos_mem_free(pWdaParams) ;
9796
Jeff Johnson295189b2012-06-20 16:38:30 -07009797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009798 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009799 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009800 return ;
9801}
Jeff Johnson295189b2012-06-20 16:38:30 -07009802/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009803 * FUNCTION: WDA_WowlExitReqCallback
9804 * Free memory and send WOWL Exit RSP back to PE.
9805 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9806 */
9807void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9808{
9809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9810 tWDA_CbContext *pWDA;
9811 tSirHalWowlExitParams *pWowlExitParams;
9812
9813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9814 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9815
9816 if(NULL == pWdaParams)
9817 {
9818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9819 "%s: pWdaParams received NULL", __func__);
9820 VOS_ASSERT(0);
9821 return;
9822 }
9823
9824 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9825 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9826 pWowlExitParams->status = wdiStatus;
9827
9828 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9829 {
9830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9831 vos_mem_free(pWdaParams);
9832 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9833 }
9834
9835 return;
9836}
9837/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009838 * FUNCTION: WDA_ProcessWowlExitReq
9839 * Request to WDI to add WOWL Bcast pattern
9840 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009841VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9842 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009843{
9844 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009845 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009846 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9847 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9848 sizeof(WDI_WowlExitReqParamsType)) ;
9849 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009851 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009852 if(NULL == wdiWowlExitInfo)
9853 {
9854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009855 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009856 VOS_ASSERT(0);
9857 return VOS_STATUS_E_NOMEM;
9858 }
9859 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9860 if(NULL == pWdaParams)
9861 {
9862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009863 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009864 VOS_ASSERT(0);
9865 vos_mem_free(wdiWowlExitInfo);
9866 return VOS_STATUS_E_NOMEM;
9867 }
9868
9869 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9870 pWowlExitParams->bssIdx;
9871
Yue Ma7f44bbe2013-04-12 11:47:39 -07009872 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9873 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009874
9875 /* Store param pointer as passed in by caller */
9876 /* store Params pass it to WDI */
9877 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9878 pWdaParams->pWdaContext = pWDA;
9879 pWdaParams->wdaMsgParam = pWowlExitParams;
9880
9881 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009882 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009883
Jeff Johnson43971f52012-07-17 12:26:56 -07009884 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 {
9886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9887 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009888 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9890 vos_mem_free(pWdaParams->wdaMsgParam);
9891 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009892 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009893 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009894}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009895/*
9896 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9897 * Request to WDI to determine whether a given station is capable of
9898 * using HW-based frame translation
9899 */
9900v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9901 tANI_U8 staIdx)
9902{
9903 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9904}
Jeff Johnson295189b2012-06-20 16:38:30 -07009905/*
9906 * FUNCTION: WDA_NvDownloadReqCallback
9907 * send NV Download RSP back to PE
9908 */
9909void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9910 void* pUserData)
9911{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009912
9913 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9914 tWDA_CbContext *pWDA;
9915
Jeff Johnson295189b2012-06-20 16:38:30 -07009916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009917 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009918
9919 if(NULL == pWdaParams)
9920 {
9921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009922 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009923 VOS_ASSERT(0) ;
9924 return ;
9925 }
9926
9927 pWDA = pWdaParams->pWdaContext;
9928
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009930 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9931 vos_mem_free(pWdaParams);
9932
Jeff Johnson295189b2012-06-20 16:38:30 -07009933 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009934 return ;
9935}
Jeff Johnson295189b2012-06-20 16:38:30 -07009936/*
9937 * FUNCTION: WDA_ProcessNvDownloadReq
9938 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9939 */
9940VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9941{
9942 /* Initialize the local Variables*/
9943 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9944 v_VOID_t *pNvBuffer=NULL;
9945 v_SIZE_t bufferSize = 0;
9946 WDI_Status status = WDI_STATUS_E_FAILURE;
9947 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009948 tWDA_ReqParams *pWdaParams ;
9949
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009951 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 if(NULL == pWDA)
9953 {
9954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009955 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009956 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 return VOS_STATUS_E_FAILURE;
9958 }
9959
9960 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -07009961 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
9962
Jeff Johnson295189b2012-06-20 16:38:30 -07009963 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9964 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009965 if(NULL == wdiNvDownloadReqParam)
9966 {
9967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009968 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009969 VOS_ASSERT(0);
9970 return VOS_STATUS_E_NOMEM;
9971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 /* Copy Params to wdiNvDownloadReqParam*/
9973 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9974 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009975
9976 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9977 if(NULL == pWdaParams)
9978 {
9979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009980 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009981 VOS_ASSERT(0);
9982 vos_mem_free(wdiNvDownloadReqParam);
9983 return VOS_STATUS_E_NOMEM;
9984 }
9985
Jeff Johnson295189b2012-06-20 16:38:30 -07009986 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009987 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9988 pWdaParams->wdaMsgParam = NULL;
9989 pWdaParams->pWdaContext = pWDA;
9990
9991
Jeff Johnson295189b2012-06-20 16:38:30 -07009992 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009993
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009995 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9996
Jeff Johnson295189b2012-06-20 16:38:30 -07009997 if(IS_WDI_STATUS_FAILURE(status))
9998 {
9999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10000 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10002 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010005}
10006/*
10007 * FUNCTION: WDA_FlushAcReqCallback
10008 * send Flush AC RSP back to TL
10009 */
10010void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10011{
10012 vos_msg_t wdaMsg = {0} ;
10013 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10014 tFlushACReq *pFlushACReqParams;
10015 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010017 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 if(NULL == pWdaParams)
10019 {
10020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010021 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 VOS_ASSERT(0) ;
10023 return ;
10024 }
10025
10026 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10027 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10028 if(NULL == pFlushACRspParams)
10029 {
10030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010033 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010034 return ;
10035 }
10036 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10037 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10038 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10039 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10040 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010041 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 vos_mem_free(pWdaParams->wdaMsgParam) ;
10043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10044 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10046 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10047 // POST message to TL
10048 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10049
Jeff Johnson295189b2012-06-20 16:38:30 -070010050 return ;
10051}
Jeff Johnson295189b2012-06-20 16:38:30 -070010052/*
10053 * FUNCTION: WDA_ProcessFlushAcReq
10054 * Request to WDI to Update the DELBA REQ params.
10055 */
10056VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10057 tFlushACReq *pFlushAcReqParams)
10058{
10059 WDI_Status status = WDI_STATUS_SUCCESS ;
10060 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10061 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10062 sizeof(WDI_FlushAcReqParamsType)) ;
10063 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 if(NULL == wdiFlushAcReqParam)
10065 {
10066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010067 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010068 VOS_ASSERT(0);
10069 return VOS_STATUS_E_NOMEM;
10070 }
10071 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10072 if(NULL == pWdaParams)
10073 {
10074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010075 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010076 VOS_ASSERT(0);
10077 vos_mem_free(wdiFlushAcReqParam);
10078 return VOS_STATUS_E_NOMEM;
10079 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010081 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010082 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10083 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10084 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10085 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010086 /* Store Flush AC pointer, as this will be used for response */
10087 /* store Params pass it to WDI */
10088 pWdaParams->pWdaContext = pWDA;
10089 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10090 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010091 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10092 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 if(IS_WDI_STATUS_FAILURE(status))
10094 {
10095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10096 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10097 vos_mem_free(pWdaParams->wdaMsgParam) ;
10098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10099 vos_mem_free(pWdaParams) ;
10100 //TODO: respond to TL with failure
10101 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010102 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010103}
Jeff Johnson295189b2012-06-20 16:38:30 -070010104/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010105 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010106 *
10107 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010108void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010109{
10110 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10111 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010112 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010113
10114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010115 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010116 if(NULL == pWdaParams)
10117 {
10118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010119 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 VOS_ASSERT(0) ;
10121 return ;
10122 }
10123 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10124 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10125 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10126 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10127 {
10128 pWDA->wdaAmpSessionOn = VOS_FALSE;
10129 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010130 vos_mem_free(pWdaParams->wdaMsgParam) ;
10131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10132 vos_mem_free(pWdaParams) ;
10133 /*
10134 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10135 * param here
10136 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010137 return ;
10138}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010139/*
10140 * FUNCTION: WDA_BtAmpEventReqCallback
10141 * Free memory.
10142 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10143 */
10144void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10145{
10146 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10147 tWDA_CbContext *pWDA;
10148 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010149
Yue Ma7f44bbe2013-04-12 11:47:39 -070010150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10151 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10152
10153 if(NULL == pWdaParams)
10154 {
10155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10156 "%s: pWdaParams received NULL", __func__);
10157 VOS_ASSERT(0);
10158 return;
10159 }
10160
10161 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10162 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10163
10164 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10165 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10166 {
10167 pWDA->wdaAmpSessionOn = VOS_FALSE;
10168 }
10169
10170 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10171 {
10172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10173 vos_mem_free(pWdaParams->wdaMsgParam);
10174 vos_mem_free(pWdaParams);
10175 }
10176
10177 return;
10178}
Jeff Johnson295189b2012-06-20 16:38:30 -070010179/*
10180 * FUNCTION: WDA_ProcessBtAmpEventReq
10181 * Request to WDI to Update with BT AMP events.
10182 */
10183VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10184 tSmeBtAmpEvent *pBtAmpEventParams)
10185{
10186 WDI_Status status = WDI_STATUS_SUCCESS ;
10187 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10188 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10189 sizeof(WDI_BtAmpEventParamsType)) ;
10190 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010192 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010193 if(NULL == wdiBtAmpEventParam)
10194 {
10195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010196 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010197 VOS_ASSERT(0);
10198 return VOS_STATUS_E_NOMEM;
10199 }
10200 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10201 if(NULL == pWdaParams)
10202 {
10203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010204 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010205 VOS_ASSERT(0);
10206 vos_mem_free(wdiBtAmpEventParam);
10207 return VOS_STATUS_E_NOMEM;
10208 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010209 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10210 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010211 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10212 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 /* Store BT AMP event pointer, as this will be used for response */
10214 /* store Params pass it to WDI */
10215 pWdaParams->pWdaContext = pWDA;
10216 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10217 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010218 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010219 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010220 if(IS_WDI_STATUS_FAILURE(status))
10221 {
10222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10223 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10224 vos_mem_free(pWdaParams->wdaMsgParam) ;
10225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10226 vos_mem_free(pWdaParams) ;
10227 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010228 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10229 {
10230 pWDA->wdaAmpSessionOn = VOS_TRUE;
10231 }
10232 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010233}
10234
Jeff Johnson295189b2012-06-20 16:38:30 -070010235/*
10236 * FUNCTION: WDA_FTMCommandReqCallback
10237 * Handle FTM CMD response came from HAL
10238 * Route responce to HDD FTM
10239 */
10240void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10241 void *usrData)
10242{
10243 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010244 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10245 {
10246 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010247 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010248 return;
10249 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 /* Release Current FTM Command Request */
10251 vos_mem_free(pWDA->wdaFTMCmdReq);
10252 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 /* Post FTM Responce to HDD FTM */
10254 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010255 return;
10256}
Jeff Johnson295189b2012-06-20 16:38:30 -070010257/*
10258 * FUNCTION: WDA_ProcessFTMCommand
10259 * Send FTM command to WDI
10260 */
10261VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10262 tPttMsgbuffer *pPTTFtmCmd)
10263{
10264 WDI_Status status = WDI_STATUS_SUCCESS;
10265 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 ftmCMDReq = (WDI_FTMCommandReqType *)
10267 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10268 if(NULL == ftmCMDReq)
10269 {
10270 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10271 "WDA FTM Command buffer alloc fail");
10272 return VOS_STATUS_E_NOMEM;
10273 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10275 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010276 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 /* Send command to WDI */
10278 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 return status;
10280}
Jeff Johnsone7245742012-09-05 17:12:55 -070010281#ifdef FEATURE_OEM_DATA_SUPPORT
10282/*
10283 * FUNCTION: WDA_StartOemDataReqCallback
10284 *
10285 */
10286void WDA_StartOemDataReqCallback(
10287 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10288 void* pUserData)
10289{
10290 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010291 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10292 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010293 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010294
Jeff Johnsone7245742012-09-05 17:12:55 -070010295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010296 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010297
10298 if(NULL == pWdaParams)
10299 {
10300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010301 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010302 VOS_ASSERT(0) ;
10303 return ;
10304 }
10305 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10306
Jeff Johnsone7245742012-09-05 17:12:55 -070010307 if(NULL == pWDA)
10308 {
10309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010310 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010311 VOS_ASSERT(0);
10312 return ;
10313 }
10314
10315 /*
10316 * Allocate memory for response params sent to PE
10317 */
10318 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10319
10320 // Check if memory is allocated for OemdataMeasRsp Params.
10321 if(NULL == pOemDataRspParams)
10322 {
10323 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10324 "OEM DATA WDA callback alloc fail");
10325 VOS_ASSERT(0) ;
10326 return;
10327 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010328
Jeff Johnsone7245742012-09-05 17:12:55 -070010329 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10331 vos_mem_free(pWdaParams->wdaMsgParam);
10332 vos_mem_free(pWdaParams) ;
10333
Jeff Johnsone7245742012-09-05 17:12:55 -070010334 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010335 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010336 * Also, here success always means that we have atleast one BSSID.
10337 */
10338 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10339
10340 //enable Tx
10341 status = WDA_ResumeDataTx(pWDA);
10342 if(status != VOS_STATUS_SUCCESS)
10343 {
10344 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10345 }
10346 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10347 return ;
10348}
10349/*
10350 * FUNCTION: WDA_ProcessStartOemDataReq
10351 * Send Start Oem Data Req to WDI
10352 */
10353VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10354 tStartOemDataReq *pOemDataReqParams)
10355{
10356 WDI_Status status = WDI_STATUS_SUCCESS;
10357 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010358 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010359
10360 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10361
10362 if(NULL == wdiOemDataReqParams)
10363 {
10364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010366 VOS_ASSERT(0);
10367 return VOS_STATUS_E_NOMEM;
10368 }
10369
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010370 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10371 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10372 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10373 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010374
10375 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10376
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010377 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10378 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010379 {
10380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010382 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010383 vos_mem_free(pOemDataReqParams);
10384 VOS_ASSERT(0);
10385 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010386 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010387
Bernald44a1ae2013-01-09 08:30:39 -080010388 pWdaParams->pWdaContext = (void*)pWDA;
10389 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10390 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010391
10392 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10393 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010394
10395 if(IS_WDI_STATUS_FAILURE(status))
10396 {
10397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10398 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10400 vos_mem_free(pWdaParams->wdaMsgParam);
10401 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010402 }
10403 return CONVERT_WDI2VOS_STATUS(status) ;
10404}
10405#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010406/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010407 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 *
10409 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010410void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010411{
10412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010414 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010415 if(NULL == pWdaParams)
10416 {
10417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010418 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010419 VOS_ASSERT(0) ;
10420 return ;
10421 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010422
10423 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10424 vos_mem_free(pWdaParams->wdaMsgParam);
10425 vos_mem_free(pWdaParams);
10426
10427 return ;
10428}
10429/*
10430 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10431 * Free memory.
10432 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10433 */
10434void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10435{
10436 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10437
10438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10439 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10440
10441 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010442 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10444 "%s: pWdaParams received NULL", __func__);
10445 VOS_ASSERT(0);
10446 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010447 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010448
10449 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010450 {
10451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010452 vos_mem_free(pWdaParams->wdaMsgParam);
10453 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010454 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010455
10456 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010457}
Jeff Johnson295189b2012-06-20 16:38:30 -070010458#ifdef WLAN_FEATURE_GTK_OFFLOAD
10459/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010460 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010461 *
10462 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010463void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010464 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010465{
10466 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10467
10468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010469 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010470 if(NULL == pWdaParams)
10471 {
10472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10473 "%s: pWdaParams received NULL", __func__);
10474 VOS_ASSERT(0);
10475 return;
10476 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010477
Jeff Johnson295189b2012-06-20 16:38:30 -070010478 vos_mem_free(pWdaParams->wdaMsgParam) ;
10479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10480 vos_mem_free(pWdaParams) ;
10481
10482 //print a msg, nothing else to do
10483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010484 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010485
10486 return ;
10487}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010488/*
10489 * FUNCTION: WDA_GTKOffloadReqCallback
10490 * Free memory.
10491 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10492 */
10493void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10494{
10495 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010496
Yue Ma7f44bbe2013-04-12 11:47:39 -070010497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10498 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10499
10500 if(NULL == pWdaParams)
10501 {
10502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10503 "%s: pWdaParams received NULL", __func__);
10504 VOS_ASSERT(0);
10505 return;
10506 }
10507
10508 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10509 {
10510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10511 vos_mem_free(pWdaParams->wdaMsgParam);
10512 vos_mem_free(pWdaParams);
10513 }
10514
10515 return;
10516}
Jeff Johnson295189b2012-06-20 16:38:30 -070010517/*
10518 * FUNCTION: WDA_ProcessGTKOffloadReq
10519 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10520 * to broadcast traffic (sta mode).
10521 */
10522VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10523 tpSirGtkOffloadParams pGtkOffloadParams)
10524{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010525 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10527 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10528 sizeof(WDI_GtkOffloadReqMsg)) ;
10529 tWDA_ReqParams *pWdaParams ;
10530
10531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010532 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010533
10534 if(NULL == wdiGtkOffloadReqMsg)
10535 {
10536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010538 VOS_ASSERT(0);
10539 return VOS_STATUS_E_NOMEM;
10540 }
10541
10542 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10543 if(NULL == pWdaParams)
10544 {
10545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010546 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010547 VOS_ASSERT(0);
10548 vos_mem_free(wdiGtkOffloadReqMsg);
10549 return VOS_STATUS_E_NOMEM;
10550 }
10551
10552 //
10553 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10554 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010555
10556 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010557 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010558
Jeff Johnson295189b2012-06-20 16:38:30 -070010559 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10560 // Copy KCK
10561 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10562 // Copy KEK
10563 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10564 // Copy KeyReplayCounter
10565 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10566 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10567
Yue Ma7f44bbe2013-04-12 11:47:39 -070010568 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10569 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010570
Jeff Johnson295189b2012-06-20 16:38:30 -070010571
10572 /* Store Params pass it to WDI */
10573 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10574 pWdaParams->pWdaContext = pWDA;
10575 /* Store param pointer as passed in by caller */
10576 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10577
Yue Ma7f44bbe2013-04-12 11:47:39 -070010578 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010579
10580 if(IS_WDI_STATUS_FAILURE(status))
10581 {
10582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10583 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10585 vos_mem_free(pWdaParams->wdaMsgParam);
10586 vos_mem_free(pWdaParams);
10587 }
10588
10589 return CONVERT_WDI2VOS_STATUS(status) ;
10590}
10591
10592/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010593 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010594 *
10595 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010596void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010597 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010598{
10599 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10600 tWDA_CbContext *pWDA;
10601 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053010602 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070010603 vos_msg_t vosMsg;
10604
10605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010606 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053010607
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010608 if(NULL == pWdaParams)
10609 {
10610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10611 "%s: pWdaParams received NULL", __func__);
10612 VOS_ASSERT(0);
10613 return;
10614 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010615
Nirav Shah374de6e2014-02-13 16:40:01 +053010616 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
10617 if(NULL == pGtkOffloadGetInfoRsp)
10618 {
10619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10620 "%s: vos_mem_malloc failed ", __func__);
10621 VOS_ASSERT(0);
10622 return;
10623 }
10624
Jeff Johnson295189b2012-06-20 16:38:30 -070010625 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10626 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10627
10628 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10629 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10630
10631 /* Message Header */
10632 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010633 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010634
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010635 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10636 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10637 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10638 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10639 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010640
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010641 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10642 pwdiGtkOffloadGetInfoRsparams->bssId,
10643 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 /* VOS message wrapper */
10645 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10646 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10647 vosMsg.bodyval = 0;
10648
10649 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10650 {
10651 /* free the mem and return */
10652 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10653 }
10654
10655 vos_mem_free(pWdaParams->wdaMsgParam) ;
10656 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10657 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010658
10659 return;
10660}
10661/*
10662 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10663 * Free memory and send RSP back to SME.
10664 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10665 */
10666void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10667{
10668 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10669 vos_msg_t vosMsg;
10670
10671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10672 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10673
10674 if(NULL == pWdaParams)
10675 {
10676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10677 "%s: pWdaParams received NULL", __func__);
10678 VOS_ASSERT(0);
10679 return;
10680 }
10681
10682 /* VOS message wrapper */
10683 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10684 vosMsg.bodyptr = NULL;
10685 vosMsg.bodyval = 0;
10686
10687 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10688 {
10689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10690 vos_mem_free(pWdaParams->wdaMsgParam);
10691 vos_mem_free(pWdaParams);
10692 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10693 }
10694
10695 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010696}
10697#endif
10698
10699/*
10700 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10701 * Request to WDI to set Tx Per Tracking configurations
10702 */
10703VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10704{
10705 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010706 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010707 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10708 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10709 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10710 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010712 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010713 if(NULL == pwdiSetTxPerTrackingReqParams)
10714 {
10715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010716 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010717 vos_mem_free(pTxPerTrackingParams);
10718 VOS_ASSERT(0);
10719 return VOS_STATUS_E_NOMEM;
10720 }
10721 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10722 if(NULL == pWdaParams)
10723 {
10724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010726 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10727 vos_mem_free(pTxPerTrackingParams);
10728 VOS_ASSERT(0);
10729 return VOS_STATUS_E_NOMEM;
10730 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10732 pTxPerTrackingParams->ucTxPerTrackingEnable;
10733 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10734 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10735 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10736 pTxPerTrackingParams->ucTxPerTrackingRatio;
10737 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10738 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010739 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10740 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010741 /* Store param pointer as passed in by caller */
10742 /* store Params pass it to WDI
10743 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10744 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10745 pWdaParams->pWdaContext = pWDA;
10746 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010747 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010748 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010749 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 {
10751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10752 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010753 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010754 vos_mem_free(pWdaParams->wdaMsgParam) ;
10755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10756 vos_mem_free(pWdaParams) ;
10757 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010758 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010759
10760}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010761/*
10762 * FUNCTION: WDA_HALDumpCmdCallback
10763 * Send the VOS complete .
10764 */
10765void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10766 void* pUserData)
10767{
10768 tANI_U8 *buffer = NULL;
10769 tWDA_CbContext *pWDA = NULL;
10770 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010771 if(NULL == pWdaParams)
10772 {
10773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010774 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010775 VOS_ASSERT(0) ;
10776 return ;
10777 }
10778
10779 pWDA = pWdaParams->pWdaContext;
10780 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010781 if(wdiRspParams->usBufferLen > 0)
10782 {
10783 /*Copy the Resp data to UMAC supplied buffer*/
10784 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10785 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010786 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10787 vos_mem_free(pWdaParams);
10788
10789 /* Indicate VOSS about the start complete */
10790 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010791 return ;
10792}
10793
Jeff Johnson295189b2012-06-20 16:38:30 -070010794/*
10795 * FUNCTION: WDA_ProcessHALDumpCmdReq
10796 * Send Dump command to WDI
10797 */
10798VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10799 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10800 tANI_U32 arg4, tANI_U8 *pBuffer)
10801{
10802 WDI_Status status = WDI_STATUS_SUCCESS;
10803 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10804 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10805 tWDA_ReqParams *pWdaParams ;
10806 pVosContextType pVosContext = NULL;
10807 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010808 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10809 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053010810 if(pVosContext)
10811 {
10812 if (pVosContext->isLogpInProgress)
10813 {
10814 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
10815 "%s:LOGP in Progress. Ignore!!!", __func__);
10816 return VOS_STATUS_E_BUSY;
10817 }
10818 }
10819 else
10820 {
10821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10822 "%s: VOS Context Null", __func__);
10823 return VOS_STATUS_E_RESOURCES;
10824 }
10825
Jeff Johnson295189b2012-06-20 16:38:30 -070010826 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10827 if(NULL == pWdaParams)
10828 {
10829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010831 return VOS_STATUS_E_NOMEM;
10832 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010833 /* Allocate memory WDI request structure*/
10834 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10835 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10836 if(NULL == wdiHALDumpCmdReqParam)
10837 {
10838 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10839 "WDA HAL DUMP Command buffer alloc fail");
10840 vos_mem_free(pWdaParams);
10841 return WDI_STATUS_E_FAILURE;
10842 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010843 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 /* Extract the arguments */
10845 wdiHalDumpCmdInfo->command = cmd;
10846 wdiHalDumpCmdInfo->argument1 = arg1;
10847 wdiHalDumpCmdInfo->argument2 = arg2;
10848 wdiHalDumpCmdInfo->argument3 = arg3;
10849 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010851 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10852
10853 /* Response message will be passed through the buffer */
10854 pWdaParams->wdaMsgParam = (void *)pBuffer;
10855
10856 /* store Params pass it to WDI */
10857 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010858 /* Send command to WDI */
10859 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010860 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010861 if ( vStatus != VOS_STATUS_SUCCESS )
10862 {
10863 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10864 {
10865 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010866 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010867 }
10868 else
10869 {
10870 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010871 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010872 }
10873 VOS_ASSERT(0);
10874 }
10875 return status;
10876}
Jeff Johnson295189b2012-06-20 16:38:30 -070010877#ifdef WLAN_FEATURE_GTK_OFFLOAD
10878/*
10879 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10880 * Request to WDI to get GTK Offload Information
10881 */
10882VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10883 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10884{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010885 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010886 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10887 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10888 tWDA_ReqParams *pWdaParams ;
10889
10890 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10891 {
10892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010893 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 VOS_ASSERT(0);
10895 return VOS_STATUS_E_NOMEM;
10896 }
10897
10898 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10899 if(NULL == pWdaParams)
10900 {
10901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010902 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010903 VOS_ASSERT(0);
10904 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10905 return VOS_STATUS_E_NOMEM;
10906 }
10907
Yue Ma7f44bbe2013-04-12 11:47:39 -070010908 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10909 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010910
Jeff Johnson295189b2012-06-20 16:38:30 -070010911 /* Store Params pass it to WDI */
10912 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10913 pWdaParams->pWdaContext = pWDA;
10914 /* Store param pointer as passed in by caller */
10915 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10916
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010917 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010918 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010919
Yue Ma7f44bbe2013-04-12 11:47:39 -070010920 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010921
10922 if(IS_WDI_STATUS_FAILURE(status))
10923 {
10924 /* failure returned by WDI API */
10925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10926 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10928 vos_mem_free(pWdaParams) ;
10929 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10930 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10931 }
10932
10933 return CONVERT_WDI2VOS_STATUS(status) ;
10934}
10935#endif // WLAN_FEATURE_GTK_OFFLOAD
10936
10937/*
Yue Mab9c86f42013-08-14 15:59:08 -070010938 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10939 *
10940 */
10941VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10942 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10943{
10944 WDI_Status wdiStatus;
10945 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10946
10947 addPeriodicTxPtrnParams =
10948 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10949
10950 if (NULL == addPeriodicTxPtrnParams)
10951 {
10952 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10953 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10954 __func__);
10955
10956 return VOS_STATUS_E_NOMEM;
10957 }
10958
10959 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10960 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10961
10962 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10963 addPeriodicTxPtrnParams->pUserData = pWDA;
10964
10965 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10966
10967 if (WDI_STATUS_PENDING == wdiStatus)
10968 {
10969 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10970 "Pending received for %s:%d", __func__, __LINE__ );
10971 }
10972 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10973 {
10974 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10975 "Failure in %s:%d", __func__, __LINE__ );
10976 }
10977
10978 vos_mem_free(addPeriodicTxPtrnParams);
10979
10980 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10981}
10982
10983/*
10984 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10985 *
10986 */
10987VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10988 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10989{
10990 WDI_Status wdiStatus;
10991 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10992
10993 delPeriodicTxPtrnParams =
10994 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10995
10996 if (NULL == delPeriodicTxPtrnParams)
10997 {
10998 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10999 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11000 __func__);
11001
11002 return VOS_STATUS_E_NOMEM;
11003 }
11004
11005 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11006 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11007
11008 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11009 delPeriodicTxPtrnParams->pUserData = pWDA;
11010
11011 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11012
11013 if (WDI_STATUS_PENDING == wdiStatus)
11014 {
11015 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11016 "Pending received for %s:%d", __func__, __LINE__ );
11017 }
11018 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11019 {
11020 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11021 "Failure in %s:%d", __func__, __LINE__ );
11022 }
11023
11024 vos_mem_free(delPeriodicTxPtrnParams);
11025
11026 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11027}
11028
Rajeev79dbe4c2013-10-05 11:03:42 +053011029#ifdef FEATURE_WLAN_BATCH_SCAN
11030/*
11031 * FUNCTION: WDA_ProcessStopBatchScanInd
11032 *
11033 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11034 *
11035 * PARAM:
11036 * pWDA: pointer to WDA context
11037 * pReq: pointer to stop batch scan request
11038 */
11039VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11040 tSirStopBatchScanInd *pReq)
11041{
11042 WDI_Status wdiStatus;
11043 WDI_StopBatchScanIndType wdiReq;
11044
11045 wdiReq.param = pReq->param;
11046
11047 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11048
11049 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11050 {
11051 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11052 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11053 }
11054
11055 vos_mem_free(pReq);
11056
11057 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11058}
11059/*==========================================================================
11060 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11061
11062 DESCRIPTION
11063 API to pull batch scan result from FW
11064
11065 PARAMETERS
11066 pWDA: Pointer to WDA context
11067 pGetBatchScanReq: Pointer to get batch scan result indication
11068
11069 RETURN VALUE
11070 NONE
11071
11072===========================================================================*/
11073VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11074 tSirTriggerBatchScanResultInd *pReq)
11075{
11076 WDI_Status wdiStatus;
11077 WDI_TriggerBatchScanResultIndType wdiReq;
11078
11079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11080 "------> %s " ,__func__);
11081
11082 wdiReq.param = pReq->param;
11083
11084 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11085
11086 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11087 {
11088 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11089 "Trigger batch scan result ind failed %s:%d",
11090 __func__, wdiStatus);
11091 }
11092
11093 vos_mem_free(pReq);
11094
11095 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11096}
11097
11098/*==========================================================================
11099 FUNCTION WDA_SetBatchScanRespCallback
11100
11101 DESCRIPTION
11102 API to process set batch scan response from FW
11103
11104 PARAMETERS
11105 pRsp: Pointer to set batch scan response
11106 pUserData: Pointer to user data
11107
11108 RETURN VALUE
11109 NONE
11110
11111===========================================================================*/
11112void WDA_SetBatchScanRespCallback
11113(
11114 WDI_SetBatchScanRspType *pRsp,
11115 void* pUserData
11116)
11117{
11118 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11119 tpAniSirGlobal pMac;
11120 void *pCallbackContext;
11121 tWDA_CbContext *pWDA = NULL ;
11122 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11123
11124
11125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11126 "<------ %s " ,__func__);
11127 if (NULL == pWdaParams)
11128 {
11129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11130 "%s: pWdaParams received NULL", __func__);
11131 VOS_ASSERT(0) ;
11132 return ;
11133 }
11134
11135 /*extract WDA context*/
11136 pWDA = pWdaParams->pWdaContext;
11137 if (NULL == pWDA)
11138 {
11139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11140 "%s:pWDA is NULL can't invole HDD callback",
11141 __func__);
11142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11143 vos_mem_free(pWdaParams->wdaMsgParam);
11144 vos_mem_free(pWdaParams);
11145 VOS_ASSERT(0);
11146 return;
11147 }
11148
11149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11150 vos_mem_free(pWdaParams->wdaMsgParam);
11151 vos_mem_free(pWdaParams);
11152
11153 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11154 if (NULL == pMac)
11155 {
11156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11157 "%s:pMac is NULL", __func__);
11158 VOS_ASSERT(0);
11159 return;
11160 }
11161
11162 pHddSetBatchScanRsp =
11163 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11164 if (NULL == pHddSetBatchScanRsp)
11165 {
11166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11167 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11168 VOS_ASSERT(0);
11169 return;
11170 }
11171
11172 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11173
11174 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11175 /*call hdd callback with set batch scan response data*/
11176 if(pMac->pmc.setBatchScanReqCallback)
11177 {
11178 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11179 }
11180 else
11181 {
11182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11183 "%s:HDD callback is null", __func__);
11184 VOS_ASSERT(0);
11185 }
11186
11187 vos_mem_free(pHddSetBatchScanRsp);
11188 return ;
11189}
11190
11191/*==========================================================================
11192 FUNCTION WDA_ProcessSetBatchScanReq
11193
11194 DESCRIPTION
11195 API to send set batch scan request to WDI
11196
11197 PARAMETERS
11198 pWDA: Pointer to WDA context
11199 pSetBatchScanReq: Pointer to set batch scan req
11200
11201 RETURN VALUE
11202 NONE
11203
11204===========================================================================*/
11205VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11206 tSirSetBatchScanReq *pSetBatchScanReq)
11207{
11208 WDI_Status status;
11209 tWDA_ReqParams *pWdaParams ;
11210 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11211
11212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11213 "------> %s " ,__func__);
11214
11215 pWdiSetBatchScanReq =
11216 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11217 if (NULL == pWdiSetBatchScanReq)
11218 {
11219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11220 "%s: VOS MEM Alloc Failure", __func__);
11221 vos_mem_free(pSetBatchScanReq);
11222 VOS_ASSERT(0);
11223 return VOS_STATUS_E_NOMEM;
11224 }
11225
11226 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11227 if (NULL == pWdaParams)
11228 {
11229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11230 "%s: VOS MEM Alloc Failure", __func__);
11231 VOS_ASSERT(0);
11232 vos_mem_free(pSetBatchScanReq);
11233 vos_mem_free(pWdiSetBatchScanReq);
11234 return VOS_STATUS_E_NOMEM;
11235 }
11236
11237 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11238 pWdiSetBatchScanReq->numberOfScansToBatch =
11239 pSetBatchScanReq->numberOfScansToBatch;
11240 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11241 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11242 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11243
11244 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11245 pWdaParams->pWdaContext = pWDA;
11246 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11247
11248 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11249 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11250 if (IS_WDI_STATUS_FAILURE(status))
11251 {
11252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11253 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11255 vos_mem_free(pWdaParams->wdaMsgParam);
11256 vos_mem_free(pWdaParams);
11257 }
11258 return CONVERT_WDI2VOS_STATUS(status);
11259}
11260
11261#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011262/*
11263 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11264 *
11265 * DESCRIPTION: This function sends start/update OBSS scan
11266 * inidcation message to WDI
11267 *
11268 * PARAM:
11269 * pWDA: pointer to WDA context
11270 * pReq: pointer to start OBSS scan request
11271 */
11272VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11273 tSirHT40OBSSScanInd *pReq)
11274{
11275 WDI_Status status;
11276 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11277 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011278
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11280 "------> %s " ,__func__);
11281 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11282 wdiOBSSScanParams.pUserData = pWDA;
11283
11284 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11285 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11286 pWdiOBSSScanInd->scanType = pReq->scanType;
11287 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11288 pReq->OBSSScanActiveDwellTime;
11289 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11290 pReq->OBSSScanPassiveDwellTime;
11291 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11292 pReq->BSSChannelWidthTriggerScanInterval;
11293 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11294 pReq->BSSWidthChannelTransitionDelayFactor;
11295 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11296 pReq->OBSSScanActiveTotalPerChannel;
11297 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11298 pReq->OBSSScanPassiveTotalPerChannel;
11299 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11300 pReq->OBSSScanActivityThreshold;
11301 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11302 vos_mem_copy(pWdiOBSSScanInd->channels,
11303 pReq->channels,
11304 pReq->channelCount);
11305 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11306 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11307 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11308 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11309 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11310
11311 vos_mem_copy(pWdiOBSSScanInd->ieField,
11312 pReq->ieField,
11313 pReq->ieFieldLen);
11314
11315 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11316 if (WDI_STATUS_PENDING == status)
11317 {
11318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11319 "Pending received for %s:%d ",__func__,__LINE__ );
11320 }
11321 else if (WDI_STATUS_SUCCESS_SYNC != status)
11322 {
11323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11324 "Failure in %s:%d ",__func__,__LINE__ );
11325 }
11326 return CONVERT_WDI2VOS_STATUS(status) ;
11327}
11328/*
11329 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11330 *
11331 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11332 *
11333 * PARAM:
11334 * pWDA: pointer to WDA context
11335 * pReq: pointer to stop batch scan request
11336 */
11337VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11338 tANI_U8 *bssIdx)
11339{
11340 WDI_Status status;
11341
11342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11343 "------> %s " ,__func__);
11344
11345 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11346 if (WDI_STATUS_PENDING == status)
11347 {
11348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11349 "Pending received for %s:%d ",__func__,__LINE__ );
11350 }
11351 else if (WDI_STATUS_SUCCESS_SYNC != status)
11352 {
11353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11354 "Failure in %s:%d ",__func__,__LINE__ );
11355 }
11356 return CONVERT_WDI2VOS_STATUS(status) ;
11357}
Yue Mab9c86f42013-08-14 15:59:08 -070011358/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011359 * FUNCTION: WDA_ProcessRateUpdateInd
11360 *
11361 */
11362VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11363 tSirRateUpdateInd *pRateUpdateParams)
11364{
11365 WDI_Status wdiStatus;
11366 WDI_RateUpdateIndParams rateUpdateParams;
11367
11368 vos_mem_copy(rateUpdateParams.bssid,
11369 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11370
11371 rateUpdateParams.ucastDataRateTxFlag =
11372 pRateUpdateParams->ucastDataRateTxFlag;
11373 rateUpdateParams.reliableMcastDataRateTxFlag =
11374 pRateUpdateParams->reliableMcastDataRateTxFlag;
11375 rateUpdateParams.mcastDataRate24GHzTxFlag =
11376 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11377 rateUpdateParams.mcastDataRate5GHzTxFlag =
11378 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11379
11380 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11381 rateUpdateParams.reliableMcastDataRate =
11382 pRateUpdateParams->reliableMcastDataRate;
11383 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11384 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11385
11386 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11387 rateUpdateParams.pUserData = pWDA;
11388
11389 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11390
11391 if (WDI_STATUS_PENDING == wdiStatus)
11392 {
11393 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11394 "Pending received for %s:%d", __func__, __LINE__ );
11395 }
11396 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11397 {
11398 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11399 "Failure in %s:%d", __func__, __LINE__ );
11400 }
11401
11402 vos_mem_free(pRateUpdateParams);
11403
11404 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11405}
11406
11407/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011408 * -------------------------------------------------------------------------
11409 * DATA interface with WDI for Mgmt Frames
11410 * -------------------------------------------------------------------------
11411 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011412/*
11413 * FUNCTION: WDA_TxComplete
11414 * Callback function for the WDA_TxPacket
11415 */
11416VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11417 VOS_STATUS status )
11418{
11419
11420 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11421 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011422 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011423
11424 if(NULL == wdaContext)
11425 {
11426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11427 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011428 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011429 VOS_ASSERT(0);
11430 return VOS_STATUS_E_FAILURE;
11431 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011432
11433 /*Check if frame was timed out or not*/
11434 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11435 (v_PVOID_t)&uUserData);
11436
11437 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11438 {
11439 /*Discard frame - no further processing is needed*/
11440 vos_pkt_return_packet(pData);
11441 return VOS_STATUS_SUCCESS;
11442 }
11443
Jeff Johnson295189b2012-06-20 16:38:30 -070011444 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11445 if( NULL!=wdaContext->pTxCbFunc)
11446 {
11447 /*check if packet is freed already*/
11448 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
11449 {
11450 wdaContext->pTxCbFunc(pMac, pData);
11451 }
11452 else
11453 {
11454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011455 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011456 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011457 //Return from here since we reaching here because the packet already timeout
11458 return status;
11459 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011460 }
11461
11462 /*
11463 * Trigger the event to bring the HAL TL Tx complete function to come
11464 * out of wait
11465 * Let the coe above to complete the packet first. When this event is set,
11466 * the thread waiting for the event may run and set Vospacket_freed causing the original
11467 * packet not being freed.
11468 */
11469 status = vos_event_set(&wdaContext->txFrameEvent);
11470 if(!VOS_IS_STATUS_SUCCESS(status))
11471 {
11472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011473 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011475 return status;
11476}
Jeff Johnson295189b2012-06-20 16:38:30 -070011477/*
11478 * FUNCTION: WDA_TxPacket
11479 * Forward TX management frame to WDI
11480 */
11481VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11482 void *pFrmBuf,
11483 tANI_U16 frmLen,
11484 eFrameType frmType,
11485 eFrameTxDir txDir,
11486 tANI_U8 tid,
11487 pWDATxRxCompFunc pCompFunc,
11488 void *pData,
11489 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011490 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011491{
11492 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11493 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11494 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11495 tANI_U8 eventIdx = 0;
11496 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11497 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 if((NULL == pWDA)||(NULL == pFrmBuf))
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011501 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011502 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011503 VOS_ASSERT(0);
11504 return VOS_STATUS_E_FAILURE;
11505 }
11506
11507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011508 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011509 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11510 if(NULL == pMac)
11511 {
11512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011513 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011514 VOS_ASSERT(0);
11515 return VOS_STATUS_E_FAILURE;
11516 }
11517
11518
11519
11520 /* store the call back function in WDA context */
11521 pWDA->pTxCbFunc = pCompFunc;
11522 /* store the call back for the function of ackTxComplete */
11523 if( pAckTxComp )
11524 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011525 if( NULL != pWDA->pAckTxCbFunc )
11526 {
11527 /* Already TxComp is active no need to active again */
11528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011529 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011530 pWDA->pAckTxCbFunc( pMac, 0);
11531 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011532
Jeff Johnsone7245742012-09-05 17:12:55 -070011533 if( VOS_STATUS_SUCCESS !=
11534 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11535 {
11536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11537 "Tx Complete timeout Timer Stop Failed ");
11538 }
11539 else
11540 {
11541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011542 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011543 }
11544 }
11545
11546 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11547 pWDA->pAckTxCbFunc = pAckTxComp;
11548 if( VOS_STATUS_SUCCESS !=
11549 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11550 {
11551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11552 "Tx Complete Timer Start Failed ");
11553 pWDA->pAckTxCbFunc = NULL;
11554 return eHAL_STATUS_FAILURE;
11555 }
11556 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011557 /* Reset the event to be not signalled */
11558 status = vos_event_reset(&pWDA->txFrameEvent);
11559 if(!VOS_IS_STATUS_SUCCESS(status))
11560 {
11561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011562 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011563 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11564 if( pAckTxComp )
11565 {
11566 pWDA->pAckTxCbFunc = NULL;
11567 if( VOS_STATUS_SUCCESS !=
11568 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11569 {
11570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11571 "Tx Complete timeout Timer Stop Failed ");
11572 }
11573 }
11574 return VOS_STATUS_E_FAILURE;
11575 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011576
11577 /* If Peer Sta mask is set don't overwrite to self sta */
11578 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011579 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011580 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011581 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011582 else
11583 {
Ganesh K08bce952012-12-13 15:04:41 -080011584 /* Get system role, use the self station if in unknown role or STA role */
11585 systemRole = wdaGetGlobalSystemRole(pMac);
11586 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11587 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080011588#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011589 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011590#endif
Ganesh K08bce952012-12-13 15:04:41 -080011591 ))
11592 {
11593 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11594 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011595 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011596
Jeff Johnsone7245742012-09-05 17:12:55 -070011597 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11598 disassoc frame reaches the HW, HAL has already deleted the peer station */
11599 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011600 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011601 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011602 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011603 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 /*Send Probe request frames on self sta idx*/
11605 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011606 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011607 /* Since we donot want probe responses to be retried, send probe responses
11608 through the NO_ACK queues */
11609 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11610 {
11611 //probe response is sent out using self station and no retries options.
11612 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11613 }
11614 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11615 {
11616 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11617 }
11618 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011619 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
11620
11621 /*Set frame tag to 0
11622 We will use the WDA user data in order to tag a frame as expired*/
11623 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11624 (v_PVOID_t)0);
11625
11626
11627 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11628 frmLen, ucTypeSubType, tid,
11629 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11630 {
11631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011632 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011633 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
11634 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
11635 if( pAckTxComp )
11636 {
11637 pWDA->pAckTxCbFunc = NULL;
11638 if( VOS_STATUS_SUCCESS !=
11639 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11640 {
11641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11642 "Tx Complete timeout Timer Stop Failed ");
11643 }
11644 }
11645 return VOS_STATUS_E_FAILURE;
11646 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011647 /*
11648 * Wait for the event to be set by the TL, to get the response of TX
11649 * complete, this event should be set by the Callback function called by TL
11650 */
11651 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11652 &eventIdx);
11653 if(!VOS_IS_STATUS_SUCCESS(status))
11654 {
11655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11656 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011657 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011658 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11659 after the packet gets completed(packet freed once)*/
11660
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011661 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070011662 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011663
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011664 /*Tag Frame as timed out for later deletion*/
11665 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11666 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11667
Jeff Johnson295189b2012-06-20 16:38:30 -070011668 /* check whether the packet was freed already,so need not free again when
11669 * TL calls the WDA_Txcomplete routine
11670 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011671 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
11672 /*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 -070011673 {
11674 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011675 } */
11676
Jeff Johnson295189b2012-06-20 16:38:30 -070011677 if( pAckTxComp )
11678 {
11679 pWDA->pAckTxCbFunc = NULL;
11680 if( VOS_STATUS_SUCCESS !=
11681 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11682 {
11683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11684 "Tx Complete timeout Timer Stop Failed ");
11685 }
11686 }
11687 status = VOS_STATUS_E_FAILURE;
11688 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011689#ifdef WLAN_DUMP_MGMTFRAMES
11690 if (VOS_IS_STATUS_SUCCESS(status))
11691 {
11692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11693 "%s() TX packet : SubType %d", __func__,pFc->subType);
11694 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11695 pData, frmLen);
11696 }
11697#endif
11698
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080011699 if (VOS_IS_STATUS_SUCCESS(status))
11700 {
11701 if (pMac->fEnableDebugLog & 0x1)
11702 {
11703 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
11704 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
11705 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
11706 {
11707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
11708 pFc->type, pFc->subType);
11709 }
11710 }
11711 }
11712
11713
Jeff Johnson295189b2012-06-20 16:38:30 -070011714 return status;
11715}
Jeff Johnson295189b2012-06-20 16:38:30 -070011716/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011717 * FUNCTION: WDA_ProcessDHCPStartInd
11718 * Forward DHCP Start to WDI
11719 */
11720static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11721 tAniDHCPInd *dhcpStartInd)
11722{
11723 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053011724 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011725
c_hpothu0b0cab72014-02-13 21:52:40 +053011726 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
11727 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011728 sizeof(tSirMacAddr));
11729
c_hpothu0b0cab72014-02-13 21:52:40 +053011730 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011731
c_hpothu0b0cab72014-02-13 21:52:40 +053011732 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011733 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11735 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011736 }
c_hpothu0b0cab72014-02-13 21:52:40 +053011737 else if (WDI_STATUS_SUCCESS_SYNC != status)
11738 {
11739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11740 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
11741 }
11742
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011743 vos_mem_free(dhcpStartInd);
11744 return CONVERT_WDI2VOS_STATUS(status) ;
11745}
11746
11747 /*
11748 * FUNCTION: WDA_ProcessDHCPStopInd
11749 * Forward DHCP Stop to WDI
11750 */
11751 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11752 tAniDHCPInd *dhcpStopInd)
11753 {
11754 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053011755 WDI_DHCPInd wdiDHCPInd;
11756
11757 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
11758 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11759
11760 status = WDI_dhcpStopInd(&wdiDHCPInd);
11761
11762 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011763 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11765 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011766 }
c_hpothu0b0cab72014-02-13 21:52:40 +053011767 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011768 {
c_hpothu0b0cab72014-02-13 21:52:40 +053011769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11770 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011771 }
c_hpothu0b0cab72014-02-13 21:52:40 +053011772
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011773 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053011774
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011775 return CONVERT_WDI2VOS_STATUS(status) ;
11776 }
11777
11778/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011779 * FUNCTION: WDA_McProcessMsg
11780 * Trigger DAL-AL to start CFG download
11781 */
11782VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11783{
11784 VOS_STATUS status = VOS_STATUS_SUCCESS;
11785 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011786 if(NULL == pMsg)
11787 {
11788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011789 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011790 VOS_ASSERT(0);
11791 return VOS_STATUS_E_FAILURE;
11792 }
11793
11794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011795 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011796
11797 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11798 if(NULL == pWDA )
11799 {
11800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011801 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011802 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011803 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011804 return VOS_STATUS_E_FAILURE;
11805 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011806 /* Process all the WDA messages.. */
11807 switch( pMsg->type )
11808 {
11809 case WNI_CFG_DNLD_REQ:
11810 {
11811 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011812 /* call WDA complete event if config download success */
11813 if( VOS_IS_STATUS_SUCCESS(status) )
11814 {
11815 vos_WDAComplete_cback(pVosContext);
11816 }
11817 else
11818 {
11819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11820 "WDA Config Download failure" );
11821 }
11822 break ;
11823 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011824 /*
11825 * Init SCAN request from PE, convert it into DAL format
11826 * and send it to DAL
11827 */
11828 case WDA_INIT_SCAN_REQ:
11829 {
11830 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11831 break ;
11832 }
11833 /* start SCAN request from PE */
11834 case WDA_START_SCAN_REQ:
11835 {
11836 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11837 break ;
11838 }
11839 /* end SCAN request from PE */
11840 case WDA_END_SCAN_REQ:
11841 {
11842 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11843 break ;
11844 }
11845 /* end SCAN request from PE */
11846 case WDA_FINISH_SCAN_REQ:
11847 {
11848 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11849 break ;
11850 }
11851 /* join request from PE */
11852 case WDA_CHNL_SWITCH_REQ:
11853 {
11854 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
11855 {
11856 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
11857 }
11858 else
11859 {
11860 WDA_ProcessChannelSwitchReq(pWDA,
11861 (tSwitchChannelParams*)pMsg->bodyptr) ;
11862 }
11863 break ;
11864 }
11865 /* ADD BSS request from PE */
11866 case WDA_ADD_BSS_REQ:
11867 {
11868 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
11869 break ;
11870 }
11871 case WDA_ADD_STA_REQ:
11872 {
11873 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
11874 break ;
11875 }
11876 case WDA_DELETE_BSS_REQ:
11877 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011878 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
11879 break ;
11880 }
11881 case WDA_DELETE_STA_REQ:
11882 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011883 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
11884 break ;
11885 }
11886 case WDA_CONFIG_PARAM_UPDATE_REQ:
11887 {
11888 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
11889 break ;
11890 }
11891 case WDA_SET_BSSKEY_REQ:
11892 {
11893 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
11894 break ;
11895 }
11896 case WDA_SET_STAKEY_REQ:
11897 {
11898 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11899 break ;
11900 }
11901 case WDA_SET_STA_BCASTKEY_REQ:
11902 {
11903 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11904 break ;
11905 }
11906 case WDA_REMOVE_BSSKEY_REQ:
11907 {
11908 WDA_ProcessRemoveBssKeyReq(pWDA,
11909 (tRemoveBssKeyParams *)pMsg->bodyptr);
11910 break ;
11911 }
11912 case WDA_REMOVE_STAKEY_REQ:
11913 {
11914 WDA_ProcessRemoveStaKeyReq(pWDA,
11915 (tRemoveStaKeyParams *)pMsg->bodyptr);
11916 break ;
11917 }
11918 case WDA_REMOVE_STA_BCASTKEY_REQ:
11919 {
11920 /* TODO: currently UMAC is not sending this request, Add the code for
11921 handling this request when UMAC supports */
11922 break;
11923 }
11924#ifdef FEATURE_WLAN_CCX
11925 case WDA_TSM_STATS_REQ:
11926 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070011927 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011928 break;
11929 }
11930#endif
11931 case WDA_UPDATE_EDCA_PROFILE_IND:
11932 {
11933 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
11934 break;
11935 }
11936 case WDA_ADD_TS_REQ:
11937 {
11938 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
11939 break;
11940 }
11941 case WDA_DEL_TS_REQ:
11942 {
11943 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11944 break;
11945 }
11946 case WDA_ADDBA_REQ:
11947 {
11948 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11949 break;
11950 }
11951 case WDA_DELBA_IND:
11952 {
11953 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11954 break;
11955 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080011956 case WDA_UPDATE_CHAN_LIST_REQ:
11957 {
11958 WDA_ProcessUpdateChannelList(pWDA,
11959 (tSirUpdateChanList *)pMsg->bodyptr);
11960 break;
11961 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011962 case WDA_SET_LINK_STATE:
11963 {
11964 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11965 break;
11966 }
11967 case WDA_GET_STATISTICS_REQ:
11968 {
11969 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11970 break;
11971 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011972#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11973 case WDA_GET_ROAM_RSSI_REQ:
11974 {
11975 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11976 break;
11977 }
11978#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011979 case WDA_PWR_SAVE_CFG:
11980 {
11981 if(pWDA->wdaState == WDA_READY_STATE)
11982 {
11983 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11984 }
11985 else
11986 {
11987 if(NULL != pMsg->bodyptr)
11988 {
11989 vos_mem_free(pMsg->bodyptr);
11990 }
11991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11992 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11993 }
11994 break;
11995 }
11996 case WDA_ENTER_IMPS_REQ:
11997 {
11998 if(pWDA->wdaState == WDA_READY_STATE)
11999 {
12000 WDA_ProcessEnterImpsReq(pWDA);
12001 }
12002 else
12003 {
12004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12005 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12006 }
12007 break;
12008 }
12009 case WDA_EXIT_IMPS_REQ:
12010 {
12011 if(pWDA->wdaState == WDA_READY_STATE)
12012 {
12013 WDA_ProcessExitImpsReq(pWDA);
12014 }
12015 else
12016 {
12017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12018 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12019 }
12020 break;
12021 }
12022 case WDA_ENTER_BMPS_REQ:
12023 {
12024 if(pWDA->wdaState == WDA_READY_STATE)
12025 {
12026 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12027 }
12028 else
12029 {
12030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12031 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12032 }
12033 break;
12034 }
12035 case WDA_EXIT_BMPS_REQ:
12036 {
12037 if(pWDA->wdaState == WDA_READY_STATE)
12038 {
12039 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12040 }
12041 else
12042 {
12043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12044 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12045 }
12046 break;
12047 }
12048 case WDA_ENTER_UAPSD_REQ:
12049 {
12050 if(pWDA->wdaState == WDA_READY_STATE)
12051 {
12052 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12053 }
12054 else
12055 {
12056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12057 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12058 }
12059 break;
12060 }
12061 case WDA_EXIT_UAPSD_REQ:
12062 {
12063 if(pWDA->wdaState == WDA_READY_STATE)
12064 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012065 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012066 }
12067 else
12068 {
12069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12070 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12071 }
12072 break;
12073 }
12074 case WDA_UPDATE_UAPSD_IND:
12075 {
12076 if(pWDA->wdaState == WDA_READY_STATE)
12077 {
12078 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12079 }
12080 else
12081 {
12082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12083 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12084 }
12085 break;
12086 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012087 case WDA_REGISTER_PE_CALLBACK :
12088 {
12089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12090 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12091 /*TODO: store the PE callback */
12092 /* Do Nothing? MSG Body should be freed at here */
12093 if(NULL != pMsg->bodyptr)
12094 {
12095 vos_mem_free(pMsg->bodyptr);
12096 }
12097 break;
12098 }
12099 case WDA_SYS_READY_IND :
12100 {
12101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12102 "Handling msg type WDA_SYS_READY_IND " );
12103 pWDA->wdaState = WDA_READY_STATE;
12104 if(NULL != pMsg->bodyptr)
12105 {
12106 vos_mem_free(pMsg->bodyptr);
12107 }
12108 break;
12109 }
12110 case WDA_BEACON_FILTER_IND :
12111 {
12112 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12113 break;
12114 }
12115 case WDA_BTC_SET_CFG:
12116 {
12117 /*TODO: handle this while dealing with BTC */
12118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12119 "Handling msg type WDA_BTC_SET_CFG " );
12120 /* Do Nothing? MSG Body should be freed at here */
12121 if(NULL != pMsg->bodyptr)
12122 {
12123 vos_mem_free(pMsg->bodyptr);
12124 }
12125 break;
12126 }
12127 case WDA_SIGNAL_BT_EVENT:
12128 {
12129 /*TODO: handle this while dealing with BTC */
12130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12131 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12132 /* Do Nothing? MSG Body should be freed at here */
12133 if(NULL != pMsg->bodyptr)
12134 {
12135 vos_mem_free(pMsg->bodyptr);
12136 }
12137 break;
12138 }
12139 case WDA_CFG_RXP_FILTER_REQ:
12140 {
12141 WDA_ProcessConfigureRxpFilterReq(pWDA,
12142 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12143 break;
12144 }
12145 case WDA_SET_HOST_OFFLOAD:
12146 {
12147 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12148 break;
12149 }
12150 case WDA_SET_KEEP_ALIVE:
12151 {
12152 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12153 break;
12154 }
12155#ifdef WLAN_NS_OFFLOAD
12156 case WDA_SET_NS_OFFLOAD:
12157 {
12158 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12159 break;
12160 }
12161#endif //WLAN_NS_OFFLOAD
12162 case WDA_ADD_STA_SELF_REQ:
12163 {
12164 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12165 break;
12166 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012167 case WDA_DEL_STA_SELF_REQ:
12168 {
12169 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12170 break;
12171 }
12172 case WDA_WOWL_ADD_BCAST_PTRN:
12173 {
12174 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12175 break;
12176 }
12177 case WDA_WOWL_DEL_BCAST_PTRN:
12178 {
12179 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12180 break;
12181 }
12182 case WDA_WOWL_ENTER_REQ:
12183 {
12184 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12185 break;
12186 }
12187 case WDA_WOWL_EXIT_REQ:
12188 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012189 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012190 break;
12191 }
12192 case WDA_TL_FLUSH_AC_REQ:
12193 {
12194 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12195 break;
12196 }
12197 case WDA_SIGNAL_BTAMP_EVENT:
12198 {
12199 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12200 break;
12201 }
12202#ifdef WDA_UT
12203 case WDA_WDI_EVENT_MSG:
12204 {
12205 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12206 break ;
12207 }
12208#endif
12209 case WDA_UPDATE_BEACON_IND:
12210 {
12211 WDA_ProcessUpdateBeaconParams(pWDA,
12212 (tUpdateBeaconParams *)pMsg->bodyptr);
12213 break;
12214 }
12215 case WDA_SEND_BEACON_REQ:
12216 {
12217 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12218 break;
12219 }
12220 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12221 {
12222 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12223 (tSendProbeRespParams *)pMsg->bodyptr);
12224 break;
12225 }
12226#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
12227 case WDA_SET_MAX_TX_POWER_REQ:
12228 {
12229 WDA_ProcessSetMaxTxPowerReq(pWDA,
12230 (tMaxTxPowerParams *)pMsg->bodyptr);
12231 break;
12232 }
12233#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012234 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12235 {
12236 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12237 pMsg->bodyptr);
12238 break;
12239 }
schang86c22c42013-03-13 18:41:24 -070012240 case WDA_SET_TX_POWER_REQ:
12241 {
12242 WDA_ProcessSetTxPowerReq(pWDA,
12243 (tSirSetTxPowerReq *)pMsg->bodyptr);
12244 break;
12245 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012246 case WDA_SET_P2P_GO_NOA_REQ:
12247 {
12248 WDA_ProcessSetP2PGONOAReq(pWDA,
12249 (tP2pPsParams *)pMsg->bodyptr);
12250 break;
12251 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012252 /* timer related messages */
12253 case WDA_TIMER_BA_ACTIVITY_REQ:
12254 {
12255 WDA_BaCheckActivity(pWDA) ;
12256 break ;
12257 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012258
12259 /* timer related messages */
12260 case WDA_TIMER_TRAFFIC_STATS_IND:
12261 {
12262 WDA_TimerTrafficStatsInd(pWDA);
12263 break;
12264 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012265#ifdef WLAN_FEATURE_VOWIFI_11R
12266 case WDA_AGGR_QOS_REQ:
12267 {
12268 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12269 break;
12270 }
12271#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012272 case WDA_FTM_CMD_REQ:
12273 {
12274 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12275 break ;
12276 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012277#ifdef FEATURE_OEM_DATA_SUPPORT
12278 case WDA_START_OEM_DATA_REQ:
12279 {
12280 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12281 break;
12282 }
12283#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012284 /* Tx Complete Time out Indication */
12285 case WDA_TX_COMPLETE_TIMEOUT_IND:
12286 {
12287 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12288 break;
12289 }
12290 case WDA_WLAN_SUSPEND_IND:
12291 {
12292 WDA_ProcessWlanSuspendInd(pWDA,
12293 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12294 break;
12295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012296 case WDA_WLAN_RESUME_REQ:
12297 {
12298 WDA_ProcessWlanResumeReq(pWDA,
12299 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12300 break;
12301 }
12302
12303 case WDA_UPDATE_CF_IND:
12304 {
12305 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12306 pMsg->bodyptr = NULL;
12307 break;
12308 }
12309#ifdef FEATURE_WLAN_SCAN_PNO
12310 case WDA_SET_PNO_REQ:
12311 {
12312 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12313 break;
12314 }
12315 case WDA_UPDATE_SCAN_PARAMS_REQ:
12316 {
12317 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12318 break;
12319 }
12320 case WDA_SET_RSSI_FILTER_REQ:
12321 {
12322 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12323 break;
12324 }
12325#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012326#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012327 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012328 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012329 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012330 break;
12331 }
12332#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012333 case WDA_SET_TX_PER_TRACKING_REQ:
12334 {
12335 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12336 break;
12337 }
12338
12339#ifdef WLAN_FEATURE_PACKET_FILTERING
12340 case WDA_8023_MULTICAST_LIST_REQ:
12341 {
12342 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12343 break;
12344 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012345 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12346 {
12347 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12348 break;
12349 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012350 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12351 {
12352 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12353 break;
12354 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012355 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12356 {
12357 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12358 break;
12359 }
12360#endif // WLAN_FEATURE_PACKET_FILTERING
12361
12362
12363 case WDA_TRANSMISSION_CONTROL_IND:
12364 {
12365 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12366 break;
12367 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012368 case WDA_SET_POWER_PARAMS_REQ:
12369 {
12370 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12371 break;
12372 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012373#ifdef WLAN_FEATURE_GTK_OFFLOAD
12374 case WDA_GTK_OFFLOAD_REQ:
12375 {
12376 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12377 break;
12378 }
12379
12380 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12381 {
12382 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12383 break;
12384 }
12385#endif //WLAN_FEATURE_GTK_OFFLOAD
12386
12387 case WDA_SET_TM_LEVEL_REQ:
12388 {
12389 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12390 break;
12391 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012392
Mohit Khanna4a70d262012-09-11 16:30:12 -070012393 case WDA_UPDATE_OP_MODE:
12394 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012395 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12396 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12397 {
12398 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12399 }
12400 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012401 {
12402 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12403 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12404 else
12405 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012406 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012407 }
12408 else
12409 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012410 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012411 break;
12412 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012413#ifdef WLAN_FEATURE_11W
12414 case WDA_EXCLUDE_UNENCRYPTED_IND:
12415 {
12416 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12417 break;
12418 }
12419#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012420#ifdef FEATURE_WLAN_TDLS
12421 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12422 {
12423 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12424 break;
12425 }
12426#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012427 case WDA_DHCP_START_IND:
12428 {
12429 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12430 break;
12431 }
12432 case WDA_DHCP_STOP_IND:
12433 {
12434 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12435 break;
12436 }
Leo Chang9056f462013-08-01 19:21:11 -070012437#ifdef FEATURE_WLAN_LPHB
12438 case WDA_LPHB_CONF_REQ:
12439 {
12440 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12441 break;
12442 }
12443#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012444 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12445 {
12446 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12447 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12448 break;
12449 }
12450 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12451 {
12452 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12453 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12454 break;
12455 }
12456
Rajeev79dbe4c2013-10-05 11:03:42 +053012457#ifdef FEATURE_WLAN_BATCH_SCAN
12458 case WDA_SET_BATCH_SCAN_REQ:
12459 {
12460 WDA_ProcessSetBatchScanReq(pWDA,
12461 (tSirSetBatchScanReq *)pMsg->bodyptr);
12462 break;
12463 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012464 case WDA_RATE_UPDATE_IND:
12465 {
12466 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12467 break;
12468 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012469 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12470 {
12471 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12472 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12473 break;
12474 }
12475 case WDA_STOP_BATCH_SCAN_IND:
12476 {
12477 WDA_ProcessStopBatchScanInd(pWDA,
12478 (tSirStopBatchScanInd *)pMsg->bodyptr);
12479 break;
12480 }
12481#endif
12482
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012483 case WDA_HT40_OBSS_SCAN_IND:
12484 {
12485 WDA_ProcessHT40OBSSScanInd(pWDA,
12486 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12487 break;
12488 }
12489 case WDA_HT40_OBSS_STOP_SCAN_IND:
12490 {
12491 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12492 (tANI_U8*)pMsg->bodyptr);
12493 break;
12494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012495 default:
12496 {
12497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12498 "No Handling for msg type %x in WDA "
12499 ,pMsg->type);
12500 /* Do Nothing? MSG Body should be freed at here */
12501 if(NULL != pMsg->bodyptr)
12502 {
12503 vos_mem_free(pMsg->bodyptr);
12504 }
12505 //WDA_VOS_ASSERT(0) ;
12506 }
12507 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012508 return status ;
12509}
12510
Jeff Johnson295189b2012-06-20 16:38:30 -070012511/*
12512 * FUNCTION: WDA_LowLevelIndCallback
12513 * IND API callback from WDI, send Ind to PE
12514 */
12515void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12516 void* pUserData )
12517{
12518 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12519#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12520 tSirRSSINotification rssiNotification;
12521#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012522 if(NULL == pWDA)
12523 {
12524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012525 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012526 VOS_ASSERT(0);
12527 return ;
12528 }
12529
12530 switch(wdiLowLevelInd->wdiIndicationType)
12531 {
12532 case WDI_RSSI_NOTIFICATION_IND:
12533 {
12534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12535 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012536#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12537 rssiNotification.bReserved =
12538 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12539 rssiNotification.bRssiThres1NegCross =
12540 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12541 rssiNotification.bRssiThres1PosCross =
12542 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12543 rssiNotification.bRssiThres2NegCross =
12544 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12545 rssiNotification.bRssiThres2PosCross =
12546 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12547 rssiNotification.bRssiThres3NegCross =
12548 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12549 rssiNotification.bRssiThres3PosCross =
12550 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012551 rssiNotification.avgRssi = (v_S7_t)
12552 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012553 WLANTL_BMPSRSSIRegionChangedNotification(
12554 pWDA->pVosContext,
12555 &rssiNotification);
12556#endif
12557 break ;
12558 }
12559 case WDI_MISSED_BEACON_IND:
12560 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012561 tpSirSmeMissedBeaconInd pMissBeacInd =
12562 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12564 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012565 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012566 if(NULL == pMissBeacInd)
12567 {
12568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12569 "%s: VOS MEM Alloc Failure", __func__);
12570 break;
12571 }
12572 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12573 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12574 pMissBeacInd->bssIdx =
12575 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12576 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012577 break ;
12578 }
12579 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12580 {
12581 /* TODO: Decode Ind and send Ind to PE */
12582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12583 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12584 break ;
12585 }
12586
12587 case WDI_MIC_FAILURE_IND:
12588 {
12589 tpSirSmeMicFailureInd pMicInd =
12590 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12591
12592 if(NULL == pMicInd)
12593 {
12594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012596 break;
12597 }
12598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12599 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012600 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12601 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12602 vos_mem_copy(pMicInd->bssId,
12603 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12604 sizeof(tSirMacAddr));
12605 vos_mem_copy(pMicInd->info.srcMacAddr,
12606 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12607 sizeof(tSirMacAddr));
12608 vos_mem_copy(pMicInd->info.taMacAddr,
12609 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12610 sizeof(tSirMacAddr));
12611 vos_mem_copy(pMicInd->info.dstMacAddr,
12612 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12613 sizeof(tSirMacAddr));
12614 vos_mem_copy(pMicInd->info.rxMacAddr,
12615 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12616 sizeof(tSirMacAddr));
12617 pMicInd->info.multicast =
12618 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12619 pMicInd->info.keyId=
12620 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12621 pMicInd->info.IV1=
12622 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12623 vos_mem_copy(pMicInd->info.TSC,
12624 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012625 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12626 (void *)pMicInd , 0) ;
12627 break ;
12628 }
12629 case WDI_FATAL_ERROR_IND:
12630 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012631 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012632 /* TODO: Decode Ind and send Ind to PE */
12633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12634 "Received WDI_FATAL_ERROR_IND from WDI ");
12635 break ;
12636 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012637 case WDI_DEL_STA_IND:
12638 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012639 tpDeleteStaContext pDelSTACtx =
12640 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12641
12642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12643 "Received WDI_DEL_STA_IND from WDI ");
12644 if(NULL == pDelSTACtx)
12645 {
12646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012647 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012648 break;
12649 }
12650 vos_mem_copy(pDelSTACtx->addr2,
12651 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12652 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012653 vos_mem_copy(pDelSTACtx->bssId,
12654 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12655 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012656 pDelSTACtx->assocId =
12657 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12658 pDelSTACtx->reasonCode =
12659 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12660 pDelSTACtx->staId =
12661 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012662 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12663 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012664 break ;
12665 }
12666 case WDI_COEX_IND:
12667 {
12668 tANI_U32 index;
12669 vos_msg_t vosMsg;
12670 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12671 if(NULL == pSmeCoexInd)
12672 {
12673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012674 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012675 break;
12676 }
12677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12678 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012679 /* Message Header */
12680 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12681 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012682 /* Info from WDI Indication */
12683 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12684 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12685 {
12686 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12687 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012688 /* VOS message wrapper */
12689 vosMsg.type = eWNI_SME_COEX_IND;
12690 vosMsg.bodyptr = (void *)pSmeCoexInd;
12691 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012692 /* Send message to SME */
12693 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12694 {
12695 /* free the mem and return */
12696 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12697 }
12698 else
12699 {
12700 /* DEBUG */
12701 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12702 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12703 pSmeCoexInd->coexIndType,
12704 pSmeCoexInd->coexIndData[0],
12705 pSmeCoexInd->coexIndData[1],
12706 pSmeCoexInd->coexIndData[2],
12707 pSmeCoexInd->coexIndData[3]);
12708 }
12709 break;
12710 }
12711 case WDI_TX_COMPLETE_IND:
12712 {
12713 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12714 /* Calling TxCompleteAck Indication from wda context*/
12715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12716 "Complete Indication received from HAL");
12717 if( pWDA->pAckTxCbFunc )
12718 {
12719 if( VOS_STATUS_SUCCESS !=
12720 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12721 {
12722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12723 "Tx Complete timeout Timer Stop Failed ");
12724 }
12725 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12726 pWDA->pAckTxCbFunc = NULL;
12727 }
12728 else
12729 {
12730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12731 "Tx Complete Indication is received after timeout ");
12732 }
12733 break;
12734 }
Viral Modid86bde22012-12-10 13:09:21 -080012735 case WDI_P2P_NOA_START_IND :
12736 {
12737 tSirP2PNoaStart *pP2pNoaStart =
12738 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12739
12740 if (NULL == pP2pNoaStart)
12741 {
12742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12743 "Memory allocation failure, "
12744 "WDI_P2P_NOA_START_IND not forwarded");
12745 break;
12746 }
12747 pP2pNoaStart->status =
12748 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12749 pP2pNoaStart->bssIdx =
12750 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12751 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12752 (void *)pP2pNoaStart , 0) ;
12753 break;
12754 }
12755
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012756#ifdef FEATURE_WLAN_TDLS
12757 case WDI_TDLS_IND :
12758 {
12759 tSirTdlsInd *pTdlsInd =
12760 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12761
12762 if (NULL == pTdlsInd)
12763 {
12764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12765 "Memory allocation failure, "
12766 "WDI_TDLS_IND not forwarded");
12767 break;
12768 }
12769 pTdlsInd->status =
12770 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12771 pTdlsInd->assocId =
12772 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12773 pTdlsInd->staIdx =
12774 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12775 pTdlsInd->reasonCode =
12776 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12777 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12778 (void *)pTdlsInd , 0) ;
12779 break;
12780 }
12781#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012782 case WDI_P2P_NOA_ATTR_IND :
12783 {
12784 tSirP2PNoaAttr *pP2pNoaAttr =
12785 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12787 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012788 if (NULL == pP2pNoaAttr)
12789 {
12790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12791 "Memory allocation failure, "
12792 "WDI_P2P_NOA_ATTR_IND not forwarded");
12793 break;
12794 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012795 pP2pNoaAttr->index =
12796 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12797 pP2pNoaAttr->oppPsFlag =
12798 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12799 pP2pNoaAttr->ctWin =
12800 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12801
12802 pP2pNoaAttr->uNoa1IntervalCnt =
12803 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12804 pP2pNoaAttr->uNoa1Duration =
12805 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12806 pP2pNoaAttr->uNoa1Interval =
12807 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12808 pP2pNoaAttr->uNoa1StartTime =
12809 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012810 pP2pNoaAttr->uNoa2IntervalCnt =
12811 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12812 pP2pNoaAttr->uNoa2Duration =
12813 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12814 pP2pNoaAttr->uNoa2Interval =
12815 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12816 pP2pNoaAttr->uNoa2StartTime =
12817 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012818 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12819 (void *)pP2pNoaAttr , 0) ;
12820 break;
12821 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012822#ifdef FEATURE_WLAN_SCAN_PNO
12823 case WDI_PREF_NETWORK_FOUND_IND:
12824 {
12825 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012826 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12827 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12828 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12829 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12830
Jeff Johnson295189b2012-06-20 16:38:30 -070012831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12832 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012833 if (NULL == pPrefNetworkFoundInd)
12834 {
12835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12836 "Memory allocation failure, "
12837 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053012838 if (NULL !=
12839 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12840 {
12841 wpalMemoryFree(
12842 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
12843 );
12844 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12845 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012846 break;
12847 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012848 /* Message Header */
12849 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012850 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070012851
12852 /* Info from WDI Indication */
12853 pPrefNetworkFoundInd->ssId.length =
12854 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070012855 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012856 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
12857 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
12858 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070012859 if (NULL !=
12860 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12861 {
12862 pPrefNetworkFoundInd->frameLength =
12863 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12864 vos_mem_copy( pPrefNetworkFoundInd->data,
12865 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
12866 pPrefNetworkFoundInd->frameLength);
12867 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
12868 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12869 }
12870 else
12871 {
12872 pPrefNetworkFoundInd->frameLength = 0;
12873 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012874 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070012875 /* VOS message wrapper */
12876 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
12877 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
12878 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012879 /* Send message to SME */
12880 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12881 {
12882 /* free the mem and return */
12883 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
12884 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012885 break;
12886 }
12887#endif // FEATURE_WLAN_SCAN_PNO
12888
12889#ifdef WLAN_WAKEUP_EVENTS
12890 case WDI_WAKE_REASON_IND:
12891 {
12892 vos_msg_t vosMsg;
12893 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
12894 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
12895 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
12896
12897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12898 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
12899 wdiLowLevelInd->wdiIndicationType,
12900 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
12901 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
12902 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12903
12904 if (NULL == pWakeReasonInd)
12905 {
12906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12907 "Memory allocation failure, "
12908 "WDI_WAKE_REASON_IND not forwarded");
12909 break;
12910 }
12911
12912 vos_mem_zero(pWakeReasonInd, allocSize);
12913
12914 /* Message Header */
12915 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
12916 pWakeReasonInd->mesgLen = allocSize;
12917
12918 /* Info from WDI Indication */
12919 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
12920 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
12921 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
12922 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
12923 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
12924 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
12925 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
12926 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12927
12928 /* VOS message wrapper */
12929 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
12930 vosMsg.bodyptr = (void *) pWakeReasonInd;
12931 vosMsg.bodyval = 0;
12932
12933 /* Send message to SME */
12934 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12935 {
12936 /* free the mem and return */
12937 vos_mem_free((v_VOID_t *) pWakeReasonInd);
12938 }
12939
12940 break;
12941 }
12942#endif // WLAN_WAKEUP_EVENTS
12943
12944 case WDI_TX_PER_HIT_IND:
12945 {
12946 vos_msg_t vosMsg;
12947 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
12948 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
12949 /* VOS message wrapper */
12950 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
12951 vosMsg.bodyptr = NULL;
12952 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012953 /* Send message to SME */
12954 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12955 {
12956 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
12957 }
12958 break;
12959 }
12960
Leo Chang9056f462013-08-01 19:21:11 -070012961#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070012962 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070012963 {
Leo Changd9df8aa2013-09-26 13:32:26 -070012964 vos_msg_t vosMsg;
12965 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012966
Leo Changd9df8aa2013-09-26 13:32:26 -070012967 lphbInd =
12968 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
12969 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070012970 {
12971 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12972 "%s: LPHB IND buffer alloc Fail", __func__);
12973 return ;
12974 }
12975
Leo Changd9df8aa2013-09-26 13:32:26 -070012976 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070012977 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070012978 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070012979 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070012980 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070012981 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
12982
12983 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070012984 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070012985 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
12986
Leo Changd9df8aa2013-09-26 13:32:26 -070012987 vosMsg.type = eWNI_SME_LPHB_IND;
12988 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012989 vosMsg.bodyval = 0;
12990 /* Send message to SME */
12991 if (VOS_STATUS_SUCCESS !=
12992 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12993 {
12994 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12995 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070012996 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070012997 }
12998 break;
12999 }
13000#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013001 case WDI_PERIODIC_TX_PTRN_FW_IND:
13002 {
13003 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13004 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13005 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13006 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13007 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13008 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13009 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13010
13011 break;
13012 }
Leo Chang9056f462013-08-01 19:21:11 -070013013
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013014 case WDI_IBSS_PEER_INACTIVITY_IND:
13015 {
13016 tSirIbssPeerInactivityInd *pIbssInd =
13017 (tSirIbssPeerInactivityInd *)
13018 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13019
13020 if (NULL == pIbssInd)
13021 {
13022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13023 "Memory allocation failure, "
13024 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13025 break;
13026 }
13027
13028 pIbssInd->bssIdx =
13029 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13030 pIbssInd->staIdx =
13031 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13032 vos_mem_copy(pIbssInd->peerAddr,
13033 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13034 sizeof(tSirMacAddr));
13035 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13036 break;
13037 }
13038
Rajeev79dbe4c2013-10-05 11:03:42 +053013039#ifdef FEATURE_WLAN_BATCH_SCAN
13040 case WDI_BATCH_SCAN_RESULT_IND:
13041 {
13042 void *pBatchScanResult;
13043 void *pCallbackContext;
13044 tpAniSirGlobal pMac;
13045
13046 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13047 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13048
13049 /*sanity check*/
13050 if(NULL == pWDA)
13051 {
13052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13053 "%s:pWDA is NULL", __func__);
13054 VOS_ASSERT(0);
13055 return;
13056 }
13057
13058 pBatchScanResult =
13059 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13060 if (NULL == pBatchScanResult)
13061 {
13062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13063 "%s:Batch scan result from FW is null can't invoke HDD callback",
13064 __func__);
13065 VOS_ASSERT(0);
13066 return;
13067 }
13068
13069 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13070 if (NULL == pMac)
13071 {
13072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13073 "%s:pMac is NULL", __func__);
13074 VOS_ASSERT(0);
13075 return;
13076 }
13077
13078 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13079 /*call hdd callback with set batch scan response data*/
13080 if(pMac->pmc.batchScanResultCallback)
13081 {
13082 pMac->pmc.batchScanResultCallback(pCallbackContext,
13083 pBatchScanResult);
13084 }
13085 else
13086 {
13087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13088 "%s:HDD callback is null", __func__);
13089 VOS_ASSERT(0);
13090 }
13091 break;
13092 }
13093#endif
13094
Leo Chang0b0e45a2013-12-15 15:18:55 -080013095#ifdef FEATURE_WLAN_CH_AVOID
13096 case WDI_CH_AVOID_IND:
13097 {
13098 vos_msg_t vosMsg;
13099 tSirChAvoidIndType *chAvoidInd;
13100
13101 chAvoidInd =
13102 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13103 if (NULL == chAvoidInd)
13104 {
13105 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13106 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13107 return ;
13108 }
13109
13110 chAvoidInd->avoidRangeCount =
13111 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13112 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13113 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13114 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13115
13116 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13117 "%s : WDA CH avoid notification", __func__);
13118
13119 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13120 vosMsg.bodyptr = chAvoidInd;
13121 vosMsg.bodyval = 0;
13122 /* Send message to SME */
13123 if (VOS_STATUS_SUCCESS !=
13124 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13125 {
13126 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13127 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13128 vos_mem_free(chAvoidInd);
13129 }
13130 break;
13131 }
13132#endif /* FEATURE_WLAN_CH_AVOID */
13133
Jeff Johnson295189b2012-06-20 16:38:30 -070013134 default:
13135 {
13136 /* TODO error */
13137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13138 "Received UNKNOWN Indication from WDI ");
13139 }
13140 }
13141 return ;
13142}
13143
Jeff Johnson295189b2012-06-20 16:38:30 -070013144/*
13145 * BA related processing in WDA.
13146 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013147void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
13148 void* pUserData)
13149{
13150 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13151 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070013152 if(NULL == pWdaParams)
13153 {
13154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013155 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013156 VOS_ASSERT(0) ;
13157 return ;
13158 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013159 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070013160 vos_mem_free(pWdaParams->wdaMsgParam) ;
13161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13162 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013164 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013165 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
13166 {
13167 tANI_U8 i = 0 ;
13168 tBaActivityInd *baActivityInd = NULL ;
13169 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
13170 tANI_U8 allocSize = sizeof(tBaActivityInd)
13171 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
13172 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
13173 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013175 if(NULL == baActivityInd)
13176 {
13177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013178 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013179 VOS_ASSERT(0) ;
13180 return;
13181 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13183 sizeof(tSirMacAddr)) ;
13184 baActivityInd->baCandidateCnt = baCandidateCount ;
13185
13186 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13187 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13188
13189 for(i = 0 ; i < baCandidateCount ; i++)
13190 {
13191 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013192 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13193 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013194 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13195 {
13196 baCandidate->baInfo[tid].fBaEnable =
13197 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13198 baCandidate->baInfo[tid].startingSeqNum =
13199 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13200 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013201 wdiBaCandidate++ ;
13202 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013203 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13205 }
13206 else
13207 {
13208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13209 "BA Trigger RSP with Failure received ");
13210 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013211 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013212}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013213
13214
13215/*
13216 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13217 * during MCC
13218 */
13219void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13220{
13221 wpt_uint32 enabled;
13222 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13223 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13224 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13225
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013226 if (NULL == pMac )
13227 {
13228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13229 "%s: Invoked with invalid MAC context ", __func__ );
13230 VOS_ASSERT(0);
13231 return;
13232 }
13233
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013234 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13235 != eSIR_SUCCESS)
13236 {
13237 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13238 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13239 return;
13240 }
13241
13242 if(!enabled)
13243 {
13244 return;
13245 }
13246
13247 if(NULL == pWDA)
13248 {
13249 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13250 "%s:WDA context is NULL", __func__);
13251 VOS_ASSERT(0);
13252 return;
13253 }
13254
13255 if(activate)
13256 {
13257 if( VOS_STATUS_SUCCESS !=
13258 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13259 {
13260 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13261 "Traffic Stats Timer Start Failed ");
13262 return;
13263 }
13264 WDI_DS_ActivateTrafficStats();
13265 }
13266 else
13267 {
13268 WDI_DS_DeactivateTrafficStats();
13269 WDI_DS_ClearTrafficStats();
13270
13271 if( VOS_STATUS_SUCCESS !=
13272 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13273 {
13274 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13275 "Traffic Stats Timer Stop Failed ");
13276 return;
13277 }
13278 }
13279}
13280
13281/*
13282 * Traffic Stats Timer handler
13283 */
13284void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13285{
13286 WDI_Status wdiStatus;
13287 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13288 WDI_TrafficStatsIndType trafficStatsIndParams;
13289 wpt_uint32 length, enabled;
13290 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13291
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013292 if (NULL == pMac )
13293 {
13294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13295 "%s: Invoked with invalid MAC context ", __func__ );
13296 VOS_ASSERT(0);
13297 return;
13298 }
13299
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013300 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13301 != eSIR_SUCCESS)
13302 {
13303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13304 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13305 return;
13306 }
13307
13308 if(!enabled)
13309 {
13310 WDI_DS_DeactivateTrafficStats();
13311 return;
13312 }
13313
13314 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13315
13316 if(pWdiTrafficStats != NULL)
13317 {
13318 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13319 trafficStatsIndParams.length = length;
13320 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013321 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013322 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13323 trafficStatsIndParams.pUserData = pWDA;
13324
13325 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13326
13327 if(WDI_STATUS_PENDING == wdiStatus)
13328 {
13329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13330 "Pending received for %s:%d ",__func__,__LINE__ );
13331 }
13332 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13333 {
13334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13335 "Failure in %s:%d ",__func__,__LINE__ );
13336 }
13337
13338 WDI_DS_ClearTrafficStats();
13339 }
13340 else
13341 {
13342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13343 "pWdiTrafficStats is Null");
13344 }
13345
13346 if( VOS_STATUS_SUCCESS !=
13347 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13348 {
13349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13350 "Traffic Stats Timer Start Failed ");
13351 return;
13352 }
13353}
13354
Jeff Johnson295189b2012-06-20 16:38:30 -070013355/*
13356 * BA Activity check timer handler
13357 */
13358void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13359{
13360 tANI_U8 curSta = 0 ;
13361 tANI_U8 tid = 0 ;
13362 tANI_U8 size = 0 ;
13363 tANI_U8 baCandidateCount = 0 ;
13364 tANI_U8 newBaCandidate = 0 ;
13365 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13366
13367 if(NULL == pWDA)
13368 {
13369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013370 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013371 VOS_ASSERT(0);
13372 return ;
13373 }
13374 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13375 {
13376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13377 "Inconsistent STA entries in WDA");
13378 VOS_ASSERT(0) ;
13379 }
13380 /* walk through all STA entries and find out TX packet count */
13381 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13382 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013383#ifdef WLAN_SOFTAP_VSTA_FEATURE
13384 // We can only do BA on "hard" STAs.
13385 if (!(IS_HWSTA_IDX(curSta)))
13386 {
13387 continue;
13388 }
13389#endif //WLAN_SOFTAP_VSTA_FEATURE
13390 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13391 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013392 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013393 tANI_U32 txPktCount = 0 ;
13394 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013395 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013396 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13397 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013398 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13399 curSta, tid, &txPktCount)))
13400 {
13401#if 0
13402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13403 "************* %d:%d, %d ",curSta, txPktCount,
13404 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13405#endif
13406 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013407 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013408 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13409 curSta, tid)))
13410 {
13411 /* get prepare for sending message to HAL */
13412 //baCandidate[baCandidateCount].staIdx = curSta ;
13413 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13414 newBaCandidate = WDA_ENABLE_BA ;
13415 }
13416 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13417 }
13418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013419 /* fill the entry for all the sta with given TID's */
13420 if(WDA_ENABLE_BA == newBaCandidate)
13421 {
13422 /* move to next BA candidate */
13423 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13424 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13425 baCandidateCount++ ;
13426 newBaCandidate = WDA_DISABLE_BA ;
13427 }
13428 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013429 /* prepare and send message to hal */
13430 if( 0 < baCandidateCount)
13431 {
13432 WDI_Status status = WDI_STATUS_SUCCESS ;
13433 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13434 tWDA_ReqParams *pWdaParams =
13435 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013436 if(NULL == pWdaParams)
13437 {
13438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013439 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013440 VOS_ASSERT(0) ;
13441 return;
13442 }
13443 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13444 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13445 if(NULL == wdiTriggerBaReq)
13446 {
13447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013449 VOS_ASSERT(0) ;
13450 vos_mem_free(pWdaParams);
13451 return;
13452 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013453 do
13454 {
13455 WDI_TriggerBAReqinfoType *triggerBaInfo =
13456 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13457 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13458 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13459 * for each request */
13460 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13461 triggerBaInfo->ucBASessionID = 0;
13462 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13463 } while(0) ;
13464 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013466 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013467 pWdaParams->pWdaContext = pWDA;
13468 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13469 pWdaParams->wdaMsgParam = NULL;
13470 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13471 WDA_TriggerBaReqCallback, pWdaParams) ;
13472 if(IS_WDI_STATUS_FAILURE(status))
13473 {
13474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13475 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13476 vos_mem_free(pWdaParams->wdaMsgParam) ;
13477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13478 vos_mem_free(pWdaParams) ;
13479 }
13480 }
13481 else
13482 {
13483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13484 "There is no TID for initiating BA");
13485 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013486 if( VOS_STATUS_SUCCESS !=
13487 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13488 {
13489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13490 "BA Activity Timer Stop Failed ");
13491 return ;
13492 }
13493 if( VOS_STATUS_SUCCESS !=
13494 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13495 {
13496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13497 "BA Activity Timer Start Failed ");
13498 return;
13499 }
13500 return ;
13501}
Jeff Johnson295189b2012-06-20 16:38:30 -070013502/*
13503 * WDA common routine to create timer used by WDA.
13504 */
13505static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13506{
Jeff Johnson295189b2012-06-20 16:38:30 -070013507 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13508 tANI_U32 val = 0 ;
13509 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13510
13511 if(NULL == pMac)
13512 {
13513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013514 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013515 VOS_ASSERT(0);
13516 return VOS_STATUS_E_FAILURE;
13517 }
13518 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13519 != eSIR_SUCCESS)
13520 {
13521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13522 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13523 return VOS_STATUS_E_FAILURE;
13524 }
13525 val = SYS_MS_TO_TICKS(val) ;
13526
13527 /* BA activity check timer */
13528 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13529 "BA Activity Check timer", WDA_TimerHandler,
13530 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13531 if(status != TX_SUCCESS)
13532 {
13533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13534 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013535 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013536 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013537 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013538 /* Tx Complete Timeout timer */
13539 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13540 "Tx Complete Check timer", WDA_TimerHandler,
13541 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013542 if(status != TX_SUCCESS)
13543 {
13544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13545 "Unable to create Tx Complete Timeout timer");
13546 /* Destroy timer of BA activity check timer */
13547 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13548 if(status != TX_SUCCESS)
13549 {
13550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13551 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013552 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013553 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013554 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013555 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013556
13557 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13558
13559 /* Traffic Stats timer */
13560 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13561 "Traffic Stats timer", WDA_TimerHandler,
13562 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13563 if(status != TX_SUCCESS)
13564 {
13565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13566 "Unable to create traffic stats timer");
13567 /* Destroy timer of BA activity check timer */
13568 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13569 if(status != TX_SUCCESS)
13570 {
13571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13572 "Unable to Destroy BA activity timer");
13573 }
13574 /* Destroy timer of tx complete timer */
13575 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13576 if(status != TX_SUCCESS)
13577 {
13578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13579 "Unable to Tx complete timer");
13580 }
13581 return VOS_STATUS_E_FAILURE ;
13582 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013583 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013584}
Jeff Johnson295189b2012-06-20 16:38:30 -070013585/*
13586 * WDA common routine to destroy timer used by WDA.
13587 */
13588static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13589{
13590 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013591 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13592 if(status != TX_SUCCESS)
13593 {
13594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13595 "Unable to Destroy Tx Complete Timeout timer");
13596 return eSIR_FAILURE ;
13597 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013598 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13599 if(status != TX_SUCCESS)
13600 {
13601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13602 "Unable to Destroy BA activity timer");
13603 return eSIR_FAILURE ;
13604 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013605 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13606 if(status != TX_SUCCESS)
13607 {
13608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13609 "Unable to Destroy traffic stats timer");
13610 return eSIR_FAILURE ;
13611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013612 return eSIR_SUCCESS ;
13613}
Jeff Johnson295189b2012-06-20 16:38:30 -070013614/*
13615 * WDA timer handler.
13616 */
13617void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13618{
13619 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13620 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013621 /*
13622 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13623 */
13624 wdaMsg.type = timerInfo ;
13625 wdaMsg.bodyptr = NULL;
13626 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013627 /* post the message.. */
13628 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13629 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13630 {
13631 vosStatus = VOS_STATUS_E_BADMSG;
13632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013633}
Jeff Johnson295189b2012-06-20 16:38:30 -070013634/*
13635 * WDA Tx Complete timeout Indication.
13636 */
13637void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13638{
13639 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013640 if( pWDA->pAckTxCbFunc )
13641 {
13642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013643 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013644 pWDA->pAckTxCbFunc( pMac, 0);
13645 pWDA->pAckTxCbFunc = NULL;
13646 }
13647 else
13648 {
13649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013650 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013651 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013652}
Jeff Johnson295189b2012-06-20 16:38:30 -070013653/*
13654 * WDA Set REG Domain to VOS NV
13655 */
Abhishek Singha306a442013-11-07 18:39:01 +053013656eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13657 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013658{
Abhishek Singha306a442013-11-07 18:39:01 +053013659 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013660 {
13661 return eHAL_STATUS_INVALID_PARAMETER;
13662 }
13663 return eHAL_STATUS_SUCCESS;
13664}
Jeff Johnson295189b2012-06-20 16:38:30 -070013665
Jeff Johnson295189b2012-06-20 16:38:30 -070013666#ifdef FEATURE_WLAN_SCAN_PNO
13667/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013668 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013669 *
13670 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013671void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013672{
13673 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013675 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013676 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013677 {
13678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013679 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013680 VOS_ASSERT(0) ;
13681 return ;
13682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013683
Yue Ma7f44bbe2013-04-12 11:47:39 -070013684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13685 vos_mem_free(pWdaParams->wdaMsgParam);
13686 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013687
13688 return ;
13689}
Jeff Johnson295189b2012-06-20 16:38:30 -070013690/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013691 * FUNCTION: WDA_PNOScanReqCallback
13692 * Free memory.
13693 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13694 */
13695void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013696{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013697 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13698
13699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13700 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13701
13702 if(NULL == pWdaParams)
13703 {
13704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13705 "%s: pWdaParams received NULL", __func__);
13706 VOS_ASSERT(0);
13707 return;
13708 }
13709
13710 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13711 {
13712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13713 vos_mem_free(pWdaParams->wdaMsgParam);
13714 vos_mem_free(pWdaParams);
13715 }
13716
13717 return;
13718}
13719/*
13720 * FUNCTION: WDA_UpdateScanParamsRespCallback
13721 *
13722 */
13723void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13724{
13725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013727 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013728 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013729 {
13730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013731 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013732 VOS_ASSERT(0) ;
13733 return ;
13734 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013735
13736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13737 vos_mem_free(pWdaParams->wdaMsgParam);
13738 vos_mem_free(pWdaParams);
13739
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 return ;
13741}
Jeff Johnson295189b2012-06-20 16:38:30 -070013742/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013743 * FUNCTION: WDA_UpdateScanParamsReqCallback
13744 * Free memory.
13745 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13746 */
13747void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13748{
13749 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13750
13751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13752 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13753
13754 if(NULL == pWdaParams)
13755 {
13756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13757 "%s: pWdaParams received NULL", __func__);
13758 VOS_ASSERT(0);
13759 return;
13760 }
13761
13762 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13763 {
13764 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13765 vos_mem_free(pWdaParams->wdaMsgParam);
13766 vos_mem_free(pWdaParams);
13767 }
13768
13769 return;
13770}
13771/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013772 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13773 * Request to WDI to set Preferred Network List.Offload
13774 */
13775VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13776 tSirPNOScanReq *pPNOScanReqParams)
13777{
Jeff Johnson43971f52012-07-17 12:26:56 -070013778 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013779 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13780 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13781 tWDA_ReqParams *pWdaParams ;
13782 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013784 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013785 if(NULL == pwdiPNOScanReqInfo)
13786 {
13787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013788 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013789 VOS_ASSERT(0);
13790 return VOS_STATUS_E_NOMEM;
13791 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013792 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13793 if(NULL == pWdaParams)
13794 {
13795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013796 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013797 VOS_ASSERT(0);
13798 vos_mem_free(pwdiPNOScanReqInfo);
13799 return VOS_STATUS_E_NOMEM;
13800 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013801 //
13802 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13803 //
13804 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13805 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013806 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13807 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13808 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013809 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13810 {
13811 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13812 &pPNOScanReqParams->aNetworks[i],
13813 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13814 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013815 /*Scan timer intervals*/
13816 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13817 &pPNOScanReqParams->scanTimers,
13818 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013819 /*Probe template for 2.4GHz band*/
13820 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
13821 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13822 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013823 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
13824 pPNOScanReqParams->p24GProbeTemplate,
13825 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070013826 /*Probe template for 5GHz band*/
13827 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
13828 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13829 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013830 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
13831 pPNOScanReqParams->p5GProbeTemplate,
13832 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013833 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
13834 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013835
Jeff Johnson295189b2012-06-20 16:38:30 -070013836 /* Store Params pass it to WDI */
13837 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
13838 pWdaParams->pWdaContext = pWDA;
13839 /* Store param pointer as passed in by caller */
13840 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013841 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013842 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013843 if(IS_WDI_STATUS_FAILURE(status))
13844 {
13845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13846 "Failure in Set PNO REQ WDI API, free all the memory " );
13847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13848 vos_mem_free(pWdaParams->wdaMsgParam);
13849 pWdaParams->wdaWdiApiMsgParam = NULL;
13850 pWdaParams->wdaMsgParam = NULL;
13851 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013852 return CONVERT_WDI2VOS_STATUS(status) ;
13853}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013854
13855#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13856
13857void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
13858{
13859 /*Convert the CSR Auth types to WDI Auth types */
13860 switch (csrAuthType)
13861 {
13862 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
13863 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13864 break;
13865#ifdef FEATURE_WLAN_CCX
13866 case eCSR_AUTH_TYPE_CCKM_WPA:
13867 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
13868 break;
13869#endif
13870 case eCSR_AUTH_TYPE_WPA:
13871 *AuthType = eWDA_AUTH_TYPE_WPA;
13872 break;
13873 case eCSR_AUTH_TYPE_WPA_PSK:
13874 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
13875 break;
13876#ifdef FEATURE_WLAN_CCX
13877 case eCSR_AUTH_TYPE_CCKM_RSN:
13878 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
13879 break;
13880#endif
13881 case eCSR_AUTH_TYPE_RSN:
13882 *AuthType = eWDA_AUTH_TYPE_RSN;
13883 break;
13884 case eCSR_AUTH_TYPE_RSN_PSK:
13885 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
13886 break;
13887#if defined WLAN_FEATURE_VOWIFI_11R
13888 case eCSR_AUTH_TYPE_FT_RSN:
13889 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
13890 break;
13891 case eCSR_AUTH_TYPE_FT_RSN_PSK:
13892 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
13893 break;
13894#endif
13895#ifdef FEATURE_WLAN_WAPI
13896 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
13897 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
13898 break;
13899 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
13900 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
13901 break;
13902#endif /* FEATURE_WLAN_WAPI */
13903 case eCSR_AUTH_TYPE_SHARED_KEY:
13904 case eCSR_AUTH_TYPE_AUTOSWITCH:
13905 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13906 break;
13907#if 0
13908 case eCSR_AUTH_TYPE_SHARED_KEY:
13909 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
13910 break;
13911 case eCSR_AUTH_TYPE_AUTOSWITCH:
13912 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
13913#endif
13914 default:
13915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13916 "%s: Unknown Auth Type", __func__);
13917 break;
13918 }
13919}
13920void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
13921{
13922 switch (csrEncrType)
13923 {
13924 case eCSR_ENCRYPT_TYPE_NONE:
13925 *EncrType = WDI_ED_NONE;
13926 break;
13927 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
13928 case eCSR_ENCRYPT_TYPE_WEP40:
13929 *EncrType = WDI_ED_WEP40;
13930 break;
13931 case eCSR_ENCRYPT_TYPE_WEP104:
13932 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
13933 *EncrType = WDI_ED_WEP104;
13934 break;
13935 case eCSR_ENCRYPT_TYPE_TKIP:
13936 *EncrType = WDI_ED_TKIP;
13937 break;
13938 case eCSR_ENCRYPT_TYPE_AES:
13939 *EncrType = WDI_ED_CCMP;
13940 break;
13941#ifdef WLAN_FEATURE_11W
13942 case eCSR_ENCRYPT_TYPE_AES_CMAC:
13943 *EncrType = WDI_ED_AES_128_CMAC;
13944 break;
13945#endif
13946#ifdef FEATURE_WLAN_WAPI
13947 case eCSR_ENCRYPT_TYPE_WPI:
13948 *EncrType = WDI_ED_WPI;
13949 break;
13950#endif
13951 case eCSR_ENCRYPT_TYPE_ANY:
13952 *EncrType = WDI_ED_ANY;
13953 break;
13954
13955 default:
13956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13957 "%s: Unknown Encryption Type", __func__);
13958 break;
13959 }
13960}
13961
13962/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013963 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013964 * Request to WDI to set Roam Offload Scan
13965 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013966VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013967 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
13968{
13969 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013970 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
13971 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013972 tWDA_ReqParams *pWdaParams ;
13973 v_U8_t csrAuthType;
13974 WDI_RoamNetworkType *pwdiRoamNetworkType;
13975 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
13976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13977 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013978 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013979 {
13980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13981 "%s: VOS MEM Alloc Failure", __func__);
13982 VOS_ASSERT(0);
13983 return VOS_STATUS_E_NOMEM;
13984 }
13985 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13986 if (NULL == pWdaParams)
13987 {
13988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13989 "%s: VOS MEM Alloc Failure", __func__);
13990 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013991 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013992 return VOS_STATUS_E_NOMEM;
13993 }
13994
13995 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013996 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013997 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013998 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
13999 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014000 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
14001 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
14002 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
14003 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
14004 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
14005 sizeof(pwdiRoamNetworkType->currAPbssid));
14006 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
14007 csrAuthType);
14008 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
14009 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
14010 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
14011 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
14012 pwdiRoamOffloadScanInfo->LookupThreshold =
14013 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080014014 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
14015 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014016 pwdiRoamOffloadScanInfo->RoamRssiDiff =
14017 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080014018 pwdiRoamOffloadScanInfo->MAWCEnabled =
14019 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014020 pwdiRoamOffloadScanInfo->Command =
14021 pRoamOffloadScanReqParams->Command ;
14022 pwdiRoamOffloadScanInfo->StartScanReason =
14023 pRoamOffloadScanReqParams->StartScanReason ;
14024 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
14025 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
14026 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
14027 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
14028 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
14029 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
14030 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
14031 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
14032 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
14033 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
14034 pwdiRoamOffloadScanInfo->IsCCXEnabled =
14035 pRoamOffloadScanReqParams->IsCCXEnabled ;
14036 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
14037 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
14038 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
14039 pwdiRoamNetworkType->ssId.ucLength =
14040 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
14041 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
14042 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
14043 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
14044 pwdiRoamNetworkType->ChannelCount =
14045 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
14046 pwdiRoamOffloadScanInfo->ChannelCacheType =
14047 pRoamOffloadScanReqParams->ChannelCacheType;
14048 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
14049 pRoamOffloadScanReqParams->ValidChannelList,
14050 pRoamOffloadScanReqParams->ValidChannelCount);
14051 pwdiRoamOffloadScanInfo->ValidChannelCount =
14052 pRoamOffloadScanReqParams->ValidChannelCount;
14053 pwdiRoamOffloadScanInfo->us24GProbeSize =
14054 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14055 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14056 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
14057 pRoamOffloadScanReqParams->p24GProbeTemplate,
14058 pwdiRoamOffloadScanInfo->us24GProbeSize);
14059 pwdiRoamOffloadScanInfo->us5GProbeSize =
14060 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14061 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14062 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
14063 pRoamOffloadScanReqParams->p5GProbeTemplate,
14064 pwdiRoamOffloadScanInfo->us5GProbeSize);
14065 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
14066 pRoamOffloadScanReqParams->MDID.mdiePresent;
14067 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
14068 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014069 pwdiRoamOffloadScanInfo->nProbes =
14070 pRoamOffloadScanReqParams->nProbes;
14071 pwdiRoamOffloadScanInfo->HomeAwayTime =
14072 pRoamOffloadScanReqParams->HomeAwayTime;
14073 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014074 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014075 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014076 pWdaParams->pWdaContext = pWDA;
14077 /* Store param pointer as passed in by caller */
14078 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014079 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014080 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
14081 if(IS_WDI_STATUS_FAILURE(status))
14082 {
14083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14084 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
14085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14086 vos_mem_free(pWdaParams->wdaMsgParam);
14087 pWdaParams->wdaWdiApiMsgParam = NULL;
14088 pWdaParams->wdaMsgParam = NULL;
14089 }
14090 return CONVERT_WDI2VOS_STATUS(status) ;
14091}
14092#endif
14093
Jeff Johnson295189b2012-06-20 16:38:30 -070014094/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014095 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014096 *
14097 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014098void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014099{
14100 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14101
14102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014103 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014104
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014105 if(NULL == pWdaParams)
14106 {
14107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014108 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014109 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014110 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014111 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014112
Jeff Johnson295189b2012-06-20 16:38:30 -070014113 vos_mem_free(pWdaParams->wdaMsgParam) ;
14114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14115 vos_mem_free(pWdaParams) ;
14116
14117 return ;
14118}
14119/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014120 * FUNCTION: WDA_RssiFilterReqCallback
14121 * Free memory.
14122 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
14123 */
14124void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14125{
14126 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14127
14128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14129 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14130
14131 if(NULL == pWdaParams)
14132 {
14133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14134 "%s: pWdaParams received NULL", __func__);
14135 VOS_ASSERT(0);
14136 return;
14137 }
14138
14139 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14140 {
14141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14142 vos_mem_free(pWdaParams->wdaMsgParam);
14143 vos_mem_free(pWdaParams);
14144 }
14145
14146 return;
14147}
14148/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014149 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14150 * Request to WDI to set Preferred Network List.Offload
14151 */
14152VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
14153 tSirSetRSSIFilterReq* pRssiFilterParams)
14154{
Jeff Johnson43971f52012-07-17 12:26:56 -070014155 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014156 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
14157 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
14158 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014160 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014161 if(NULL == pwdiSetRssiFilterReqInfo)
14162 {
14163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014164 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014165 VOS_ASSERT(0);
14166 return VOS_STATUS_E_NOMEM;
14167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014168 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14169 if(NULL == pWdaParams)
14170 {
14171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014172 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014173 VOS_ASSERT(0);
14174 vos_mem_free(pwdiSetRssiFilterReqInfo);
14175 return VOS_STATUS_E_NOMEM;
14176 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014177 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014178 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
14179 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014180
Jeff Johnson295189b2012-06-20 16:38:30 -070014181 /* Store Params pass it to WDI */
14182 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14183 pWdaParams->pWdaContext = pWDA;
14184 /* Store param pointer as passed in by caller */
14185 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014186 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014187 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014188 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014189 if(IS_WDI_STATUS_FAILURE(status))
14190 {
14191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14192 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14193 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14194 vos_mem_free(pWdaParams->wdaMsgParam);
14195 pWdaParams->wdaWdiApiMsgParam = NULL;
14196 pWdaParams->wdaMsgParam = NULL;
14197 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014198 return CONVERT_WDI2VOS_STATUS(status) ;
14199}
14200
Jeff Johnson295189b2012-06-20 16:38:30 -070014201/*
14202 * FUNCTION: WDA_ProcessUpdateScanParams
14203 * Request to WDI to update Scan Parameters
14204 */
14205VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14206 tSirUpdateScanParams *pUpdateScanParams)
14207{
Jeff Johnson43971f52012-07-17 12:26:56 -070014208 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014209 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14210 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14211 sizeof(WDI_UpdateScanParamsInfoType)) ;
14212 tWDA_ReqParams *pWdaParams ;
14213 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014215 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014216 if(NULL == wdiUpdateScanParamsInfoType)
14217 {
14218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014219 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014220 VOS_ASSERT(0);
14221 return VOS_STATUS_E_NOMEM;
14222 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014223 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14224 if ( NULL == pWdaParams )
14225 {
14226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014227 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014228 VOS_ASSERT(0);
14229 vos_mem_free(wdiUpdateScanParamsInfoType);
14230 return VOS_STATUS_E_NOMEM;
14231 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014232 //
14233 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14234 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14236 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14237 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14238 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014239 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014240 pUpdateScanParams->b11dEnabled,
14241 pUpdateScanParams->b11dResolved,
14242 pUpdateScanParams->ucChannelCount,
14243 pUpdateScanParams->usPassiveMinChTime,
14244 pUpdateScanParams->usPassiveMaxChTime,
14245 pUpdateScanParams->usActiveMinChTime,
14246 pUpdateScanParams->usActiveMaxChTime,
14247 sizeof(tSirUpdateScanParams),
14248 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14249
Jeff Johnson295189b2012-06-20 16:38:30 -070014250 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14251 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014252 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14253 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014254 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14255 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014256 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14257 pUpdateScanParams->usActiveMaxChTime;
14258 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14259 pUpdateScanParams->usActiveMinChTime;
14260 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14261 pUpdateScanParams->usPassiveMaxChTime;
14262 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14263 pUpdateScanParams->usPassiveMinChTime;
14264
Jeff Johnson295189b2012-06-20 16:38:30 -070014265 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014266 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14267 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014268
Jeff Johnson295189b2012-06-20 16:38:30 -070014269 for ( i = 0; i <
14270 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14271 i++)
14272 {
14273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14274 "Update Scan Parameters channel: %d",
14275 pUpdateScanParams->aChannels[i]);
14276
14277 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14278 pUpdateScanParams->aChannels[i];
14279 }
14280
Yue Ma7f44bbe2013-04-12 11:47:39 -070014281 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14282 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014283
Jeff Johnson295189b2012-06-20 16:38:30 -070014284 /* Store Params pass it to WDI */
14285 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
14286 pWdaParams->pWdaContext = pWDA;
14287 /* Store param pointer as passed in by caller */
14288 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014289
Jeff Johnson295189b2012-06-20 16:38:30 -070014290
14291
14292 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014293 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014294 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014295 if(IS_WDI_STATUS_FAILURE(status))
14296 {
14297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14298 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14300 vos_mem_free(pWdaParams->wdaMsgParam);
14301 vos_mem_free(pWdaParams);
14302 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014303 return CONVERT_WDI2VOS_STATUS(status) ;
14304}
14305#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014306
14307#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14308/*
14309 * FUNCTION: WDA_RoamOffloadScanReqCallback
14310 *
14311 */
14312void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14313{
14314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014315 vos_msg_t vosMsg;
14316 wpt_uint8 reason = 0;
14317
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014319 "<------ %s " ,__func__);
14320 if (NULL == pWdaParams)
14321 {
14322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14323 "%s: pWdaParams received NULL", __func__);
14324 VOS_ASSERT(0) ;
14325 return ;
14326 }
14327 if ( pWdaParams != NULL )
14328 {
14329 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14330 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014331 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14333 }
14334 if ( pWdaParams->wdaMsgParam != NULL)
14335 {
14336 vos_mem_free(pWdaParams->wdaMsgParam);
14337 }
14338
14339 vos_mem_free(pWdaParams) ;
14340 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014341 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14342 vosMsg.bodyptr = NULL;
14343 if (WDI_STATUS_SUCCESS != status)
14344 {
14345 reason = 0;
14346 }
14347 vosMsg.bodyval = reason;
14348 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14349 {
14350 /* free the mem and return */
14351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014352 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014353 }
14354
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014355 return ;
14356}
14357#endif
14358
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014359/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014360 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014361 *
14362 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014363void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014364{
14365 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14366
14367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14368 "<------ %s " ,__func__);
14369
14370 if(NULL == pWdaParams)
14371 {
14372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14373 "%s: pWdaParams received NULL", __func__);
14374 VOS_ASSERT(0);
14375 return;
14376 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014377
14378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14379 vos_mem_free(pWdaParams->wdaMsgParam);
14380 vos_mem_free(pWdaParams);
14381
14382 return;
14383}
14384/*
14385 * FUNCTION: WDA_SetPowerParamsReqCallback
14386 * Free memory.
14387 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14388 */
14389void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14390{
14391 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14392
14393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14394 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14395
14396 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014397 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14399 "%s: pWdaParams received NULL", __func__);
14400 VOS_ASSERT(0);
14401 return;
14402 }
14403
14404 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14405 {
14406 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14407 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014408 vos_mem_free(pWdaParams);
14409 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014410
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014411 return;
14412}
14413
Jeff Johnson295189b2012-06-20 16:38:30 -070014414#ifdef WLAN_FEATURE_PACKET_FILTERING
14415/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014416 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014417 *
14418 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014419void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014420 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14421 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014422{
14423 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014425 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014426 if(NULL == pWdaParams)
14427 {
14428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014429 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014430 VOS_ASSERT(0) ;
14431 return ;
14432 }
14433
14434 vos_mem_free(pWdaParams->wdaMsgParam) ;
14435 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14436 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014437 //print a msg, nothing else to do
14438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014439 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014440 return ;
14441}
Jeff Johnson295189b2012-06-20 16:38:30 -070014442/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014443 * FUNCTION: WDA_8023MulticastListReqCallback
14444 * Free memory.
14445 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14446 */
14447void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14448{
14449 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14450
14451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14452 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14453
14454 if(NULL == pWdaParams)
14455 {
14456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14457 "%s: pWdaParams received NULL", __func__);
14458 VOS_ASSERT(0);
14459 return;
14460 }
14461
14462 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14463 {
14464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14465 vos_mem_free(pWdaParams->wdaMsgParam);
14466 vos_mem_free(pWdaParams);
14467 }
14468
14469 return;
14470}
14471/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014472 * FUNCTION: WDA_Process8023MulticastListReq
14473 * Request to WDI to add 8023 Multicast List
14474 */
14475VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14476 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14477{
Jeff Johnson43971f52012-07-17 12:26:56 -070014478 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014479 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14480 tWDA_ReqParams *pWdaParams ;
14481 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014483 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014484 pwdiFltPktSetMcListReqParamsType =
14485 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14486 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14487 ) ;
14488 if(NULL == pwdiFltPktSetMcListReqParamsType)
14489 {
14490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014491 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014492 return VOS_STATUS_E_NOMEM;
14493 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14495 if(NULL == pWdaParams)
14496 {
14497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014499 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14500 return VOS_STATUS_E_NOMEM;
14501 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014502
Jeff Johnson295189b2012-06-20 16:38:30 -070014503 //
14504 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14505 //
14506 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014507 pRcvFltMcAddrList->ulMulticastAddrCnt;
14508
14509 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14510 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14511 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14512 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14513
Jeff Johnson295189b2012-06-20 16:38:30 -070014514 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14515 {
14516 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14517 &(pRcvFltMcAddrList->multicastAddr[i]),
14518 sizeof(tSirMacAddr));
14519 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014520 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14521 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014522
Jeff Johnson295189b2012-06-20 16:38:30 -070014523 /* Store Params pass it to WDI */
14524 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14525 pWdaParams->pWdaContext = pWDA;
14526 /* Store param pointer as passed in by caller */
14527 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014528 status = WDI_8023MulticastListReq(
14529 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014530 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014531 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014532 if(IS_WDI_STATUS_FAILURE(status))
14533 {
14534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14535 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14537 vos_mem_free(pWdaParams->wdaMsgParam);
14538 vos_mem_free(pWdaParams);
14539 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014540 return CONVERT_WDI2VOS_STATUS(status) ;
14541}
Jeff Johnson295189b2012-06-20 16:38:30 -070014542/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014543 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014544 *
14545 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014546void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014547 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14548 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014549{
14550 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014553 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014554 if(NULL == pWdaParams)
14555 {
14556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014557 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014558 VOS_ASSERT(0) ;
14559 return ;
14560 }
14561
14562 vos_mem_free(pWdaParams->wdaMsgParam) ;
14563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14564 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014565 //print a msg, nothing else to do
14566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014567 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014568 return ;
14569}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014570
14571/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014572 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14573 * Free memory.
14574 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014575 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014576void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014577 void* pUserData)
14578{
14579 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14580
14581 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14582 "<------ %s, wdiStatus: %d",
14583 __func__, wdiStatus);
14584
14585 if (NULL == pWdaParams)
14586 {
14587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14588 "%s: Invalid pWdaParams pointer", __func__);
14589 VOS_ASSERT(0);
14590 return;
14591 }
14592
14593 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14594 {
14595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14596 vos_mem_free(pWdaParams->wdaMsgParam);
14597 vos_mem_free(pWdaParams);
14598 }
14599
14600 return;
14601}
14602
Jeff Johnson295189b2012-06-20 16:38:30 -070014603/*
14604 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14605 * Request to WDI to set Receive Filters
14606 */
14607VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14608 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14609{
Jeff Johnson43971f52012-07-17 12:26:56 -070014610 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014611 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14612 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14613 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14614 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14615 tWDA_ReqParams *pWdaParams ;
14616 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014618 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014619 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14620 {
14621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014622 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014623 VOS_ASSERT(0);
14624 return VOS_STATUS_E_NOMEM;
14625 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014626 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14627 if(NULL == pWdaParams)
14628 {
14629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014630 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014631 VOS_ASSERT(0);
14632 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14633 return VOS_STATUS_E_NOMEM;
14634 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014635 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14636 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14637 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14638 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014639 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14640 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14641
14642 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14643 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014644
14645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14646 "FID %d FT %d NParams %d CT %d",
14647 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14648 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14649 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14650 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014651 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14652 {
14653 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14654 &pRcvPktFilterCfg->paramsData[i],
14655 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014657 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014658 pwdiSetRcvPktFilterReqParamsType->
14659 wdiPktFilterCfg.paramsData[i].protocolLayer,
14660 pwdiSetRcvPktFilterReqParamsType->
14661 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014663 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014664 pwdiSetRcvPktFilterReqParamsType->
14665 wdiPktFilterCfg.paramsData[i].dataOffset,
14666 pwdiSetRcvPktFilterReqParamsType->
14667 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014669 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014670 pwdiSetRcvPktFilterReqParamsType->
14671 wdiPktFilterCfg.paramsData[i].compareData[0],
14672 pwdiSetRcvPktFilterReqParamsType->
14673 wdiPktFilterCfg.paramsData[i].compareData[1],
14674 pwdiSetRcvPktFilterReqParamsType->
14675 wdiPktFilterCfg.paramsData[i].compareData[2],
14676 pwdiSetRcvPktFilterReqParamsType->
14677 wdiPktFilterCfg.paramsData[i].compareData[3],
14678 pwdiSetRcvPktFilterReqParamsType->
14679 wdiPktFilterCfg.paramsData[i].compareData[4],
14680 pwdiSetRcvPktFilterReqParamsType->
14681 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014683 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014684 pwdiSetRcvPktFilterReqParamsType->
14685 wdiPktFilterCfg.paramsData[i].dataMask[0],
14686 pwdiSetRcvPktFilterReqParamsType->
14687 wdiPktFilterCfg.paramsData[i].dataMask[1],
14688 pwdiSetRcvPktFilterReqParamsType->
14689 wdiPktFilterCfg.paramsData[i].dataMask[2],
14690 pwdiSetRcvPktFilterReqParamsType->
14691 wdiPktFilterCfg.paramsData[i].dataMask[3],
14692 pwdiSetRcvPktFilterReqParamsType->
14693 wdiPktFilterCfg.paramsData[i].dataMask[4],
14694 pwdiSetRcvPktFilterReqParamsType->
14695 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014696 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014697 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014698 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014699 /* Store Params pass it to WDI */
14700 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14701 pWdaParams->pWdaContext = pWDA;
14702 /* Store param pointer as passed in by caller */
14703 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014704 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014705 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014706 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014707 if(IS_WDI_STATUS_FAILURE(status))
14708 {
14709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14710 "Failure in SetFilter(),free all the memory,status %d ",status);
14711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14712 vos_mem_free(pWdaParams->wdaMsgParam);
14713 vos_mem_free(pWdaParams);
14714 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014715 return CONVERT_WDI2VOS_STATUS(status) ;
14716}
Jeff Johnson295189b2012-06-20 16:38:30 -070014717/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014718 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014719 *
14720 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014721void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014722 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14723 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014724{
14725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14726 tWDA_CbContext *pWDA;
14727 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14728 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14729 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14730 tANI_U8 i;
14731 vos_msg_t vosMsg;
14732
14733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014734 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014735 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14736
Jeff Johnsone7245742012-09-05 17:12:55 -070014737 if(NULL == pRcvFltPktMatchCntRsp)
14738 {
14739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014740 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014741 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014742 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014743 return ;
14744 }
14745
Jeff Johnson295189b2012-06-20 16:38:30 -070014746 if(NULL == pWdaParams)
14747 {
14748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014749 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014750 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014751 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014752 return ;
14753 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014754 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14755 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014756 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14757 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14758
14759 /* Message Header */
14760 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14761 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14762
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014763 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014764
14765 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14766 {
14767 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14768 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14769 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014770 /* VOS message wrapper */
14771 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14772 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14773 vosMsg.bodyval = 0;
14774 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14775 {
14776 /* free the mem and return */
14777 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14778 }
14779
14780 vos_mem_free(pWdaParams->wdaMsgParam) ;
14781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14782 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014783
14784 return;
14785}
14786/*
14787 * FUNCTION: WDA_FilterMatchCountReqCallback
14788 * Free memory and send RSP back to SME.
14789 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14790 */
14791void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14792{
14793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14794 vos_msg_t vosMsg;
14795
14796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14797 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14798
14799 if(NULL == pWdaParams)
14800 {
14801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14802 "%s: pWdaParams received NULL", __func__);
14803 VOS_ASSERT(0);
14804 return;
14805 }
14806
14807 /* VOS message wrapper */
14808 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14809 vosMsg.bodyptr = NULL;
14810 vosMsg.bodyval = 0;
14811
14812 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14813 {
14814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14815 vos_mem_free(pWdaParams->wdaMsgParam);
14816 vos_mem_free(pWdaParams);
14817 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
14818 }
14819
14820 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070014821}
Jeff Johnson295189b2012-06-20 16:38:30 -070014822/*
14823 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
14824 * Request to WDI to get PC Filter Match Count
14825 */
14826VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
14827{
Jeff Johnson43971f52012-07-17 12:26:56 -070014828 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014829 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
14830 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
14831 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014833 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014834 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
14835 {
14836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014838 VOS_ASSERT(0);
14839 return VOS_STATUS_E_NOMEM;
14840 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014841 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14842 if(NULL == pWdaParams)
14843 {
14844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014845 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014846 VOS_ASSERT(0);
14847 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
14848 return VOS_STATUS_E_NOMEM;
14849 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014850
Yue Ma7f44bbe2013-04-12 11:47:39 -070014851 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
14852 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014853
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014854 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
14855 pRcvFltPktMatchRsp->bssId,
14856 sizeof(wpt_macAddr));
14857
Jeff Johnson295189b2012-06-20 16:38:30 -070014858 /* Store Params pass it to WDI */
14859 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
14860 pWdaParams->pWdaContext = pWDA;
14861 /* Store param pointer as passed in by caller */
14862 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070014863 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014864 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014865 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014866 if(IS_WDI_STATUS_FAILURE(status))
14867 {
14868 /* failure returned by WDI API */
14869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14870 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
14871 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14872 vos_mem_free(pWdaParams) ;
14873 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
14874 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
14875 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014876 return CONVERT_WDI2VOS_STATUS(status) ;
14877}
Jeff Johnson295189b2012-06-20 16:38:30 -070014878/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014879 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014880 *
14881 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014882void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014883 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
14884 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014885{
14886 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014888 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014889/* WDA_VOS_ASSERT(NULL != pWdaParams); */
14890 if(NULL == pWdaParams)
14891 {
14892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014893 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014894 VOS_ASSERT(0) ;
14895 return ;
14896 }
14897
14898 vos_mem_free(pWdaParams->wdaMsgParam) ;
14899 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14900 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014901 //print a msg, nothing else to do
14902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014903 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014904 return ;
14905}
Jeff Johnson295189b2012-06-20 16:38:30 -070014906/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014907 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
14908 * Free memory.
14909 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
14910 */
14911void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14912{
14913 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14914
14915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14916 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14917
14918 if(NULL == pWdaParams)
14919 {
14920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14921 "%s: Invalid pWdaParams pointer", __func__);
14922 VOS_ASSERT(0);
14923 return;
14924 }
14925
14926 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14927 {
14928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14929 vos_mem_free(pWdaParams->wdaMsgParam);
14930 vos_mem_free(pWdaParams);
14931 }
14932
14933 return;
14934}
14935/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014936 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
14937 * Request to WDI to clear Receive Filters
14938 */
14939VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
14940 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
14941{
Jeff Johnson43971f52012-07-17 12:26:56 -070014942 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014943 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
14944 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
14945 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014947 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014948 if(NULL == pwdiRcvFltPktClearReqParamsType)
14949 {
14950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014952 VOS_ASSERT(0);
14953 return VOS_STATUS_E_NOMEM;
14954 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014955 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14956 if(NULL == pWdaParams)
14957 {
14958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014960 VOS_ASSERT(0);
14961 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
14962 return VOS_STATUS_E_NOMEM;
14963 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014964 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
14965 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014966 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
14967 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
14968 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
14969 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014970
Yue Ma7f44bbe2013-04-12 11:47:39 -070014971 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014972 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014973 /* Store Params pass it to WDI */
14974 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
14975 pWdaParams->pWdaContext = pWDA;
14976 /* Store param pointer as passed in by caller */
14977 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014978 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014979 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014980 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014981 if(IS_WDI_STATUS_FAILURE(status))
14982 {
14983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14984 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
14985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080014986 vos_mem_free(pWdaParams->wdaMsgParam);
14987 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014988 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014989 return CONVERT_WDI2VOS_STATUS(status) ;
14990}
14991#endif // WLAN_FEATURE_PACKET_FILTERING
14992
Jeff Johnson295189b2012-06-20 16:38:30 -070014993/*
14994 * FUNCTION: WDA_ProcessSetPowerParamsReq
14995 * Request to WDI to set power params
14996 */
14997VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
14998 tSirSetPowerParamsReq *pPowerParams)
14999{
Jeff Johnson43971f52012-07-17 12:26:56 -070015000 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015001 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
15002 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015003 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015005 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015006 if(NULL == pwdiSetPowerParamsReqInfo)
15007 {
15008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015009 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015010 VOS_ASSERT(0);
15011 return VOS_STATUS_E_NOMEM;
15012 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015013 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15014 if(NULL == pWdaParams)
15015 {
15016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015017 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015018 VOS_ASSERT(0);
15019 vos_mem_free(pwdiSetPowerParamsReqInfo);
15020 return VOS_STATUS_E_NOMEM;
15021 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015022
Jeff Johnson295189b2012-06-20 16:38:30 -070015023
15024 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
15025 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070015026 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
15027 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070015028 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
15029 pPowerParams->uListenInterval;
15030 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
15031 pPowerParams->uBcastMcastFilter;
15032 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
15033 pPowerParams->uEnableBET;
15034 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
15035 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070015036 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
15037 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015038 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
15039 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015040
Jeff Johnson295189b2012-06-20 16:38:30 -070015041 /* Store Params pass it to WDI */
15042 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
15043 pWdaParams->pWdaContext = pWDA;
15044 /* Store param pointer as passed in by caller */
15045 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015046 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015047 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015048 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015049 if(IS_WDI_STATUS_FAILURE(status))
15050 {
15051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15052 "Failure in Set power params REQ WDI API, free all the memory " );
15053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15054 vos_mem_free(pWdaParams->wdaMsgParam);
15055 pWdaParams->wdaWdiApiMsgParam = NULL;
15056 pWdaParams->wdaMsgParam = NULL;
15057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015058 return CONVERT_WDI2VOS_STATUS(status) ;
15059}
15060
15061/*
15062 * FUNCTION: WDA_SetTmLevelRspCallback
15063 * Set TM Level response
15064 */
15065void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
15066{
15067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15068
15069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015070 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015071
15072 if(NULL == pWdaParams)
15073 {
15074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015075 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015076 VOS_ASSERT(0) ;
15077 return ;
15078 }
15079
15080 /* Dose not need to send notification to upper layer
15081 * Just free allocated resources */
15082 if( pWdaParams != NULL )
15083 {
15084 if( pWdaParams->wdaWdiApiMsgParam != NULL )
15085 {
15086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15087 }
15088 vos_mem_free(pWdaParams->wdaMsgParam) ;
15089 vos_mem_free(pWdaParams) ;
15090 }
15091}
15092
15093/*
15094 * FUNCTION: WDA_ProcessSetTmLevelReq
15095 * Set TM Level request
15096 */
15097VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
15098 tAniSetTmLevelReq *setTmLevelReq)
15099{
15100 WDI_Status status = WDI_STATUS_SUCCESS ;
15101 tWDA_ReqParams *pWdaParams ;
15102 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
15103 (WDI_SetTmLevelReqType *)vos_mem_malloc(
15104 sizeof(WDI_SetTmLevelReqType)) ;
15105 if(NULL == wdiSetTmLevelReq)
15106 {
15107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015108 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015109 VOS_ASSERT(0);
15110 return VOS_STATUS_E_NOMEM;
15111 }
15112
15113 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15114 if(NULL == pWdaParams)
15115 {
15116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015118 VOS_ASSERT(0);
15119 vos_mem_free(wdiSetTmLevelReq);
15120 return VOS_STATUS_E_NOMEM;
15121 }
15122
15123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015124 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015125
15126 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
15127 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
15128
15129 pWdaParams->pWdaContext = pWDA;
15130 pWdaParams->wdaMsgParam = setTmLevelReq;
15131 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
15132
15133 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
15134 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
15135
15136 if(IS_WDI_STATUS_FAILURE(status))
15137 {
15138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080015139 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070015140 vos_mem_free(pWdaParams->wdaMsgParam) ;
15141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15142 vos_mem_free(pWdaParams) ;
15143 }
15144
15145 return CONVERT_WDI2VOS_STATUS(status) ;
15146}
15147
15148VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
15149 tpTxControlParams pTxCtrlParam)
15150{
15151 VOS_STATUS wdaStatus;
15152
15153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015154 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015155 if( pTxCtrlParam == NULL )
15156 {
15157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015158 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015159 return VOS_STATUS_E_FAILURE;
15160 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015161 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
15162 {
15163 wdaStatus = WDA_SuspendDataTx(pWDA);
15164 }
15165 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
15166 {
15167 wdaStatus = WDA_ResumeDataTx(pWDA);
15168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015169 return wdaStatus;
15170}
15171
15172 /* FUNCTION WDA_featureCapsExchange
15173 * WDA API to invoke capability exchange between host and FW.
15174 */
15175void WDA_featureCapsExchange(v_PVOID_t pVosContext)
15176{
15177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015178 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015179 WDI_featureCapsExchangeReq( NULL, pVosContext);
15180}
15181
Yathish9f22e662012-12-10 14:21:35 -080015182/* FUNCTION WDA_disableCapablityFeature
15183 * WDA API to diable Active mode offload in host.
15184 */
15185void WDA_disableCapablityFeature(tANI_U8 feature_index)
15186{
15187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15188 "%s:enter", __func__ );
15189 WDI_disableCapablityFeature(feature_index);
15190}
15191
Jeff Johnson295189b2012-06-20 16:38:30 -070015192 /* FUNCTION WDA_getHostWlanFeatCaps
15193 * Wrapper for WDI API, that will return if the feature (enum value).passed
15194 * to this API is supported or not in Host
15195 * return value
15196 * 0 - implies feature is NOT Supported
15197 * any non zero value - implies feature is SUPPORTED
15198 */
15199tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15200{
15201 return WDI_getHostWlanFeatCaps(featEnumValue);
15202}
15203
15204 /* FUNCTION WDA_getFwWlanFeatCaps
15205 * Wrapper for WDI API, that will return if the feature (enum value).passed
15206 * to this API is supported or not in FW
15207 * return value
15208 * 0 - implies feature is NOT Supported
15209 * any non zero value - implies feature is SUPPORTED
15210 */
15211tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15212{
15213 return WDI_getFwWlanFeatCaps(featEnumValue);
15214}
15215
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015216
Jeff Johnson295189b2012-06-20 16:38:30 -070015217/*
15218 * FUNCTION: WDA_shutdown
15219 * Shutdown WDA/WDI without handshaking with Riva.
15220 * Synchronous function.
15221 */
15222VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15223{
15224 WDI_Status wdiStatus;
15225 //tANI_U8 eventIdx = 0;
15226 VOS_STATUS status = VOS_STATUS_SUCCESS;
15227 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015228 if (NULL == pWDA)
15229 {
15230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015231 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015232 VOS_ASSERT(0);
15233 return VOS_STATUS_E_FAILURE;
15234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015235 /* FTM mode stay START_STATE */
15236 if( (WDA_READY_STATE != pWDA->wdaState) &&
15237 (WDA_INIT_STATE != pWDA->wdaState) &&
15238 (WDA_START_STATE != pWDA->wdaState) )
15239 {
15240 VOS_ASSERT(0);
15241 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015242
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015243 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15244 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015245 {
15246 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015247 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015248 }
Leo Chang9d76f622013-08-23 16:34:52 -070015249 else
15250 {
15251 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15252 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015253
Jeff Johnson295189b2012-06-20 16:38:30 -070015254 /* call WDI shutdown */
15255 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015256 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15257 {
15258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15259 "error in WDA Stop" );
15260 status = VOS_STATUS_E_FAILURE;
15261 }
15262 /* WDI stop is synchrnous, shutdown is complete when it returns */
15263 pWDA->wdaState = WDA_STOP_STATE;
15264
Jeff Johnson295189b2012-06-20 16:38:30 -070015265 /* shutdown should perform the stop & close actions. */
15266 /* Destroy the event */
15267 status = vos_event_destroy(&pWDA->txFrameEvent);
15268 if(!VOS_IS_STATUS_SUCCESS(status))
15269 {
15270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015271 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015272 status = VOS_STATUS_E_FAILURE;
15273 }
15274 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15275 if(!VOS_IS_STATUS_SUCCESS(status))
15276 {
15277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015278 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015279 status = VOS_STATUS_E_FAILURE;
15280 }
15281 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15282 if(!VOS_IS_STATUS_SUCCESS(status))
15283 {
15284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015285 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015286 status = VOS_STATUS_E_FAILURE;
15287 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015288 /* free WDA context */
15289 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15290 if ( !VOS_IS_STATUS_SUCCESS(status) )
15291 {
15292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15293 "error in WDA close " );
15294 status = VOS_STATUS_E_FAILURE;
15295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015296 return status;
15297}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015298
Jeff Johnsone7245742012-09-05 17:12:55 -070015299/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015300 * FUNCTION: WDA_setNeedShutdown
15301 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015302 */
15303
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015304void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015305{
15306 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015307 if(pWDA == NULL)
15308 {
15309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15310 "Could not get the WDA Context pointer" );
15311 return;
15312 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015313 pWDA->needShutdown = TRUE;
15314}
15315/*
15316 * FUNCTION: WDA_needShutdown
15317 * WDA needs a shutdown
15318 */
15319
15320v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15321{
15322 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015323 if(pWDA == NULL)
15324 {
15325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15326 "Could not get the WDA Context pointer" );
15327 return 0;
15328 }
15329 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015330}
15331
Mohit Khanna4a70d262012-09-11 16:30:12 -070015332#ifdef WLAN_FEATURE_11AC
15333/*
15334 * FUNCTION: WDA_SetBeaconFilterReqCallback
15335 *
15336 */
15337void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15338{
15339 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015341 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015342 if(NULL == pWdaParams)
15343 {
15344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015345 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015346 VOS_ASSERT(0) ;
15347 return ;
15348 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015349
Mohit Khanna4a70d262012-09-11 16:30:12 -070015350 vos_mem_free(pWdaParams->wdaMsgParam) ;
15351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15352 vos_mem_free(pWdaParams) ;
15353 /*
15354 * No respone required for SetBeaconFilter req so just free the request
15355 * param here
15356 */
15357
15358 return ;
15359}
15360
15361VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15362 tUpdateVHTOpMode *pData)
15363{
15364 WDI_Status status = WDI_STATUS_SUCCESS ;
15365 tWDA_ReqParams *pWdaParams ;
15366 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15367 sizeof(WDI_UpdateVHTOpMode)) ;
15368 if(NULL == wdiTemp)
15369 {
15370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015371 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015372 VOS_ASSERT(0);
15373 return VOS_STATUS_E_NOMEM;
15374 }
15375 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15376 if(NULL == pWdaParams)
15377 {
15378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015379 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015380 VOS_ASSERT(0);
15381 vos_mem_free(wdiTemp);
15382 return VOS_STATUS_E_NOMEM;
15383 }
15384
15385 wdiTemp->opMode = pData->opMode;
15386 wdiTemp->staId = pData->staId;
15387
15388 pWdaParams->pWdaContext = pWDA;
15389 /* Store Req pointer, as this will be used for response */
15390 pWdaParams->wdaMsgParam = (void *)pData;
15391 /* store Params pass it to WDI */
15392 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15393
15394 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15395
15396 if(IS_WDI_STATUS_FAILURE(status))
15397 {
15398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15399 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15401 vos_mem_free(pWdaParams->wdaMsgParam);
15402 vos_mem_free(pWdaParams);
15403 }
15404 return CONVERT_WDI2VOS_STATUS(status) ;
15405}
15406#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015407
15408/*==========================================================================
15409 FUNCTION WDA_TransportChannelDebug
15410
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015411 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015412 Display Transport Channel debugging information
15413 User may request to display DXE channel snapshot
15414 Or if host driver detects any abnormal stcuk may display
15415
15416 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015417 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015418 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015419 enableStallDetect : Enable stall detect feature
15420 This feature will take effect to data performance
15421 Not integrate till fully verification
15422
15423 RETURN VALUE
15424 NONE
15425
15426===========================================================================*/
15427void WDA_TransportChannelDebug
15428(
schang6295e542013-03-12 15:31:23 -070015429 tpAniSirGlobal pMac,
15430 v_BOOL_t displaySnapshot,
15431 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015432)
15433{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070015434 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015435 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015436}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015437
15438/*==========================================================================
15439 FUNCTION WDA_SetEnableSSR
15440
15441 DESCRIPTION
15442 API to enable/disable SSR on WDI timeout
15443
15444 PARAMETERS
15445 enableSSR : enable/disable SSR
15446
15447 RETURN VALUE
15448 NONE
15449
15450===========================================================================*/
15451void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15452{
15453 WDI_SetEnableSSR(enableSSR);
15454}
Leo Chang9056f462013-08-01 19:21:11 -070015455
15456#ifdef FEATURE_WLAN_LPHB
15457/*
15458 * FUNCTION: WDA_LPHBconfRspCallback
15459 *
15460 */
15461void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15462{
15463 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15464
15465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15466 "<------ %s " ,__func__);
15467 if (NULL == pWdaParams)
15468 {
15469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15470 "%s: pWdaParams received NULL", __func__);
15471 VOS_ASSERT(0) ;
15472 return ;
15473 }
15474
15475 /* Do not need to send notification to upper layer
15476 * Just free allocated resources */
15477 if (pWdaParams != NULL)
15478 {
15479 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15480 {
15481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15482 }
15483 vos_mem_free(pWdaParams->wdaMsgParam) ;
15484 vos_mem_free(pWdaParams) ;
15485 }
15486
15487 return;
15488}
15489
15490/*
15491 * FUNCTION: WDA_ProcessLPHBConfReq
15492 *
15493 */
15494VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15495 tSirLPHBReq *pData)
15496{
15497 WDI_Status wdiStatus;
15498 tWDA_ReqParams *pWdaParams ;
15499
15500 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15501 "------> %s " , __func__);
15502
15503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15504 if (NULL == pWdaParams)
15505 {
15506 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15507 "%s: VOS MEM Alloc Failure", __func__);
15508 VOS_ASSERT(0);
15509 vos_mem_free(pData);
15510 return VOS_STATUS_E_NOMEM;
15511 }
15512
15513 pWdaParams->pWdaContext = pWDA;
15514 pWdaParams->wdaMsgParam = (void *)pData;
15515 pWdaParams->wdaWdiApiMsgParam = NULL;
15516
15517 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15518 if (WDI_STATUS_PENDING == wdiStatus)
15519 {
15520 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15521 "Pending received for %s:%d ", __func__, __LINE__);
15522 }
15523 else if (WDI_STATUS_SUCCESS != wdiStatus)
15524 {
15525 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15526 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15527 vos_mem_free(pWdaParams->wdaMsgParam);
15528 vos_mem_free(pWdaParams);
15529 }
15530
15531 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15532}
15533#endif /* FEATURE_WLAN_LPHB */
15534