blob: bfd3045189c92a2d75eb51510433117b5c32f8c4 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * Copyright (c) 2012-2014 Qualcomm Atheros, Inc.
24 * All Rights Reserved.
25 * Qualcomm Atheros Confidential and Proprietary.
26 *
27 */
28
Jeff Johnson295189b2012-06-20 16:38:30 -070029
30/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070031 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070032 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070033 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070034 The functions externalized by this module are to be called ONLY by other
35 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070036 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070037 Are listed for each API below.
38
Jeff Johnson295189b2012-06-20 16:38:30 -070039 Copyright (c) 2010-2011 QUALCOMM Incorporated.
40 All Rights Reserved.
41 Qualcomm Confidential and Proprietary
42===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070043/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070044 EDIT HISTORY FOR FILE
45
Jeff Johnson295189b2012-06-20 16:38:30 -070046 This section contains comments describing changes made to the module.
47 Notice that changes are listed in reverse chronological order.
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 $Header$$DateTime$$Author$
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 when who what, where, why
52---------- --- -------------------------------------------------
5310/05/2011 haparna Adding support for Keep Alive Feature
542010-12-30 smiryala UMAC convergence changes
552010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
56===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070057#include "vos_mq.h"
58#include "vos_api.h"
59#include "vos_packet.h"
60#include "vos_nvitem.h"
61#include "sirApi.h"
62#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053063#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070064#include "wlan_qct_wda.h"
65#include "wlan_qct_wda_msg.h"
66#include "wlan_qct_wdi_cfg.h"
67#include "wlan_qct_wdi.h"
68#include "wlan_qct_wdi_ds.h"
69#include "wlan_hal_cfg.h"
70/**********************/
71#include "wniApi.h"
72#include "cfgApi.h"
73#include "limApi.h"
74#include "wlan_qct_tl.h"
75#include "wlan_qct_tli_ba.h"
76#include "limUtils.h"
77#include "btcApi.h"
78#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079#include "pttMsgApi.h"
80#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070081/* Used MACRO's */
82/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080083#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
85#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070086#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define CONVERT_WDI2SIR_STATUS(x) \
88 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
89
90#define IS_WDI_STATUS_FAILURE(status) \
91 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070092#define CONVERT_WDI2VOS_STATUS(x) \
93 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
94
95/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070096#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_GET_BA_TXFLAG(a, b, c) \
99 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
100
101#define WDA_SET_BA_TXFLAG(a, b, c) \
102 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
103
104#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
105 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700106#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
107 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108/* timer related Macros */
109#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
110 tx_timer_create(a, b, c, d, e, f, g)
111#define WDA_START_TIMER(a) tx_timer_activate(a)
112#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
113#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700114#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700115
116#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
117 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800122#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700125
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700126#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700127#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
128 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
129 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
130
131#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
132#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800133#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
134
Jeff Johnson295189b2012-06-20 16:38:30 -0700135/* extern declarations */
136extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700137extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
138
Jeff Johnson295189b2012-06-20 16:38:30 -0700139/* forward declarations */
140void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
141 void *pBodyptr, tANI_U32 bodyVal) ;
142VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
143 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700144VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
145VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
146
147extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
148 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
149void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
150 tANI_U32 *pConfig) ;
151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
c_hpothu92367912014-05-01 15:18:17 +0530211v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
212 tSirBcnMissRateReq *pData);
213
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Leo Chang9056f462013-08-01 19:21:11 -0700220
221#ifdef FEATURE_WLAN_LPHB
222VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
223 tSirLPHBReq *pData);
224#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700225/*
226 * FUNCTION: WDA_open
227 * Allocate the WDA context
228 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530229VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700230 tMacOpenParameters *pMacParams )
231{
232 tWDA_CbContext *wdaContext;
233 VOS_STATUS status;
234 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700235 /* Allocate WDA context */
236 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
237 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
238 if(!VOS_IS_STATUS_SUCCESS(status))
239 {
240 return VOS_STATUS_E_NOMEM;
241 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700242 /*__asm int 3;*/
243 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
244
245 /* Initialize data structures */
246 wdaContext->pVosContext = pVosContext;
247 wdaContext->wdaState = WDA_INIT_STATE;
248 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
249
250 /* Initialize WDA-WDI synchronization event */
251 status = vos_event_init(&wdaContext->wdaWdiEvent);
252 if(!VOS_IS_STATUS_SUCCESS(status))
253 {
254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800255 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800256 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700257 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700258 /* Init Frame transfer event */
259 status = vos_event_init(&wdaContext->txFrameEvent);
260 if(!VOS_IS_STATUS_SUCCESS(status))
261 {
262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800263 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800264 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700265 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700266 status = vos_event_init(&wdaContext->suspendDataTxEvent);
267 if(!VOS_IS_STATUS_SUCCESS(status))
268 {
269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800270 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800271 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700272 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700273 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
274 if(!VOS_IS_STATUS_SUCCESS(status))
275 {
276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800277 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800278 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700279 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530282 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700283 &wdiDevCapability, pMacParams->driverType))
284 {
285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
286 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800287 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 }
289 else
290 {
291 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
292 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
293 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700294 /* update max STA in WDA used for BA */
295 wdaContext->wdaMaxSta = pMacParams->maxStation;
296 /* store the frameTransRequired flag in wdaContext, to send this to HAL
297 * in WDA_Start
298 */
299 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
300 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700301 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800302
303error:
304 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
305 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700306}
307
Jeff Johnson295189b2012-06-20 16:38:30 -0700308/*
309 * FUNCTION: WDA_preStart
310 * Trigger DAL-AL to start CFG download
311 */
312VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
313{
314 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
315 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 /*
317 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
318 */
319 wdaMsg.type = WNI_CFG_DNLD_REQ ;
320 wdaMsg.bodyptr = NULL;
321 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700322 /* post the message.. */
323 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
324 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
325 {
326 vosStatus = VOS_STATUS_E_BADMSG;
327 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700328 return( vosStatus );
329}
Jeff Johnson295189b2012-06-20 16:38:30 -0700330/*
331 * FUNCTION: WDA_wdiStartCallback
332 * Once WDI_Start is finished, WDI start callback will be called by WDI
333 * to indicate completion of WDI_Start.
334 */
335void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
336 void *pVosContext)
337{
338 tWDA_CbContext *wdaContext;
339 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700340 if (NULL == pVosContext)
341 {
342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700343 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700344 return;
345 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
347 if (NULL == wdaContext)
348 {
349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700350 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700351 return;
352 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700353 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
354 {
355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700356 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700357 }
358 else
359 {
360 wdaContext->wdaState = WDA_START_STATE;
361 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700362 /* extract and save version information from the Start Response */
363 wdaContext->wcnssWlanCompiledVersion.major =
364 wdiRspParams->wlanCompiledVersion.major;
365 wdaContext->wcnssWlanCompiledVersion.minor =
366 wdiRspParams->wlanCompiledVersion.minor;
367 wdaContext->wcnssWlanCompiledVersion.version =
368 wdiRspParams->wlanCompiledVersion.version;
369 wdaContext->wcnssWlanCompiledVersion.revision =
370 wdiRspParams->wlanCompiledVersion.revision;
371 wdaContext->wcnssWlanReportedVersion.major =
372 wdiRspParams->wlanReportedVersion.major;
373 wdaContext->wcnssWlanReportedVersion.minor =
374 wdiRspParams->wlanReportedVersion.minor;
375 wdaContext->wcnssWlanReportedVersion.version =
376 wdiRspParams->wlanReportedVersion.version;
377 wdaContext->wcnssWlanReportedVersion.revision =
378 wdiRspParams->wlanReportedVersion.revision;
379 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
380 wdiRspParams->wcnssSoftwareVersion,
381 sizeof(wdaContext->wcnssSoftwareVersionString));
382 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
383 wdiRspParams->wcnssHardwareVersion,
384 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 /* Notify WDA_start that WDI_Start has completed */
386 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700387 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 {
389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700390 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700392 return;
393}
394
Jeff Johnson295189b2012-06-20 16:38:30 -0700395/*
396 * FUNCTION: WDA_start
397 * Prepare TLV configuration and call WDI_Start.
398 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700399VOS_STATUS WDA_start(v_PVOID_t pVosContext)
400{
401 tWDA_CbContext *wdaContext;
402 VOS_STATUS status;
403 WDI_Status wdiStatus;
404 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700405 if (NULL == pVosContext)
406 {
407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700408 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 return VOS_STATUS_E_FAILURE;
410 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700411 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
412 if (NULL == wdaContext)
413 {
414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700415 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 return VOS_STATUS_E_FAILURE;
417 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 /* Non-FTM mode, WDA status for START must be INIT
419 * FTM mode, WDA Status for START can be INIT or STOP */
420 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
421 (WDA_STOP_STATE != wdaContext->wdaState) )
422 {
423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
424 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700425 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 return VOS_STATUS_E_FAILURE;
427 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 /* initialize the wdiStartParam. Note that we can create this on
429 the stack since we won't exit until WDI_Start() completes or
430 times out */
431 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700432 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700433 /* prepare the config TLV for the WDI */
434 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
435 if ( !VOS_IS_STATUS_SUCCESS(status) )
436 {
437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700438 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 return VOS_STATUS_E_FAILURE;
440 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* note from here onwards if an error occurs we must
442 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
444 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
445 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 /* initialize the WDA-WDI synchronization event */
447 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 /* call WDI start */
449 wdiStatus = WDI_Start(&wdiStartParam,
450 (WDI_StartRspCb)WDA_wdiStartCallback,
451 (v_VOID_t *)pVosContext);
452 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
453 {
454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700455 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 vos_mem_free(wdiStartParam.pConfigBuffer);
457 return VOS_STATUS_E_FAILURE;
458 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 /* wait for WDI start to invoke our callback */
460 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
461 WDA_WDI_START_TIMEOUT );
462 if ( !VOS_IS_STATUS_SUCCESS(status) )
463 {
464 if ( VOS_STATUS_E_TIMEOUT == status )
465 {
466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700467 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 }
469 else
470 {
471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
472 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700473 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700474 }
475 vos_mem_free(wdiStartParam.pConfigBuffer);
476 return VOS_STATUS_E_FAILURE;
477 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700479 /* we no longer need the config TLV */
480 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 /* if we are not in the START state then WDI_Start() failed */
482 if (WDA_START_STATE != wdaContext->wdaState)
483 {
484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700485 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 return VOS_STATUS_E_FAILURE;
487 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700488 /* FTM mode does not need to monitor BA activity */
489 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
490 {
491 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800492 if(VOS_STATUS_SUCCESS == status)
493 {
494 wdaContext->wdaTimersCreated = VOS_TRUE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 }
Leo Chang9d76f622013-08-23 16:34:52 -0700497 else
498 {
499 vos_event_init(&wdaContext->ftmStopDoneEvent);
500 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700501 return status;
502}
503
Jeff Johnson295189b2012-06-20 16:38:30 -0700504/*
505 * FUNCTION: WDA_prepareConfigTLV
506 * Function to prepare CFG for DAL(WDA)
507 */
508VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
509 WDI_StartReqParamsType *wdiStartParams )
510{
511 /* get pMac to acess CFG data base */
512 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
513 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
514 tHalCfg *tlvStruct = NULL ;
515 tANI_U8 *tlvStructStart = NULL ;
516 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
517 v_PVOID_t *configParam;
518 tANI_U32 configParamSize;
519 tANI_U32 *configDataValue;
520 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700521 tANI_U8 i;
522
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 if ((NULL == pMac)||(NULL == wdaContext))
524 {
525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700526 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 VOS_ASSERT(0);
528 return VOS_STATUS_E_FAILURE;
529 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
531 WNI_CFG_STA_ID_LEN +
532 WNI_CFG_EDCA_WME_ACBK_LEN +
533 WNI_CFG_EDCA_WME_ACBE_LEN +
534 WNI_CFG_EDCA_WME_ACVI_LEN +
535 WNI_CFG_EDCA_WME_ACVO_LEN +
536 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700537 /* malloc memory for all configs in one shot */
538 configParam = vos_mem_malloc(configParamSize);
539
540 if(NULL == configParam )
541 {
542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700543 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700544 VOS_ASSERT(0) ;
545 return VOS_STATUS_E_NOMEM;
546 }
547 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 tlvStruct = (tHalCfg *)configParam;
550 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 /* TODO: Remove Later */
552 /* QWLAN_HAL_CFG_STA_ID */
553 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
554 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
555 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
556 eSIR_SUCCESS)
557 {
558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
559 "Failed to get value for WNI_CFG_STA_ID");
560 goto handle_failure;
561 }
562 tlvStruct->length = strLength ;
563 /* calculate the pad bytes to have the CFG in aligned format */
564 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
565 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700566 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
567 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700568 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
569 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
570 tlvStruct->length = sizeof(tANI_U32);
571 configDataValue = (tANI_U32 *)(tlvStruct + 1);
572 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
573 != eSIR_SUCCESS)
574 {
575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
576 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
577 goto handle_failure;
578 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700579 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
580 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
582 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
583 tlvStruct->length = sizeof(tANI_U32);
584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
585 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
586 eSIR_SUCCESS)
587 {
588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
589 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
590 goto handle_failure;
591 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700592 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
593 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
595 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
596 tlvStruct->length = sizeof(tANI_U32);
597 configDataValue = (tANI_U32 *)(tlvStruct + 1);
598 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
599 != eSIR_SUCCESS)
600 {
601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
602 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
603 goto handle_failure;
604 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
606 + sizeof(tHalCfg) + tlvStruct->length)) ;
607
608 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
609 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
610 tlvStruct->length = sizeof(tANI_U32);
611 configDataValue = (tANI_U32 *)(tlvStruct + 1);
612 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
613 configDataValue ) != eSIR_SUCCESS)
614 {
615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
616 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
617 goto handle_failure;
618 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700619 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
620 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700621 /* QWLAN_HAL_CFG_CAL_PERIOD */
622 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
623 tlvStruct->length = sizeof(tANI_U32);
624 configDataValue = (tANI_U32 *)(tlvStruct + 1);
625 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
626 != eSIR_SUCCESS)
627 {
628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
629 "Failed to get value for WNI_CFG_CAL_PERIOD");
630 goto handle_failure;
631 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700632 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
633 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700634 /* QWLAN_HAL_CFG_CAL_CONTROL */
635 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
636 tlvStruct->length = sizeof(tANI_U32);
637 configDataValue = (tANI_U32 *)(tlvStruct + 1);
638 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
639 != eSIR_SUCCESS)
640 {
641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
642 "Failed to get value for WNI_CFG_CAL_CONTROL");
643 goto handle_failure;
644 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700645 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
646 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 /* QWLAN_HAL_CFG_PROXIMITY */
648 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
649 tlvStruct->length = sizeof(tANI_U32);
650 configDataValue = (tANI_U32 *)(tlvStruct + 1);
651 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
652 != eSIR_SUCCESS)
653 {
654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
655 "Failed to get value for WNI_CFG_PROXIMITY");
656 goto handle_failure;
657 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
659 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
661 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
662 tlvStruct->length = sizeof(tANI_U32);
663 configDataValue = (tANI_U32 *)(tlvStruct + 1);
664 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
665 != eSIR_SUCCESS)
666 {
667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
668 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
669 goto handle_failure;
670 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
672 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
674 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
675 tlvStruct->length = sizeof(tANI_U32);
676 configDataValue = (tANI_U32 *)(tlvStruct + 1);
677 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
678 eSIR_SUCCESS)
679 {
680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
681 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
682 goto handle_failure;
683 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700684 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
685 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700686 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
687 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
688 tlvStruct->length = sizeof(tANI_U32);
689 configDataValue = (tANI_U32 *)(tlvStruct + 1);
690 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
691 configDataValue ) != eSIR_SUCCESS)
692 {
693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
694 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
695 goto handle_failure;
696 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
698 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700699 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
700 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
701 tlvStruct->length = sizeof(tANI_U32);
702 configDataValue = (tANI_U32 *)(tlvStruct + 1);
703 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
704 eSIR_SUCCESS)
705 {
706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
707 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
708 goto handle_failure;
709 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700710 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
711 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
713 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
714 tlvStruct->length = sizeof(tANI_U32);
715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
716 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
717 eSIR_SUCCESS)
718 {
719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
720 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
721 goto handle_failure;
722 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700723 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
724 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
726 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
727 tlvStruct->length = sizeof(tANI_U32);
728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
729 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
730 eSIR_SUCCESS)
731 {
732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
733 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
734 goto handle_failure;
735 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
737 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
739 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
740 tlvStruct->length = sizeof(tANI_U32);
741 configDataValue = (tANI_U32 *)(tlvStruct + 1);
742 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
743 configDataValue ) != eSIR_SUCCESS)
744 {
745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
746 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
747 goto handle_failure;
748 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
750 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700751 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
752 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
753 tlvStruct->length = sizeof(tANI_U32);
754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
755 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
756 configDataValue ) != eSIR_SUCCESS)
757 {
758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
759 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
760 goto handle_failure;
761 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
763 + sizeof(tHalCfg) + tlvStruct->length));
764
765 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
766 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
767 tlvStruct->length = sizeof(tANI_U32);
768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
769 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
770 configDataValue ) != eSIR_SUCCESS)
771 {
772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
773 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
774 goto handle_failure;
775 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
777 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
779 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
780 tlvStruct->length = sizeof(tANI_U32);
781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
782 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
783 configDataValue ) != eSIR_SUCCESS)
784 {
785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
786 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
787 goto handle_failure;
788 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
790 + sizeof(tHalCfg) + tlvStruct->length));
791
792 /* QWLAN_HAL_CFG_FIXED_RATE */
793 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
794 tlvStruct->length = sizeof(tANI_U32);
795 configDataValue = (tANI_U32 *)(tlvStruct + 1);
796 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
797 != eSIR_SUCCESS)
798 {
799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
800 "Failed to get value for WNI_CFG_FIXED_RATE");
801 goto handle_failure;
802 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700803 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
804 + sizeof(tHalCfg) + tlvStruct->length));
805
806 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
807 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
808 tlvStruct->length = sizeof(tANI_U32);
809 configDataValue = (tANI_U32 *)(tlvStruct + 1);
810 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
811 != eSIR_SUCCESS)
812 {
813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
814 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
815 goto handle_failure;
816 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700817 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
818 + sizeof(tHalCfg) + tlvStruct->length));
819
820 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
821 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
822 tlvStruct->length = sizeof(tANI_U32);
823 configDataValue = (tANI_U32 *)(tlvStruct + 1);
824 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
825 configDataValue ) != eSIR_SUCCESS)
826 {
827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
828 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
829 goto handle_failure;
830 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
832 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
834 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
835 tlvStruct->length = sizeof(tANI_U32);
836 configDataValue = (tANI_U32 *)(tlvStruct + 1);
837 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
838 configDataValue ) != eSIR_SUCCESS)
839 {
840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
841 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
842 goto handle_failure;
843 }
844 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
845 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700846 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
847 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
848 tlvStruct->length = sizeof(tANI_U32);
849 configDataValue = (tANI_U32 *)(tlvStruct + 1);
850 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
851 configDataValue ) != eSIR_SUCCESS)
852 {
853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
854 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
855 goto handle_failure;
856 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
858 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
860 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
861 tlvStruct->length = sizeof(tANI_U32);
862 configDataValue = (tANI_U32 *)(tlvStruct + 1);
863 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
864 configDataValue ) != eSIR_SUCCESS)
865 {
866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
867 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
868 goto handle_failure;
869 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
871 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
873 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
874 tlvStruct->length = sizeof(tANI_U32);
875 configDataValue = (tANI_U32 *)(tlvStruct + 1);
876 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
877 configDataValue ) != eSIR_SUCCESS)
878 {
879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
880 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
881 goto handle_failure;
882 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
884 + sizeof(tHalCfg) + tlvStruct->length);
885
Jeff Johnson295189b2012-06-20 16:38:30 -0700886 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
887 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
888 tlvStruct->length = sizeof(tANI_U32);
889 configDataValue = (tANI_U32 *)(tlvStruct + 1);
890 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
891 configDataValue ) != eSIR_SUCCESS)
892 {
893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
894 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
895 goto handle_failure;
896 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700897 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
898 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700899 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
900 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
901 tlvStruct->length = sizeof(tANI_U32);
902 configDataValue = (tANI_U32 *)(tlvStruct + 1);
903 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
904 configDataValue ) != eSIR_SUCCESS)
905 {
906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
907 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
908 goto handle_failure;
909 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700910 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
911 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700912 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
913 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
914 tlvStruct->length = sizeof(tANI_U32);
915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
916 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
917 eSIR_SUCCESS)
918 {
919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
920 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
921 goto handle_failure;
922 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700923 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
924 + sizeof(tHalCfg) + tlvStruct->length);
925
926 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
927 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
928 tlvStruct->length = sizeof(tANI_U32);
929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
930 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
931 configDataValue ) != eSIR_SUCCESS)
932 {
933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
934 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
935 goto handle_failure;
936 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
938 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700939 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
940 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
941 tlvStruct->length = sizeof(tANI_U32);
942 configDataValue = (tANI_U32 *)(tlvStruct + 1);
943 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
944 configDataValue ) != eSIR_SUCCESS)
945 {
946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
947 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
948 goto handle_failure;
949 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700950 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
951 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700952 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
953 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
954 tlvStruct->length = sizeof(tANI_U32);
955 configDataValue = (tANI_U32 *)(tlvStruct + 1);
956 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
957 configDataValue ) != eSIR_SUCCESS)
958 {
959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
960 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
961 goto handle_failure;
962 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700963 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
964 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700965 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
966 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
967 tlvStruct->length = sizeof(tANI_U32);
968 configDataValue = (tANI_U32 *)(tlvStruct + 1);
969 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
970 configDataValue ) != eSIR_SUCCESS)
971 {
972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
973 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
974 goto handle_failure;
975 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700976 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
977 + sizeof(tHalCfg) + tlvStruct->length);
978
979 /* QWLAN_HAL_CFG_STATS_PERIOD */
980 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
981 tlvStruct->length = sizeof(tANI_U32);
982 configDataValue = (tANI_U32 *)(tlvStruct + 1);
983 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
984 eSIR_SUCCESS)
985 {
986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
987 "Failed to get value for WNI_CFG_STATS_PERIOD");
988 goto handle_failure;
989 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700990 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
991 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700992 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
993 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
994 tlvStruct->length = sizeof(tANI_U32);
995 configDataValue = (tANI_U32 *)(tlvStruct + 1);
996 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
997 eSIR_SUCCESS)
998 {
999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1000 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1001 goto handle_failure;
1002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001003 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1004 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001005 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1006 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1007 tlvStruct->length = sizeof(tANI_U32);
1008 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1009 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1010 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001011 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1012 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1014 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1015 tlvStruct->length = sizeof(tANI_U32);
1016 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1017 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1018 != eSIR_SUCCESS)
1019 {
1020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1021 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1022 goto handle_failure;
1023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001024 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1025 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1027 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1028 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1030 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1031 &strLength) != eSIR_SUCCESS)
1032 {
1033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1034 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1035 goto handle_failure;
1036 }
1037 tlvStruct->length = strLength;
1038 /* calculate the pad bytes to have the CFG in aligned format */
1039 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1040 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1044 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1045 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1048 &strLength) != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1052 goto handle_failure;
1053 }
1054 tlvStruct->length = strLength;
1055 /* calculate the pad bytes to have the CFG in aligned format */
1056 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1057 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001058 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1059 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001060 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1061 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1062 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1064 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1065 &strLength) != eSIR_SUCCESS)
1066 {
1067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1068 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1069 goto handle_failure;
1070 }
1071 tlvStruct->length = strLength;
1072 /* calculate the pad bytes to have the CFG in aligned format */
1073 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1074 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001075 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1076 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001077 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1078 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1079 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1080 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1081 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1082 &strLength) != eSIR_SUCCESS)
1083 {
1084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1085 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1086 goto handle_failure;
1087 }
1088 tlvStruct->length = strLength;
1089 /* calculate the pad bytes to have the CFG in aligned format */
1090 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1091 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001092 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1093 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1095 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1096 tlvStruct->length = sizeof(tANI_U32);
1097 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1098 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1099 != eSIR_SUCCESS)
1100 {
1101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1102 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1103 goto handle_failure;
1104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001105 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1106 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1108 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1109 tlvStruct->length = sizeof(tANI_U32);
1110 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1111 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1112 != eSIR_SUCCESS)
1113 {
1114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1115 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1116 goto handle_failure;
1117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001118 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1119 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001120 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1121 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1122 tlvStruct->length = sizeof(tANI_U32);
1123 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1124 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1125 != eSIR_SUCCESS)
1126 {
1127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1128 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1129 goto handle_failure;
1130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1132 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001133 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1134 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1135 tlvStruct->length = sizeof(tANI_U32);
1136 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1137 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1138 != eSIR_SUCCESS)
1139 {
1140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1141 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1142 goto handle_failure;
1143 }
1144 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1145 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001146 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1147 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1148 tlvStruct->length = sizeof(tANI_U32);
1149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1150 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1151 != eSIR_SUCCESS)
1152 {
1153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1154 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1155 goto handle_failure;
1156 }
1157 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1158 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001159 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1160 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1161 tlvStruct->length = sizeof(tANI_U32);
1162 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1163 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1164 != eSIR_SUCCESS)
1165 {
1166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1167 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1168 goto handle_failure;
1169 }
1170 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1171 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001172 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1173 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1174 tlvStruct->length = sizeof(tANI_U32);
1175 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1176 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1177 != eSIR_SUCCESS)
1178 {
1179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1180 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1181 goto handle_failure;
1182 }
1183 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1184 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1186 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1187 tlvStruct->length = sizeof(tANI_U32);
1188 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1189 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1190 != eSIR_SUCCESS)
1191 {
1192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1193 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1194 goto handle_failure;
1195 }
1196 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1197 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001198 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1199 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1200 tlvStruct->length = sizeof(tANI_U32);
1201 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1202 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1203 != eSIR_SUCCESS)
1204 {
1205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1206 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1207 goto handle_failure;
1208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001209 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1210 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001211 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1212 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1213 tlvStruct->length = sizeof(tANI_U32);
1214 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1215 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1216 != eSIR_SUCCESS)
1217 {
1218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1219 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1220 goto handle_failure;
1221 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001222 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1223 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001224 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1225 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1226 tlvStruct->length = sizeof(tANI_U32);
1227 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1228 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1229 != eSIR_SUCCESS)
1230 {
1231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1232 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1233 goto handle_failure;
1234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1236 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001237 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1238 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1239 * into FW, so the parameters are added here.
1240 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001241 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1242 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1243 tlvStruct->length = sizeof(tANI_U32);
1244 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1245 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1247 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1249 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1250 tlvStruct->length = sizeof(tANI_U32);
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1253 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1254 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001255 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1256 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1257 tlvStruct->length = sizeof(tANI_U32);
1258 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1259 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1260 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1261 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001262 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1263 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1264 tlvStruct->length = sizeof(tANI_U32);
1265 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1266 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1267 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1268 + sizeof(tHalCfg) + tlvStruct->length) ;
1269
1270 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1271 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1272 tlvStruct->length = sizeof(tANI_U32);
1273 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1274 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1275 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1276 + sizeof(tHalCfg) + tlvStruct->length) ;
1277
1278 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1279 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
1285
1286 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1287 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1288 tlvStruct->length = sizeof(tANI_U32);
1289 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1290 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1291 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1292 + sizeof(tHalCfg) + tlvStruct->length) ;
1293
1294 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1295 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1296 tlvStruct->length = sizeof(tANI_U32);
1297 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1298 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1299 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1300 + sizeof(tHalCfg) + tlvStruct->length) ;
1301
1302 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1303 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1304 tlvStruct->length = sizeof(tANI_U32);
1305 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1306 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1307 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1308 + sizeof(tHalCfg) + tlvStruct->length) ;
1309
1310 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1311 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1312 tlvStruct->length = sizeof(tANI_U32);
1313 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1314 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
1317
1318 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1319 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1320 tlvStruct->length = sizeof(tANI_U32);
1321 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1322 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1323 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1324 + sizeof(tHalCfg) + tlvStruct->length) ;
1325
1326 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1327 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1328 tlvStruct->length = sizeof(tANI_U32);
1329 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1330 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1331 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1332 + sizeof(tHalCfg) + tlvStruct->length) ;
1333
1334 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1335 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1336 tlvStruct->length = sizeof(tANI_U32);
1337 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1338 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1340 + sizeof(tHalCfg) + tlvStruct->length) ;
1341
1342 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1343 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1344 tlvStruct->length = sizeof(tANI_U32);
1345 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1346 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1347 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1348 + sizeof(tHalCfg) + tlvStruct->length) ;
1349
1350 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1351 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1352 tlvStruct->length = sizeof(tANI_U32);
1353 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1354 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1355 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1356 + sizeof(tHalCfg) + tlvStruct->length) ;
1357
1358 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1359 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1360 tlvStruct->length = sizeof(tANI_U32);
1361 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1362 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1363 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1364 + sizeof(tHalCfg) + tlvStruct->length) ;
1365
Wilson Tsaof8b37942013-09-06 10:49:00 -07001366 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1367 {
1368 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1369 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1370 tlvStruct->length = sizeof(tANI_U32);
1371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1372 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1374 + sizeof(tHalCfg) + tlvStruct->length) ;
1375
1376 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1377 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1378 tlvStruct->length = sizeof(tANI_U32);
1379 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1380 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1381 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1382 + sizeof(tHalCfg) + tlvStruct->length) ;
1383
1384 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1385 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1386 tlvStruct->length = sizeof(tANI_U32);
1387 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1388 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
1391
1392 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1393 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1394 tlvStruct->length = sizeof(tANI_U32);
1395 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1396 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1397 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1398 + sizeof(tHalCfg) + tlvStruct->length) ;
1399 }
1400
1401 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1402 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1403 tlvStruct->length = sizeof(tANI_U32);
1404 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1405 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1406 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1407 + sizeof(tHalCfg) + tlvStruct->length) ;
1408
1409 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1410 {
1411 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1412 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1413 tlvStruct->length = sizeof(tANI_U32);
1414 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1415 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1416 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1417 + sizeof(tHalCfg) + tlvStruct->length) ;
1418 }
1419
1420 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1421 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1422 tlvStruct->length = sizeof(tANI_U32);
1423 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1424 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1425 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1426 + sizeof(tHalCfg) + tlvStruct->length) ;
1427
Jeff Johnson32d95a32012-09-10 13:15:23 -07001428 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001429 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1430 tlvStruct->length = sizeof(tANI_U32);
1431 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1432 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1433 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1434 wcnssCompiledApiVersion.minor,
1435 wcnssCompiledApiVersion.version,
1436 wcnssCompiledApiVersion.revision);
1437 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1438 + sizeof(tHalCfg) + tlvStruct->length) ;
1439
Jeff Johnsond13512a2012-07-17 11:42:19 -07001440 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1441 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1442 tlvStruct->length = sizeof(tANI_U32);
1443 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1444 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1445 configDataValue ) != eSIR_SUCCESS)
1446 {
1447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1448 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1449 goto handle_failure;
1450 }
1451
1452 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1453 + sizeof(tHalCfg) + tlvStruct->length) ;
1454 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1455 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1456 tlvStruct->length = sizeof(tANI_U32);
1457 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1458 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1459 configDataValue ) != eSIR_SUCCESS)
1460 {
1461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1462 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1463 goto handle_failure;
1464 }
1465
1466 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1467 + sizeof(tHalCfg) + tlvStruct->length) ;
1468
1469 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1470 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1471 tlvStruct->length = sizeof(tANI_U32);
1472 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1473 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1474 != eSIR_SUCCESS)
1475 {
1476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1477 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1478 goto handle_failure;
1479 }
1480
1481 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1482 + sizeof(tHalCfg) + tlvStruct->length) ;
1483
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001484 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1485 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1486 tlvStruct->length = sizeof(tANI_U32);
1487 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1488 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1489 != eSIR_SUCCESS)
1490 {
1491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1492 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1493 goto handle_failure;
1494 }
1495
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001498#ifdef WLAN_SOFTAP_VSTA_FEATURE
1499 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1500 tlvStruct->length = sizeof(tANI_U32);
1501 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1502 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1503 != eSIR_SUCCESS)
1504 {
1505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1506 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1507 goto handle_failure;
1508 }
1509
1510 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1511 + sizeof(tHalCfg) + tlvStruct->length) ;
1512#endif
1513
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001514 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1515 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1516 tlvStruct->length = sizeof(tANI_U32);
1517 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1518
1519 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1520 != eSIR_SUCCESS)
1521 {
1522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1523 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1524 goto handle_failure;
1525 }
1526
1527 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1528 + sizeof(tHalCfg) + tlvStruct->length) ;
1529
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301530/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1531 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1532 tlvStruct->length = sizeof(tANI_U32);
1533 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1534 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1535 configDataValue ) != eSIR_SUCCESS)
1536 {
1537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1538 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1539 goto handle_failure;
1540 }
1541
1542 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1543 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301544#ifdef FEATURE_WLAN_TDLS
1545 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1546 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1547 tlvStruct->length = sizeof(tANI_U32);
1548 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1549 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1550 configDataValue ) != eSIR_SUCCESS)
1551 {
1552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1553 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1554 goto handle_failure;
1555 }
1556 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1557 + sizeof(tHalCfg) + tlvStruct->length) ;
1558
1559 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1560 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1561 tlvStruct->length = sizeof(tANI_U32);
1562 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1563 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1564 configDataValue ) != eSIR_SUCCESS)
1565 {
1566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1567 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1568 goto handle_failure;
1569 }
1570 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1571 + sizeof(tHalCfg) + tlvStruct->length) ;
1572 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1573 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1574 tlvStruct->length = sizeof(tANI_U32);
1575 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1576 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1577 configDataValue ) != eSIR_SUCCESS)
1578 {
1579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1580 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1581 goto handle_failure;
1582 }
1583 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1584 + sizeof(tHalCfg) + tlvStruct->length) ;
1585 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1586 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1587 tlvStruct->length = sizeof(tANI_U32);
1588 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1589 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1590 configDataValue ) != eSIR_SUCCESS)
1591 {
1592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1593 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1594 goto handle_failure;
1595 }
1596 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1597 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301598 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1599 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1600 tlvStruct->length = sizeof(tANI_U32);
1601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1602 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1603 configDataValue ) != eSIR_SUCCESS)
1604 {
1605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1606 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1607 goto handle_failure;
1608 }
1609 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1610 + sizeof(tHalCfg) + tlvStruct->length) ;
1611
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301612#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301613
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001614 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1615 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1616 tlvStruct->length = sizeof(tANI_U32);
1617 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1618 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1619 configDataValue ) != eSIR_SUCCESS)
1620 {
1621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1622 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1623 goto handle_failure;
1624 }
1625
1626 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1627 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001628
1629 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1630 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1631 tlvStruct->length = sizeof(tANI_U32);
1632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1633 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1634 != eSIR_SUCCESS)
1635 {
1636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1637 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1638 goto handle_failure;
1639 }
1640 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1641 + sizeof(tHalCfg) + tlvStruct->length));
1642
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301643 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1644 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1645 tlvStruct->length = sizeof(tANI_U32);
1646 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1647 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1648 configDataValue ) != eSIR_SUCCESS)
1649 {
1650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1651 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1652 goto handle_failure;
1653 }
1654
1655 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1656 + sizeof(tHalCfg) + tlvStruct->length) ;
1657
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301658 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1659 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1660 tlvStruct->length = sizeof(tANI_U32);
1661 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1662 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1663 configDataValue ) != eSIR_SUCCESS)
1664 {
1665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1666 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1667 goto handle_failure;
1668 }
1669 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1670 + sizeof(tHalCfg) + tlvStruct->length) ;
1671
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301672 /* QWLAN_HAL_CFG_ATH_DISABLE */
1673 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1674 tlvStruct->length = sizeof(tANI_U32);
1675 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1676 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1677 configDataValue ) != eSIR_SUCCESS)
1678 {
1679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1680 "Failed to get value for WNI_CFG_ATH_DISABLE");
1681 goto handle_failure;
1682 }
1683 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1684 + sizeof(tHalCfg) + tlvStruct->length) ;
1685
c_hpothu6d7dc922013-12-02 12:36:41 +05301686 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1687 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1688 tlvStruct->length = sizeof(tANI_U32);
1689 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1690 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1691 configDataValue ) != eSIR_SUCCESS)
1692 {
1693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1694 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1695 goto handle_failure;
1696 }
1697 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1698 + sizeof(tHalCfg) + tlvStruct->length) ;
1699
1700 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1701 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1702 tlvStruct->length = sizeof(tANI_U32);
1703 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1704 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1705 configDataValue ) != eSIR_SUCCESS)
1706 {
1707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1708 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1709 goto handle_failure;
1710 }
1711 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1712 + sizeof(tHalCfg) + tlvStruct->length) ;
1713
1714 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1715 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1716 tlvStruct->length = sizeof(tANI_U32);
1717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1718 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1719 configDataValue ) != eSIR_SUCCESS)
1720 {
1721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1722 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1723 goto handle_failure;
1724 }
1725 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1726 + sizeof(tHalCfg) + tlvStruct->length) ;
1727
1728 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1729 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1730 tlvStruct->length = sizeof(tANI_U32);
1731 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1732 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1733 configDataValue ) != eSIR_SUCCESS)
1734 {
1735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1736 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1737 goto handle_failure;
1738 }
1739 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1740 + sizeof(tHalCfg) + tlvStruct->length) ;
1741
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301742 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1743 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1744 tlvStruct->length = sizeof(tANI_U32);
1745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1746 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1747 configDataValue ) != eSIR_SUCCESS)
1748 {
1749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1750 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1751 goto handle_failure;
1752 }
1753 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1754 + sizeof(tHalCfg) + tlvStruct->length) ;
1755
1756 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1757 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1758 tlvStruct->length = sizeof(tANI_U32);
1759 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1760 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1761 configDataValue ) != eSIR_SUCCESS)
1762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1765 goto handle_failure;
1766 }
1767 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1768 + sizeof(tHalCfg) + tlvStruct->length) ;
1769
1770 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1771 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1772 tlvStruct->length = sizeof(tANI_U32);
1773 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1774 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1775 configDataValue ) != eSIR_SUCCESS)
1776 {
1777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1778 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1779 goto handle_failure;
1780 }
1781 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1782 + sizeof(tHalCfg) + tlvStruct->length) ;
1783
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001784 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1785 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1786 tlvStruct->length = sizeof(tANI_U32);
1787 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1788 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1789 configDataValue ) != eSIR_SUCCESS)
1790 {
1791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1792 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1793 goto handle_failure;
1794 }
1795 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1796 + sizeof(tHalCfg) + tlvStruct->length) ;
1797
c_hpothu5bd1ae42014-03-07 20:28:22 +05301798 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1799 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1800 tlvStruct->length = sizeof(tANI_U32);
1801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1802
1803 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1804 configDataValue ) != eSIR_SUCCESS)
1805 {
1806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1807 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1808 goto handle_failure;
1809 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301810 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1811 + sizeof(tHalCfg) + tlvStruct->length) ;
1812
1813 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1814 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1815 tlvStruct->length = sizeof(tANI_U32);
1816 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1817
1818 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1819 configDataValue ) != eSIR_SUCCESS)
1820 {
1821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1822 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1823 goto handle_failure;
1824 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301825 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1826 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301827
c_hpothu2d0f1c42014-04-01 18:38:51 +05301828 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1829 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1830 tlvStruct->length = sizeof(tANI_U32);
1831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1832
1833 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1834 configDataValue ) != eSIR_SUCCESS)
1835 {
1836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1837 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1838 goto handle_failure;
1839 }
1840 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1841 + sizeof(tHalCfg) + tlvStruct->length) ;
1842
1843 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1844 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1845 tlvStruct->length = sizeof(tANI_U32);
1846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1847
1848 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1849 configDataValue ) != eSIR_SUCCESS)
1850 {
1851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1852 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1853 goto handle_failure;
1854 }
1855 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1856 + sizeof(tHalCfg) + tlvStruct->length) ;
1857
1858 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1859 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1860 tlvStruct->length = sizeof(tANI_U32);
1861 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1862
1863 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1864 configDataValue ) != eSIR_SUCCESS)
1865 {
1866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1867 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1868 goto handle_failure;
1869 }
1870 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1871 + sizeof(tHalCfg) + tlvStruct->length) ;
1872
1873 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1874 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1875 tlvStruct->length = sizeof(tANI_U32);
1876 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1877
1878 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1879 configDataValue ) != eSIR_SUCCESS)
1880 {
1881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1882 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1883 goto handle_failure;
1884 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301885 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1886 + sizeof(tHalCfg) + tlvStruct->length) ;
1887
Jeff Johnson295189b2012-06-20 16:38:30 -07001888 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001889#ifdef WLAN_DEBUG
1890 {
1891 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001892 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1893 "****** Dumping CFG TLV ***** ");
1894 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1895 {
1896 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1897 "%02x %02x %02x %02x %02x %02x %02x %02x",
1898 tlvStructStart[i],
1899 tlvStructStart[i+1],
1900 tlvStructStart[i+2],
1901 tlvStructStart[i+3],
1902 tlvStructStart[i+4],
1903 tlvStructStart[i+5],
1904 tlvStructStart[i+6],
1905 tlvStructStart[i+7]);
1906 }
1907 /* Dump the bytes in the last line*/
1908 for (; i < wdiStartParams->usConfigBufferLen; i++)
1909 {
1910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1911 "%02x ",tlvStructStart[i]);
1912 }
1913 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1914 "**************************** ");
1915 }
1916#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001917 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001918handle_failure:
1919 vos_mem_free(configParam);
1920 return VOS_STATUS_E_FAILURE;
1921}
Jeff Johnson295189b2012-06-20 16:38:30 -07001922/*
1923 * FUNCTION: WDA_wdiCompleteCB
1924 * call the voss call back function
1925 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001926void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001927{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1929 tWDA_CbContext *wdaContext;
1930
1931 if(NULL == pWdaParams)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001934 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001935 VOS_ASSERT(0) ;
1936 return ;
1937 }
1938
1939 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1940
Jeff Johnson295189b2012-06-20 16:38:30 -07001941 if (NULL == wdaContext)
1942 {
1943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001944 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001945 return ;
1946 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001947
Jeff Johnson295189b2012-06-20 16:38:30 -07001948 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001949 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001951 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001953 vos_mem_free(pWdaParams);
1954
Jeff Johnson295189b2012-06-20 16:38:30 -07001955 if(WDI_STATUS_SUCCESS != status)
1956 {
1957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1958 "WDI stop callback returned failure" );
1959 VOS_ASSERT(0) ;
1960 }
1961 else
1962 {
1963 wdaContext->wdaState = WDA_STOP_STATE;
1964 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001965
Leo Chang9d76f622013-08-23 16:34:52 -07001966 /* FTM Driver stop procedure should be synced.
1967 * Stop and Close will happen on same context */
1968 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1969 {
1970 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1971 {
1972 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1973 "%s: FTM Stop Event Set Fail", __func__);
1974 VOS_ASSERT(0);
1975 }
1976 }
1977
Jeff Johnson295189b2012-06-20 16:38:30 -07001978 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001979 vos_WDAComplete_cback(wdaContext->pVosContext);
1980
Jeff Johnson295189b2012-06-20 16:38:30 -07001981 return ;
1982}
Jeff Johnson295189b2012-06-20 16:38:30 -07001983/*
1984 * FUNCTION: WDA_stop
1985 * call WDI_stop
1986 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001987VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1988{
1989 WDI_Status wdiStatus;
1990 VOS_STATUS status = VOS_STATUS_SUCCESS;
1991 WDI_StopReqParamsType *wdiStopReq;
1992 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001993 tWDA_ReqParams *pWdaParams ;
1994
Jeff Johnson295189b2012-06-20 16:38:30 -07001995 if (NULL == pWDA)
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 pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 VOS_ASSERT(0);
2000 return VOS_STATUS_E_FAILURE;
2001 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002002 if (pWDA->wdiFailed == true)
2003 {
2004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002005 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002006 return VOS_STATUS_E_ALREADY;
2007 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002008
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 /* FTM mode stay START_STATE */
2010 if( (WDA_READY_STATE != pWDA->wdaState) &&
2011 (WDA_INIT_STATE != pWDA->wdaState) &&
2012 (WDA_START_STATE != pWDA->wdaState) )
2013 {
2014 VOS_ASSERT(0);
2015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 wdiStopReq = (WDI_StopReqParamsType *)
2017 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2018 if(NULL == wdiStopReq)
2019 {
2020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002021 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002022 VOS_ASSERT(0);
2023 return VOS_STATUS_E_NOMEM;
2024 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002025
Jeff Johnson295189b2012-06-20 16:38:30 -07002026 wdiStopReq->wdiStopReason = reason;
2027 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002028
2029 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2030 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002033 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 VOS_ASSERT(0);
2035 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002036 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002037 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002038
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002039 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2040 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002041 {
2042 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002043 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002045
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002046 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2047 pWdaParams->wdaMsgParam = NULL;
2048 pWdaParams->pWdaContext = pWDA;
2049
Jeff Johnson295189b2012-06-20 16:38:30 -07002050 /* call WDI stop */
2051 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002052 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2053
Jeff Johnson295189b2012-06-20 16:38:30 -07002054 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2055 {
2056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2057 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2059 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 status = VOS_STATUS_E_FAILURE;
2061 }
Leo Chang9d76f622013-08-23 16:34:52 -07002062
2063 /* FTM Driver stop procedure should be synced.
2064 * Stop and Close will happen on same context */
2065 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2066 {
2067 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2068 WDI_RESPONSE_TIMEOUT);
2069 if (status != VOS_STATUS_SUCCESS)
2070 {
2071 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2072 "%s: FTM Stop Timepoout", __func__);
2073 VOS_ASSERT(0);
2074 vos_event_reset(&pWDA->ftmStopDoneEvent);
2075 }
2076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 return status;
2078}
Jeff Johnson295189b2012-06-20 16:38:30 -07002079/*
2080 * FUNCTION: WDA_close
2081 * call WDI_close and free the WDA context
2082 */
2083VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2084{
Jeff Johnson43971f52012-07-17 12:26:56 -07002085 VOS_STATUS status = VOS_STATUS_SUCCESS;
2086 WDI_Status wstatus;
2087 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002088 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002089 if (NULL == wdaContext)
2090 {
2091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002092 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002093 return VOS_STATUS_E_FAILURE;
2094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002095 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2096 (WDA_STOP_STATE != wdaContext->wdaState))
2097 {
2098 VOS_ASSERT(0);
2099 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002100 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002101 wstatus = WDI_Close();
2102 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002103 {
2104 status = VOS_STATUS_E_FAILURE;
2105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002107 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002108 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2109 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 {
2111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002112 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002113 status = VOS_STATUS_E_FAILURE;
2114 }
2115
Jeff Johnson43971f52012-07-17 12:26:56 -07002116 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002117 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002118 {
2119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002120 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002121 status = VOS_STATUS_E_FAILURE;
2122 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002123 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002124 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002125 {
2126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002127 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002128 status = VOS_STATUS_E_FAILURE;
2129 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002130 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002131 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002132 {
2133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002134 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002135 status = VOS_STATUS_E_FAILURE;
2136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002138 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002139 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 {
2141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2142 "error in WDA close " );
2143 status = VOS_STATUS_E_FAILURE;
2144 }
2145 return status;
2146}
Jeff Johnson295189b2012-06-20 16:38:30 -07002147/*
2148 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2149 * returns 1 if the compiled version is greater than or equal to the input version
2150 */
2151
2152uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2153{
2154 VOS_STATUS status = VOS_STATUS_SUCCESS;
2155 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2156 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2159 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2160 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2161 (compiledVersion.revision >= revision)))
2162 return 1;
2163 else
2164 return 0;
2165}
Jeff Johnson295189b2012-06-20 16:38:30 -07002166/*
2167 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2168 * returns 1 if the compiled version is greater than or equal to the input version
2169 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002170uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2171{
2172 VOS_STATUS status = VOS_STATUS_SUCCESS;
2173 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2174 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2177 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2178 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2179 (reportedVersion.revision >= revision)))
2180 return 1;
2181 else
2182 return 0;
2183}
Jeff Johnson295189b2012-06-20 16:38:30 -07002184/*
2185 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2186 * Returns the version of the WCNSS WLAN API with which the HOST
2187 * device driver was compiled
2188 */
2189VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2190 tSirVersionType *pVersion)
2191{
2192 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002193 if ((NULL == pvosGCtx) || (NULL == pVersion))
2194 {
2195 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002196 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 VOS_ASSERT(0);
2198 return VOS_STATUS_E_FAILURE;
2199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002200 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2201 if (NULL == pWDA )
2202 {
2203 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002204 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002205 VOS_ASSERT(0);
2206 return VOS_STATUS_E_FAILURE;
2207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002208 *pVersion = pWDA->wcnssWlanCompiledVersion;
2209 return VOS_STATUS_SUCCESS;
2210}
Jeff Johnson295189b2012-06-20 16:38:30 -07002211/*
2212 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2213 * Returns the version of the WCNSS WLAN API with which the WCNSS
2214 * device driver was compiled
2215 */
2216VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2217 tSirVersionType *pVersion)
2218{
2219 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 if ((NULL == pvosGCtx) || (NULL == pVersion))
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 parameter", __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 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2228 if (NULL == pWDA )
2229 {
2230 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002231 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 VOS_ASSERT(0);
2233 return VOS_STATUS_E_FAILURE;
2234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 *pVersion = pWDA->wcnssWlanReportedVersion;
2236 return VOS_STATUS_SUCCESS;
2237}
Jeff Johnson295189b2012-06-20 16:38:30 -07002238/*
2239 * FUNCTION: WDA_GetWcnssSoftwareVersion
2240 * Returns the WCNSS Software version string
2241 */
2242VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2243 tANI_U8 *pVersion,
2244 tANI_U32 versionBufferSize)
2245{
2246 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002248 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002249 if ((NULL == pvosGCtx) || (NULL == pVersion))
2250 {
2251 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002252 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002253 VOS_ASSERT(0);
2254 return VOS_STATUS_E_FAILURE;
2255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002256 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2257 if (NULL == pWDA )
2258 {
2259 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002260 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002261 VOS_ASSERT(0);
2262 return VOS_STATUS_E_FAILURE;
2263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2265 return VOS_STATUS_SUCCESS;
2266}
Jeff Johnson295189b2012-06-20 16:38:30 -07002267/*
2268 * FUNCTION: WDA_GetWcnssHardwareVersion
2269 * Returns the WCNSS Hardware version string
2270 */
2271VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2272 tANI_U8 *pVersion,
2273 tANI_U32 versionBufferSize)
2274{
2275 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002277 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 if ((NULL == pvosGCtx) || (NULL == pVersion))
2279 {
2280 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002281 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002282 VOS_ASSERT(0);
2283 return VOS_STATUS_E_FAILURE;
2284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2286 if (NULL == pWDA )
2287 {
2288 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002289 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002290 VOS_ASSERT(0);
2291 return VOS_STATUS_E_FAILURE;
2292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2294 return VOS_STATUS_SUCCESS;
2295}
Jeff Johnson295189b2012-06-20 16:38:30 -07002296/*
2297 * FUNCTION: WDA_WniCfgDnld
2298 * Trigger CFG Download
2299 */
2300VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2301{
2302 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 v_VOID_t *pFileImage = NULL;
2305 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002306 v_VOID_t *pCfgBinary = NULL;
2307 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002309
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 if (NULL == pMac )
2311 {
2312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002313 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 VOS_ASSERT(0);
2315 return VOS_STATUS_E_FAILURE;
2316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 /* get the number of bytes in the CFG Binary... */
2318 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2319 &cbFileImageSize );
2320 if ( VOS_STATUS_E_NOMEM != vosStatus )
2321 {
2322 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2323 "Error obtaining binary size" );
2324 goto fail;
2325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 // malloc a buffer to read in the Configuration binary file.
2327 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 if ( NULL == pFileImage )
2329 {
2330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2331 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2332 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002333 vosStatus = VOS_STATUS_E_NOMEM;
2334 goto fail;
2335 }
2336
2337 /* Get the entire CFG file image... */
2338 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2339 &cbFileImageSize );
2340 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2341 {
2342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2343 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2344 cbFileImageSize );
2345 goto fail;
2346 }
2347
2348 /*
2349 * Validate the binary image. This function will return a pointer
2350 * and length where the CFG binary is located within the binary image file.
2351 */
2352 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2353 &pCfgBinary, &cbCfgBinarySize );
2354 if ( VOS_FALSE == bStatus )
2355 {
2356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2357 "Error: Cannot find STA CFG in binary image file" );
2358 vosStatus = VOS_STATUS_E_FAILURE;
2359 goto fail;
2360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 /*
2362 * TODO: call the config download function
2363 * for now calling the existing cfg download API
2364 */
2365 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002366 vosStatus = VOS_STATUS_SUCCESS;
2367
2368 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002369
2370fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002371 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 return vosStatus;
2373}
Jeff Johnson295189b2012-06-20 16:38:30 -07002374/* -----------------------------------------------------------------
2375 * WDI interface
2376 * -----------------------------------------------------------------
2377 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002378/*
2379 * FUNCTION: WDA_suspendDataTxCallback
2380 * call back function called from TL after suspend Transmission
2381 */
2382VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2383 v_U8_t* ucSTAId,
2384 VOS_STATUS vosStatus)
2385{
2386 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002388 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002389 if (NULL == pWDA )
2390 {
2391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002392 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 VOS_ASSERT(0);
2394 return VOS_STATUS_E_FAILURE;
2395 }
2396 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2397 {
2398 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2399 }
2400 else
2401 {
2402 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 /* Trigger the event to bring the WDA TL suspend function to come
2405 * out of wait*/
2406 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2407 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2408 {
2409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002410 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 /* If TL suspended had timedout before this callback was called, resume back
2413 * TL.*/
2414 if (pWDA->txSuspendTimedOut)
2415 {
2416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002417 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 WDA_ResumeDataTx(pWDA);
2419 pWDA->txSuspendTimedOut = FALSE;
2420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 return VOS_STATUS_SUCCESS;
2422}
Jeff Johnson295189b2012-06-20 16:38:30 -07002423/*
2424 * FUNCTION: WDA_suspendDataTx
2425 * Update TL to suspend the data Transmission
2426 */
2427VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2428{
2429 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2430 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002431
2432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002433 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 if (pWDA->txSuspendTimedOut)
2436 {
2437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002438 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 return status;
2440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 /* Reset the event to be not signalled */
2442 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2443 if(!VOS_IS_STATUS_SUCCESS(status))
2444 {
2445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002446 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002447 return VOS_STATUS_E_FAILURE;
2448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002450 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 WDA_SuspendDataTxCallback);
2452 if(status != VOS_STATUS_SUCCESS)
2453 {
2454 return status;
2455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002456 /* Wait for the event to be set by the TL, to get the response of
2457 * suspending the TX queues, this event should be set by the Callback
2458 * function called by TL*/
2459 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2460 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2461 if(!VOS_IS_STATUS_SUCCESS(status))
2462 {
2463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2464 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002465 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 /* Set this flag to true when TL suspend times out, so that when TL
2467 * suspend eventually happens and calls the callback, TL can be resumed
2468 * right away by looking at this flag when true.*/
2469 pWDA->txSuspendTimedOut = TRUE;
2470 }
2471 else
2472 {
2473 pWDA->txSuspendTimedOut = FALSE;
2474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2476 {
2477 status = VOS_STATUS_SUCCESS;
2478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 return status;
2480}
Jeff Johnson295189b2012-06-20 16:38:30 -07002481/*
2482 * FUNCTION: WDA_resumeDataTx
2483 * Update TL to resume the data Transmission
2484 */
2485VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2486{
2487 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002488
2489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002490 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002491
2492 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 return status;
2494}
Jeff Johnson295189b2012-06-20 16:38:30 -07002495/*
2496 * FUNCTION: WDA_InitScanReqCallback
2497 * Trigger Init SCAN callback
2498 */
2499void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2500{
2501 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2502 tWDA_CbContext *pWDA;
2503 tInitScanParams *pWDA_ScanParam ;
2504 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 if(NULL == pWdaParams)
2508 {
2509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002510 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 VOS_ASSERT(0) ;
2512 return ;
2513 }
2514 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2515 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 if(NULL == pWDA_ScanParam)
2517 {
2518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002519 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002520 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2522 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 return ;
2524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002525 if(WDI_STATUS_SUCCESS != wdiStatus)
2526 {
2527 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002528 if(VOS_STATUS_SUCCESS != status)
2529 {
2530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002531 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 }
2533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 /* free WDI command buffer */
2535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002536 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002537
Jeff Johnson295189b2012-06-20 16:38:30 -07002538
2539 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002540 /* without converting the Status to Failure or Success Just
2541 pass the same status to lim */
2542 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 /* send SCAN RSP message back to PE */
2544 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 return ;
2546}
2547
2548/*
2549 * FUNCTION: WDA_ProcessInitScanReq
2550 * Trigger Init SCAN in DAL
2551 */
2552VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2553 tInitScanParams *initScanParams)
2554{
2555 WDI_Status status = WDI_STATUS_SUCCESS ;
2556 WDI_InitScanReqParamsType *wdiInitScanParam =
2557 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2558 sizeof(WDI_InitScanReqParamsType)) ;
2559 tWDA_ReqParams *pWdaParams;
2560 tANI_U8 i = 0;
2561
2562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002563 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 if(NULL == wdiInitScanParam)
2565 {
2566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002567 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 VOS_ASSERT(0);
2569 return VOS_STATUS_E_NOMEM;
2570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2572 if(NULL == pWdaParams)
2573 {
2574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002575 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 VOS_ASSERT(0);
2577 vos_mem_free(wdiInitScanParam);
2578 return VOS_STATUS_E_NOMEM;
2579 }
2580
2581 /* Copy init Scan params to WDI structure */
2582 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2583 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2584 sizeof(tSirMacAddr)) ;
2585 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2586 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2587 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2589 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2591 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2593 {
2594 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2595 initScanParams->scanEntry.bssIdx[i] ;
2596 }
2597
2598 /* if Frame length, copy macMgmtHdr or WDI structure */
2599 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2600 {
2601 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2602 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2603 }
2604 wdiInitScanParam->wdiReqStatusCB = NULL ;
2605
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 /* Store Init Req pointer, as this will be used for response */
2607 pWdaParams->pWdaContext = pWDA;
2608 pWdaParams->wdaMsgParam = initScanParams;
2609 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 /* first try to suspend TX */
2611 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002612 if(WDI_STATUS_SUCCESS != status)
2613 {
2614 goto handleWdiFailure;
2615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 /* call DAL API to pass init scan request to DAL */
2617 status = WDI_InitScanReq(wdiInitScanParam,
2618 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 if(IS_WDI_STATUS_FAILURE(status))
2620 {
2621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2622 "error in WDA Init Scan, Resume Tx " );
2623 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 VOS_ASSERT(0) ;
2625
2626 goto handleWdiFailure;
2627 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002628 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002629handleWdiFailure:
2630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2631 "Failure in WDI Api, free all the memory " );
2632 /* free WDI command buffer */
2633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2634 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002635 /* send Failure to PE */
2636 initScanParams->status = eSIR_FAILURE ;
2637 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 return CONVERT_WDI2VOS_STATUS(status) ;
2639}
2640
Jeff Johnson295189b2012-06-20 16:38:30 -07002641/*
2642 * FUNCTION: WDA_StartScanReqCallback
2643 * send Start SCAN RSP back to PE
2644 */
2645void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2646 void* pUserData)
2647{
2648 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2649 tWDA_CbContext *pWDA;
2650 tStartScanParams *pWDA_ScanParam;
2651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002652 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002653 if(NULL == pWdaParams)
2654 {
2655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002656 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 VOS_ASSERT(0) ;
2658 return ;
2659 }
2660 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2661 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 if(NULL == pWDA_ScanParam)
2663 {
2664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002665 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002667 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 return ;
2669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2671 {
2672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002673 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002675 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002676 return ;
2677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2679 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002680
Jeff Johnson295189b2012-06-20 16:38:30 -07002681
2682 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002683 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 /* send SCAN RSP message back to PE */
2685 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002686 return ;
2687}
2688
Jeff Johnson295189b2012-06-20 16:38:30 -07002689/*
2690 * FUNCTION: WDA_ProcessStartScanReq
2691 * Trigger start SCAN in WDI
2692 */
2693VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2694 tStartScanParams *startScanParams)
2695{
2696 WDI_Status status = WDI_STATUS_SUCCESS;
2697 WDI_StartScanReqParamsType *wdiStartScanParams =
2698 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2699 sizeof(WDI_StartScanReqParamsType)) ;
2700 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002702 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 if(NULL == wdiStartScanParams)
2704 {
2705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002706 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 VOS_ASSERT(0);
2708 return VOS_STATUS_E_NOMEM;
2709 }
2710 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2711 if(NULL == pWdaParams)
2712 {
2713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002714 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002715 VOS_ASSERT(0);
2716 vos_mem_free(wdiStartScanParams);
2717 return VOS_STATUS_E_NOMEM;
2718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002719 /* Copy init Scan params to WDI structure */
2720 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2721 wdiStartScanParams->wdiReqStatusCB = NULL ;
2722
Jeff Johnson295189b2012-06-20 16:38:30 -07002723 /* Store Init Req pointer, as this will be used for response */
2724 /* store Params pass it to WDI */
2725 pWdaParams->pWdaContext = pWDA;
2726 pWdaParams->wdaMsgParam = startScanParams;
2727 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002728 /* call DAL API to pass init scan request to DAL */
2729 status = WDI_StartScanReq(wdiStartScanParams,
2730 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 /* failure returned by WDI API */
2732 if(IS_WDI_STATUS_FAILURE(status))
2733 {
2734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2735 "Failure in Start Scan WDI API, free all the memory "
2736 "It should be due to previous abort scan." );
2737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2738 vos_mem_free(pWdaParams) ;
2739 startScanParams->status = eSIR_FAILURE ;
2740 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002742 return CONVERT_WDI2VOS_STATUS(status) ;
2743}
Jeff Johnson295189b2012-06-20 16:38:30 -07002744/*
2745 * FUNCTION: WDA_EndScanReqCallback
2746 * END SCAN callback
2747 */
2748void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2749{
2750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2751 tWDA_CbContext *pWDA;
2752 tEndScanParams *endScanParam;
2753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002754 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002755 if(NULL == pWdaParams)
2756 {
2757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002758 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 VOS_ASSERT(0) ;
2760 return ;
2761 }
2762 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2763 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 if(NULL == endScanParam)
2765 {
2766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002767 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2770 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002771 return ;
2772 }
2773
2774 /* Free WDI command buffer */
2775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2776 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002778 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 /* send response back to PE */
2780 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2781 return ;
2782}
2783
Jeff Johnson295189b2012-06-20 16:38:30 -07002784/*
2785 * FUNCTION: WDA_ProcessEndScanReq
2786 * Trigger END SCAN in WDI
2787 */
2788VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2789 tEndScanParams *endScanParams)
2790{
2791 WDI_Status status = WDI_STATUS_SUCCESS;
2792 WDI_EndScanReqParamsType *wdiEndScanParams =
2793 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2794 sizeof(WDI_EndScanReqParamsType)) ;
2795 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002797 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 if(NULL == wdiEndScanParams)
2799 {
2800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002801 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 VOS_ASSERT(0);
2803 return VOS_STATUS_E_NOMEM;
2804 }
2805 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2806 if(NULL == pWdaParams)
2807 {
2808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002809 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 VOS_ASSERT(0);
2811 vos_mem_free(wdiEndScanParams);
2812 return VOS_STATUS_E_NOMEM;
2813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 /* Copy init Scan params to WDI structure */
2815 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2816 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 /* Store Init Req pointer, as this will be used for response */
2818 /* store Params pass it to WDI */
2819 pWdaParams->pWdaContext = pWDA;
2820 pWdaParams->wdaMsgParam = endScanParams;
2821 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 /* call DAL API to pass init scan request to DAL */
2823 status = WDI_EndScanReq(wdiEndScanParams,
2824 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 if(IS_WDI_STATUS_FAILURE(status))
2826 {
2827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2828 "Failure in End Scan WDI API, free all the memory "
2829 "It should be due to previous abort scan." );
2830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2831 vos_mem_free(pWdaParams) ;
2832 endScanParams->status = eSIR_FAILURE ;
2833 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002835 return CONVERT_WDI2VOS_STATUS(status) ;
2836}
Jeff Johnson295189b2012-06-20 16:38:30 -07002837/*
2838 * FUNCTION: WDA_FinishScanReqCallback
2839 * Trigger Finish SCAN callback
2840 */
2841void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2842{
2843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2844 tWDA_CbContext *pWDA;
2845 tFinishScanParams *finishScanParam;
2846 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002848 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002849 if(NULL == pWdaParams)
2850 {
2851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002852 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 VOS_ASSERT(0) ;
2854 return ;
2855 }
2856
2857 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2858 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 if(NULL == finishScanParam)
2860 {
2861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002862 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2865 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002866 return ;
2867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2869 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002870 /*
2871 * Now Resume TX, if we reached here means, TX is already suspended, we
2872 * have to resume it unconditionaly
2873 */
2874 status = WDA_ResumeDataTx(pWDA) ;
2875
2876 if(VOS_STATUS_SUCCESS != status)
2877 {
2878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002879 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002880 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002881 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002882 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2883 return ;
2884}
Jeff Johnson295189b2012-06-20 16:38:30 -07002885/*
2886 * FUNCTION: WDA_ProcessFinshScanReq
2887 * Trigger Finish SCAN in WDI
2888 */
2889VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2890 tFinishScanParams *finishScanParams)
2891{
2892 WDI_Status status = WDI_STATUS_SUCCESS;
2893 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2894 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2895 sizeof(WDI_FinishScanReqParamsType)) ;
2896 tWDA_ReqParams *pWdaParams ;
2897 tANI_U8 i = 0;
2898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002899 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 if(NULL == wdiFinishScanParams)
2901 {
2902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 VOS_ASSERT(0);
2905 return VOS_STATUS_E_NOMEM;
2906 }
2907 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2908 if(NULL == pWdaParams)
2909 {
2910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002911 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 VOS_ASSERT(0);
2913 vos_mem_free(wdiFinishScanParams);
2914 return VOS_STATUS_E_NOMEM;
2915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 /* Copy init Scan params to WDI structure */
2917 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2918 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2919 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2921 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2922 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2923 finishScanParams->frameLength ;
2924 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2925 finishScanParams->currentOperChannel ;
2926 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2927 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2928 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2930 {
2931 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2932 finishScanParams->scanEntry.bssIdx[i] ;
2933 }
2934
2935
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 /* if Frame length, copy macMgmtHdr ro WDI structure */
2937 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2938 {
2939 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2940 &finishScanParams->macMgmtHdr,
2941 sizeof(WDI_MacMgmtHdr)) ;
2942 }
2943 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 /* Store Init Req pointer, as this will be used for response */
2945 /* store Params pass it to WDI */
2946 pWdaParams->pWdaContext = pWDA;
2947 pWdaParams->wdaMsgParam = finishScanParams;
2948 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 /* call DAL API to pass init scan request to DAL */
2950 status = WDI_FinishScanReq(wdiFinishScanParams,
2951 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002952
Jeff Johnson295189b2012-06-20 16:38:30 -07002953
2954 /*
2955 * WDI API returns failure..
2956 */
2957 if(IS_WDI_STATUS_FAILURE( status))
2958 {
2959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2960 "Failure in Finish Scan WDI API, free all the memory " );
2961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2962 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 finishScanParams->status = eSIR_FAILURE ;
2964 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 return CONVERT_WDI2VOS_STATUS(status) ;
2967}
Jeff Johnson295189b2012-06-20 16:38:30 -07002968/*---------------------------------------------------------------------
2969 * ASSOC API's
2970 *---------------------------------------------------------------------
2971 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002972/*
2973 * FUNCTION: WDA_JoinReqCallback
2974 * Trigger Init SCAN callback
2975 */
2976void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2977{
2978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2979 tWDA_CbContext *pWDA;
2980 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002982 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 if(NULL == pWdaParams)
2984 {
2985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002986 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 VOS_ASSERT(0) ;
2988 return ;
2989 }
2990 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2991 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2993 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 /* reset macBSSID */
2995 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 /* reset macSTASelf */
2997 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002998 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003000 return ;
3001}
Jeff Johnson295189b2012-06-20 16:38:30 -07003002/*
3003 * FUNCTION: WDA_ProcessJoinReq
3004 * Trigger Join REQ in WDI
3005 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003006VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3007 tSwitchChannelParams* joinReqParam)
3008{
3009 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 WDI_JoinReqParamsType *wdiJoinReqParam =
3011 (WDI_JoinReqParamsType *)vos_mem_malloc(
3012 sizeof(WDI_JoinReqParamsType)) ;
3013 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003015 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 if(NULL == wdiJoinReqParam)
3017 {
3018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003021 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 return VOS_STATUS_E_NOMEM;
3023 }
3024 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3025 if(NULL == pWdaParams)
3026 {
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 VOS_ASSERT(0);
3030 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003031 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 return VOS_STATUS_E_NOMEM;
3033 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003034
3035 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3036 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3037 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3038 {
3039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3040 "%s: received join request when BSSID or self-STA is NULL "
3041 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003042 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003043 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3044 VOS_ASSERT(0);
3045 vos_mem_free(wdiJoinReqParam);
3046 vos_mem_free(pWdaParams);
3047 joinReqParam->status = eSIR_FAILURE ;
3048 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3049 return VOS_STATUS_E_INVAL;
3050 }
3051
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 /* copy the BSSID for pWDA */
3053 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3054 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3056 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3058 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003059#ifdef WLAN_FEATURE_VOWIFI
3060 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3061 joinReqParam->maxTxPower ;
3062#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3064 joinReqParam->localPowerConstraint ;
3065#endif
3066 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3067 joinReqParam->secondaryChannelOffset ;
3068 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3069
3070 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003071 /* Store Init Req pointer, as this will be used for response */
3072 /* store Params pass it to WDI */
3073 pWdaParams->pWdaContext = pWDA;
3074 pWdaParams->wdaMsgParam = joinReqParam;
3075 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 status = WDI_JoinReq(wdiJoinReqParam,
3077 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 if(IS_WDI_STATUS_FAILURE(status))
3079 {
3080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3081 "Failure in Join WDI API, free all the memory " );
3082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3083 vos_mem_free(pWdaParams) ;
3084 joinReqParam->status = eSIR_FAILURE ;
3085 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003087 return CONVERT_WDI2VOS_STATUS(status) ;
3088}
Jeff Johnson295189b2012-06-20 16:38:30 -07003089/*
3090 * FUNCTION: WDA_SwitchChannelReqCallback
3091 * send Switch channel RSP back to PE
3092 */
3093void WDA_SwitchChannelReqCallback(
3094 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3095{
3096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3097 tWDA_CbContext *pWDA;
3098 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003100 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 if(NULL == pWdaParams)
3102 {
3103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003104 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 VOS_ASSERT(0) ;
3106 return ;
3107 }
3108 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3109 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3110
3111#ifdef WLAN_FEATURE_VOWIFI
3112 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3113#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3115 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003117 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 return ;
3120}
Jeff Johnson295189b2012-06-20 16:38:30 -07003121/*
3122 * FUNCTION: WDA_ProcessChannelSwitchReq
3123 * Request to WDI to switch channel REQ params.
3124 */
3125VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3126 tSwitchChannelParams *pSwitchChanParams)
3127{
3128 WDI_Status status = WDI_STATUS_SUCCESS ;
3129 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3130 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3131 sizeof(WDI_SwitchChReqParamsType)) ;
3132 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003134 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003135 if(NULL == wdiSwitchChanParam)
3136 {
3137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003138 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 VOS_ASSERT(0);
3140 return VOS_STATUS_E_NOMEM;
3141 }
3142 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3143 if(NULL == pWdaParams)
3144 {
3145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 VOS_ASSERT(0);
3148 vos_mem_free(wdiSwitchChanParam);
3149 return VOS_STATUS_E_NOMEM;
3150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3152#ifndef WLAN_FEATURE_VOWIFI
3153 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3154 pSwitchChanParams->localPowerConstraint;
3155#endif
3156 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3157 pSwitchChanParams->secondaryChannelOffset;
3158 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003159 /* Store req pointer, as this will be used for response */
3160 /* store Params pass it to WDI */
3161 pWdaParams->pWdaContext = pWDA;
3162 pWdaParams->wdaMsgParam = pSwitchChanParams;
3163 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003164#ifdef WLAN_FEATURE_VOWIFI
3165 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3166 = pSwitchChanParams->maxTxPower;
3167 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3168 pSwitchChanParams ->selfStaMacAddr,
3169 sizeof(tSirMacAddr));
3170#endif
3171 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3172 pSwitchChanParams->bssId,
3173 sizeof(tSirMacAddr));
3174
3175 status = WDI_SwitchChReq(wdiSwitchChanParam,
3176 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 if(IS_WDI_STATUS_FAILURE(status))
3178 {
3179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3180 "Failure in process channel switch Req WDI API, free all the memory " );
3181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3182 vos_mem_free(pWdaParams) ;
3183 pSwitchChanParams->status = eSIR_FAILURE ;
3184 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 return CONVERT_WDI2VOS_STATUS(status) ;
3187}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003188
3189/*
3190 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3191 * send Switch channel RSP back to PE
3192 */
3193void WDA_SwitchChannelReqCallback_V1(
3194 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3195 void* pUserData)
3196{
3197 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3198 tWDA_CbContext *pWDA;
3199 tSwitchChannelParams *pSwitchChanParams;
3200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3201 "<------ %s " ,__func__);
3202
3203 if (NULL == pWdaParams)
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3206 "%s: pWdaParams received NULL", __func__);
3207 VOS_ASSERT(0);
3208 return ;
3209 }
3210 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3211 pSwitchChanParams =
3212 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3213 pSwitchChanParams->channelSwitchSrc =
3214 wdiSwitchChanRsp->channelSwitchSrc;
3215#ifdef WLAN_FEATURE_VOWIFI
3216 pSwitchChanParams->txMgmtPower =
3217 wdiSwitchChanRsp->ucTxMgmtPower;
3218#endif
3219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3220 vos_mem_free(pWdaParams);
3221 pSwitchChanParams->status =
3222 wdiSwitchChanRsp->wdiStatus ;
3223 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3224 (void *)pSwitchChanParams , 0);
3225 return;
3226}
3227
3228/*
3229 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3230 * Request to WDI to switch channel REQ params.
3231 */
3232VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3233 tSwitchChannelParams *pSwitchChanParams)
3234{
3235 WDI_Status status = WDI_STATUS_SUCCESS ;
3236 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3237 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3238 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3239 tWDA_ReqParams *pWdaParams ;
3240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3241 "------> %s " ,__func__);
3242 if (NULL == wdiSwitchChanParam)
3243 {
3244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3245 "%s: VOS MEM Alloc Failure", __func__);
3246 VOS_ASSERT(0);
3247 return VOS_STATUS_E_NOMEM;
3248 }
3249 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3250 if (NULL == pWdaParams)
3251 {
3252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3253 "%s: VOS MEM Alloc Failure", __func__);
3254 VOS_ASSERT(0);
3255 vos_mem_free(wdiSwitchChanParam);
3256 return VOS_STATUS_E_NOMEM;
3257 }
3258 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3259 pSwitchChanParams->channelSwitchSrc;
3260
3261 wdiSwitchChanParam->wdiChInfo.ucChannel =
3262 pSwitchChanParams->channelNumber;
3263#ifndef WLAN_FEATURE_VOWIFI
3264 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3265 pSwitchChanParams->localPowerConstraint;
3266#endif
3267 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3268 pSwitchChanParams->secondaryChannelOffset;
3269 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3270 /* Store req pointer, as this will be used for response */
3271 /* store Params pass it to WDI */
3272 pWdaParams->pWdaContext = pWDA;
3273 pWdaParams->wdaMsgParam = pSwitchChanParams;
3274 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3275#ifdef WLAN_FEATURE_VOWIFI
3276 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3277 pSwitchChanParams->maxTxPower;
3278 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3279 pSwitchChanParams ->selfStaMacAddr,
3280 sizeof(tSirMacAddr));
3281#endif
3282 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3283 pSwitchChanParams->bssId,
3284 sizeof(tSirMacAddr));
3285
3286 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3287 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3288 pWdaParams);
3289 if (IS_WDI_STATUS_FAILURE(status))
3290 {
3291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3292 "Failure in process channel switch Req WDI "
3293 "API, free all the memory " );
3294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3295 vos_mem_free(pWdaParams) ;
3296 pSwitchChanParams->status = eSIR_FAILURE ;
3297 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3298 (void *)pSwitchChanParams, 0) ;
3299 }
3300 return CONVERT_WDI2VOS_STATUS(status) ;
3301}
3302
Jeff Johnson295189b2012-06-20 16:38:30 -07003303/*
3304 * FUNCTION: WDA_ConfigBssReqCallback
3305 * config BSS Req Callback, called by WDI
3306 */
3307void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3308 ,void* pUserData)
3309{
3310 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3311 tWDA_CbContext *pWDA;
3312 tAddBssParams *configBssReqParam;
3313 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 if(NULL == pWdaParams)
3317 {
3318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003319 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 VOS_ASSERT(0) ;
3321 return ;
3322 }
3323 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3324 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3325 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003327 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3329 {
3330 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3331 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3333 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3334 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3335
3336 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3337 {
3338 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3339 {
3340 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3341 staConfigBssParam->staType = STA_ENTRY_BSSID;
3342 }
3343 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3344 (staConfigBssParam->staType == STA_ENTRY_SELF))
3345 {
3346 /* This is the 1st add BSS Req for the BTAMP STA */
3347 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3348 staConfigBssParam->staType = STA_ENTRY_BSSID;
3349 }
3350 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3351 (staConfigBssParam->staType == STA_ENTRY_PEER))
3352 {
3353 /* This is the 2nd ADD BSS Request that is sent
3354 * on the BTAMP STA side. The Sta type is
3355 * set to STA_ENTRY_PEER here.*/
3356 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3357 }
3358 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3359 (staConfigBssParam->staType == STA_ENTRY_SELF))
3360 {
3361 /* statype is already set by PE.
3362 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3363 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3364 staConfigBssParam->staType = STA_ENTRY_BSSID;
3365 }
3366 else
3367 {
3368 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3369 staConfigBssParam->staType = STA_ENTRY_PEER;
3370 }
3371 }
3372 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3373 {
3374 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3375 staConfigBssParam->staType = STA_ENTRY_SELF;
3376 }
3377 else
3378 {
3379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3380 "Invalid operation mode specified");
3381 VOS_ASSERT(0);
3382 }
3383
3384 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3389 sizeof(tSirMacAddr));
3390 staConfigBssParam->txChannelWidthSet =
3391 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003392 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3393 staConfigBssParam->htCapable)
3394 {
3395 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3396 wdiConfigBssRsp->ucBSSIdx;
3397 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3398 WDA_VALID_STA_INDEX ;
3399 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3401 wdiConfigBssRsp->ucBSSIdx,
3402 wdiConfigBssRsp->ucSTAIdx))
3403 {
3404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003405 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 VOS_ASSERT(0) ;
3407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3409 {
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003411 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 VOS_ASSERT(0) ;
3413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003414#ifdef WLAN_FEATURE_VOWIFI
3415 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3416#endif
3417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3419 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 return ;
3422}
Jeff Johnson295189b2012-06-20 16:38:30 -07003423/*
3424 * FUNCTION: WDA_UpdateEdcaParamsForAC
3425 * Update WDI EDCA params with PE edca params
3426 */
3427void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3428 WDI_EdcaParamRecord *wdiEdcaParam,
3429 tSirMacEdcaParamRecord *macEdcaParam)
3430{
3431 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3432 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3433 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3434 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3435 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3436 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3437}
Jeff Johnson295189b2012-06-20 16:38:30 -07003438/*
3439 * FUNCTION: WDA_ProcessConfigBssReq
3440 * Configure BSS before starting Assoc with AP
3441 */
3442VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3443 tAddBssParams* configBssReqParam)
3444{
3445 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303446 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003447 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003449 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303450 if (NULL == configBssReqParam)
3451 {
3452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3453 "%s: configBssReqParam is NULL", __func__);
3454 return VOS_STATUS_E_INVAL;
3455 }
3456
3457 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3458 sizeof(WDI_ConfigBSSReqParamsType)) ;
3459
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 if(NULL == wdiConfigBssReqParam)
3461 {
3462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003463 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 VOS_ASSERT(0);
3465 return VOS_STATUS_E_NOMEM;
3466 }
3467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3468 if(NULL == pWdaParams)
3469 {
3470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 VOS_ASSERT(0);
3473 vos_mem_free(wdiConfigBssReqParam);
3474 return VOS_STATUS_E_NOMEM;
3475 }
Kiran4a17ebe2013-01-31 10:43:43 -08003476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3477 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003479 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3480 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 /* Store Init Req pointer, as this will be used for response */
3482 /* store Params pass it to WDI */
3483 pWdaParams->pWdaContext = pWDA;
3484 pWdaParams->wdaMsgParam = configBssReqParam;
3485 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3487 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 if(IS_WDI_STATUS_FAILURE(status))
3489 {
3490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3491 "Failure in Config BSS WDI API, free all the memory " );
3492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3493 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 return CONVERT_WDI2VOS_STATUS(status) ;
3498}
Jeff Johnson295189b2012-06-20 16:38:30 -07003499#ifdef ENABLE_HAL_COMBINED_MESSAGES
3500/*
3501 * FUNCTION: WDA_PostAssocReqCallback
3502 * Post ASSOC req callback, send RSP back to PE
3503 */
3504void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3505 void* pUserData)
3506{
3507 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3508 tPostAssocParams *postAssocReqParam =
3509 (tPostAssocParams *)pWDA->wdaMsgParam ;
3510 /*STA context within the BSS Params*/
3511 tAddStaParams *staPostAssocParam =
3512 &postAssocReqParam->addBssParams.staContext ;
3513 /*STA Params for self STA*/
3514 tAddStaParams *selfStaPostAssocParam =
3515 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003517 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003518 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003519 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3521 {
3522 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3523 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3524 sizeof(tSirMacAddr)) ;
3525 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3526 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3527 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3529 }
3530 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3531 pWDA->wdaWdiApiMsgParam = NULL;
3532 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003533 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 return ;
3535}
Jeff Johnson295189b2012-06-20 16:38:30 -07003536/*
3537 * FUNCTION: WDA_ProcessPostAssocReq
3538 * Trigger POST ASSOC processing in WDI
3539 */
3540VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3541 tPostAssocParams *postAssocReqParam)
3542{
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 WDI_Status status = WDI_STATUS_SUCCESS ;
3544
3545 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3546 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3547 sizeof(WDI_PostAssocReqParamsType)) ;
3548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003549 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003550
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 if(NULL == wdiPostAssocReqParam)
3552 {
3553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 VOS_ASSERT(0);
3556 return VOS_STATUS_E_NOMEM;
3557 }
3558
3559 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3560 {
3561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003562 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 VOS_ASSERT(0);
3564 return VOS_STATUS_E_FAILURE;
3565 }
3566
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 /* update BSS params into WDI structure */
3568 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3569 &postAssocReqParam->addBssParams) ;
3570 /* update STA params into WDI structure */
3571 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3572 &postAssocReqParam->addStaParams) ;
3573
3574 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3575 postAssocReqParam->addBssParams.highPerformance;
3576 WDA_UpdateEdcaParamsForAC(pWDA,
3577 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3578 &postAssocReqParam->addBssParams.acbe);
3579 WDA_UpdateEdcaParamsForAC(pWDA,
3580 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3581 &postAssocReqParam->addBssParams.acbk);
3582 WDA_UpdateEdcaParamsForAC(pWDA,
3583 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3584 &postAssocReqParam->addBssParams.acvi);
3585 WDA_UpdateEdcaParamsForAC(pWDA,
3586 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3587 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 /* Store Init Req pointer, as this will be used for response */
3589 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 /* store Params pass it to WDI */
3591 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3593 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003594 if(IS_WDI_STATUS_FAILURE(status))
3595 {
3596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3597 "Failure in Post Assoc WDI API, free all the memory " );
3598 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3599 pWDA->wdaWdiApiMsgParam = NULL;
3600 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003604 return CONVERT_WDI2VOS_STATUS(status) ;
3605}
3606#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003607/*
3608 * FUNCTION: WDA_AddStaReqCallback
3609 * ADD STA req callback, send RSP back to PE
3610 */
3611void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3612 void* pUserData)
3613{
3614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3615 tWDA_CbContext *pWDA;
3616 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003618 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 if(NULL == pWdaParams)
3620 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003622 VOS_ASSERT(0) ;
3623 return ;
3624 }
3625 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3626 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003628 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3630 {
3631 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3632 /*TODO: UMAC structure doesn't have these fields*/
3633 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3634 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3635 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3636 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3637 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3638 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003639#ifdef FEATURE_WLAN_TDLS
3640 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3641 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3642#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003644#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003645 {
3646 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3647 wdiConfigStaRsp->ucBssIdx;
3648 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3649 WDA_VALID_STA_INDEX ;
3650 }
3651 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3652 {
3653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003654 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 VOS_ASSERT(0) ;
3656 return ;
3657 }
3658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3660 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 return ;
3663}
Jeff Johnson295189b2012-06-20 16:38:30 -07003664/*
3665 * FUNCTION: WDA_ConfigStaReq
3666 * Trigger Config STA processing in WDI
3667 */
3668VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3669 tAddStaParams *addStaReqParam)
3670{
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3673 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3674 sizeof(WDI_ConfigSTAReqParamsType)) ;
3675 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003677 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003678 if(NULL == wdiConfigStaReqParam)
3679 {
3680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003681 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 VOS_ASSERT(0);
3683 return VOS_STATUS_E_NOMEM;
3684 }
3685 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3686 if(NULL == pWdaParams)
3687 {
3688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003689 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 VOS_ASSERT(0);
3691 vos_mem_free(wdiConfigStaReqParam);
3692 return VOS_STATUS_E_NOMEM;
3693 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003694 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 /* update STA params into WDI structure */
3696 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3697 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003698 /* Store Init Req pointer, as this will be used for response */
3699 /* store Params pass it to WDI */
3700 pWdaParams->pWdaContext = pWDA;
3701 pWdaParams->wdaMsgParam = addStaReqParam;
3702 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003703 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3704 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 if(IS_WDI_STATUS_FAILURE(status))
3706 {
3707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3708 "Failure in Config STA WDI API, free all the memory " );
3709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3710 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 return CONVERT_WDI2VOS_STATUS(status) ;
3715}
Jeff Johnson295189b2012-06-20 16:38:30 -07003716/*
3717 * FUNCTION: WDA_DelBSSReqCallback
3718 * Dens DEL BSS RSP back to PE
3719 */
3720void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3721 void* pUserData)
3722{
3723 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3724 tWDA_CbContext *pWDA;
3725 tDeleteBssParams *delBssReqParam;
3726 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003728 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003729 if(NULL == pWdaParams)
3730 {
3731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003732 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003733 VOS_ASSERT(0) ;
3734 return ;
3735 }
3736 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3737 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003738 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003739 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3740 {
3741 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3742 sizeof(tSirMacAddr)) ;
3743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003744 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3745 {
3746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003747 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003748 VOS_ASSERT(0) ;
3749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3751 {
3752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003753 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 VOS_ASSERT(0) ;
3755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3757 {
3758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003759 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 VOS_ASSERT(0) ;
3761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3763 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 /* reset the the system role*/
3765 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3766
3767 /* Reset the BA related information */
3768 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3769 {
3770 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3771 {
3772 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3773 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3774 /* Reset framesTxed counters here */
3775 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3776 {
3777 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3778 }
3779 }
3780 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003781 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 return ;
3783}
3784
Jeff Johnson295189b2012-06-20 16:38:30 -07003785/*
3786 * FUNCTION: WDA_ProcessDelBssReq
3787 * Init DEL BSS req with WDI
3788 */
3789VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3790 tDeleteBssParams *delBssParam)
3791{
3792 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3794 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3795 sizeof(WDI_DelBSSReqParamsType)) ;
3796 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003798 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003799 if(NULL == wdiDelBssReqParam)
3800 {
3801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003803 VOS_ASSERT(0);
3804 return VOS_STATUS_E_NOMEM;
3805 }
3806 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3807 if(NULL == pWdaParams)
3808 {
3809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003810 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 VOS_ASSERT(0);
3812 vos_mem_free(wdiDelBssReqParam);
3813 return VOS_STATUS_E_NOMEM;
3814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003815 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3816 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3817
3818 /* Store Init Req pointer, as this will be used for response */
3819 /* store Params pass it to WDI */
3820 pWdaParams->pWdaContext = pWDA;
3821 pWdaParams->wdaMsgParam = delBssParam;
3822 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 status = WDI_DelBSSReq(wdiDelBssReqParam,
3824 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003825 if(IS_WDI_STATUS_FAILURE(status))
3826 {
3827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3828 "Failure in Del BSS WDI API, free all the memory " );
3829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3830 vos_mem_free(pWdaParams) ;
3831 delBssParam->status = eSIR_FAILURE ;
3832 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3833 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003834 return CONVERT_WDI2VOS_STATUS(status) ;
3835}
Jeff Johnson295189b2012-06-20 16:38:30 -07003836/*
3837 * FUNCTION: WDA_DelSTAReqCallback
3838 * Dens DEL STA RSP back to PE
3839 */
3840void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3841 void* pUserData)
3842{
3843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3844 tWDA_CbContext *pWDA;
3845 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003847 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003848 if(NULL == pWdaParams)
3849 {
3850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003851 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 VOS_ASSERT(0) ;
3853 return ;
3854 }
3855 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3856 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003857 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3859 {
3860 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3861 {
3862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003863 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003864 VOS_ASSERT(0) ;
3865 }
3866 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3867 }
3868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3869 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 /*Reset the BA information corresponding to this STAIdx */
3871 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3872 WDA_INVALID_STA_INDEX;
3873 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3874
3875 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003876 return ;
3877}
Jeff Johnson295189b2012-06-20 16:38:30 -07003878/*
3879 * FUNCTION: WDA_ProcessDelStaReq
3880 * Init DEL STA req with WDI
3881 */
3882VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3883 tDeleteStaParams *delStaParam)
3884{
3885 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3887 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3888 sizeof(WDI_DelSTAReqParamsType)) ;
3889 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003891 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 if(NULL == wdiDelStaReqParam)
3893 {
3894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003896 VOS_ASSERT(0);
3897 return VOS_STATUS_E_NOMEM;
3898 }
3899 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3900 if(NULL == pWdaParams)
3901 {
3902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 VOS_ASSERT(0);
3905 vos_mem_free(wdiDelStaReqParam);
3906 return VOS_STATUS_E_NOMEM;
3907 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003908 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3909 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 /* Store Init Req pointer, as this will be used for response */
3911 /* store Params pass it to WDI */
3912 pWdaParams->pWdaContext = pWDA;
3913 pWdaParams->wdaMsgParam = delStaParam;
3914 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003915 status = WDI_DelSTAReq(wdiDelStaReqParam,
3916 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003917 if(IS_WDI_STATUS_FAILURE(status))
3918 {
3919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3920 "Failure in Del STA WDI API, free all the memory status = %d",
3921 status );
3922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3923 vos_mem_free(pWdaParams) ;
3924 delStaParam->status = eSIR_FAILURE ;
3925 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 return CONVERT_WDI2VOS_STATUS(status) ;
3928}
Jeff Johnson295189b2012-06-20 16:38:30 -07003929void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3930{
3931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3932 tWDA_CbContext *pWDA;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303933 tAddStaSelfParams *pAddStaSelfRsp = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003935 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 if(NULL == pWdaParams)
3937 {
3938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003939 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 VOS_ASSERT(0) ;
3941 return ;
3942 }
3943 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3944 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3946 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3948 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3949 pwdiAddSTASelfRsp->macSelfSta,
3950 sizeof(pAddStaSelfRsp->selfMacAddr));
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303951 pWDA->wdaAddSelfStaParams.ucSTASelfIdx = pwdiAddSTASelfRsp->ucSTASelfIdx;
3952 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaRspCounter++;
3953 if (pAddStaSelfRsp->status == eSIR_FAILURE)
3954 {
3955 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_RSP_WDI_FAIL;
3956 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
3957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003958 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003959 return ;
3960}
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303961
Jeff Johnson295189b2012-06-20 16:38:30 -07003962/*
3963 * FUNCTION: WDA_ProcessAddStaSelfReq
3964 *
3965 */
3966VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3967{
3968 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003969 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3971 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3972 sizeof(WDI_AddSTASelfReqParamsType)) ;
3973 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003975 "------> %s " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303976 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaReqCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07003977 if( NULL == wdiAddStaSelfReq )
3978 {
3979 VOS_ASSERT( 0 );
3980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003981 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303982 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
3983 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07003984 return( VOS_STATUS_E_NOMEM );
3985 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003986 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 if( NULL == pWdaParams )
3988 {
3989 VOS_ASSERT( 0 );
3990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003991 "%s: Unable to allocate memory " ,__func__);
Siddharth Bhal85f99b12014-05-09 08:09:07 +05303992 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_NO_MEM;
3993 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07003994 vos_mem_free(wdiAddStaSelfReq) ;
3995 return( VOS_STATUS_E_NOMEM );
3996 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003998 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003999 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 /* Store Init Req pointer, as this will be used for response */
4001 /* store Params pass it to WDI */
4002 pWdaParams->pWdaContext = pWDA;
4003 pWdaParams->wdaMsgParam = pAddStaSelfReq;
4004 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07004005 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004006
Jeff Johnson43971f52012-07-17 12:26:56 -07004007 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004008 {
4009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4010 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07004011 wstatus );
4012 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4014 vos_mem_free(pWdaParams) ;
Siddharth Bhal85f99b12014-05-09 08:09:07 +05304015 pWDA->wdaAddSelfStaParams.wdaAddSelfStaFailReason = WDA_ADDSTA_REQ_WDI_FAIL;
4016 pWDA->wdaAddSelfStaParams.wdiAddStaSelfStaFailCounter++;
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 pAddStaSelfReq->status = eSIR_FAILURE ;
4018 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4019 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004020 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004021}
Jeff Johnson295189b2012-06-20 16:38:30 -07004022/*
4023 * FUNCTION: WDA_DelSTASelfRespCallback
4024 *
4025 */
4026void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4027 wdiDelStaSelfRspParams , void* pUserData)
4028{
4029 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4030 tWDA_CbContext *pWDA;
4031 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004033 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 if (NULL == pWdaParams)
4035 {
4036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004037 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 VOS_ASSERT(0);
4039 return;
4040 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004041 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4042 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004044 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004045
4046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4047 vos_mem_free(pWdaParams) ;
4048
4049 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004050 return ;
4051}
Jeff Johnson295189b2012-06-20 16:38:30 -07004052/*
4053 * FUNCTION: WDA_DelSTASelfReqCallback
4054 *
4055 */
4056void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4057 void* pUserData)
4058{
4059 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4060 tWDA_CbContext *pWDA;
4061 tDelStaSelfParams *delStaSelfParams;
4062
4063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304064 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004065 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004066
4067 if (NULL == pWdaParams)
4068 {
4069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004070 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 VOS_ASSERT(0);
4072 return;
4073 }
4074
4075 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4076 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4077
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004078 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004079
4080 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4081 {
4082 VOS_ASSERT(0);
4083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4084 vos_mem_free(pWdaParams) ;
4085 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4086 }
4087
4088 return ;
4089}
4090
4091/*
4092 * FUNCTION: WDA_DelSTASelfReq
4093 * Trigger Config STA processing in WDI
4094 */
4095VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4096 tDelStaSelfParams* pDelStaSelfReqParam)
4097{
4098 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004099 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 tWDA_ReqParams *pWdaParams = NULL;
4101 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4102 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4103 sizeof(WDI_DelSTASelfReqParamsType)) ;
4104
Jeff Johnson295189b2012-06-20 16:38:30 -07004105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004106 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 if( NULL == wdiDelStaSelfReq )
4108 {
4109 VOS_ASSERT( 0 );
4110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004111 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004112 return( VOS_STATUS_E_NOMEM );
4113 }
4114
4115 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4116 if( NULL == pWdaParams )
4117 {
4118 VOS_ASSERT( 0 );
4119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004120 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 vos_mem_free(wdiDelStaSelfReq) ;
4122 return( VOS_STATUS_E_NOMEM );
4123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 pWdaParams->pWdaContext = pWDA;
4125 /* Store param pointer as passed in by caller */
4126 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4127 /* store Params pass it to WDI */
4128 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4130 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4131
4132 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4133 wdiDelStaSelfReq->pUserData = pWdaParams;
4134
Jeff Johnson43971f52012-07-17 12:26:56 -07004135 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4137
Jeff Johnson43971f52012-07-17 12:26:56 -07004138 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004139 {
4140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4141 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4142 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004143 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4145 vos_mem_free(pWdaParams) ;
4146 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4147 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4148 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004149 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004150}
4151
Jeff Johnson295189b2012-06-20 16:38:30 -07004152/*
4153 * FUNCTION: WDA_SendMsg
4154 * Send Message back to PE
4155 */
4156void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4157 void *pBodyptr, tANI_U32 bodyVal)
4158{
4159 tSirMsgQ msg = {0} ;
4160 tANI_U32 status = VOS_STATUS_SUCCESS ;
4161 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 msg.type = msgType;
4163 msg.bodyval = bodyVal;
4164 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 if (VOS_STATUS_SUCCESS != status)
4167 {
4168 if(NULL != pBodyptr)
4169 {
4170 vos_mem_free(pBodyptr);
4171 }
4172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004173 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 VOS_ASSERT(0) ;
4175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004176 return ;
4177}
Jeff Johnson295189b2012-06-20 16:38:30 -07004178/*
4179 * FUNCTION: WDA_UpdateBSSParams
4180 * Translated WDA/PE BSS info into WDI BSS info..
4181 */
4182void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4183 WDI_ConfigBSSReqInfoType *wdiBssParams,
4184 tAddBssParams *wdaBssParams)
4185{
4186 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004187 /* copy bssReq Params to WDI structure */
4188 vos_mem_copy(wdiBssParams->macBSSID,
4189 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4190 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4191 sizeof(tSirMacAddr)) ;
4192 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4193 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4194 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 wdiBssParams->ucShortSlotTimeSupported =
4196 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004197 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4198 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4199 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4200 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4201 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4202
4203 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4204 wdiBssParams->ucTXOPProtectionFullSupport =
4205 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004206 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4207 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4210 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4211 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4212 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4213
Chet Lanctot186b5732013-03-18 10:26:30 -07004214 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4215
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 /* copy SSID into WDI structure */
4217 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4218 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4219 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4221 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004222 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004223#ifdef WLAN_FEATURE_VOWIFI
4224 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4225#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004228#ifdef WLAN_FEATURE_VOWIFI_11R
4229 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004230 if(wdiBssParams->bExtSetStaKeyParamValid)
4231 {
4232 /* copy set STA key params to WDI structure */
4233 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4234 wdaBssParams->extSetStaKeyParam.staIdx;
4235 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4236 wdaBssParams->extSetStaKeyParam.encType;
4237 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4238 wdaBssParams->extSetStaKeyParam.wepType;
4239 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4240 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4242 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004243 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4245 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4246 {
4247 WDA_GetWepKeysFromCfg( pWDA,
4248 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4249 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4250 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4251 }
4252 else
4253 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004254 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4255 keyIndex++)
4256 {
4257 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4258 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4259 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4260 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4261 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4262 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004263 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4264 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4265 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4266 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4267 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4268 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4269 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4270 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4273 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004274 }
4275 }
4276 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4277 }
4278 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4279 {
4280 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4281 sizeof(wdaBssParams->extSetStaKeyParam) );
4282 }
4283#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004284#ifdef WLAN_FEATURE_11AC
4285 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4286 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4287#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004288
4289 return ;
4290}
Jeff Johnson295189b2012-06-20 16:38:30 -07004291/*
4292 * FUNCTION: WDA_UpdateSTAParams
4293 * Translated WDA/PE BSS info into WDI BSS info..
4294 */
4295void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4296 WDI_ConfigStaReqInfoType *wdiStaParams,
4297 tAddStaParams *wdaStaParams)
4298{
4299 tANI_U8 i = 0;
4300 /* Update STA params */
4301 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4302 sizeof(tSirMacAddr)) ;
4303 wdiStaParams->usAssocId = wdaStaParams->assocId;
4304 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004305 wdiStaParams->staIdx = wdaStaParams->staIdx;
4306
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 wdiStaParams->ucShortPreambleSupported =
4308 wdaStaParams->shortPreambleSupported;
4309 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4310 sizeof(tSirMacAddr)) ;
4311 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4312
4313 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4314
4315 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4316 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4317 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4318 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4319 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4320 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4321 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4322
4323 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4324 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004325 wdiStaParams->wdiSupportedRates.opRateMode =
4326 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4328 {
4329 wdiStaParams->wdiSupportedRates.llbRates[i] =
4330 wdaStaParams->supportedRates.llbRates[i];
4331 }
4332 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4333 {
4334 wdiStaParams->wdiSupportedRates.llaRates[i] =
4335 wdaStaParams->supportedRates.llaRates[i];
4336 }
4337 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4338 {
4339 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4340 wdaStaParams->supportedRates.aniLegacyRates[i];
4341 }
4342 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4343 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004344#ifdef WLAN_FEATURE_11AC
4345 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4346 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4347 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4348 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4349#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4351 {
4352 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4353 wdaStaParams->supportedRates.supportedMCSSet[i];
4354 }
4355 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4356 wdaStaParams->supportedRates.rxHighestDataRate;
4357
4358 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4359
4360 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4361
4362 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4363 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4364 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4365
4366 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4367 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4368 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4369 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004370 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004371#ifdef WLAN_FEATURE_11AC
4372 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4373 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004374 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004375#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004376 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4377 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 return ;
4379}
Jeff Johnson295189b2012-06-20 16:38:30 -07004380/*
4381 * -------------------------------------------------------------------------
4382 * CFG update to WDI
4383 * -------------------------------------------------------------------------
4384 */
4385
4386 /*
4387 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4388 * Convert the WNI CFG ID to HAL CFG ID
4389 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004390static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004391{
4392 switch(wniCfgId)
4393 {
4394 case WNI_CFG_STA_ID:
4395 return QWLAN_HAL_CFG_STA_ID;
4396 case WNI_CFG_CURRENT_TX_ANTENNA:
4397 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4398 case WNI_CFG_CURRENT_RX_ANTENNA:
4399 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4400 case WNI_CFG_LOW_GAIN_OVERRIDE:
4401 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4402 case WNI_CFG_POWER_STATE_PER_CHAIN:
4403 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4404 case WNI_CFG_CAL_PERIOD:
4405 return QWLAN_HAL_CFG_CAL_PERIOD;
4406 case WNI_CFG_CAL_CONTROL:
4407 return QWLAN_HAL_CFG_CAL_CONTROL;
4408 case WNI_CFG_PROXIMITY:
4409 return QWLAN_HAL_CFG_PROXIMITY;
4410 case WNI_CFG_NETWORK_DENSITY:
4411 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4412 case WNI_CFG_MAX_MEDIUM_TIME:
4413 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4414 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4415 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4416 case WNI_CFG_RTS_THRESHOLD:
4417 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4418 case WNI_CFG_SHORT_RETRY_LIMIT:
4419 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4420 case WNI_CFG_LONG_RETRY_LIMIT:
4421 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4422 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4423 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4424 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4425 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4426 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4427 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4428 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4429 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4430 case WNI_CFG_FIXED_RATE:
4431 return QWLAN_HAL_CFG_FIXED_RATE;
4432 case WNI_CFG_RETRYRATE_POLICY:
4433 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4434 case WNI_CFG_RETRYRATE_SECONDARY:
4435 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4436 case WNI_CFG_RETRYRATE_TERTIARY:
4437 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4438 case WNI_CFG_FORCE_POLICY_PROTECTION:
4439 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4440 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4441 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4442 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4443 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4444 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4445 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4446 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4447 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4448 case WNI_CFG_MAX_BA_SESSIONS:
4449 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4450 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4451 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4452 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4453 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4454 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4455 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4456 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4457 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4458 case WNI_CFG_STATS_PERIOD:
4459 return QWLAN_HAL_CFG_STATS_PERIOD;
4460 case WNI_CFG_CFP_MAX_DURATION:
4461 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4462#if 0 /*This is not part of CFG*/
4463 case WNI_CFG_FRAME_TRANS_ENABLED:
4464 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4465#endif
4466 case WNI_CFG_DTIM_PERIOD:
4467 return QWLAN_HAL_CFG_DTIM_PERIOD;
4468 case WNI_CFG_EDCA_WME_ACBK:
4469 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4470 case WNI_CFG_EDCA_WME_ACBE:
4471 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4472 case WNI_CFG_EDCA_WME_ACVI:
4473 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4474 case WNI_CFG_EDCA_WME_ACVO:
4475 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4476#if 0
4477 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4478 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4479 case WNI_CFG_TELE_BCN_TRANS_LI:
4480 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4481 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4482 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4483 case WNI_CFG_TELE_BCN_MAX_LI:
4484 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4485 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4486 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4487#endif
4488 case WNI_CFG_ENABLE_CLOSE_LOOP:
4489 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004490 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4491 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 default:
4493 {
4494 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004495 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 wniCfgId);
4497 return VOS_STATUS_E_INVAL;
4498 }
4499 }
4500}
Jeff Johnson295189b2012-06-20 16:38:30 -07004501/*
4502 * FUNCTION: WDA_UpdateCfgCallback
4503 *
4504 */
4505void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4506{
4507 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4508 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4509 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004511 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 /*
4513 * currently there is no response message is expected between PE and
4514 * WDA, Failure return from WDI is a ASSERT condition
4515 */
4516 if(WDI_STATUS_SUCCESS != wdiStatus)
4517 {
4518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004519 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4521 }
4522
4523 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4524 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4525 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 return ;
4527}
Jeff Johnson295189b2012-06-20 16:38:30 -07004528/*
4529 * FUNCTION: WDA_UpdateCfg
4530 *
4531 */
4532VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4533{
4534
4535 WDI_Status status = WDI_STATUS_SUCCESS ;
4536 tANI_U32 val =0;
4537 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4538 tHalCfg *configData;
4539 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4540 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004542 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004543 if (NULL == pMac )
4544 {
4545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004546 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004547 return VOS_STATUS_E_FAILURE;
4548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 if(WDA_START_STATE != pWDA->wdaState)
4550 {
4551 return VOS_STATUS_E_FAILURE;
4552 }
4553
4554 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4555 {
4556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004557 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 VOS_ASSERT(0);
4559 return VOS_STATUS_E_FAILURE;
4560 }
4561
4562 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4563 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 if(NULL == wdiCfgReqParam)
4565 {
4566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004567 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004568 VOS_ASSERT(0);
4569 return VOS_STATUS_E_NOMEM;
4570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004571 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4572 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 if(NULL == wdiCfgReqParam->pConfigBuffer)
4574 {
4575 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004576 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004577 vos_mem_free(wdiCfgReqParam);
4578 VOS_ASSERT(0);
4579 return VOS_STATUS_E_NOMEM;
4580 }
4581
4582 /*convert the WNI CFG Id to HAL CFG Id*/
4583 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4584 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4585
4586 /*TODO: revisit this for handling string parameters */
4587 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4588 &val) != eSIR_SUCCESS)
4589 {
4590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004591 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4593 vos_mem_free(wdiCfgReqParam);
4594 return eSIR_FAILURE;
4595 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4597 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4598 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4599 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4600 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4601
4602 /* store Params pass it to WDI */
4603 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004604#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4605 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4606 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004607 if(IS_WDI_STATUS_FAILURE(status))
4608 {
4609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4610 "Failure in Update CFG WDI API, free all the memory " );
4611 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4612 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4613 pWDA->wdaWdiCfgApiMsgParam = NULL;
4614 /* Failure is not expected */
4615 VOS_ASSERT(0) ;
4616 }
4617#else
4618 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4619 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4620 pWDA->wdaWdiCfgApiMsgParam = NULL;
4621#endif
4622 return CONVERT_WDI2VOS_STATUS(status) ;
4623}
4624
Jeff Johnson295189b2012-06-20 16:38:30 -07004625VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4626 v_U8_t *pDefaultKeyId,
4627 v_U8_t *pNumKeys,
4628 WDI_KeysType *pWdiKeys )
4629{
4630 v_U32_t i, j, defKeyId = 0;
4631 v_U32_t val = SIR_MAC_KEY_LENGTH;
4632 VOS_STATUS status = WDI_STATUS_SUCCESS;
4633 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 if (NULL == pMac )
4635 {
4636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004637 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 return VOS_STATUS_E_FAILURE;
4639 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004640 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4641 &defKeyId ))
4642 {
4643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4644 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4645 }
4646
4647 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 /* Need to extract ALL of the configured WEP Keys */
4649 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4650 {
4651 val = SIR_MAC_KEY_LENGTH;
4652 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4653 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4654 pWdiKeys[j].key,
4655 &val ))
4656 {
4657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004658 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 }
4660 else
4661 {
4662 pWdiKeys[j].keyId = (tANI_U8) i;
4663 /*
4664 * Actually, a DC (Don't Care) because
4665 * this is determined (and set) by PE/MLME
4666 */
4667 pWdiKeys[j].unicast = 0;
4668 /*
4669 * Another DC (Don't Care)
4670 */
4671 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4672 /* Another DC (Don't Care). Unused for WEP */
4673 pWdiKeys[j].paeRole = 0;
4674 /* Determined from wlan_cfgGetStr() above.*/
4675 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 j++;
4677 *pNumKeys = (tANI_U8) j;
4678 }
4679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 return status;
4681}
Jeff Johnson295189b2012-06-20 16:38:30 -07004682/*
4683 * FUNCTION: WDA_SetBssKeyReqCallback
4684 * send SET BSS key RSP back to PE
4685 */
4686void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4687{
4688 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4689 tWDA_CbContext *pWDA;
4690 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004692 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004693 if(NULL == pWdaParams)
4694 {
4695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004696 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004697 VOS_ASSERT(0) ;
4698 return ;
4699 }
4700 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4701 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4703 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004704 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 return ;
4707}
Jeff Johnson295189b2012-06-20 16:38:30 -07004708/*
4709 * FUNCTION: WDA_ProcessSetBssKeyReq
4710 * Request to WDI for programming the BSS key( key for
4711 * broadcast/multicast frames Encryption)
4712 */
4713VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4714 tSetBssKeyParams *setBssKeyParams )
4715{
4716 WDI_Status status = WDI_STATUS_SUCCESS ;
4717 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4718 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4719 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4720 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004723 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004724 if(NULL == wdiSetBssKeyParam)
4725 {
4726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004727 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 VOS_ASSERT(0);
4729 return VOS_STATUS_E_NOMEM;
4730 }
4731 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4732 if(NULL == pWdaParams)
4733 {
4734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004735 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004736 VOS_ASSERT(0);
4737 vos_mem_free(wdiSetBssKeyParam);
4738 return VOS_STATUS_E_NOMEM;
4739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 /* copy set BSS params to WDI structure */
4742 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4743 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4744 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004745 if(setBssKeyParams->encType != eSIR_ED_NONE)
4746 {
4747 if( setBssKeyParams->numKeys == 0 &&
4748 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4749 setBssKeyParams->encType == eSIR_ED_WEP104))
4750 {
4751 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004752 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4753 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4754 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4755 }
4756 else
4757 {
4758 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4759 {
4760 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4761 setBssKeyParams->key[keyIndex].keyId;
4762 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4763 setBssKeyParams->key[keyIndex].unicast;
4764 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4765 setBssKeyParams->key[keyIndex].keyDirection;
4766 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4767 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4768 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4769 setBssKeyParams->key[keyIndex].paeRole;
4770 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4771 setBssKeyParams->key[keyIndex].keyLength;
4772 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4773 setBssKeyParams->key[keyIndex].key,
4774 SIR_MAC_MAX_KEY_LENGTH);
4775 }
4776 }
4777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004778 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4779 setBssKeyParams->singleTidRc;
4780 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004781 /* Store set key pointer, as this will be used for response */
4782 /* store Params pass it to WDI */
4783 pWdaParams->pWdaContext = pWDA;
4784 pWdaParams->wdaMsgParam = setBssKeyParams;
4785 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4787 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4788
4789 if(IS_WDI_STATUS_FAILURE(status))
4790 {
4791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4792 "Failure in Set BSS Key Req WDI API, free all the memory " );
4793 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4794 vos_mem_free(pWdaParams) ;
4795 setBssKeyParams->status = eSIR_FAILURE ;
4796 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 return CONVERT_WDI2VOS_STATUS(status) ;
4799}
Jeff Johnson295189b2012-06-20 16:38:30 -07004800/*
4801 * FUNCTION: WDA_RemoveBssKeyReqCallback
4802 * send SET BSS key RSP back to PE
4803 */
4804void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4805{
4806 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4807 tWDA_CbContext *pWDA;
4808 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004810 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 if(NULL == pWdaParams)
4812 {
4813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004814 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004815 VOS_ASSERT(0) ;
4816 return ;
4817 }
4818 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4819 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4821 vos_mem_free(pWdaParams) ;
4822
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004823 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004824 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 return ;
4826}
Jeff Johnson295189b2012-06-20 16:38:30 -07004827/*
4828 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4829 * Request to WDI to remove the BSS key( key for broadcast/multicast
4830 * frames Encryption)
4831 */
4832VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4833 tRemoveBssKeyParams *removeBssKeyParams )
4834{
4835 WDI_Status status = WDI_STATUS_SUCCESS ;
4836 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4837 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4838 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4839 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004841 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 if(NULL == wdiRemoveBssKeyParam)
4843 {
4844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004845 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 VOS_ASSERT(0);
4847 return VOS_STATUS_E_NOMEM;
4848 }
4849 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4850 if(NULL == pWdaParams)
4851 {
4852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004853 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 VOS_ASSERT(0);
4855 vos_mem_free(wdiRemoveBssKeyParam);
4856 return VOS_STATUS_E_NOMEM;
4857 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004858 /* copy Remove BSS key params to WDI structure*/
4859 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4860 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4861 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4862 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4863 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 /* Store remove key pointer, as this will be used for response */
4865 /* store Params pass it to WDI */
4866 pWdaParams->pWdaContext = pWDA;
4867 pWdaParams->wdaMsgParam = removeBssKeyParams;
4868 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4870 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004871 if(IS_WDI_STATUS_FAILURE(status))
4872 {
4873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4874 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4876 vos_mem_free(pWdaParams) ;
4877 removeBssKeyParams->status = eSIR_FAILURE ;
4878 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 return CONVERT_WDI2VOS_STATUS(status) ;
4881}
Jeff Johnson295189b2012-06-20 16:38:30 -07004882/*
4883 * FUNCTION: WDA_SetBssKeyReqCallback
4884 * send SET BSS key RSP back to PE
4885 */
4886void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4887{
4888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4889 tWDA_CbContext *pWDA;
4890 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004892 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 if(NULL == pWdaParams)
4894 {
4895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004896 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 VOS_ASSERT(0) ;
4898 return ;
4899 }
4900 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4901 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4903 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004904 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004905 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 return ;
4907}
Jeff Johnson295189b2012-06-20 16:38:30 -07004908/*
4909 * FUNCTION: WDA_ProcessSetStaKeyReq
4910 * Request to WDI for programming the STA key( key for Unicast frames
4911 * Encryption)
4912 */
4913VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4914 tSetStaKeyParams *setStaKeyParams )
4915{
4916 WDI_Status status = WDI_STATUS_SUCCESS ;
4917 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4918 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4919 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4920 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004923 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 if(NULL == wdiSetStaKeyParam)
4925 {
4926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 VOS_ASSERT(0);
4929 return VOS_STATUS_E_NOMEM;
4930 }
4931 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4932 if(NULL == pWdaParams)
4933 {
4934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 VOS_ASSERT(0);
4937 vos_mem_free(wdiSetStaKeyParam);
4938 return VOS_STATUS_E_NOMEM;
4939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004940 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 /* copy set STA key params to WDI structure */
4943 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4944 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4945 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4946 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004947 if(setStaKeyParams->encType != eSIR_ED_NONE)
4948 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004949 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4951 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4952 {
4953 WDA_GetWepKeysFromCfg( pWDA,
4954 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4955 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4956 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4957 }
4958 else
4959 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004960 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4961 keyIndex++)
4962 {
4963 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4964 setStaKeyParams->key[keyIndex].keyId;
4965 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4966 setStaKeyParams->key[keyIndex].unicast;
4967 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4968 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004969 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4970 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4971 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4972 setStaKeyParams->key[keyIndex].paeRole;
4973 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4974 setStaKeyParams->key[keyIndex].keyLength;
4975 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4976 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4977 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4978 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4979 {
4980 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4981 }
4982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004983 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4984 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004985 }
4986 }
4987 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4988 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 /* Store set key pointer, as this will be used for response */
4990 /* store Params pass it to WDI */
4991 pWdaParams->pWdaContext = pWDA;
4992 pWdaParams->wdaMsgParam = setStaKeyParams;
4993 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4995 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 if(IS_WDI_STATUS_FAILURE(status))
4997 {
4998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4999 "Failure in set STA Key Req WDI API, free all the memory " );
5000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5001 vos_mem_free(pWdaParams) ;
5002 setStaKeyParams->status = eSIR_FAILURE ;
5003 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
5004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 return CONVERT_WDI2VOS_STATUS(status) ;
5006}
Jeff Johnson295189b2012-06-20 16:38:30 -07005007/*
5008 * FUNCTION: WDA_SetBcastStaKeyReqCallback
5009 * send SET Bcast STA key RSP back to PE
5010 */
5011void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
5012{
5013 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5014 tWDA_CbContext *pWDA;
5015 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005017 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 if(NULL == pWdaParams)
5019 {
5020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005021 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 VOS_ASSERT(0) ;
5023 return ;
5024 }
5025 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5026 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5028 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005029 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005031 return ;
5032}
5033
Jeff Johnson295189b2012-06-20 16:38:30 -07005034/*
5035 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5036 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5037 * Encryption)
5038 */
5039VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5040 tSetStaKeyParams *setStaKeyParams )
5041{
5042 WDI_Status status = WDI_STATUS_SUCCESS ;
5043 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5044 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5045 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5046 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005049 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005050 if(NULL == wdiSetStaKeyParam)
5051 {
5052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005053 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 VOS_ASSERT(0);
5055 return VOS_STATUS_E_NOMEM;
5056 }
5057 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5058 if(NULL == pWdaParams)
5059 {
5060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005062 VOS_ASSERT(0);
5063 vos_mem_free(wdiSetStaKeyParam);
5064 return VOS_STATUS_E_NOMEM;
5065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005066 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 /* copy set STA key params to WDI structure */
5069 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5070 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5071 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5072 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 if(setStaKeyParams->encType != eSIR_ED_NONE)
5074 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5076 keyIndex++)
5077 {
5078 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5079 setStaKeyParams->key[keyIndex].keyId;
5080 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5081 setStaKeyParams->key[keyIndex].unicast;
5082 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5083 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005084 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5085 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5086 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5087 setStaKeyParams->key[keyIndex].paeRole;
5088 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5089 setStaKeyParams->key[keyIndex].keyLength;
5090 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5091 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005093 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5094 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005095 }
5096 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 /* Store set key pointer, as this will be used for response */
5098 /* store Params pass it to WDI */
5099 pWdaParams->pWdaContext = pWDA;
5100 pWdaParams->wdaMsgParam = setStaKeyParams;
5101 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005102 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5103 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005104 if(IS_WDI_STATUS_FAILURE(status))
5105 {
5106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5107 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5109 vos_mem_free(pWdaParams) ;
5110 setStaKeyParams->status = eSIR_FAILURE ;
5111 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 return CONVERT_WDI2VOS_STATUS(status) ;
5114}
Jeff Johnson295189b2012-06-20 16:38:30 -07005115/*
5116 * FUNCTION: WDA_RemoveStaKeyReqCallback
5117 * send SET BSS key RSP back to PE
5118 */
5119void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5120{
5121 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5122 tWDA_CbContext *pWDA;
5123 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005125 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 if(NULL == pWdaParams)
5127 {
5128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005129 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 VOS_ASSERT(0) ;
5131 return ;
5132 }
5133 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5134 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5136 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005137 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005138 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005139 return ;
5140}
5141
Jeff Johnson295189b2012-06-20 16:38:30 -07005142/*
5143 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5144 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5145 */
5146VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5147 tRemoveStaKeyParams *removeStaKeyParams )
5148{
5149 WDI_Status status = WDI_STATUS_SUCCESS ;
5150 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5151 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5152 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5153 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005155 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005156 if(NULL == wdiRemoveStaKeyParam)
5157 {
5158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005159 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 VOS_ASSERT(0);
5161 return VOS_STATUS_E_NOMEM;
5162 }
5163 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5164 if(NULL == pWdaParams)
5165 {
5166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 VOS_ASSERT(0);
5169 vos_mem_free(wdiRemoveStaKeyParam);
5170 return VOS_STATUS_E_NOMEM;
5171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 /* copy remove STA key params to WDI structure*/
5173 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5174 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5175 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5176 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5177 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 /* Store remove key pointer, as this will be used for response */
5179 /* store Params pass it to WDI */
5180 pWdaParams->pWdaContext = pWDA;
5181 pWdaParams->wdaMsgParam = removeStaKeyParams;
5182 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5184 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005185 if(IS_WDI_STATUS_FAILURE(status))
5186 {
5187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5188 "Failure in remove STA Key Req WDI API, free all the memory " );
5189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5190 vos_mem_free(pWdaParams) ;
5191 removeStaKeyParams->status = eSIR_FAILURE ;
5192 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005194 return CONVERT_WDI2VOS_STATUS(status) ;
5195}
Jeff Johnson295189b2012-06-20 16:38:30 -07005196/*
5197 * FUNCTION: WDA_IsHandleSetLinkStateReq
5198 * Update the WDA state and return the status to handle this message or not
5199 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005200WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5201 tWDA_CbContext *pWDA,
5202 tLinkStateParams *linkStateParams)
5203{
5204 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005205 switch(linkStateParams->state)
5206 {
5207 case eSIR_LINK_PREASSOC_STATE:
5208 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5209 /*
5210 * set the WDA state to PRE ASSOC
5211 * copy the BSSID into pWDA to use it in join request and return,
5212 * No need to handle these messages.
5213 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005214 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5215 {
5216 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005217 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005218 }
5219 else
5220 {
5221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005222 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005223 VOS_ASSERT(0);
5224 }
5225
5226 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5227 {
5228 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005229 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005230 }
5231 else
5232 {
5233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005234 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005235 VOS_ASSERT(0);
5236 }
5237
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5239 *channel and after ) so reset the WDA state to ready when the second
5240 * time UMAC issue the link state with PREASSOC
5241 */
5242 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5243 {
5244 /* RESET WDA state back to WDA_READY_STATE */
5245 pWDA->wdaState = WDA_READY_STATE;
5246 }
5247 else
5248 {
5249 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5250 }
5251 //populate linkState info in WDACbCtxt
5252 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005253 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 default:
5255 if(pWDA->wdaState != WDA_READY_STATE)
5256 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005257 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5258 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5259 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5260 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5261 *the ASSERT in WDA_Stop during module unload.*/
5262 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5263 {
5264 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005265 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005266 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005267 else
5268 {
5269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005270 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005271 status = WDA_IGNORE_SET_LINK_STATE;
5272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005273 }
5274 break;
5275 }
5276
5277 return status;
5278}
Jeff Johnson295189b2012-06-20 16:38:30 -07005279/*
5280 * FUNCTION: WDA_SetLinkStateCallback
5281 * call back function for set link state from WDI
5282 */
5283void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5284{
5285 tWDA_CbContext *pWDA;
5286 tLinkStateParams *linkStateParams;
5287 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005289 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005290 if(NULL == pWdaParams)
5291 {
5292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005293 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005294 VOS_ASSERT(0) ;
5295 return ;
5296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005298 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 /*
5300 * In STA mode start the BA activity check timer after association
5301 * and in AP mode start BA activity check timer after BSS start */
5302 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5303 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005304 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5305 ((status == WDI_STATUS_SUCCESS) &&
5306 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 {
5308 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 /*
5312 * No respone required for WDA_SET_LINK_STATE so free the request
5313 * param here
5314 */
5315 if( pWdaParams != NULL )
5316 {
5317 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5318 {
5319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5320 }
5321 vos_mem_free(pWdaParams);
5322 }
5323 return ;
5324}
Jeff Johnson295189b2012-06-20 16:38:30 -07005325/*
5326 * FUNCTION: WDA_ProcessSetLinkState
5327 * Request to WDI to set the link status.
5328 */
5329VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5330 tLinkStateParams *linkStateParams)
5331{
5332 WDI_Status status = WDI_STATUS_SUCCESS ;
5333 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5334 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5335 sizeof(WDI_SetLinkReqParamsType)) ;
5336 tWDA_ReqParams *pWdaParams ;
5337 tpAniSirGlobal pMac;
5338 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5339
5340 if(NULL == pMac)
5341 {
5342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005343 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005345 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005346 return VOS_STATUS_E_FAILURE;
5347 }
5348
5349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005350 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005351 if(NULL == wdiSetLinkStateParam)
5352 {
5353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005354 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 VOS_ASSERT(0);
5356 return VOS_STATUS_E_NOMEM;
5357 }
5358 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5359 if(NULL == pWdaParams)
5360 {
5361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005362 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 VOS_ASSERT(0);
5364 vos_mem_free(wdiSetLinkStateParam);
5365 return VOS_STATUS_E_NOMEM;
5366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005367 if(WDA_IGNORE_SET_LINK_STATE ==
5368 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5369 {
5370 status = WDI_STATUS_E_FAILURE;
5371 }
5372 else
5373 {
5374 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5375 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005376 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5377 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005378 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5379 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005380 pWdaParams->pWdaContext = pWDA;
5381 /* Store remove key pointer, as this will be used for response */
5382 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 /* store Params pass it to WDI */
5384 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5385 /* Stop Timer only other than GO role and concurrent session */
5386 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005387 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5389 {
5390 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5393 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 if(IS_WDI_STATUS_FAILURE(status))
5395 {
5396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5397 "Failure in set link state Req WDI API, free all the memory " );
5398 }
5399 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005400 if(IS_WDI_STATUS_FAILURE(status))
5401 {
5402 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005403 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 vos_mem_free(pWdaParams);
5405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 return CONVERT_WDI2VOS_STATUS(status) ;
5407}
Jeff Johnson295189b2012-06-20 16:38:30 -07005408/*
5409 * FUNCTION: WDA_GetStatsReqParamsCallback
5410 * send the response to PE with Stats received from WDI
5411 */
5412void WDA_GetStatsReqParamsCallback(
5413 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5414 void* pUserData)
5415{
5416 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5417 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5418
5419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005420 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005421 pGetPEStatsRspParams =
5422 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5423 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5424
5425 if(NULL == pGetPEStatsRspParams)
5426 {
5427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005429 VOS_ASSERT(0);
5430 return;
5431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005432 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5433 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5434 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5435 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005436
5437 //Fill the Session Id Properly in PE
5438 pGetPEStatsRspParams->sessionId = 0;
5439 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005440 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5442 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005443 vos_mem_copy( pGetPEStatsRspParams + 1,
5444 wdiGetStatsRsp + 1,
5445 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 /* send response to UMAC*/
5447 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5448
5449 return;
5450}
5451
Jeff Johnson295189b2012-06-20 16:38:30 -07005452/*
5453 * FUNCTION: WDA_ProcessGetStatsReq
5454 * Request to WDI to get the statistics
5455 */
5456VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5457 tAniGetPEStatsReq *pGetStatsParams)
5458{
5459 WDI_Status status = WDI_STATUS_SUCCESS ;
5460 WDI_GetStatsReqParamsType wdiGetStatsParam;
5461 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005463 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005464 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5465 pGetStatsParams->staId;
5466 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5467 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005468 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 status = WDI_GetStatsReq(&wdiGetStatsParam,
5470 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005471 if(IS_WDI_STATUS_FAILURE(status))
5472 {
5473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5474 "Failure in Get Stats Req WDI API, free all the memory " );
5475 pGetPEStatsRspParams =
5476 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5477 if(NULL == pGetPEStatsRspParams)
5478 {
5479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005481 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005482 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005483 return VOS_STATUS_E_NOMEM;
5484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5486 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5487 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5488 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5489 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5490 (void *)pGetPEStatsRspParams, 0) ;
5491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 /* Free the request message */
5493 vos_mem_free(pGetStatsParams);
5494 return CONVERT_WDI2VOS_STATUS(status);
5495}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005496
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005497#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005498/*
5499 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5500 * send the response to PE with roam Rssi received from WDI
5501 */
5502void WDA_GetRoamRssiReqParamsCallback(
5503 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5504 void* pUserData)
5505{
5506 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5507 tWDA_CbContext *pWDA = NULL;
5508 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5509 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5511 "<------ %s " ,__func__);
5512 if(NULL == pWdaParams)
5513 {
5514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5515 "%s: pWdaParams received NULL", __func__);
5516 VOS_ASSERT(0) ;
5517 return ;
5518 }
5519 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5520 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5521
5522 if(NULL == pGetRoamRssiReqParams)
5523 {
5524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5525 "%s: pGetRoamRssiReqParams received NULL", __func__);
5526 VOS_ASSERT(0);
5527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5528 vos_mem_free(pWdaParams);
5529 return ;
5530 }
5531 pGetRoamRssiRspParams =
5532 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5533
5534 if(NULL == pGetRoamRssiRspParams)
5535 {
5536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5537 "%s: VOS MEM Alloc Failure", __func__);
5538 VOS_ASSERT(0);
5539 return;
5540 }
5541 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5542 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005543 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005544 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5545 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5546
5547 /* Assign get roam rssi req (backup) in to the response */
5548 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5549
5550 /* free WDI command buffer */
5551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5552 vos_mem_free(pWdaParams) ;
5553
5554 /* send response to UMAC*/
5555 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5556
5557 return;
5558}
5559
5560
5561
5562/*
5563 * FUNCTION: WDA_ProcessGetRoamRssiReq
5564 * Request to WDI to get the statistics
5565 */
5566VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5567 tAniGetRssiReq *pGetRoamRssiParams)
5568{
5569 WDI_Status status = WDI_STATUS_SUCCESS ;
5570 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5571 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5572 tWDA_ReqParams *pWdaParams = NULL;
5573
5574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5575 "------> %s " ,__func__);
5576 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5577 pGetRoamRssiParams->staId;
5578 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5579
5580 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5581 if(NULL == pWdaParams)
5582 {
5583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5584 "%s: VOS MEM Alloc Failure", __func__);
5585 VOS_ASSERT(0);
5586 return VOS_STATUS_E_NOMEM;
5587 }
5588
5589 /* Store Init Req pointer, as this will be used for response */
5590 pWdaParams->pWdaContext = pWDA;
5591
5592 /* Take Get roam Rssi req backup as it stores the callback to be called after
5593 receiving the response */
5594 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5595 pWdaParams->wdaWdiApiMsgParam = NULL;
5596
5597 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5598 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5599 if(IS_WDI_STATUS_FAILURE(status))
5600 {
5601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5602 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5603 pGetRoamRssiRspParams =
5604 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5605 if(NULL == pGetRoamRssiRspParams)
5606 {
5607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5608 "%s: VOS MEM Alloc Failure", __func__);
5609 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305610 vos_mem_free(pGetRoamRssiParams);
5611 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005612 return VOS_STATUS_E_NOMEM;
5613 }
5614 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5615 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5616 pGetRoamRssiRspParams->rssi = 0;
5617 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5618 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5619 (void *)pGetRoamRssiRspParams, 0) ;
5620 }
5621 return CONVERT_WDI2VOS_STATUS(status);
5622}
5623#endif
5624
5625
Jeff Johnson295189b2012-06-20 16:38:30 -07005626/*
5627 * FUNCTION: WDA_UpdateEDCAParamCallback
5628 * call back function for Update EDCA params from WDI
5629 */
5630void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5631{
5632 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5633 tEdcaParams *pEdcaParams;
5634
5635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005636 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005637 if(NULL == pWdaParams)
5638 {
5639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005640 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005641 VOS_ASSERT(0) ;
5642 return ;
5643 }
5644 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005645 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5646 vos_mem_free(pWdaParams);
5647 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 return ;
5649}
Jeff Johnson295189b2012-06-20 16:38:30 -07005650/*
5651 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5652 * Request to WDI to Update the EDCA params.
5653 */
5654VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5655 tEdcaParams *pEdcaParams)
5656{
5657 WDI_Status status = WDI_STATUS_SUCCESS ;
5658 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5659 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5660 sizeof(WDI_UpdateEDCAParamsType)) ;
5661 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005663 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005664 if(NULL == wdiEdcaParam)
5665 {
5666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005667 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005668 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005669 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 return VOS_STATUS_E_NOMEM;
5671 }
5672 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5673 if(NULL == pWdaParams)
5674 {
5675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005676 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 VOS_ASSERT(0);
5678 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005679 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 return VOS_STATUS_E_NOMEM;
5681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005682 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005683 /*
5684 Since firmware is not using highperformance flag, we have removed
5685 this flag from wdiEDCAInfo structure to match sizeof the structure
5686 between host and firmware.In future if we are planning to use
5687 highperformance flag then Please define this flag in wdiEDCAInfo
5688 structure, update it here and send it to firmware. i.e.
5689 Following is the original line which we removed as part of the fix
5690 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5691 pEdcaParams->highPerformance;
5692 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005693 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5694 &pEdcaParams->acbe);
5695 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5696 &pEdcaParams->acbk);
5697 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5698 &pEdcaParams->acvi);
5699 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5700 &pEdcaParams->acvo);
5701 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 pWdaParams->pWdaContext = pWDA;
5703 /* Store remove key pointer, as this will be used for response */
5704 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 /* store Params pass it to WDI */
5706 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005707 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5708 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005709 if(IS_WDI_STATUS_FAILURE(status))
5710 {
5711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5712 "Failure in Update EDCA Params WDI API, free all the memory " );
5713 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5714 vos_mem_free(pWdaParams);
5715 vos_mem_free(pEdcaParams);
5716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005717 return CONVERT_WDI2VOS_STATUS(status) ;
5718}
Jeff Johnson295189b2012-06-20 16:38:30 -07005719/*
5720 * FUNCTION: WDA_AddBAReqCallback
5721 * send ADD BA RSP back to PE
5722 */
5723void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5724 void* pUserData)
5725{
5726 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5727 tWDA_CbContext *pWDA;
5728 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 if(NULL == pWdaParams)
5732 {
5733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005734 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005735 VOS_ASSERT(0) ;
5736 return ;
5737 }
5738 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5739 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5741 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005742 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005743 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 return ;
5745}
5746
Jeff Johnson295189b2012-06-20 16:38:30 -07005747/*
5748 * FUNCTION: WDA_ProcessAddBAReq
5749 * Request to WDI to Update the ADDBA REQ params.
5750 */
5751VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5752 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5753{
Jeff Johnson43971f52012-07-17 12:26:56 -07005754 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005755 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5756 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5757 sizeof(WDI_AddBAReqParamsType)) ;
5758 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005760 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 if(NULL == wdiAddBAReqParam)
5762 {
5763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005764 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 VOS_ASSERT(0);
5766 return VOS_STATUS_E_NOMEM;
5767 }
5768 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5769 if(NULL == pWdaParams)
5770 {
5771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 VOS_ASSERT(0);
5774 vos_mem_free(wdiAddBAReqParam);
5775 return VOS_STATUS_E_NOMEM;
5776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005777 do
5778 {
5779 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005780 wdiAddBaInfo->ucSTAIdx = staIdx ;
5781 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5782 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005783 } while(0) ;
5784 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005785 pWdaParams->pWdaContext = pWDA;
5786 /* store Params pass it to WDI */
5787 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5788 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005789 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5790 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005791
Jeff Johnson43971f52012-07-17 12:26:56 -07005792 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005793 {
5794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005795 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5796 status = CONVERT_WDI2VOS_STATUS(wstatus);
5797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005798 vos_mem_free(pWdaParams);
5799 pAddBAReqParams->status = eSIR_FAILURE;
5800 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5801 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005802 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005803}
Jeff Johnson295189b2012-06-20 16:38:30 -07005804/*
5805 * FUNCTION: WDA_AddBASessionReqCallback
5806 * send ADD BA SESSION RSP back to PE/(or TL)
5807 */
5808void WDA_AddBASessionReqCallback(
5809 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5810{
5811 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5812 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5813 tWDA_CbContext *pWDA;
5814 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005816 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 if(NULL == pWdaParams)
5818 {
5819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005820 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005821 VOS_ASSERT(0) ;
5822 return ;
5823 }
5824 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5825 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005826 if( NULL == pAddBAReqParams )
5827 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005829 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005830 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005831 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5832 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005833 return ;
5834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005835 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5836 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005837 /*
5838 * if WDA in update TL state, update TL with BA session parama and send
5839 * another request to HAL(/WDI) (ADD_BA_REQ)
5840 */
5841
5842 if((VOS_STATUS_SUCCESS ==
5843 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5844 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5845 {
5846 /* Update TL with BA info received from HAL/WDI */
5847 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5848 wdiAddBaSession->usBaSessionID,
5849 wdiAddBaSession->ucSTAIdx,
5850 wdiAddBaSession->ucBaTID,
5851 wdiAddBaSession->ucBaBufferSize,
5852 wdiAddBaSession->ucWinSize,
5853 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5855 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5856 }
5857 else
5858 {
5859 pAddBAReqParams->status =
5860 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5861
5862 /* Setting Flag to indicate that Set BA is success */
5863 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5864 {
5865 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5866 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5867 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005871 /*Reset the WDA state to READY */
5872 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005873 return ;
5874}
5875
Jeff Johnson295189b2012-06-20 16:38:30 -07005876/*
5877 * FUNCTION: WDA_ProcessAddBASessionReq
5878 * Request to WDI to Update the ADDBA REQ params.
5879 */
5880VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5881 tAddBAParams *pAddBAReqParams)
5882{
5883 WDI_Status status = WDI_STATUS_SUCCESS ;
5884 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5885 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5886 sizeof(WDI_AddBASessionReqParamsType)) ;
5887 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005888 WLANTL_STAStateType tlSTAState = 0;
5889
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005891 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 if(NULL == wdiAddBASessionReqParam)
5893 {
5894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005896 VOS_ASSERT(0);
5897 return VOS_STATUS_E_NOMEM;
5898 }
5899 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5900 if(NULL == pWdaParams)
5901 {
5902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 VOS_ASSERT(0);
5905 vos_mem_free(wdiAddBASessionReqParam);
5906 return VOS_STATUS_E_NOMEM;
5907 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 /*
5909 * Populate ADD BA parameters and pass these paarmeters to WDI.
5910 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5911 * the state to track if these is BA recipient case or BA initiator
5912 * case.
5913 */
5914 do
5915 {
5916 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5917 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5918 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5919 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5920 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5921 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5922 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5925 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5926 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5927 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5928 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 /* check the BA direction and update state accordingly */
5930 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5931 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5932 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5933
5934 }while(0) ;
5935 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005936 pWdaParams->pWdaContext = pWDA;
5937 /* Store ADD BA pointer, as this will be used for response */
5938 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5939 /* store Params pass it to WDI */
5940 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005941
5942 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5943 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5944 */
5945 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5946 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5947 {
5948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005949 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005950 status = WDI_STATUS_E_NOT_ALLOWED;
5951 pAddBAReqParams->status =
5952 CONVERT_WDI2SIR_STATUS(status) ;
5953 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5954 /*Reset the WDA state to READY */
5955 pWDA->wdaState = WDA_READY_STATE;
5956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5957 vos_mem_free(pWdaParams);
5958
5959 return CONVERT_WDI2VOS_STATUS(status) ;
5960 }
5961
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5963 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005964 if(IS_WDI_STATUS_FAILURE(status))
5965 {
5966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005967 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005969 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005970 pAddBAReqParams->status =
5971 CONVERT_WDI2SIR_STATUS(status) ;
5972 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005973 /*Reset the WDA state to READY */
5974 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005975 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 vos_mem_free(pWdaParams);
5977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005978 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005979}
Jeff Johnson295189b2012-06-20 16:38:30 -07005980/*
5981 * FUNCTION: WDA_DelBANotifyTL
5982 * send DEL BA IND to TL
5983 */
5984void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5985 tDelBAParams *pDelBAReqParams)
5986{
5987 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5988 //tSirMsgQ msg;
5989 vos_msg_t vosMsg;
5990 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 if(NULL == pDelBAInd)
5992 {
5993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005995 VOS_ASSERT(0) ;
5996 return;
5997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5999 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
6000 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
6001 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07006002
Jeff Johnson295189b2012-06-20 16:38:30 -07006003
6004 vosMsg.type = WDA_DELETEBA_IND;
6005 vosMsg.bodyptr = pDelBAInd;
6006 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
6007 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
6008 {
6009 vosStatus = VOS_STATUS_E_BADMSG;
6010 }
6011}
Jeff Johnson295189b2012-06-20 16:38:30 -07006012/*
6013 * FUNCTION: WDA_DelBAReqCallback
6014 * send DEL BA RSP back to PE
6015 */
6016void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6017{
6018 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6019 tWDA_CbContext *pWDA;
6020 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006022 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 if(NULL == pWdaParams)
6024 {
6025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006026 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006027 VOS_ASSERT(0) ;
6028 return ;
6029 }
6030 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6031 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 /* Notify TL about DEL BA in case of recipinet */
6033 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6034 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6035 {
6036 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 /*
6039 * No respone required for WDA_DELBA_IND so just free the request
6040 * param here
6041 */
6042 vos_mem_free(pDelBAReqParams);
6043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6044 vos_mem_free(pWdaParams);
6045 return ;
6046}
6047
Jeff Johnson295189b2012-06-20 16:38:30 -07006048/*
6049 * FUNCTION: WDA_ProcessDelBAReq
6050 * Request to WDI to Update the DELBA REQ params.
6051 */
6052VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6053 tDelBAParams *pDelBAReqParams)
6054{
6055 WDI_Status status = WDI_STATUS_SUCCESS ;
6056 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6057 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6058 sizeof(WDI_DelBAReqParamsType)) ;
6059 tWDA_ReqParams *pWdaParams ;
6060 tANI_U16 staIdx = 0;
6061 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006063 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 if(NULL == wdiDelBAReqParam)
6065 {
6066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006067 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 VOS_ASSERT(0);
6069 return VOS_STATUS_E_NOMEM;
6070 }
6071 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6072 if(NULL == pWdaParams)
6073 {
6074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006075 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 VOS_ASSERT(0);
6077 vos_mem_free(wdiDelBAReqParam);
6078 return VOS_STATUS_E_NOMEM;
6079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6081 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6082 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6083 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006084 pWdaParams->pWdaContext = pWDA;
6085 /* Store DEL BA pointer, as this will be used for response */
6086 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 /* store Params pass it to WDI */
6088 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006089 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6090 * maintained in WDA, so that WDA can retry for another BA session
6091 */
6092 staIdx = pDelBAReqParams->staIdx;
6093 tid = pDelBAReqParams->baTID;
6094 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006095 status = WDI_DelBAReq(wdiDelBAReqParam,
6096 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 if(IS_WDI_STATUS_FAILURE(status))
6098 {
6099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6100 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6102 vos_mem_free(pWdaParams->wdaMsgParam);
6103 vos_mem_free(pWdaParams);
6104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006105 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006106}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006107
6108/*
6109 * FUNCTION: WDA_UpdateChReqCallback
6110 *
6111 */
6112void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6113{
Siddharth Bhala006c122014-05-03 12:13:27 +05306114 tWDA_ReqParams *pWdaParams;
6115 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6116 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6117 WDI_UpdateChannelReqinfoType *pChanInfoType;
6118 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006119
6120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6121 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306122 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006123 {
6124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306125 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006126 VOS_ASSERT(0);
6127 return;
6128 }
6129
Siddharth Bhala006c122014-05-03 12:13:27 +05306130 pWdaParams = (tWDA_ReqParams *)pUserData;
6131 pwdiUpdateChReqParam =
6132 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6133 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6134 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6135 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006136 /*
6137 * currently there is no response message is expected between PE and
6138 * WDA, Failure return from WDI is a ASSERT condition
6139 */
6140 vos_mem_free(pChanInfoType);
6141 vos_mem_free(pChanList);
6142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6143 vos_mem_free(pWdaParams);
6144
6145 return;
6146}
6147
6148/*
6149 * FUNCTION: WDA_ProcessUpdateChannelList
6150 * Request to WDI to Update the ChannelList params.
6151 */
6152VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6153 tSirUpdateChanList *pChanList)
6154{
6155 WDI_Status status = WDI_STATUS_SUCCESS;
6156 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6157 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6158 WDI_UpdateChannelReqinfoType *pChanInfoType;
6159 tWDA_ReqParams *pWdaParams;
6160 wpt_uint8 i;
6161
6162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6163 "------> %s " ,__func__);
6164 if(NULL == pChanList)
6165 {
6166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6167 "%s: NULL pChanList", __func__);
6168 VOS_ASSERT(0);
6169 return VOS_STATUS_E_INVAL;
6170 }
6171
6172 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6173 {
6174 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6175 "Update channel list capability Not Supported");
6176 vos_mem_free(pChanList);
6177 return VOS_STATUS_E_INVAL;
6178 }
6179
6180 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6181 sizeof(WDI_UpdateChReqParamsType));
6182 if(NULL == pwdiUpdateChReqParam)
6183 {
6184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6185 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6186 __func__);
6187 VOS_ASSERT(0);
6188 vos_mem_free(pChanList);
6189 return VOS_STATUS_E_NOMEM;
6190 }
6191 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6192 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6193 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6194 pChanList->numChan);
6195 if(NULL == pChanInfoType)
6196 {
6197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6198 "%s: VOS MEM Alloc Failure", __func__);
6199 VOS_ASSERT(0);
6200 vos_mem_free(pChanList);
6201 vos_mem_free(pwdiUpdateChReqParam);
6202 return VOS_STATUS_E_NOMEM;
6203 }
6204 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6205 * pChanList->numChan);
6206 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6207
6208 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6209 if(NULL == pWdaParams)
6210 {
6211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6212 "%s: VOS MEM Alloc Failure", __func__);
6213 VOS_ASSERT(0);
6214 vos_mem_free(pChanList);
6215 vos_mem_free(pChanInfoType);
6216 vos_mem_free(pwdiUpdateChReqParam);
6217 return VOS_STATUS_E_NOMEM;
6218 }
6219 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6220
6221 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6222 {
6223 pChanInfoType->mhz =
6224 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6225
6226 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6227 pChanInfoType->band_center_freq2 = 0;
6228
6229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6230 "chan[%d] = %u", i, pChanInfoType->mhz);
6231 if (pChanList->chanParam[i].dfsSet)
6232 {
6233 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6235 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6236 pChanList->chanParam[i].dfsSet);
6237 }
6238
6239 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6240 {
6241 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6242 }
6243 else
6244 {
6245 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6246 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6247 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6248 }
6249
6250 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6251 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6252
6253 pChanInfoType++;
6254 }
6255
6256 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6257 pWdaParams->pWdaContext = pWDA;
6258 pWdaParams->wdaMsgParam = (void *)pChanList;
6259 /* store Params pass it to WDI */
6260 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6261 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6262 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6263 if(IS_WDI_STATUS_FAILURE(status))
6264 {
6265 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6266 "Failure in Update Channel REQ Params WDI API, free all the memory");
6267 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6268 vos_mem_free(pwdiUpdateChReqParam);
6269 vos_mem_free(pWdaParams->wdaMsgParam);
6270 vos_mem_free(pWdaParams);
6271 }
6272 return CONVERT_WDI2VOS_STATUS(status);
6273}
6274
Jeff Johnson295189b2012-06-20 16:38:30 -07006275/*
6276 * FUNCTION: WDA_AddTSReqCallback
6277 * send ADD TS RSP back to PE
6278 */
6279void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6280{
6281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6282 tWDA_CbContext *pWDA;
6283 tAddTsParams *pAddTsReqParams;
6284
6285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006286 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 if(NULL == pWdaParams)
6288 {
6289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006290 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006291 VOS_ASSERT(0) ;
6292 return ;
6293 }
6294 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6295 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6297 vos_mem_free(pWdaParams);
6298
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006299 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006300 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006301 return ;
6302}
6303
Jeff Johnson295189b2012-06-20 16:38:30 -07006304/*
6305 * FUNCTION: WDA_ProcessAddTSReq
6306 * Request to WDI to Update the ADD TS REQ params.
6307 */
6308VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6309 tAddTsParams *pAddTsReqParams)
6310{
6311 WDI_Status status = WDI_STATUS_SUCCESS ;
6312 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6313 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6314 sizeof(WDI_AddTSReqParamsType)) ;
6315 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006317 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 if(NULL == wdiAddTSReqParam)
6319 {
6320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 VOS_ASSERT(0);
6323 return VOS_STATUS_E_NOMEM;
6324 }
6325 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6326 if(NULL == pWdaParams)
6327 {
6328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006329 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 VOS_ASSERT(0);
6331 vos_mem_free(wdiAddTSReqParam);
6332 return VOS_STATUS_E_NOMEM;
6333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6335 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 //TS IE
6337 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6338 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6339 pAddTsReqParams->tspec.length;
6340
6341 //TS IE : TS INFO : TRAFFIC
6342 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6343 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6344 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6345 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6346 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6347 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6348 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6349 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6350 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6351 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6352 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6353 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6354 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6355 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6356 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6357 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6358
6359 //TS IE : TS INFO : SCHEDULE
6360 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6361 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6362 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6363 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 //TS IE
6365 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6366 pAddTsReqParams->tspec.nomMsduSz;
6367 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6368 pAddTsReqParams->tspec.maxMsduSz;
6369 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6370 pAddTsReqParams->tspec.minSvcInterval;
6371 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6372 pAddTsReqParams->tspec.maxSvcInterval;
6373 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6374 pAddTsReqParams->tspec.inactInterval;
6375 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6376 pAddTsReqParams->tspec.suspendInterval;
6377 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6378 pAddTsReqParams->tspec.svcStartTime;
6379 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6380 pAddTsReqParams->tspec.minDataRate;
6381 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6382 pAddTsReqParams->tspec.meanDataRate;
6383 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6384 pAddTsReqParams->tspec.peakDataRate;
6385 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6386 pAddTsReqParams->tspec.maxBurstSz;
6387 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6388 pAddTsReqParams->tspec.delayBound;
6389 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6390 pAddTsReqParams->tspec.minPhyRate;
6391 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6392 pAddTsReqParams->tspec.surplusBw;
6393 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6394 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006395 /* TODO: tAddTsParams doesn't have the following fields */
6396#if 0
6397 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6398 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6399 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6400 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6401#endif
6402 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6403
6404 pWdaParams->pWdaContext = pWDA;
6405 /* Store ADD TS pointer, as this will be used for response */
6406 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006407 /* store Params pass it to WDI */
6408 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006409 status = WDI_AddTSReq(wdiAddTSReqParam,
6410 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006411 if(IS_WDI_STATUS_FAILURE(status))
6412 {
6413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6414 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6416 vos_mem_free(pWdaParams);
6417 pAddTsReqParams->status = eSIR_FAILURE ;
6418 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006421}
6422
Jeff Johnson295189b2012-06-20 16:38:30 -07006423/*
6424 * FUNCTION: WDA_DelTSReqCallback
6425 * send DEL TS RSP back to PE
6426 */
6427void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6428{
6429 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006431 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6433 vos_mem_free(pWdaParams->wdaMsgParam) ;
6434 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006435 /*
6436 * No respone required for WDA_DEL_TS_REQ so just free the request
6437 * param here
6438 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 return ;
6440}
6441
Jeff Johnson295189b2012-06-20 16:38:30 -07006442/*
6443 * FUNCTION: WDA_ProcessDelTSReq
6444 * Request to WDI to Update the DELTS REQ params.
6445 */
6446VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6447 tDelTsParams *pDelTSReqParams)
6448{
6449 WDI_Status status = WDI_STATUS_SUCCESS ;
6450 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6451 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6452 sizeof(WDI_DelTSReqParamsType)) ;
6453 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006455 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 if(NULL == wdiDelTSReqParam)
6457 {
6458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 VOS_ASSERT(0);
6461 return VOS_STATUS_E_NOMEM;
6462 }
6463 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6464 if(NULL == pWdaParams)
6465 {
6466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006468 VOS_ASSERT(0);
6469 vos_mem_free(wdiDelTSReqParam);
6470 return VOS_STATUS_E_NOMEM;
6471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006472 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6473 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6474 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6475 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6476 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006477 pWdaParams->pWdaContext = pWDA;
6478 /* Store DEL TS pointer, as this will be used for response */
6479 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 /* store Params pass it to WDI */
6481 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006482 status = WDI_DelTSReq(wdiDelTSReqParam,
6483 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006484 if(IS_WDI_STATUS_FAILURE(status))
6485 {
6486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6487 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6489 vos_mem_free(pWdaParams->wdaMsgParam);
6490 vos_mem_free(pWdaParams);
6491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006493}
Jeff Johnson295189b2012-06-20 16:38:30 -07006494/*
6495 * FUNCTION: WDA_UpdateBeaconParamsCallback
6496 * Free the memory. No need to send any response to PE in this case
6497 */
6498void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6499{
6500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006502 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006503 if(NULL == pWdaParams)
6504 {
6505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006506 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006507 VOS_ASSERT(0) ;
6508 return ;
6509 }
6510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6511 vos_mem_free(pWdaParams->wdaMsgParam) ;
6512 vos_mem_free(pWdaParams);
6513 /*
6514 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6515 * param here
6516 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006517 return ;
6518}
Jeff Johnson295189b2012-06-20 16:38:30 -07006519/*
6520 * FUNCTION: WDA_ProcessUpdateBeaconParams
6521 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6522 */
6523VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6524 tUpdateBeaconParams *pUpdateBeaconParams)
6525{
6526 WDI_Status status = WDI_STATUS_SUCCESS ;
6527 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6528 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6529 sizeof(WDI_UpdateBeaconParamsType)) ;
6530 tWDA_ReqParams *pWdaParams ;
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 if(NULL == wdiUpdateBeaconParams)
6534 {
6535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006536 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006537 VOS_ASSERT(0);
6538 return VOS_STATUS_E_NOMEM;
6539 }
6540 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6541 if(NULL == pWdaParams)
6542 {
6543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006545 VOS_ASSERT(0);
6546 vos_mem_free(wdiUpdateBeaconParams);
6547 return VOS_STATUS_E_NOMEM;
6548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006549 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6550 pUpdateBeaconParams->bssIdx;
6551 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6552 pUpdateBeaconParams->fShortPreamble;
6553 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6554 pUpdateBeaconParams->fShortSlotTime;
6555 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6556 pUpdateBeaconParams->beaconInterval;
6557 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6558 pUpdateBeaconParams->llaCoexist;
6559 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6560 pUpdateBeaconParams->llbCoexist;
6561 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6562 pUpdateBeaconParams->llgCoexist;
6563 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6564 pUpdateBeaconParams->ht20MhzCoexist;
6565 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6566 pUpdateBeaconParams->llnNonGFCoexist;
6567 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6568 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6569 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6570 pUpdateBeaconParams->fRIFSMode;
6571 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6572 pUpdateBeaconParams->paramChangeBitmap;
6573 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6574
6575 pWdaParams->pWdaContext = pWDA;
6576 /* Store UpdateBeacon Req pointer, as this will be used for response */
6577 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006578 /* store Params pass it to WDI */
6579 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006580 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6581 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6582 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006583 if(IS_WDI_STATUS_FAILURE(status))
6584 {
6585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6586 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6588 vos_mem_free(pWdaParams->wdaMsgParam);
6589 vos_mem_free(pWdaParams);
6590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006591 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006592}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006593#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006594/*
6595 * FUNCTION: WDA_TSMStatsReqCallback
6596 * send TSM Stats RSP back to PE
6597 */
6598void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6599{
6600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6601 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006602 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6603 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006604
6605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006606 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 if(NULL == pWdaParams)
6608 {
6609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006610 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006611 VOS_ASSERT(0) ;
6612 return ;
6613 }
6614 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006615 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6616
6617 if(NULL == pGetTsmStatsReqParams)
6618 {
6619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6620 "%s: pGetTsmStatsReqParams received NULL", __func__);
6621 VOS_ASSERT(0);
6622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6623 vos_mem_free(pWdaParams);
6624 return;
6625 }
6626
6627 pTsmRspParams =
6628 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006629 if( NULL == pTsmRspParams )
6630 {
6631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006632 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 VOS_ASSERT( 0 );
6634 return ;
6635 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006636 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6637 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6638 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6639
Jeff Johnson295189b2012-06-20 16:38:30 -07006640 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6641 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6642 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6643 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6644 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6645 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6646 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6647 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6648 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6649 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006650
6651 /* Assign get tsm stats req req (backup) in to the response */
6652 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6653
6654 /* free WDI command buffer */
6655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6656 vos_mem_free(pWdaParams);
6657
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 return ;
6660}
6661
6662
Jeff Johnson295189b2012-06-20 16:38:30 -07006663/*
6664 * FUNCTION: WDA_ProcessTsmStatsReq
6665 * Request to WDI to get the TSM Stats params.
6666 */
6667VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006668 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006669{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006670 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006672 tWDA_ReqParams *pWdaParams = NULL;
6673 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6674
Jeff Johnson295189b2012-06-20 16:38:30 -07006675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006676 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006677 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6678 sizeof(WDI_TSMStatsReqParamsType));
6679 if(NULL == wdiTSMReqParam)
6680 {
6681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006683 VOS_ASSERT(0);
6684 return VOS_STATUS_E_NOMEM;
6685 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006686 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6687 if(NULL == pWdaParams)
6688 {
6689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006690 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 VOS_ASSERT(0);
6692 vos_mem_free(wdiTSMReqParam);
6693 return VOS_STATUS_E_NOMEM;
6694 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006695 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6696 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6697 pTsmStats->bssId,
6698 sizeof(wpt_macAddr));
6699 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6700
6701 pWdaParams->pWdaContext = pWDA;
6702 /* Store TSM Stats pointer, as this will be used for response */
6703 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006704 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006705 status = WDI_TSMStatsReq(wdiTSMReqParam,
6706 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 if(IS_WDI_STATUS_FAILURE(status))
6708 {
6709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6710 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006711 vos_mem_free(pWdaParams);
6712
6713 pGetTsmStatsRspParams =
6714 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6715 if(NULL == pGetTsmStatsRspParams)
6716 {
6717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6718 "%s: VOS MEM Alloc Failure", __func__);
6719 VOS_ASSERT(0);
6720 vos_mem_free(pTsmStats);
6721 return VOS_STATUS_E_NOMEM;
6722 }
6723 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6724 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6725 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6726
6727 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 return CONVERT_WDI2VOS_STATUS(status) ;
6730}
6731#endif
6732/*
6733 * FUNCTION: WDA_SendBeaconParamsCallback
6734 * No need to send any response to PE in this case
6735 */
6736void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6737{
6738
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006740 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 return ;
6742}
Jeff Johnson295189b2012-06-20 16:38:30 -07006743/*
6744 * FUNCTION: WDA_ProcessSendBeacon
6745 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6746 * start beacon trasmission
6747 */
6748VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6749 tSendbeaconParams *pSendbeaconParams)
6750{
6751 WDI_Status status = WDI_STATUS_SUCCESS ;
6752 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006754 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6756 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6757 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6758 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006759 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6760 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306761 /* p2pIeOffset should be atleast greater than timIeOffset */
6762 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6763 (pSendbeaconParams->p2pIeOffset <
6764 pSendbeaconParams->timIeOffset))
6765 {
6766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6767 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6768 VOS_ASSERT( 0 );
6769 return WDI_STATUS_E_FAILURE;
6770 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006771 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6772 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006773 /* Copy the beacon template to local buffer */
6774 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6775 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6776 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6777
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6779 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 if(IS_WDI_STATUS_FAILURE(status))
6781 {
6782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6783 "Failure in SEND BEACON REQ Params WDI API" );
6784 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006785 vos_mem_free(pSendbeaconParams);
6786 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006787}
Jeff Johnson295189b2012-06-20 16:38:30 -07006788/*
6789 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6790 * No need to send any response to PE in this case
6791 */
6792void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6793{
Jeff Johnson295189b2012-06-20 16:38:30 -07006794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006795 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 return ;
6797}
6798
Jeff Johnson295189b2012-06-20 16:38:30 -07006799/*
6800 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6801 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6802 * send probe response
6803 */
6804VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6805 tSendProbeRespParams *pSendProbeRspParams)
6806{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006807 WDI_Status status = WDI_STATUS_SUCCESS;
6808 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6809 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006811 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006812
6813 if (!wdiSendProbeRspParam)
6814 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6815
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006817 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006819 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006820 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 /* Copy the Probe Response template to local buffer */
6822 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006823 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 pSendProbeRspParams->pProbeRespTemplate,
6825 pSendProbeRspParams->probeRespTemplateLen);
6826 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006827 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6829 WDI_PROBE_REQ_BITMAP_IE_LEN);
6830
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006831 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006832
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006833 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 if(IS_WDI_STATUS_FAILURE(status))
6836 {
6837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6838 "Failure in SEND Probe RSP Params WDI API" );
6839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006841 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006843}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006844#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07006845/*
6846 * FUNCTION: WDA_SetMaxTxPowerCallBack
6847 * send the response to PE with power value received from WDI
6848 */
6849void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6850 void* pUserData)
6851{
6852 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6853 tWDA_CbContext *pWDA = NULL;
6854 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6855
6856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006857 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 if(NULL == pWdaParams)
6859 {
6860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006861 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 VOS_ASSERT(0) ;
6863 return ;
6864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006865 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6866 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 if( NULL == pMaxTxPowerParams )
6868 {
6869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006870 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006871 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6873 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 return ;
6875 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006876
Jeff Johnson295189b2012-06-20 16:38:30 -07006877
6878 /*need to free memory for the pointers used in the
6879 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6881 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006883
Jeff Johnson295189b2012-06-20 16:38:30 -07006884
6885 /* send response to UMAC*/
6886 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6887
6888 return;
6889}
Jeff Johnson295189b2012-06-20 16:38:30 -07006890/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006891 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 * Request to WDI to send set Max Tx Power Request
6893 */
6894 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6895 tMaxTxPowerParams *MaxTxPowerParams)
6896{
6897 WDI_Status status = WDI_STATUS_SUCCESS;
6898 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6899 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006900
Jeff Johnson295189b2012-06-20 16:38:30 -07006901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006902 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006903
Jeff Johnson295189b2012-06-20 16:38:30 -07006904 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6905 sizeof(WDI_SetMaxTxPowerParamsType));
6906 if(NULL == wdiSetMaxTxPowerParams)
6907 {
6908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006910 VOS_ASSERT(0);
6911 return VOS_STATUS_E_NOMEM;
6912 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6914 if(NULL == pWdaParams)
6915 {
6916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006917 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 vos_mem_free(wdiSetMaxTxPowerParams);
6919 VOS_ASSERT(0);
6920 return VOS_STATUS_E_NOMEM;
6921 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006922 /* Copy.Max.Tx.Power Params to WDI structure */
6923 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6924 MaxTxPowerParams->bssId,
6925 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6927 MaxTxPowerParams->selfStaMacAddr,
6928 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6930 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 pWdaParams->pWdaContext = pWDA;
6933 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006934 /* store Params pass it to WDI */
6935 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6937 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 if(IS_WDI_STATUS_FAILURE(status))
6939 {
6940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6941 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6943 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006944 /* send response to UMAC*/
6945 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 }
6947 return CONVERT_WDI2VOS_STATUS(status);
6948
6949}
Jeff Johnson295189b2012-06-20 16:38:30 -07006950#endif
schang86c22c42013-03-13 18:41:24 -07006951
6952/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006953 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6954 * send the response to PE with power value received from WDI
6955 */
6956void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6957 *pwdiSetMaxTxPowerPerBandRsp,
6958 void* pUserData)
6959{
6960 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6961 tWDA_CbContext *pWDA = NULL;
6962 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6963
6964 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6965 "<------ %s ", __func__);
6966 if (NULL == pWdaParams)
6967 {
6968 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6969 "%s: pWdaParams received NULL", __func__);
6970 VOS_ASSERT(0);
6971 return ;
6972 }
6973 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6974 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6975 if ( NULL == pMxTxPwrPerBandParams )
6976 {
6977 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6978 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6979 VOS_ASSERT(0);
6980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6981 vos_mem_free(pWdaParams);
6982 return;
6983 }
6984
6985 /*need to free memory for the pointers used in the
6986 WDA Process.Set Max Tx Power Req function*/
6987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6988 vos_mem_free(pWdaParams);
6989 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6990
6991 /* send response to UMAC*/
6992 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6993 pMxTxPwrPerBandParams, 0);
6994
6995 return;
6996}
6997
6998/*
6999 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
7000 * Request to WDI to send set Max Tx Power Per band Request
7001 */
7002 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
7003 tMaxTxPowerPerBandParams
7004 *MaxTxPowerPerBandParams)
7005{
7006 WDI_Status status = WDI_STATUS_SUCCESS;
7007 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
7008 tWDA_ReqParams *pWdaParams = NULL;
7009
7010 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7011 "------> %s ", __func__);
7012
7013 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
7014 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7015
7016 if (NULL == wdiSetMxTxPwrPerBandParams)
7017 {
7018 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7019 "%s: VOS MEM Alloc Failure", __func__);
7020 VOS_ASSERT(0);
7021 return VOS_STATUS_E_NOMEM;
7022 }
7023 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7024 if (NULL == pWdaParams)
7025 {
7026 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7027 "%s: VOS MEM Alloc Failure", __func__);
7028 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7029 VOS_ASSERT(0);
7030 return VOS_STATUS_E_NOMEM;
7031 }
7032 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7033 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7034 MaxTxPowerPerBandParams->bandInfo;
7035 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7036 MaxTxPowerPerBandParams->power;
7037 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7038 pWdaParams->pWdaContext = pWDA;
7039 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7040 /* store Params pass it to WDI */
7041 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7042 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7043 WDA_SetMaxTxPowerPerBandCallBack,
7044 pWdaParams);
7045 if (IS_WDI_STATUS_FAILURE(status))
7046 {
7047 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7048 "Failure in SET MAX TX Power REQ Params WDI API,"
7049 " free all the memory");
7050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7051 vos_mem_free(pWdaParams);
7052 /* send response to UMAC*/
7053 WDA_SendMsg(pWDA,
7054 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7055 MaxTxPowerPerBandParams, 0);
7056 }
7057 return CONVERT_WDI2VOS_STATUS(status);
7058}
7059
7060/*
schang86c22c42013-03-13 18:41:24 -07007061 * FUNCTION: WDA_SetTxPowerCallBack
7062 * send the response to PE with power value received from WDI
7063 */
7064void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7065 void* pUserData)
7066{
7067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7068 tWDA_CbContext *pWDA = NULL;
7069 tSirSetTxPowerReq *pTxPowerParams = NULL;
7070
7071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7072 "<------ %s ", __func__);
7073 if(NULL == pWdaParams)
7074 {
7075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7076 "%s: pWdaParams received NULL", __func__);
7077 VOS_ASSERT(0) ;
7078 return ;
7079 }
7080 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7081 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7082 if(NULL == pTxPowerParams)
7083 {
7084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7085 "%s: pTxPowerParams received NULL " ,__func__);
7086 VOS_ASSERT(0);
7087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7088 vos_mem_free(pWdaParams);
7089 return ;
7090 }
7091
7092 /*need to free memory for the pointers used in the
7093 WDA Process.Set Max Tx Power Req function*/
7094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7095 vos_mem_free(pWdaParams);
7096
7097 /* send response to UMAC*/
7098 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7099 return;
7100}
7101
7102/*
7103 * FUNCTION: WDA_ProcessSetTxPowerReq
7104 * Request to WDI to send set Tx Power Request
7105 */
7106 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7107 tSirSetTxPowerReq *txPowerParams)
7108{
7109 WDI_Status status = WDI_STATUS_SUCCESS;
7110 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7111 tWDA_ReqParams *pWdaParams = NULL;
7112
7113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7114 "------> %s ", __func__);
7115
7116 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7117 sizeof(WDI_SetTxPowerParamsType));
7118 if(NULL == wdiSetTxPowerParams)
7119 {
7120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7121 "%s: VOS MEM Alloc Failure", __func__);
7122 VOS_ASSERT(0);
7123 return VOS_STATUS_E_NOMEM;
7124 }
7125 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7126 if(NULL == pWdaParams)
7127 {
7128 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7129 "%s: VOS MEM Alloc Failure", __func__);
7130 vos_mem_free(wdiSetTxPowerParams);
7131 VOS_ASSERT(0);
7132 return VOS_STATUS_E_NOMEM;
7133 }
7134 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7135 txPowerParams->bssIdx;
7136 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7137 txPowerParams->mwPower;
7138 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7139 pWdaParams->pWdaContext = pWDA;
7140 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7141 /* store Params pass it to WDI */
7142 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7143 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7144 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7145 if(IS_WDI_STATUS_FAILURE(status))
7146 {
7147 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7148 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7149 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7150 vos_mem_free(pWdaParams);
7151 /* send response to UMAC*/
7152 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7153 }
7154 return CONVERT_WDI2VOS_STATUS(status);
7155}
7156
Jeff Johnson295189b2012-06-20 16:38:30 -07007157/*
7158 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7159 * Free the memory. No need to send any response to PE in this case
7160 */
7161void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7162{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007163 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7164
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007166 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007167
7168 if(NULL == pWdaParams)
7169 {
7170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007171 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007172 VOS_ASSERT(0) ;
7173 return ;
7174 }
7175
7176 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7177 vos_mem_free(pWdaParams->wdaMsgParam) ;
7178 vos_mem_free(pWdaParams);
7179
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 /*
7181 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7182 * so just free the request param here
7183 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 return ;
7185}
7186
Jeff Johnson295189b2012-06-20 16:38:30 -07007187/*
7188 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7189 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7190 */
7191VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7192 tP2pPsParams *pP2pPsConfigParams)
7193{
7194 WDI_Status status = WDI_STATUS_SUCCESS ;
7195 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7196 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7197 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007198 tWDA_ReqParams *pWdaParams = NULL;
7199
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007201 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 if(NULL == wdiSetP2PGONOAReqParam)
7203 {
7204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 VOS_ASSERT(0);
7207 return VOS_STATUS_E_NOMEM;
7208 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007209
7210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7211 if(NULL == pWdaParams)
7212 {
7213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007214 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007215 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007216 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007217 VOS_ASSERT(0);
7218 return VOS_STATUS_E_NOMEM;
7219 }
7220
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7222 pP2pPsConfigParams->opp_ps;
7223 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7224 pP2pPsConfigParams->ctWindow;
7225 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7226 pP2pPsConfigParams->count;
7227 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7228 pP2pPsConfigParams->duration;
7229 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7230 pP2pPsConfigParams->interval;
7231 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7232 pP2pPsConfigParams->single_noa_duration;
7233 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7234 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007235
Jeff Johnson295189b2012-06-20 16:38:30 -07007236 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7237 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007238 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7239
Jeff Johnson295189b2012-06-20 16:38:30 -07007240 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007241 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7242 pWdaParams->pWdaContext = pWDA;
7243
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007245 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7246
Jeff Johnson295189b2012-06-20 16:38:30 -07007247 if(IS_WDI_STATUS_FAILURE(status))
7248 {
7249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7250 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7252 vos_mem_free(pWdaParams->wdaMsgParam);
7253 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 return CONVERT_WDI2VOS_STATUS(status);
7256
Jeff Johnson295189b2012-06-20 16:38:30 -07007257}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307258
7259#ifdef FEATURE_WLAN_TDLS
7260/*
7261 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7262 * Free the memory. No need to send any response to PE in this case
7263 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307264void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7265 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307266{
7267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7268 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307269 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307270
7271
7272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7273 "<------ %s " ,__func__);
7274 if(NULL == pWdaParams)
7275 {
7276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7277 "%s: pWdaParams received NULL", __func__);
7278 VOS_ASSERT(0) ;
7279 return ;
7280 }
7281 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7282
7283 if(NULL == pWdaParams)
7284 {
7285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7286 "%s: pWdaParams received NULL", __func__);
7287 VOS_ASSERT(0) ;
7288 return ;
7289 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307290 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7291 if( NULL == pTdlsLinkEstablishParams )
7292 {
7293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7294 "%s: pTdlsLinkEstablishParams "
7295 "received NULL " ,__func__);
7296 VOS_ASSERT(0);
7297 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7298 vos_mem_free(pWdaParams);
7299 return ;
7300 }
7301 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7302 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307304 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307305 /* send response to UMAC*/
7306 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7307
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307308 return ;
7309}
7310
7311VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7312 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7313{
7314 WDI_Status status = WDI_STATUS_SUCCESS ;
7315 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7316 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7317 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7318 tWDA_ReqParams *pWdaParams = NULL;
7319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7320 "------> %s " ,__func__);
7321 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7322 {
7323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7324 "%s: VOS MEM Alloc Failure", __func__);
7325 VOS_ASSERT(0);
7326 return VOS_STATUS_E_NOMEM;
7327 }
7328 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7329 if(NULL == pWdaParams)
7330 {
7331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7332 "%s: VOS MEM Alloc Failure", __func__);
7333 vos_mem_free(pTdlsLinkEstablishParams);
7334 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7335 VOS_ASSERT(0);
7336 return VOS_STATUS_E_NOMEM;
7337 }
7338 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307339 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307340 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307341 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307342 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307343 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307344 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307345 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307346 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307347 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307348 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7349 pTdlsLinkEstablishParams->isOffChannelSupported;
7350
7351 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7352 pTdlsLinkEstablishParams->validChannels,
7353 pTdlsLinkEstablishParams->validChannelsLen);
7354
7355 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7356 pTdlsLinkEstablishParams->validChannelsLen;
7357
7358 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7359 pTdlsLinkEstablishParams->validOperClasses,
7360 pTdlsLinkEstablishParams->validOperClassesLen);
7361 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7362 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307363
7364 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7365 /* Store msg pointer from PE, as this will be used for response */
7366 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7367 /* store Params pass it to WDI */
7368 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7369 pWdaParams->pWdaContext = pWDA;
7370
7371 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7372 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7373 WDA_SetTDLSLinkEstablishReqParamsCallback,
7374 pWdaParams);
7375 if(IS_WDI_STATUS_FAILURE(status))
7376 {
7377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7378 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7380 vos_mem_free(pWdaParams->wdaMsgParam);
7381 vos_mem_free(pWdaParams);
7382 }
7383 return CONVERT_WDI2VOS_STATUS(status);
7384}
7385#endif
7386
7387
Jeff Johnson295189b2012-06-20 16:38:30 -07007388#ifdef WLAN_FEATURE_VOWIFI_11R
7389/*
7390 * FUNCTION: WDA_AggrAddTSReqCallback
7391 * send ADD AGGREGATED TS RSP back to PE
7392 */
7393void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7394{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007395 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7396 tWDA_CbContext *pWDA;
7397 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007398 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007400 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007401 if(NULL == pWdaParams)
7402 {
7403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007404 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007405 VOS_ASSERT(0) ;
7406 return ;
7407 }
7408
7409 pWDA = pWdaParams->pWdaContext;
7410 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007411
7412 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7413 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007414 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007416 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007417
7418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7419 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007420 return ;
7421}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007422/*
7423 * FUNCTION: WDA_ProcessAddTSReq
7424 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7425 */
7426VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7427 tAggrAddTsParams *pAggrAddTsReqParams)
7428{
7429 WDI_Status status = WDI_STATUS_SUCCESS ;
7430 int i;
7431 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007432 tWDA_ReqParams *pWdaParams = NULL;
7433
7434
Jeff Johnson295189b2012-06-20 16:38:30 -07007435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007436 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007437 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7438 sizeof(WDI_AggrAddTSReqParamsType)) ;
7439 if(NULL == wdiAggrAddTSReqParam)
7440 {
7441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007442 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 VOS_ASSERT(0);
7444 return VOS_STATUS_E_NOMEM;
7445 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007446
7447
7448 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7449 if(NULL == pWdaParams)
7450 {
7451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007452 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007453 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007454 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007455 VOS_ASSERT(0);
7456 return VOS_STATUS_E_NOMEM;
7457 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7459 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7460 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7462 {
7463 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7464 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7465 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7467 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7468 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7469 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7470 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7471 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7472 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7473 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7474 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7475 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7476 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7477 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7478 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7479 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7480 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7481 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7483 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007484 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7485 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7486 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7487 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7488 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7489 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7490 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7491 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7492 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7493 pAggrAddTsReqParams->tspec[i].inactInterval;
7494 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7495 pAggrAddTsReqParams->tspec[i].suspendInterval;
7496 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7497 pAggrAddTsReqParams->tspec[i].svcStartTime;
7498 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7499 pAggrAddTsReqParams->tspec[i].minDataRate;
7500 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7501 pAggrAddTsReqParams->tspec[i].meanDataRate;
7502 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7503 pAggrAddTsReqParams->tspec[i].peakDataRate;
7504 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7505 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7506 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7507 pAggrAddTsReqParams->tspec[i].delayBound;
7508 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7509 pAggrAddTsReqParams->tspec[i].minPhyRate;
7510 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7511 pAggrAddTsReqParams->tspec[i].surplusBw;
7512 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7513 pAggrAddTsReqParams->tspec[i].mediumTime;
7514 }
7515
7516 /* TODO: tAggrAddTsParams doesn't have the following fields */
7517#if 0
7518 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7519 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7520 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7521 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7522#endif
7523 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7524
7525 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007526 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007528 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7529
7530 pWdaParams->pWdaContext = pWDA;
7531
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007533 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7534
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 if(IS_WDI_STATUS_FAILURE(status))
7536 {
7537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7538 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7540 vos_mem_free(pWdaParams);
7541
7542 /* send the failure response back to PE*/
7543 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7544 {
7545 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7546 }
7547
7548 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7549 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 return CONVERT_WDI2VOS_STATUS(status) ;
7552}
7553#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007554/*
Mihir Shetea4306052014-03-25 00:02:54 +05307555 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 * send Enter IMPS RSP back to PE
7557 */
Mihir Shetea4306052014-03-25 00:02:54 +05307558void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007559{
Mihir Shetea4306052014-03-25 00:02:54 +05307560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7561 tWDA_CbContext *pWDA;
7562
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307564 "<------ %s status=%d" ,__func__,status);
7565 if(NULL == pWdaParams)
7566 {
7567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7568 "%s: pWdaParams received NULL", __func__);
7569 VOS_ASSERT(0);
7570 return;
7571 }
7572
7573 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7574
7575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7576 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007577 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 return ;
7579}
Mihir Shetea4306052014-03-25 00:02:54 +05307580
7581
7582/*
7583 * FUNCTION: WDA_EnterImpsReqCallback
7584 * Free memory and send Enter IMPS RSP back to PE.
7585 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7586 */
7587void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7588{
7589 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7590 tWDA_CbContext *pWDA;
7591
7592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7593 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7594
7595 if(NULL == pWdaParams)
7596 {
7597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7598 "%s: pWdaParams received NULL", __func__);
7599 VOS_ASSERT(0);
7600 return;
7601 }
7602
7603 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7604
7605 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7606 {
7607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7608 vos_mem_free(pWdaParams);
7609 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7610 CONVERT_WDI2SIR_STATUS(wdiStatus));
7611 }
7612
7613 return;
7614}
Jeff Johnson295189b2012-06-20 16:38:30 -07007615/*
7616 * FUNCTION: WDA_ProcessEnterImpsReq
7617 * Request to WDI to Enter IMPS power state.
7618 */
7619VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7620{
7621 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307622 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7623 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007625 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307626
7627
7628 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7629 if (NULL == wdiEnterImpsReqParams)
7630 {
7631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7632 "%s: VOS MEM Alloc Failure", __func__);
7633 VOS_ASSERT(0);
7634 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7635 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7636 return VOS_STATUS_E_NOMEM;
7637 }
7638
7639 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7640 if (NULL == pWdaParams)
7641 {
7642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7643 "%s: VOS MEM Alloc Failure", __func__);
7644 VOS_ASSERT(0);
7645 vos_mem_free(wdiEnterImpsReqParams);
7646 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
7647 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7648 return VOS_STATUS_E_NOMEM;
7649 }
7650
7651 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
7652 wdiEnterImpsReqParams->pUserData = pWdaParams;
7653
7654 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
7655 pWdaParams->wdaMsgParam = NULL;
7656 pWdaParams->pWdaContext = pWDA;
7657
7658 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
7659 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
7660 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 if(IS_WDI_STATUS_FAILURE(status))
7662 {
7663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7664 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05307665 vos_mem_free(wdiEnterImpsReqParams);
7666 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007667 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 return CONVERT_WDI2VOS_STATUS(status) ;
7670}
Jeff Johnson295189b2012-06-20 16:38:30 -07007671/*
7672 * FUNCTION: WDA_ExitImpsReqCallback
7673 * send Exit IMPS RSP back to PE
7674 */
7675void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7676{
7677 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007679 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007680 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007681 return ;
7682}
Jeff Johnson295189b2012-06-20 16:38:30 -07007683/*
7684 * FUNCTION: WDA_ProcessExitImpsReq
7685 * Request to WDI to Exit IMPS power state.
7686 */
7687VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7688{
7689 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007691 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007692 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 if(IS_WDI_STATUS_FAILURE(status))
7694 {
7695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7696 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007697 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007699 return CONVERT_WDI2VOS_STATUS(status) ;
7700}
Jeff Johnson295189b2012-06-20 16:38:30 -07007701/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007702 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007703 * send Enter BMPS RSP back to PE
7704 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007705void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007706{
7707 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7708 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007709 tEnterBmpsParams *pEnterBmpsRspParams;
7710
Jeff Johnson295189b2012-06-20 16:38:30 -07007711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007712 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 if(NULL == pWdaParams)
7714 {
7715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007716 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007717 VOS_ASSERT(0) ;
7718 return ;
7719 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007720
7721 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7722 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7723
7724 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007725 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007726
7727 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007729 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7730
Jeff Johnson295189b2012-06-20 16:38:30 -07007731 return ;
7732}
Jeff Johnson295189b2012-06-20 16:38:30 -07007733/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007734 * FUNCTION: WDA_EnterBmpsReqCallback
7735 * Free memory and send Enter BMPS RSP back to PE.
7736 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7737 */
7738void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7739{
7740 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7741 tWDA_CbContext *pWDA;
7742 tEnterBmpsParams *pEnterBmpsRspParams;
7743
7744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7745 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7746
7747 if(NULL == pWdaParams)
7748 {
7749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7750 "%s: pWdaParams received NULL", __func__);
7751 VOS_ASSERT(0);
7752 return;
7753 }
7754
7755 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7756 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7757 pEnterBmpsRspParams->status = wdiStatus;
7758
7759 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7760 {
7761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7762 vos_mem_free(pWdaParams);
7763 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7764 }
7765
7766 return;
7767}
7768/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007769 * FUNCTION: WDA_ProcessEnterBmpsReq
7770 * Request to WDI to Enter BMPS power state.
7771 */
7772VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7773 tEnterBmpsParams *pEnterBmpsReqParams)
7774{
7775 WDI_Status status = WDI_STATUS_SUCCESS;
7776 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7777 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007779 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7781 {
7782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007783 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007784 VOS_ASSERT(0);
7785 return VOS_STATUS_E_FAILURE;
7786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7788 if (NULL == wdiEnterBmpsReqParams)
7789 {
7790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007791 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007793 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7794 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 return VOS_STATUS_E_NOMEM;
7796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007797 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7798 if (NULL == pWdaParams)
7799 {
7800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007801 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 VOS_ASSERT(0);
7803 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007804 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7805 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 return VOS_STATUS_E_NOMEM;
7807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7809 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7810 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7811 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007812 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07007813 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7814 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7815 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007816 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7817 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007818
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 /* Store param pointer as passed in by caller */
7820 /* store Params pass it to WDI */
7821 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007822 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007823 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007824 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007825 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007826 if (IS_WDI_STATUS_FAILURE(status))
7827 {
7828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7829 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007831 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007832 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007833 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 return CONVERT_WDI2VOS_STATUS(status);
7836}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007837
7838
7839static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7840 WDI_Status wdiStatus,
7841 tExitBmpsParams *pExitBmpsReqParams)
7842{
7843 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7844
7845 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7846}
7847
7848
Jeff Johnson295189b2012-06-20 16:38:30 -07007849/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007850 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 * send Exit BMPS RSP back to PE
7852 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007853void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007854{
7855 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7856 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007857 tExitBmpsParams *pExitBmpsRspParams;
7858
Jeff Johnson295189b2012-06-20 16:38:30 -07007859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007860 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 if(NULL == pWdaParams)
7862 {
7863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007864 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 VOS_ASSERT(0) ;
7866 return ;
7867 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007868
7869 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7870 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7871
7872 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007873 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007874
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7876 vos_mem_free(pWdaParams) ;
7877
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007878 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 return ;
7880}
Jeff Johnson295189b2012-06-20 16:38:30 -07007881/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007882 * FUNCTION: WDA_ExitBmpsReqCallback
7883 * Free memory and send Exit BMPS RSP back to PE.
7884 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7885 */
7886void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7887{
7888 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7889 tWDA_CbContext *pWDA;
7890 tExitBmpsParams *pExitBmpsRspParams;
7891
7892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7893 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7894
7895 if(NULL == pWdaParams)
7896 {
7897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7898 "%s: pWdaParams received NULL", __func__);
7899 VOS_ASSERT(0);
7900 return;
7901 }
7902
7903 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7904 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7905 pExitBmpsRspParams->status = wdiStatus;
7906
7907 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7908 {
7909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7910 vos_mem_free(pWdaParams);
7911 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7912 }
7913
7914 return;
7915}
7916/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 * FUNCTION: WDA_ProcessExitBmpsReq
7918 * Request to WDI to Exit BMPS power state.
7919 */
7920VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7921 tExitBmpsParams *pExitBmpsReqParams)
7922{
7923 WDI_Status status = WDI_STATUS_SUCCESS ;
7924 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7925 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7926 sizeof(WDI_ExitBmpsReqParamsType)) ;
7927 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007929 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007930 if(NULL == wdiExitBmpsReqParams)
7931 {
7932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007934 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007935 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 return VOS_STATUS_E_NOMEM;
7937 }
7938 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7939 if(NULL == pWdaParams)
7940 {
7941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007943 VOS_ASSERT(0);
7944 vos_mem_free(wdiExitBmpsReqParams);
7945 return VOS_STATUS_E_NOMEM;
7946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007947 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007948
7949 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7950
Yue Ma7f44bbe2013-04-12 11:47:39 -07007951 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7952 wdiExitBmpsReqParams->pUserData = pWdaParams;
7953
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 /* Store param pointer as passed in by caller */
7955 /* store Params pass it to WDI */
7956 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7957 pWdaParams->pWdaContext = pWDA;
7958 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007959 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007960 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007961 if(IS_WDI_STATUS_FAILURE(status))
7962 {
7963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7964 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7966 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007967 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 return CONVERT_WDI2VOS_STATUS(status) ;
7970}
Jeff Johnson295189b2012-06-20 16:38:30 -07007971/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007972 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 * send Enter UAPSD RSP back to PE
7974 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007975void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007976{
7977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7978 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007979 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007981 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 if(NULL == pWdaParams)
7983 {
7984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007985 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007986 VOS_ASSERT(0) ;
7987 return ;
7988 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007989
7990 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7991 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7992
7993 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007994 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007995
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7997 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007998 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 return ;
8000}
Jeff Johnson295189b2012-06-20 16:38:30 -07008001/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008002 * FUNCTION: WDA_EnterUapsdReqCallback
8003 * Free memory and send Enter UAPSD RSP back to PE.
8004 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
8005 */
8006void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8007{
8008 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8009 tWDA_CbContext *pWDA;
8010 tUapsdParams *pEnterUapsdRsqParams;
8011
8012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8013 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8014
8015 if(NULL == pWdaParams)
8016 {
8017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8018 "%s: pWdaParams received NULL", __func__);
8019 VOS_ASSERT(0);
8020 return;
8021 }
8022
8023 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8024 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8025 pEnterUapsdRsqParams->status = wdiStatus;
8026
8027 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8028 {
8029 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8030 vos_mem_free(pWdaParams);
8031 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8032 }
8033
8034 return;
8035}
8036/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 * FUNCTION: WDA_ProcessEnterUapsdReq
8038 * Request to WDI to Enter UAPSD power state.
8039 */
8040VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8041 tUapsdParams *pEnterUapsdReqParams)
8042{
8043 WDI_Status status = WDI_STATUS_SUCCESS ;
8044 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8045 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8046 sizeof(WDI_EnterUapsdReqParamsType)) ;
8047 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008049 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008050 if(NULL == wdiEnterUapsdReqParams)
8051 {
8052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008053 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008054 VOS_ASSERT(0);
8055 return VOS_STATUS_E_NOMEM;
8056 }
8057 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8058 if(NULL == pWdaParams)
8059 {
8060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 VOS_ASSERT(0);
8063 vos_mem_free(wdiEnterUapsdReqParams);
8064 return VOS_STATUS_E_NOMEM;
8065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008066 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8067 pEnterUapsdReqParams->beDeliveryEnabled;
8068 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8069 pEnterUapsdReqParams->beTriggerEnabled;
8070 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8071 pEnterUapsdReqParams->bkDeliveryEnabled;
8072 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8073 pEnterUapsdReqParams->bkTriggerEnabled;
8074 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8075 pEnterUapsdReqParams->viDeliveryEnabled;
8076 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8077 pEnterUapsdReqParams->viTriggerEnabled;
8078 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8079 pEnterUapsdReqParams->voDeliveryEnabled;
8080 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8081 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008082 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008083
Yue Ma7f44bbe2013-04-12 11:47:39 -07008084 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8085 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008086
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 /* Store param pointer as passed in by caller */
8088 /* store Params pass it to WDI */
8089 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8090 pWdaParams->pWdaContext = pWDA;
8091 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008093 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, 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 Enter UAPSD 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 return CONVERT_WDI2VOS_STATUS(status) ;
8103}
Jeff Johnson295189b2012-06-20 16:38:30 -07008104/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008105 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008106 * send Exit UAPSD RSP back to PE
8107 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008108void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008109{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008110
8111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8112 tWDA_CbContext *pWDA;
8113 tExitUapsdParams *pExitUapsdRspParams;
8114
Jeff Johnson295189b2012-06-20 16:38:30 -07008115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008116 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008117 if(NULL == pWdaParams)
8118 {
8119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008120 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008121 VOS_ASSERT(0);
8122 return;
8123 }
8124
8125 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8126 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8127
8128 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008129 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008130
8131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8132 vos_mem_free(pWdaParams) ;
8133
8134 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008135 return ;
8136}
Jeff Johnson295189b2012-06-20 16:38:30 -07008137/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008138 * FUNCTION: WDA_ExitUapsdReqCallback
8139 * Free memory and send Exit UAPSD RSP back to PE.
8140 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8141 */
8142void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8143{
8144 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8145 tWDA_CbContext *pWDA;
8146 tExitUapsdParams *pExitUapsdRspParams;
8147
8148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8149 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8150
8151 if(NULL == pWdaParams)
8152 {
8153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8154 "%s: pWdaParams received NULL", __func__);
8155 VOS_ASSERT(0);
8156 return;
8157 }
8158
8159 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8160 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8161 pExitUapsdRspParams->status = wdiStatus;
8162
8163 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8164 {
8165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8166 vos_mem_free(pWdaParams);
8167 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8168 }
8169
8170 return;
8171}
8172/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008173 * FUNCTION: WDA_ProcessExitUapsdReq
8174 * Request to WDI to Exit UAPSD power state.
8175 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008176VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8177 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008178{
8179 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008180 tWDA_ReqParams *pWdaParams ;
8181 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8182 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8183 sizeof(WDI_ExitUapsdReqParamsType)) ;
8184
Jeff Johnson295189b2012-06-20 16:38:30 -07008185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008186 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008187
8188 if(NULL == wdiExitUapsdReqParams)
8189 {
8190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008191 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008192 VOS_ASSERT(0);
8193 return VOS_STATUS_E_NOMEM;
8194 }
8195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8196 if(NULL == pWdaParams)
8197 {
8198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008199 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008200 VOS_ASSERT(0);
8201 vos_mem_free(wdiExitUapsdReqParams);
8202 return VOS_STATUS_E_NOMEM;
8203 }
8204
8205 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008206 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8207 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008208
8209 /* Store param pointer as passed in by caller */
8210 /* store Params pass it to WDI */
8211 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8212 pWdaParams->pWdaContext = pWDA;
8213 pWdaParams->wdaMsgParam = pExitUapsdParams;
8214
Yue Ma7f44bbe2013-04-12 11:47:39 -07008215 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008216 if(IS_WDI_STATUS_FAILURE(status))
8217 {
8218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8219 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008220 vos_mem_free(pWdaParams->wdaMsgParam) ;
8221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8222 vos_mem_free(pWdaParams) ;
8223
Jeff Johnson295189b2012-06-20 16:38:30 -07008224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008225 return CONVERT_WDI2VOS_STATUS(status) ;
8226}
8227
Jeff Johnson295189b2012-06-20 16:38:30 -07008228/*
8229 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8230 *
8231 */
8232void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8233{
8234 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008236 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008237 if(NULL == pWdaParams)
8238 {
8239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008240 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 VOS_ASSERT(0) ;
8242 return ;
8243 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008244 if( pWdaParams != NULL )
8245 {
8246 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8247 {
8248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8249 }
8250 if( pWdaParams->wdaMsgParam != NULL )
8251 {
8252 vos_mem_free(pWdaParams->wdaMsgParam) ;
8253 }
8254 vos_mem_free(pWdaParams) ;
8255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 return ;
8257}
Jeff Johnson295189b2012-06-20 16:38:30 -07008258/*
8259 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8260 * Request to WDI to set the power save params at start.
8261 */
8262VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8263 tSirPowerSaveCfg *pPowerSaveCfg)
8264{
8265 WDI_Status status = WDI_STATUS_SUCCESS ;
8266 tHalCfg *tlvStruct = NULL ;
8267 tANI_U8 *tlvStructStart = NULL ;
8268 v_PVOID_t *configParam;
8269 tANI_U32 configParamSize;
8270 tANI_U32 *configDataValue;
8271 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8272 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008274 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8276 {
8277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008278 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008280 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008281 return VOS_STATUS_E_FAILURE;
8282 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008283 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8284 if (NULL == wdiPowerSaveCfg)
8285 {
8286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008289 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008290 return VOS_STATUS_E_NOMEM;
8291 }
8292 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8293 if(NULL == pWdaParams)
8294 {
8295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008296 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008297 VOS_ASSERT(0);
8298 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008299 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 return VOS_STATUS_E_NOMEM;
8301 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008302 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8303 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 if(NULL == configParam)
8305 {
8306 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008307 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008308 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008309 vos_mem_free(pWdaParams);
8310 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008311 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 return VOS_STATUS_E_NOMEM;
8313 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008314 vos_mem_set(configParam, configParamSize, 0);
8315 wdiPowerSaveCfg->pConfigBuffer = configParam;
8316 tlvStruct = (tHalCfg *)configParam;
8317 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8319 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8320 tlvStruct->length = sizeof(tANI_U32);
8321 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8322 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8324 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008325 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8326 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8327 tlvStruct->length = sizeof(tANI_U32);
8328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8329 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8331 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008332 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8333 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8334 tlvStruct->length = sizeof(tANI_U32);
8335 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8336 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008337 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8338 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8340 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8341 tlvStruct->length = sizeof(tANI_U32);
8342 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8343 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8345 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8347 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8348 tlvStruct->length = sizeof(tANI_U32);
8349 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8350 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008351 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8352 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008353 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8354 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8355 tlvStruct->length = sizeof(tANI_U32);
8356 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8357 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008358 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8359 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008360 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8361 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8362 tlvStruct->length = sizeof(tANI_U32);
8363 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8364 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8366 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008367 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8368 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8369 tlvStruct->length = sizeof(tANI_U32);
8370 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8371 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8372 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8373 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8375 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8376 tlvStruct->length = sizeof(tANI_U32);
8377 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8378 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8379 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8380 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8382 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8383 tlvStruct->length = sizeof(tANI_U32);
8384 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8385 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008386 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8387 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008388 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8389 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8390 tlvStruct->length = sizeof(tANI_U32);
8391 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8392 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008393 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8394 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008395 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 /* store Params pass it to WDI */
8398 pWdaParams->wdaMsgParam = configParam;
8399 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8400 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8402 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008403 if(IS_WDI_STATUS_FAILURE(status))
8404 {
8405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8406 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8407 vos_mem_free(pWdaParams->wdaMsgParam);
8408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8409 vos_mem_free(pWdaParams);
8410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008412 return CONVERT_WDI2VOS_STATUS(status);
8413}
Jeff Johnson295189b2012-06-20 16:38:30 -07008414/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008415 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008416 *
8417 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008418void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008419{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008420 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8421
Jeff Johnson295189b2012-06-20 16:38:30 -07008422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008423 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008424
8425 if(NULL == pWdaParams)
8426 {
8427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8428 "%s: pWdaParams received NULL", __func__);
8429 VOS_ASSERT(0);
8430 return ;
8431 }
8432
8433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008434 vos_mem_free(pWdaParams);
8435
Jeff Johnson295189b2012-06-20 16:38:30 -07008436 return ;
8437}
Jeff Johnson295189b2012-06-20 16:38:30 -07008438/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008439 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8440 * Free memory.
8441 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8442 */
8443void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8444{
8445 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8446
8447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8448 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8449
8450 if(NULL == pWdaParams)
8451 {
8452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8453 "%s: pWdaParams received NULL", __func__);
8454 VOS_ASSERT(0);
8455 return;
8456 }
8457
8458 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8459 {
8460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8461 vos_mem_free(pWdaParams);
8462 }
8463
8464 return;
8465}
8466/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008467 * FUNCTION: WDA_SetUapsdAcParamsReq
8468 * Request to WDI to set the UAPSD params for an ac (sta mode).
8469 */
8470VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8471 tUapsdInfo *pUapsdInfo)
8472{
8473 WDI_Status status = WDI_STATUS_SUCCESS;
8474 tWDA_CbContext *pWDA = NULL ;
8475 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8476 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8477 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8478 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008480 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008481 if(NULL == wdiUapsdParams)
8482 {
8483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008485 VOS_ASSERT(0);
8486 return VOS_STATUS_E_NOMEM;
8487 }
8488 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8489 if(NULL == pWdaParams)
8490 {
8491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008492 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008493 VOS_ASSERT(0);
8494 vos_mem_free(wdiUapsdParams);
8495 return VOS_STATUS_E_NOMEM;
8496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008497 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8498 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8499 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8500 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8501 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8502 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008503 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8504 wdiUapsdParams->pUserData = pWdaParams;
8505
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 pWdaParams->pWdaContext = pWDA;
8508 /* Store param pointer as passed in by caller */
8509 pWdaParams->wdaMsgParam = pUapsdInfo;
8510 /* store Params pass it to WDI */
8511 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008512 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008513 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008514 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008515 if(IS_WDI_STATUS_FAILURE(status))
8516 {
8517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8518 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8520 vos_mem_free(pWdaParams);
8521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008522 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8523 return VOS_STATUS_SUCCESS;
8524 else
8525 return VOS_STATUS_E_FAILURE;
8526
Jeff Johnson295189b2012-06-20 16:38:30 -07008527}
8528/*
8529 * FUNCTION: WDA_ClearUapsdAcParamsReq
8530 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8531 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8532 * and again enter the UPASD with the modified params. Hence the disable
8533 * function was kept empty.
8534 *
8535 */
8536VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8537{
8538 /* do nothing */
8539 return VOS_STATUS_SUCCESS;
8540}
Jeff Johnson295189b2012-06-20 16:38:30 -07008541/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008542 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 *
8544 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008545void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008546{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8548
Jeff Johnson295189b2012-06-20 16:38:30 -07008549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008550 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008551
8552 if(NULL == pWdaParams)
8553 {
8554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008555 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008556 VOS_ASSERT(0) ;
8557 return ;
8558 }
8559
8560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8561 vos_mem_free(pWdaParams->wdaMsgParam);
8562 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008563
Jeff Johnson295189b2012-06-20 16:38:30 -07008564 //print a msg, nothing else to do
8565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008566 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 return ;
8568}
Jeff Johnson295189b2012-06-20 16:38:30 -07008569/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008570 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8571 * Free memory.
8572 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8573 */
8574void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8575{
8576 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8577
8578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8579 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8580
8581 if(NULL == pWdaParams)
8582 {
8583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8584 "%s: pWdaParams received NULL", __func__);
8585 VOS_ASSERT(0);
8586 return;
8587 }
8588
8589 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8590 {
8591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8592 vos_mem_free(pWdaParams->wdaMsgParam);
8593 vos_mem_free(pWdaParams);
8594 }
8595
8596 return;
8597}
8598/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008599 * FUNCTION: WDA_UpdateUapsdParamsReq
8600 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8601 */
8602VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8603 tUpdateUapsdParams* pUpdateUapsdInfo)
8604{
8605 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008606 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008607 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8608 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8609 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008610 tWDA_ReqParams *pWdaParams = NULL;
8611
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008613 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008614 if(NULL == wdiUpdateUapsdParams)
8615 {
8616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008618 VOS_ASSERT(0);
8619 return VOS_STATUS_E_NOMEM;
8620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008621 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8622 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8623 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008624 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8625 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008626
8627 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8628 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 {
8630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008632 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008633 vos_mem_free(pUpdateUapsdInfo);
8634 vos_mem_free(wdiUpdateUapsdParams);
8635 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008636 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008638 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008639 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008640 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8641 pWdaParams->pWdaContext = pWDA;
8642
Jeff Johnson43971f52012-07-17 12:26:56 -07008643 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008644 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008645 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008646
Jeff Johnson43971f52012-07-17 12:26:56 -07008647 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 {
8649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8650 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008651 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8653 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008654 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008656 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008657}
Jeff Johnson295189b2012-06-20 16:38:30 -07008658/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008659 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008660 *
8661 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008662void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008663{
8664 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008666 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008667 if(WDI_STATUS_SUCCESS != wdiStatus)
8668 {
8669 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008670 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 if(NULL == pWdaParams)
8673 {
8674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008675 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008676 VOS_ASSERT(0) ;
8677 return ;
8678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8680 vos_mem_free(pWdaParams->wdaMsgParam);
8681 vos_mem_free(pWdaParams);
8682 return ;
8683}
Jeff Johnson295189b2012-06-20 16:38:30 -07008684/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008685 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8686 * Free memory.
8687 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8688 */
8689void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8690{
8691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8692
8693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8694 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8695
8696 if(NULL == pWdaParams)
8697 {
8698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8699 "%s: pWdaParams received NULL", __func__);
8700 VOS_ASSERT(0);
8701 return;
8702 }
8703
8704 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8705 {
8706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8707 vos_mem_free(pWdaParams->wdaMsgParam);
8708 vos_mem_free(pWdaParams);
8709 }
8710
8711 return;
8712}
8713/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008714 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8715 *
8716 */
8717VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8718 tSirWlanSetRxpFilters *pWlanSuspendParam)
8719{
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008721 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05308722 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008723 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05308724 /* Sanity Check
8725 * This is very unlikely and add assert to collect more info next time */
8726 if(NULL == pWlanSuspendParam)
8727 {
8728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8729 "%s: pWlanSuspendParam received NULL", __func__);
8730 VOS_ASSERT(0) ;
8731 return VOS_STATUS_E_FAULT;
8732 }
8733 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8734 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008736 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008737 if(NULL == wdiRxpFilterParams)
8738 {
8739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008740 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008741 VOS_ASSERT(0);
8742 vos_mem_free(pWlanSuspendParam);
8743 return VOS_STATUS_E_NOMEM;
8744 }
8745 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8746 if(NULL == pWdaParams)
8747 {
8748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 VOS_ASSERT(0);
8751 vos_mem_free(wdiRxpFilterParams);
8752 vos_mem_free(pWlanSuspendParam);
8753 return VOS_STATUS_E_NOMEM;
8754 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8756 pWlanSuspendParam->setMcstBcstFilter;
8757 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8758 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8759
Yue Ma7f44bbe2013-04-12 11:47:39 -07008760 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8761 wdiRxpFilterParams->pUserData = pWdaParams;
8762
Jeff Johnson295189b2012-06-20 16:38:30 -07008763 pWdaParams->pWdaContext = pWDA;
8764 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8765 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008766 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008767 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008768 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008769 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008770 {
8771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8772 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008773 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8775 vos_mem_free(pWdaParams->wdaMsgParam);
8776 vos_mem_free(pWdaParams);
8777 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008778 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008779}
Jeff Johnson295189b2012-06-20 16:38:30 -07008780/*
8781 * FUNCTION: WDA_WdiIndicationCallback
8782 *
8783 */
8784void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8785 void* pUserData)
8786{
8787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008788 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008789}
Jeff Johnson295189b2012-06-20 16:38:30 -07008790/*
8791 * FUNCTION: WDA_ProcessWlanSuspendInd
8792 *
8793 */
8794VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8795 tSirWlanSuspendParam *pWlanSuspendParam)
8796{
8797 WDI_Status wdiStatus;
8798 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008800 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008801 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8802 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8803 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8804 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008806 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8807 if(WDI_STATUS_PENDING == wdiStatus)
8808 {
8809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008810 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008811 }
8812 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8813 {
8814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008815 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008817 vos_mem_free(pWlanSuspendParam);
8818 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8819}
8820
Chet Lanctot186b5732013-03-18 10:26:30 -07008821#ifdef WLAN_FEATURE_11W
8822/*
8823 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8824 *
8825 */
8826VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8827 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8828{
8829 WDI_Status wdiStatus;
8830 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8832 "------> %s ", __func__);
8833
8834 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8835 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8836 sizeof(tSirMacAddr));
8837
8838 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8839 wdiExclUnencryptParams.pUserData = pWDA;
8840
8841 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8842 if(WDI_STATUS_PENDING == wdiStatus)
8843 {
8844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8845 "Pending received for %s:%d ", __func__, __LINE__ );
8846 }
8847 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8848 {
8849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8850 "Failure in %s:%d ", __func__, __LINE__ );
8851 }
8852 vos_mem_free(pExclUnencryptParam);
8853 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8854}
8855#endif
8856
Jeff Johnson295189b2012-06-20 16:38:30 -07008857/*
8858 * FUNCTION: WDA_ProcessWlanResumeCallback
8859 *
8860 */
8861void WDA_ProcessWlanResumeCallback(
8862 WDI_SuspendResumeRspParamsType *resumeRspParams,
8863 void* pUserData)
8864{
8865 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008867 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 if(NULL == pWdaParams)
8869 {
8870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008871 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008872 VOS_ASSERT(0) ;
8873 return ;
8874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008875 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8876 {
8877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008878 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8881 vos_mem_free(pWdaParams->wdaMsgParam);
8882 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008883 return ;
8884}
Jeff Johnson295189b2012-06-20 16:38:30 -07008885/*
8886 * FUNCTION: WDA_ProcessWlanResumeReq
8887 *
8888 */
8889VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8890 tSirWlanResumeParam *pWlanResumeParam)
8891{
8892 WDI_Status wdiStatus;
8893 WDI_ResumeParamsType *wdiResumeParams =
8894 (WDI_ResumeParamsType *)vos_mem_malloc(
8895 sizeof(WDI_ResumeParamsType) ) ;
8896 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008898 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008899 if(NULL == wdiResumeParams)
8900 {
8901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008902 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008903 VOS_ASSERT(0);
8904 return VOS_STATUS_E_NOMEM;
8905 }
8906 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8907 if(NULL == pWdaParams)
8908 {
8909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008911 VOS_ASSERT(0);
8912 vos_mem_free(wdiResumeParams);
8913 return VOS_STATUS_E_NOMEM;
8914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008915 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8916 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008918 wdiResumeParams->wdiReqStatusCB = NULL;
8919 pWdaParams->wdaMsgParam = pWlanResumeParam;
8920 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8921 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8923 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8924 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8926 {
8927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8928 "Failure in Host Resume REQ WDI API, free all the memory " );
8929 VOS_ASSERT(0);
8930 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8931 vos_mem_free(pWdaParams->wdaMsgParam);
8932 vos_mem_free(pWdaParams);
8933 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008934 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8935}
8936
Jeff Johnson295189b2012-06-20 16:38:30 -07008937/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008938 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008939 *
8940 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008941void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008942{
8943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008945 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008946 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008950 VOS_ASSERT(0) ;
8951 return ;
8952 }
8953
8954 vos_mem_free(pWdaParams->wdaMsgParam) ;
8955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8956 vos_mem_free(pWdaParams) ;
8957 /*
8958 * No respone required for SetBeaconFilter req so just free the request
8959 * param here
8960 */
8961
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 return ;
8963}
Jeff Johnson295189b2012-06-20 16:38:30 -07008964/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008965 * FUNCTION: WDA_SetBeaconFilterReqCallback
8966 * Free memory.
8967 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8968 */
8969void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8970{
8971 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8972
8973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8974 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8975
8976 if(NULL == pWdaParams)
8977 {
8978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8979 "%s: pWdaParams received NULL", __func__);
8980 VOS_ASSERT(0);
8981 return;
8982 }
8983
8984 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8985 {
8986 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8987 vos_mem_free(pWdaParams->wdaMsgParam);
8988 vos_mem_free(pWdaParams);
8989 }
8990
8991 return;
8992}
8993/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 * FUNCTION: WDA_SetBeaconFilterReq
8995 * Request to WDI to send the beacon filtering related information.
8996 */
8997VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8998 tBeaconFilterMsg* pBeaconFilterInfo)
8999{
9000 WDI_Status status = WDI_STATUS_SUCCESS;
9001 tANI_U8 *dstPtr, *srcPtr;
9002 tANI_U8 filterLength;
9003 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
9004 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
9005 sizeof(WDI_BeaconFilterReqParamsType) ) ;
9006 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009008 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 if(NULL == wdiBeaconFilterInfo)
9010 {
9011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009012 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009013 VOS_ASSERT(0);
9014 return VOS_STATUS_E_NOMEM;
9015 }
9016 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9017 if(NULL == pWdaParams)
9018 {
9019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009020 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009021 VOS_ASSERT(0);
9022 vos_mem_free(wdiBeaconFilterInfo);
9023 return VOS_STATUS_E_NOMEM;
9024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009025 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9026 pBeaconFilterInfo->beaconInterval;
9027 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9028 pBeaconFilterInfo->capabilityInfo;
9029 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9030 pBeaconFilterInfo->capabilityMask;
9031 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009032
9033 //Fill the BssIdx
9034 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9035
Jeff Johnson295189b2012-06-20 16:38:30 -07009036 //Fill structure with info contained in the beaconFilterTable
9037 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9038 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9039 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9040 if(WDI_BEACON_FILTER_LEN < filterLength)
9041 {
9042 filterLength = WDI_BEACON_FILTER_LEN;
9043 }
9044 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009045 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9046 wdiBeaconFilterInfo->pUserData = pWdaParams;
9047
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 /* Store param pointer as passed in by caller */
9049 /* store Params pass it to WDI */
9050 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9051 pWdaParams->pWdaContext = pWDA;
9052 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9053
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009055 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009056 if(IS_WDI_STATUS_FAILURE(status))
9057 {
9058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9059 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9060 vos_mem_free(pWdaParams->wdaMsgParam) ;
9061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9062 vos_mem_free(pWdaParams) ;
9063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009064 return CONVERT_WDI2VOS_STATUS(status) ;
9065}
Jeff Johnson295189b2012-06-20 16:38:30 -07009066/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009067 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009068 *
9069 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009070void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009071{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9073
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009075 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009076
9077 if(NULL == pWdaParams)
9078 {
9079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009080 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009081 VOS_ASSERT(0) ;
9082 return ;
9083 }
9084
9085 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9086 vos_mem_free(pWdaParams->wdaMsgParam);
9087 vos_mem_free(pWdaParams);
9088
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 //print a msg, nothing else to do
9090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009091 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009092 return ;
9093}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009094/*
9095 * FUNCTION: WDA_RemBeaconFilterReqCallback
9096 * Free memory.
9097 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9098 */
9099void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9100{
9101 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9102
9103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9104 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9105
9106 if(NULL == pWdaParams)
9107 {
9108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9109 "%s: pWdaParams received NULL", __func__);
9110 VOS_ASSERT(0);
9111 return;
9112 }
9113
9114 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9115 {
9116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9117 vos_mem_free(pWdaParams->wdaMsgParam);
9118 vos_mem_free(pWdaParams);
9119 }
9120
9121 return;
9122}
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 // TODO: PE does not have this feature for now implemented,
9124 // but the support for removing beacon filter exists between
9125 // HAL and FW. This function can be called whenever PE defines
9126 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009127/*
9128 * FUNCTION: WDA_RemBeaconFilterReq
9129 * Request to WDI to send the removal of beacon filtering related information.
9130 */
9131VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9132 tRemBeaconFilterMsg* pBeaconFilterInfo)
9133{
9134 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009135 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009136 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9137 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9138 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009139 tWDA_ReqParams *pWdaParams ;
9140
Jeff Johnson295189b2012-06-20 16:38:30 -07009141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009142 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009143 if(NULL == wdiBeaconFilterInfo)
9144 {
9145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009147 VOS_ASSERT(0);
9148 return VOS_STATUS_E_NOMEM;
9149 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009150 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9151 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009152 {
9153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009156 vos_mem_free(wdiBeaconFilterInfo);
9157 vos_mem_free(pBeaconFilterInfo);
9158 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009159 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009160
9161 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9162 pBeaconFilterInfo->ucIeCount;
9163 //Fill structure with info contained in the ucRemIeId
9164 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9165 pBeaconFilterInfo->ucRemIeId,
9166 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9167 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9168 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009169
9170 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009171 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009172 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009173 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9174
9175 pWdaParams->pWdaContext = pWDA;
9176
Jeff Johnson43971f52012-07-17 12:26:56 -07009177 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009178 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009179 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009180 {
9181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9182 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009183 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9185 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009186 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009187 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009188 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009189}
Jeff Johnson295189b2012-06-20 16:38:30 -07009190/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009191 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 *
9193 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009194void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009195{
9196 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009198 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009199 if(NULL == pWdaParams)
9200 {
9201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009202 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009203 VOS_ASSERT(0) ;
9204 return ;
9205 }
9206
9207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9208 vos_mem_free(pWdaParams) ;
9209
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 return ;
9211}
Jeff Johnson295189b2012-06-20 16:38:30 -07009212/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009213 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9214 * Free memory.
9215 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9216 */
9217void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9218{
9219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9220
9221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9222 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9223
9224 if(NULL == pWdaParams)
9225 {
9226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9227 "%s: pWdaParams received NULL", __func__);
9228 VOS_ASSERT(0);
9229 return;
9230 }
9231
9232 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9233 {
9234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9235 vos_mem_free(pWdaParams);
9236 }
9237
9238 return;
9239}
9240/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 * FUNCTION: WDA_SetRSSIThresholdsReq
9242 * Request to WDI to set the RSSI thresholds (sta mode).
9243 */
9244VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9245{
9246 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009247 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009248 tWDA_CbContext *pWDA = NULL ;
9249 v_PVOID_t pVosContext = NULL;
9250 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9251 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9252 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9253 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009255 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009256 if(NULL == wdiRSSIThresholdsInfo)
9257 {
9258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009259 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 VOS_ASSERT(0);
9261 return VOS_STATUS_E_NOMEM;
9262 }
9263 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9264 if(NULL == pWdaParams)
9265 {
9266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009267 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009268 VOS_ASSERT(0);
9269 vos_mem_free(wdiRSSIThresholdsInfo);
9270 return VOS_STATUS_E_NOMEM;
9271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009273 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9274 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9275 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9277 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9278 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009279 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9280 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9281 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009282 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9283 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9285 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9286
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 /* Store param pointer as passed in by caller */
9288 /* store Params pass it to WDI */
9289 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9290 pWdaParams->pWdaContext = pWDA;
9291 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009292 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009293 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009294 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009295 {
9296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9297 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009298 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9300 vos_mem_free(pWdaParams) ;
9301 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009302 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009303
9304}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009305/*
Yue Madb90ac12013-04-04 13:39:13 -07009306 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009307 *
9308 */
Yue Madb90ac12013-04-04 13:39:13 -07009309void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009310{
9311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9312
9313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009314 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 if(NULL == pWdaParams)
9316 {
9317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009318 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 VOS_ASSERT(0) ;
9320 return ;
9321 }
9322
9323 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9324 vos_mem_free(pWdaParams->wdaMsgParam);
9325 vos_mem_free(pWdaParams) ;
9326
9327 //print a msg, nothing else to do
9328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009329 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 return ;
9331}
Jeff Johnson295189b2012-06-20 16:38:30 -07009332/*
Yue Madb90ac12013-04-04 13:39:13 -07009333 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009334 * Free memory.
9335 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009336 */
9337void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9338{
9339 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9340
9341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9342 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9343
9344 if(NULL == pWdaParams)
9345 {
9346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9347 "%s: Invalid pWdaParams pointer", __func__);
9348 VOS_ASSERT(0);
9349 return;
9350 }
9351
9352 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9353 {
9354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9355 vos_mem_free(pWdaParams->wdaMsgParam);
9356 vos_mem_free(pWdaParams);
9357 }
9358
9359 return;
9360}
9361/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 * FUNCTION: WDA_ProcessHostOffloadReq
9363 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9364 * to broadcast traffic (sta mode).
9365 */
9366VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9367 tSirHostOffloadReq *pHostOffloadParams)
9368{
9369 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009370 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9372 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9373 sizeof(WDI_HostOffloadReqParamsType)) ;
9374 tWDA_ReqParams *pWdaParams ;
9375
9376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009377 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009378
9379 if(NULL == wdiHostOffloadInfo)
9380 {
9381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009383 VOS_ASSERT(0);
9384 return VOS_STATUS_E_NOMEM;
9385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9387 if(NULL == pWdaParams)
9388 {
9389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009391 VOS_ASSERT(0);
9392 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009393 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009394 return VOS_STATUS_E_NOMEM;
9395 }
9396
9397 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9398 pHostOffloadParams->offloadType;
9399 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9400 pHostOffloadParams->enableOrDisable;
9401
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009402 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9403 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9404
Jeff Johnson295189b2012-06-20 16:38:30 -07009405 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9406 {
9407 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9408 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9409 pHostOffloadParams->params.hostIpv4Addr,
9410 4);
9411 break;
9412 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9413 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9414 pHostOffloadParams->params.hostIpv6Addr,
9415 16);
9416 break;
9417 case SIR_IPV6_NS_OFFLOAD:
9418 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9419 pHostOffloadParams->params.hostIpv6Addr,
9420 16);
9421
9422#ifdef WLAN_NS_OFFLOAD
9423 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9424 {
9425 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9426 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9427 16);
9428 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9429 }
9430 else
9431 {
9432 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9433 }
9434
9435 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9436 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9437 16);
9438 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9439 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9440 6);
9441
9442 //Only two are supported so let's go through them without a loop
9443 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9444 {
9445 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9446 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9447 16);
9448 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9449 }
9450 else
9451 {
9452 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9453 }
9454
9455 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9456 {
9457 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9458 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9459 16);
9460 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9461 }
9462 else
9463 {
9464 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9465 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309466 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9467 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009468 break;
9469#endif //WLAN_NS_OFFLOAD
9470 default:
9471 {
9472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9473 "No Handling for Offload Type %x in WDA "
9474 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9475 //WDA_VOS_ASSERT(0) ;
9476 }
9477 }
Yue Madb90ac12013-04-04 13:39:13 -07009478 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9479 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009480
Jeff Johnson295189b2012-06-20 16:38:30 -07009481 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009482 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 /* store Params pass it to WDI */
9484 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9485 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009486
Jeff Johnson295189b2012-06-20 16:38:30 -07009487
Jeff Johnson43971f52012-07-17 12:26:56 -07009488 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009489 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009490
Jeff Johnson43971f52012-07-17 12:26:56 -07009491 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009492 {
9493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9494 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009495 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9497 vos_mem_free(pWdaParams->wdaMsgParam);
9498 vos_mem_free(pWdaParams) ;
9499 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009500 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009501
9502}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009503/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009504 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 *
9506 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009507void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009508{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9510
Jeff Johnson295189b2012-06-20 16:38:30 -07009511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009512 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009513
9514 if(NULL == pWdaParams)
9515 {
9516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009517 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009518 VOS_ASSERT(0) ;
9519 return ;
9520 }
9521
9522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9523 vos_mem_free(pWdaParams->wdaMsgParam);
9524 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009525
Jeff Johnson295189b2012-06-20 16:38:30 -07009526 //print a msg, nothing else to do
9527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009528 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009529 return ;
9530}
Jeff Johnson295189b2012-06-20 16:38:30 -07009531/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009532 * FUNCTION: WDA_KeepAliveReqCallback
9533 * Free memory.
9534 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9535 */
9536void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9537{
9538 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9539
9540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9541 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9542
9543 if(NULL == pWdaParams)
9544 {
9545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9546 "%s: pWdaParams received NULL", __func__);
9547 VOS_ASSERT(0);
9548 return;
9549 }
9550
9551 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9552 {
9553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9554 vos_mem_free(pWdaParams->wdaMsgParam);
9555 vos_mem_free(pWdaParams);
9556 }
9557
9558 return;
9559}
9560/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009561 * FUNCTION: WDA_ProcessKeepAliveReq
9562 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9563 * wakeup due to broadcast traffic (sta mode).
9564 */
9565VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9566 tSirKeepAliveReq *pKeepAliveParams)
9567{
9568 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009569 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009570 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9571 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9572 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009573 tWDA_ReqParams *pWdaParams;
9574
Jeff Johnson295189b2012-06-20 16:38:30 -07009575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009576 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009577 if(NULL == wdiKeepAliveInfo)
9578 {
9579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009582 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009583 return VOS_STATUS_E_NOMEM;
9584 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009585
9586 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9587 if(NULL == pWdaParams)
9588 {
9589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009590 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009591 VOS_ASSERT(0);
9592 vos_mem_free(wdiKeepAliveInfo);
9593 vos_mem_free(pKeepAliveParams);
9594 return VOS_STATUS_E_NOMEM;
9595 }
9596
Jeff Johnson295189b2012-06-20 16:38:30 -07009597 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9598 pKeepAliveParams->packetType;
9599 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9600 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009601
9602 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9603 pKeepAliveParams->bssId,
9604 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009605
9606 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9607 {
9608 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9609 pKeepAliveParams->hostIpv4Addr,
9610 SIR_IPV4_ADDR_LEN);
9611 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9612 pKeepAliveParams->destIpv4Addr,
9613 SIR_IPV4_ADDR_LEN);
9614 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9615 pKeepAliveParams->destMacAddr,
9616 SIR_MAC_ADDR_LEN);
9617 }
9618 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9619 {
9620 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9621 SIR_IPV4_ADDR_LEN,
9622 0);
9623 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9624 SIR_IPV4_ADDR_LEN,
9625 0);
9626 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9627 SIR_MAC_ADDR_LEN,
9628 0);
9629 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009630 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9631 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009632
Jeff Johnson295189b2012-06-20 16:38:30 -07009633 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009634 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009635 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009636 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9637 pWdaParams->pWdaContext = pWDA;
9638
Jeff Johnson295189b2012-06-20 16:38:30 -07009639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9640 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9641 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9642 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9643 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9645 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9646 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9647 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9648 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9650 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9651 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9652 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9653 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9654 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9655 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9656 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9658 "TimePeriod %d PacketType %d",
9659 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9660 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009661 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009662 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009663
Jeff Johnson43971f52012-07-17 12:26:56 -07009664 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009665 {
9666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9667 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009668 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9670 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009671 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009672 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009673 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009674
9675}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009676/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009677 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009678 *
9679 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009680void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009681 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9682 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009683{
9684 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009686 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 if(NULL == pWdaParams)
9688 {
9689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009690 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009691 VOS_ASSERT(0) ;
9692 return ;
9693 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9695 vos_mem_free(pWdaParams->wdaMsgParam);
9696 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009697 return ;
9698}
Jeff Johnson295189b2012-06-20 16:38:30 -07009699/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009700 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9701 * Free memory.
9702 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9703 */
9704void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9705{
9706 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9707
9708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9709 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9710
9711 if(NULL == pWdaParams)
9712 {
9713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9714 "%s: pWdaParams received NULL", __func__);
9715 VOS_ASSERT(0);
9716 return;
9717 }
9718
9719 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9720 {
9721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9722 vos_mem_free(pWdaParams->wdaMsgParam);
9723 vos_mem_free(pWdaParams);
9724 }
9725
9726 return;
9727}
9728
9729/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009730 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9731 * Request to WDI to add WOWL Bcast pattern
9732 */
9733VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9734 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9735{
9736 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009737 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9739 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9740 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9741 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009743 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009744 if(NULL == wdiWowlAddBcPtrnInfo)
9745 {
9746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009747 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009748 VOS_ASSERT(0);
9749 return VOS_STATUS_E_NOMEM;
9750 }
9751 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9752 if(NULL == pWdaParams)
9753 {
9754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009755 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009756 VOS_ASSERT(0);
9757 vos_mem_free(wdiWowlAddBcPtrnInfo);
9758 return VOS_STATUS_E_NOMEM;
9759 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009760 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9761 pWowlAddBcPtrnParams->ucPatternId;
9762 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9763 pWowlAddBcPtrnParams->ucPatternByteOffset;
9764 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9765 pWowlAddBcPtrnParams->ucPatternMaskSize;
9766 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9767 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009768 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9769 {
9770 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9771 pWowlAddBcPtrnParams->ucPattern,
9772 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9773 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9774 pWowlAddBcPtrnParams->ucPatternMask,
9775 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9776 }
9777 else
9778 {
9779 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9780 pWowlAddBcPtrnParams->ucPattern,
9781 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9782 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9783 pWowlAddBcPtrnParams->ucPatternMask,
9784 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9785
9786 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9787 pWowlAddBcPtrnParams->ucPatternExt,
9788 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9789 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9790 pWowlAddBcPtrnParams->ucPatternMaskExt,
9791 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9792 }
9793
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009794 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9795 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9796
Yue Ma7f44bbe2013-04-12 11:47:39 -07009797 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9798 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009799 /* Store param pointer as passed in by caller */
9800 /* store Params pass it to WDI */
9801 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9802 pWdaParams->pWdaContext = pWDA;
9803 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009804 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009805 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009806 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009807 {
9808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9809 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009810 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009811 vos_mem_free(pWdaParams->wdaMsgParam) ;
9812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9813 vos_mem_free(pWdaParams) ;
9814 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009815 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009816
9817}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009818/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009819 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009820 *
9821 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009822void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009823 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9824 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009825{
9826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009828 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009829 if(NULL == pWdaParams)
9830 {
9831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009832 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009833 VOS_ASSERT(0) ;
9834 return ;
9835 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9837 vos_mem_free(pWdaParams->wdaMsgParam);
9838 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009839 return ;
9840}
Jeff Johnson295189b2012-06-20 16:38:30 -07009841/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009842 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9843 * Free memory.
9844 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9845 */
9846void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9847{
9848 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9849
9850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9851 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9852
9853 if(NULL == pWdaParams)
9854 {
9855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9856 "%s: pWdaParams received NULL", __func__);
9857 VOS_ASSERT(0);
9858 return;
9859 }
9860
9861 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9862 {
9863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9864 vos_mem_free(pWdaParams->wdaMsgParam);
9865 vos_mem_free(pWdaParams);
9866 }
9867
9868 return;
9869}
9870/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009871 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9872 * Request to WDI to delete WOWL Bcast pattern
9873 */
9874VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9875 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9876{
9877 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009878 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9880 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9881 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9882 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009884 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 if(NULL == wdiWowlDelBcPtrnInfo)
9886 {
9887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009888 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009889 VOS_ASSERT(0);
9890 return VOS_STATUS_E_NOMEM;
9891 }
9892 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9893 if(NULL == pWdaParams)
9894 {
9895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009896 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009897 VOS_ASSERT(0);
9898 vos_mem_free(wdiWowlDelBcPtrnInfo);
9899 return VOS_STATUS_E_NOMEM;
9900 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009901 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9902 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009903
9904 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9905 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9906
Yue Ma7f44bbe2013-04-12 11:47:39 -07009907 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9908 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009909 /* Store param pointer as passed in by caller */
9910 /* store Params pass it to WDI */
9911 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9912 pWdaParams->pWdaContext = pWDA;
9913 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009914 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009915 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009916 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009917 {
9918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9919 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009920 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009921 vos_mem_free(pWdaParams->wdaMsgParam) ;
9922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9923 vos_mem_free(pWdaParams) ;
9924 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009925 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009926
9927}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009928/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009929 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 *
9931 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009932void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009933{
9934 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9935 tWDA_CbContext *pWDA;
9936 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009938 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 if(NULL == pWdaParams)
9940 {
9941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009942 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009943 VOS_ASSERT(0) ;
9944 return ;
9945 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009946 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9947 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9948
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009949 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9950
Jeff Johnson295189b2012-06-20 16:38:30 -07009951 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9952 vos_mem_free(pWdaParams) ;
9953
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009954 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009955 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009956 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 return ;
9958}
Jeff Johnson295189b2012-06-20 16:38:30 -07009959/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009960 * FUNCTION: WDA_WowlEnterReqCallback
9961 * Free memory and send WOWL Enter RSP back to PE.
9962 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9963 */
9964void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9965{
9966 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9967 tWDA_CbContext *pWDA;
9968 tSirHalWowlEnterParams *pWowlEnterParams;
9969
9970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9971 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9972
9973 if(NULL == pWdaParams)
9974 {
9975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9976 "%s: pWdaParams received NULL", __func__);
9977 VOS_ASSERT(0);
9978 return;
9979 }
9980
9981 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9982 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9983 pWowlEnterParams->status = wdiStatus;
9984
9985 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9986 {
9987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9988 vos_mem_free(pWdaParams);
9989 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9990 }
9991
9992 return;
9993}
9994/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009995 * FUNCTION: WDA_ProcessWowlEnterReq
9996 * Request to WDI to enter WOWL
9997 */
9998VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9999 tSirHalWowlEnterParams *pWowlEnterParams)
10000{
10001 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010002 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010003 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
10004 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
10005 sizeof(WDI_WowlEnterReqParamsType)) ;
10006 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010008 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 if(NULL == wdiWowlEnterInfo)
10010 {
10011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010012 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010013 VOS_ASSERT(0);
10014 return VOS_STATUS_E_NOMEM;
10015 }
10016 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10017 if(NULL == pWdaParams)
10018 {
10019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010020 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010021 VOS_ASSERT(0);
10022 vos_mem_free(wdiWowlEnterInfo);
10023 return VOS_STATUS_E_NOMEM;
10024 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010025
10026 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10027
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10029 pWowlEnterParams->magicPtrn,
10030 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010031 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10032 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10034 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10036 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10038 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10040 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010041 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10042 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010043 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10044 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010045 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10046 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010047#ifdef WLAN_WAKEUP_EVENTS
10048 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10049 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10050
10051 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10052 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10053
10054 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10055 pWowlEnterParams->ucWowNetScanOffloadMatch;
10056
10057 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10058 pWowlEnterParams->ucWowGTKRekeyError;
10059
10060 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10061 pWowlEnterParams->ucWoWBSSConnLoss;
10062#endif // WLAN_WAKEUP_EVENTS
10063
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010064 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10065 pWowlEnterParams->bssIdx;
10066
Yue Ma7f44bbe2013-04-12 11:47:39 -070010067 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10068 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010069 /* Store param pointer as passed in by caller */
10070 /* store Params pass it to WDI */
10071 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10072 pWdaParams->pWdaContext = pWDA;
10073 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010074 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010075 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010076 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010077 {
10078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10079 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010080 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 vos_mem_free(pWdaParams->wdaMsgParam) ;
10082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10083 vos_mem_free(pWdaParams) ;
10084 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010085 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010086
10087}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010088/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010089 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010090 *
10091 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010092void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010093{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010094 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10095 tWDA_CbContext *pWDA;
10096 tSirHalWowlExitParams *pWowlExitParams;
10097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010098 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010099 if(NULL == pWdaParams)
10100 {
10101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010102 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010103 VOS_ASSERT(0) ;
10104 return ;
10105 }
10106 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10107 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10108
10109 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010110 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010111
10112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10113 vos_mem_free(pWdaParams) ;
10114
Jeff Johnson295189b2012-06-20 16:38:30 -070010115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010116 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010117 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010118 return ;
10119}
Jeff Johnson295189b2012-06-20 16:38:30 -070010120/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010121 * FUNCTION: WDA_WowlExitReqCallback
10122 * Free memory and send WOWL Exit RSP back to PE.
10123 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10124 */
10125void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10126{
10127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10128 tWDA_CbContext *pWDA;
10129 tSirHalWowlExitParams *pWowlExitParams;
10130
10131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10132 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10133
10134 if(NULL == pWdaParams)
10135 {
10136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10137 "%s: pWdaParams received NULL", __func__);
10138 VOS_ASSERT(0);
10139 return;
10140 }
10141
10142 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10143 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10144 pWowlExitParams->status = wdiStatus;
10145
10146 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10147 {
10148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10149 vos_mem_free(pWdaParams);
10150 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10151 }
10152
10153 return;
10154}
10155/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 * FUNCTION: WDA_ProcessWowlExitReq
10157 * Request to WDI to add WOWL Bcast pattern
10158 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010159VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10160 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010161{
10162 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010163 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010164 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10165 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10166 sizeof(WDI_WowlExitReqParamsType)) ;
10167 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010169 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010170 if(NULL == wdiWowlExitInfo)
10171 {
10172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010173 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010174 VOS_ASSERT(0);
10175 return VOS_STATUS_E_NOMEM;
10176 }
10177 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10178 if(NULL == pWdaParams)
10179 {
10180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010181 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010182 VOS_ASSERT(0);
10183 vos_mem_free(wdiWowlExitInfo);
10184 return VOS_STATUS_E_NOMEM;
10185 }
10186
10187 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10188 pWowlExitParams->bssIdx;
10189
Yue Ma7f44bbe2013-04-12 11:47:39 -070010190 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10191 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010192
10193 /* Store param pointer as passed in by caller */
10194 /* store Params pass it to WDI */
10195 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10196 pWdaParams->pWdaContext = pWDA;
10197 pWdaParams->wdaMsgParam = pWowlExitParams;
10198
10199 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010200 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010201
Jeff Johnson43971f52012-07-17 12:26:56 -070010202 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010203 {
10204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10205 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010206 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10208 vos_mem_free(pWdaParams->wdaMsgParam);
10209 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010210 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010211 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010212}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010213/*
10214 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10215 * Request to WDI to determine whether a given station is capable of
10216 * using HW-based frame translation
10217 */
10218v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10219 tANI_U8 staIdx)
10220{
10221 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10222}
Jeff Johnson295189b2012-06-20 16:38:30 -070010223/*
10224 * FUNCTION: WDA_NvDownloadReqCallback
10225 * send NV Download RSP back to PE
10226 */
10227void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10228 void* pUserData)
10229{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010230
10231 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10232 tWDA_CbContext *pWDA;
10233
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010235 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010236
10237 if(NULL == pWdaParams)
10238 {
10239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010240 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010241 VOS_ASSERT(0) ;
10242 return ;
10243 }
10244
10245 pWDA = pWdaParams->pWdaContext;
10246
Jeff Johnson295189b2012-06-20 16:38:30 -070010247 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10249 vos_mem_free(pWdaParams);
10250
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 return ;
10253}
Jeff Johnson295189b2012-06-20 16:38:30 -070010254/*
10255 * FUNCTION: WDA_ProcessNvDownloadReq
10256 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10257 */
10258VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10259{
10260 /* Initialize the local Variables*/
10261 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10262 v_VOID_t *pNvBuffer=NULL;
10263 v_SIZE_t bufferSize = 0;
10264 WDI_Status status = WDI_STATUS_E_FAILURE;
10265 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010266 tWDA_ReqParams *pWdaParams ;
10267
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010269 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 if(NULL == pWDA)
10271 {
10272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010273 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010274 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 return VOS_STATUS_E_FAILURE;
10276 }
10277
10278 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010279 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10280
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10282 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010283 if(NULL == wdiNvDownloadReqParam)
10284 {
10285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 VOS_ASSERT(0);
10288 return VOS_STATUS_E_NOMEM;
10289 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010290 /* Copy Params to wdiNvDownloadReqParam*/
10291 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10292 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010293
10294 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10295 if(NULL == pWdaParams)
10296 {
10297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010298 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010299 VOS_ASSERT(0);
10300 vos_mem_free(wdiNvDownloadReqParam);
10301 return VOS_STATUS_E_NOMEM;
10302 }
10303
Jeff Johnson295189b2012-06-20 16:38:30 -070010304 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010305 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10306 pWdaParams->wdaMsgParam = NULL;
10307 pWdaParams->pWdaContext = pWDA;
10308
10309
Jeff Johnson295189b2012-06-20 16:38:30 -070010310 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010311
Jeff Johnson295189b2012-06-20 16:38:30 -070010312 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010313 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10314
Jeff Johnson295189b2012-06-20 16:38:30 -070010315 if(IS_WDI_STATUS_FAILURE(status))
10316 {
10317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10318 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10320 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010322 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010323}
10324/*
10325 * FUNCTION: WDA_FlushAcReqCallback
10326 * send Flush AC RSP back to TL
10327 */
10328void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10329{
10330 vos_msg_t wdaMsg = {0} ;
10331 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10332 tFlushACReq *pFlushACReqParams;
10333 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010335 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010336 if(NULL == pWdaParams)
10337 {
10338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010339 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 VOS_ASSERT(0) ;
10341 return ;
10342 }
10343
10344 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10345 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10346 if(NULL == pFlushACRspParams)
10347 {
10348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010349 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010350 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010351 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010352 return ;
10353 }
10354 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10355 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10356 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10357 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10358 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010359 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010360 vos_mem_free(pWdaParams->wdaMsgParam) ;
10361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10362 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010363 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10364 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10365 // POST message to TL
10366 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10367
Jeff Johnson295189b2012-06-20 16:38:30 -070010368 return ;
10369}
Jeff Johnson295189b2012-06-20 16:38:30 -070010370/*
10371 * FUNCTION: WDA_ProcessFlushAcReq
10372 * Request to WDI to Update the DELBA REQ params.
10373 */
10374VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10375 tFlushACReq *pFlushAcReqParams)
10376{
10377 WDI_Status status = WDI_STATUS_SUCCESS ;
10378 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10379 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10380 sizeof(WDI_FlushAcReqParamsType)) ;
10381 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010382 if(NULL == wdiFlushAcReqParam)
10383 {
10384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010386 VOS_ASSERT(0);
10387 return VOS_STATUS_E_NOMEM;
10388 }
10389 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10390 if(NULL == pWdaParams)
10391 {
10392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 VOS_ASSERT(0);
10395 vos_mem_free(wdiFlushAcReqParam);
10396 return VOS_STATUS_E_NOMEM;
10397 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010399 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010400 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10401 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10402 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10403 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010404 /* Store Flush AC pointer, as this will be used for response */
10405 /* store Params pass it to WDI */
10406 pWdaParams->pWdaContext = pWDA;
10407 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10408 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10410 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010411 if(IS_WDI_STATUS_FAILURE(status))
10412 {
10413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10414 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10415 vos_mem_free(pWdaParams->wdaMsgParam) ;
10416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10417 vos_mem_free(pWdaParams) ;
10418 //TODO: respond to TL with failure
10419 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010420 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010421}
Jeff Johnson295189b2012-06-20 16:38:30 -070010422/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010423 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010424 *
10425 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010426void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010427{
10428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10429 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010430 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010431
10432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010433 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010434 if(NULL == pWdaParams)
10435 {
10436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010437 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010438 VOS_ASSERT(0) ;
10439 return ;
10440 }
10441 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10442 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10443 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10444 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10445 {
10446 pWDA->wdaAmpSessionOn = VOS_FALSE;
10447 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010448 vos_mem_free(pWdaParams->wdaMsgParam) ;
10449 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10450 vos_mem_free(pWdaParams) ;
10451 /*
10452 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10453 * param here
10454 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 return ;
10456}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010457/*
10458 * FUNCTION: WDA_BtAmpEventReqCallback
10459 * Free memory.
10460 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10461 */
10462void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10463{
10464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10465 tWDA_CbContext *pWDA;
10466 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010467
Yue Ma7f44bbe2013-04-12 11:47:39 -070010468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10469 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10470
10471 if(NULL == pWdaParams)
10472 {
10473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10474 "%s: pWdaParams received NULL", __func__);
10475 VOS_ASSERT(0);
10476 return;
10477 }
10478
10479 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10480 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10481
10482 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10483 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10484 {
10485 pWDA->wdaAmpSessionOn = VOS_FALSE;
10486 }
10487
10488 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10489 {
10490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10491 vos_mem_free(pWdaParams->wdaMsgParam);
10492 vos_mem_free(pWdaParams);
10493 }
10494
10495 return;
10496}
Jeff Johnson295189b2012-06-20 16:38:30 -070010497/*
10498 * FUNCTION: WDA_ProcessBtAmpEventReq
10499 * Request to WDI to Update with BT AMP events.
10500 */
10501VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10502 tSmeBtAmpEvent *pBtAmpEventParams)
10503{
10504 WDI_Status status = WDI_STATUS_SUCCESS ;
10505 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10506 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10507 sizeof(WDI_BtAmpEventParamsType)) ;
10508 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010510 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010511 if(NULL == wdiBtAmpEventParam)
10512 {
10513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010515 VOS_ASSERT(0);
10516 return VOS_STATUS_E_NOMEM;
10517 }
10518 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10519 if(NULL == pWdaParams)
10520 {
10521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010522 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010523 VOS_ASSERT(0);
10524 vos_mem_free(wdiBtAmpEventParam);
10525 return VOS_STATUS_E_NOMEM;
10526 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010527 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10528 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010529 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10530 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010531 /* Store BT AMP event pointer, as this will be used for response */
10532 /* store Params pass it to WDI */
10533 pWdaParams->pWdaContext = pWDA;
10534 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10535 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010536 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010537 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010538 if(IS_WDI_STATUS_FAILURE(status))
10539 {
10540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10541 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10542 vos_mem_free(pWdaParams->wdaMsgParam) ;
10543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10544 vos_mem_free(pWdaParams) ;
10545 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010546 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10547 {
10548 pWDA->wdaAmpSessionOn = VOS_TRUE;
10549 }
10550 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010551}
10552
Jeff Johnson295189b2012-06-20 16:38:30 -070010553/*
10554 * FUNCTION: WDA_FTMCommandReqCallback
10555 * Handle FTM CMD response came from HAL
10556 * Route responce to HDD FTM
10557 */
10558void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10559 void *usrData)
10560{
10561 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010562 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10563 {
10564 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010565 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010566 return;
10567 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010568 /* Release Current FTM Command Request */
10569 vos_mem_free(pWDA->wdaFTMCmdReq);
10570 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010571 /* Post FTM Responce to HDD FTM */
10572 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010573 return;
10574}
Jeff Johnson295189b2012-06-20 16:38:30 -070010575/*
10576 * FUNCTION: WDA_ProcessFTMCommand
10577 * Send FTM command to WDI
10578 */
10579VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10580 tPttMsgbuffer *pPTTFtmCmd)
10581{
10582 WDI_Status status = WDI_STATUS_SUCCESS;
10583 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010584 ftmCMDReq = (WDI_FTMCommandReqType *)
10585 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10586 if(NULL == ftmCMDReq)
10587 {
10588 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10589 "WDA FTM Command buffer alloc fail");
10590 return VOS_STATUS_E_NOMEM;
10591 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010592 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10593 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010594 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 /* Send command to WDI */
10596 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010597 return status;
10598}
Jeff Johnsone7245742012-09-05 17:12:55 -070010599#ifdef FEATURE_OEM_DATA_SUPPORT
10600/*
10601 * FUNCTION: WDA_StartOemDataReqCallback
10602 *
10603 */
10604void WDA_StartOemDataReqCallback(
10605 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10606 void* pUserData)
10607{
10608 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010609 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10610 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010611 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010612
Jeff Johnsone7245742012-09-05 17:12:55 -070010613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010614 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010615
10616 if(NULL == pWdaParams)
10617 {
10618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010619 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010620 VOS_ASSERT(0) ;
10621 return ;
10622 }
10623 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10624
Jeff Johnsone7245742012-09-05 17:12:55 -070010625 if(NULL == pWDA)
10626 {
10627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010628 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010629 VOS_ASSERT(0);
10630 return ;
10631 }
10632
10633 /*
10634 * Allocate memory for response params sent to PE
10635 */
10636 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10637
10638 // Check if memory is allocated for OemdataMeasRsp Params.
10639 if(NULL == pOemDataRspParams)
10640 {
10641 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10642 "OEM DATA WDA callback alloc fail");
10643 VOS_ASSERT(0) ;
10644 return;
10645 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010646
Jeff Johnsone7245742012-09-05 17:12:55 -070010647 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10649 vos_mem_free(pWdaParams->wdaMsgParam);
10650 vos_mem_free(pWdaParams) ;
10651
Jeff Johnsone7245742012-09-05 17:12:55 -070010652 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010653 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010654 * Also, here success always means that we have atleast one BSSID.
10655 */
10656 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10657
10658 //enable Tx
10659 status = WDA_ResumeDataTx(pWDA);
10660 if(status != VOS_STATUS_SUCCESS)
10661 {
10662 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10663 }
10664 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10665 return ;
10666}
10667/*
10668 * FUNCTION: WDA_ProcessStartOemDataReq
10669 * Send Start Oem Data Req to WDI
10670 */
10671VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10672 tStartOemDataReq *pOemDataReqParams)
10673{
10674 WDI_Status status = WDI_STATUS_SUCCESS;
10675 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010676 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010677
10678 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10679
10680 if(NULL == wdiOemDataReqParams)
10681 {
10682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010684 VOS_ASSERT(0);
10685 return VOS_STATUS_E_NOMEM;
10686 }
10687
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010688 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10689 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10690 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10691 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010692
10693 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10694
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010695 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10696 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010697 {
10698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010699 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010700 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010701 vos_mem_free(pOemDataReqParams);
10702 VOS_ASSERT(0);
10703 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010704 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010705
Bernald44a1ae2013-01-09 08:30:39 -080010706 pWdaParams->pWdaContext = (void*)pWDA;
10707 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10708 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010709
10710 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10711 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010712
10713 if(IS_WDI_STATUS_FAILURE(status))
10714 {
10715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10716 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10718 vos_mem_free(pWdaParams->wdaMsgParam);
10719 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010720 }
10721 return CONVERT_WDI2VOS_STATUS(status) ;
10722}
10723#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010724/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010725 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010726 *
10727 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010728void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010729{
10730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010732 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010733 if(NULL == pWdaParams)
10734 {
10735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010736 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010737 VOS_ASSERT(0) ;
10738 return ;
10739 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010740
10741 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10742 vos_mem_free(pWdaParams->wdaMsgParam);
10743 vos_mem_free(pWdaParams);
10744
10745 return ;
10746}
10747/*
10748 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10749 * Free memory.
10750 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10751 */
10752void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10753{
10754 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10755
10756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10757 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10758
10759 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010760 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10762 "%s: pWdaParams received NULL", __func__);
10763 VOS_ASSERT(0);
10764 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010765 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010766
10767 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 {
10769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010770 vos_mem_free(pWdaParams->wdaMsgParam);
10771 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010773
10774 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010775}
Jeff Johnson295189b2012-06-20 16:38:30 -070010776#ifdef WLAN_FEATURE_GTK_OFFLOAD
10777/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010778 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 *
10780 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010781void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010782 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010783{
10784 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10785
10786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010787 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010788 if(NULL == pWdaParams)
10789 {
10790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10791 "%s: pWdaParams received NULL", __func__);
10792 VOS_ASSERT(0);
10793 return;
10794 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010795
Jeff Johnson295189b2012-06-20 16:38:30 -070010796 vos_mem_free(pWdaParams->wdaMsgParam) ;
10797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10798 vos_mem_free(pWdaParams) ;
10799
10800 //print a msg, nothing else to do
10801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010802 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010803
10804 return ;
10805}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010806/*
10807 * FUNCTION: WDA_GTKOffloadReqCallback
10808 * Free memory.
10809 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10810 */
10811void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10812{
10813 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010814
Yue Ma7f44bbe2013-04-12 11:47:39 -070010815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10816 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10817
10818 if(NULL == pWdaParams)
10819 {
10820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10821 "%s: pWdaParams received NULL", __func__);
10822 VOS_ASSERT(0);
10823 return;
10824 }
10825
10826 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10827 {
10828 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10829 vos_mem_free(pWdaParams->wdaMsgParam);
10830 vos_mem_free(pWdaParams);
10831 }
10832
10833 return;
10834}
Jeff Johnson295189b2012-06-20 16:38:30 -070010835/*
10836 * FUNCTION: WDA_ProcessGTKOffloadReq
10837 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10838 * to broadcast traffic (sta mode).
10839 */
10840VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10841 tpSirGtkOffloadParams pGtkOffloadParams)
10842{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010843 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10845 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10846 sizeof(WDI_GtkOffloadReqMsg)) ;
10847 tWDA_ReqParams *pWdaParams ;
10848
10849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010850 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010851
10852 if(NULL == wdiGtkOffloadReqMsg)
10853 {
10854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010855 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010856 VOS_ASSERT(0);
10857 return VOS_STATUS_E_NOMEM;
10858 }
10859
10860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10861 if(NULL == pWdaParams)
10862 {
10863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010865 VOS_ASSERT(0);
10866 vos_mem_free(wdiGtkOffloadReqMsg);
10867 return VOS_STATUS_E_NOMEM;
10868 }
10869
10870 //
10871 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10872 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010873
10874 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010875 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010876
Jeff Johnson295189b2012-06-20 16:38:30 -070010877 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10878 // Copy KCK
10879 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10880 // Copy KEK
10881 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10882 // Copy KeyReplayCounter
10883 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10884 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10885
Yue Ma7f44bbe2013-04-12 11:47:39 -070010886 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10887 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010888
Jeff Johnson295189b2012-06-20 16:38:30 -070010889
10890 /* Store Params pass it to WDI */
10891 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10892 pWdaParams->pWdaContext = pWDA;
10893 /* Store param pointer as passed in by caller */
10894 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10895
Yue Ma7f44bbe2013-04-12 11:47:39 -070010896 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010897
10898 if(IS_WDI_STATUS_FAILURE(status))
10899 {
10900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10901 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10903 vos_mem_free(pWdaParams->wdaMsgParam);
10904 vos_mem_free(pWdaParams);
10905 }
10906
10907 return CONVERT_WDI2VOS_STATUS(status) ;
10908}
10909
10910/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010911 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 *
10913 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010914void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010915 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010916{
10917 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10918 tWDA_CbContext *pWDA;
10919 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053010920 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070010921 vos_msg_t vosMsg;
10922
10923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010924 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053010925
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010926 if(NULL == pWdaParams)
10927 {
10928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10929 "%s: pWdaParams received NULL", __func__);
10930 VOS_ASSERT(0);
10931 return;
10932 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010933
Nirav Shah374de6e2014-02-13 16:40:01 +053010934 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
10935 if(NULL == pGtkOffloadGetInfoRsp)
10936 {
10937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10938 "%s: vos_mem_malloc failed ", __func__);
10939 VOS_ASSERT(0);
10940 return;
10941 }
10942
Jeff Johnson295189b2012-06-20 16:38:30 -070010943 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10944 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10945
10946 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10947 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10948
10949 /* Message Header */
10950 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010951 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010952
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010953 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10954 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10955 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10956 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10957 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010958
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010959 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10960 pwdiGtkOffloadGetInfoRsparams->bssId,
10961 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010962 /* VOS message wrapper */
10963 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10964 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10965 vosMsg.bodyval = 0;
10966
10967 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10968 {
10969 /* free the mem and return */
10970 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10971 }
10972
10973 vos_mem_free(pWdaParams->wdaMsgParam) ;
10974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10975 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010976
10977 return;
10978}
10979/*
10980 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10981 * Free memory and send RSP back to SME.
10982 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10983 */
10984void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10985{
10986 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10987 vos_msg_t vosMsg;
10988
10989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10990 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10991
10992 if(NULL == pWdaParams)
10993 {
10994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10995 "%s: pWdaParams received NULL", __func__);
10996 VOS_ASSERT(0);
10997 return;
10998 }
10999
11000 /* VOS message wrapper */
11001 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
11002 vosMsg.bodyptr = NULL;
11003 vosMsg.bodyval = 0;
11004
11005 if(IS_WDI_STATUS_FAILURE(wdiStatus))
11006 {
11007 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11008 vos_mem_free(pWdaParams->wdaMsgParam);
11009 vos_mem_free(pWdaParams);
11010 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
11011 }
11012
11013 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070011014}
11015#endif
11016
11017/*
11018 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11019 * Request to WDI to set Tx Per Tracking configurations
11020 */
11021VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11022{
11023 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011024 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011025 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11026 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11027 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11028 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011030 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011031 if(NULL == pwdiSetTxPerTrackingReqParams)
11032 {
11033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 vos_mem_free(pTxPerTrackingParams);
11036 VOS_ASSERT(0);
11037 return VOS_STATUS_E_NOMEM;
11038 }
11039 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11040 if(NULL == pWdaParams)
11041 {
11042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011043 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011044 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11045 vos_mem_free(pTxPerTrackingParams);
11046 VOS_ASSERT(0);
11047 return VOS_STATUS_E_NOMEM;
11048 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011049 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11050 pTxPerTrackingParams->ucTxPerTrackingEnable;
11051 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11052 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11053 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11054 pTxPerTrackingParams->ucTxPerTrackingRatio;
11055 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11056 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011057 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11058 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 /* Store param pointer as passed in by caller */
11060 /* store Params pass it to WDI
11061 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11062 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11063 pWdaParams->pWdaContext = pWDA;
11064 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011065 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011066 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011067 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 {
11069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11070 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011071 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011072 vos_mem_free(pWdaParams->wdaMsgParam) ;
11073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11074 vos_mem_free(pWdaParams) ;
11075 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011076 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011077
11078}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011079/*
11080 * FUNCTION: WDA_HALDumpCmdCallback
11081 * Send the VOS complete .
11082 */
11083void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11084 void* pUserData)
11085{
11086 tANI_U8 *buffer = NULL;
11087 tWDA_CbContext *pWDA = NULL;
11088 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011089 if(NULL == pWdaParams)
11090 {
11091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011092 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 VOS_ASSERT(0) ;
11094 return ;
11095 }
11096
11097 pWDA = pWdaParams->pWdaContext;
11098 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011099 if(wdiRspParams->usBufferLen > 0)
11100 {
11101 /*Copy the Resp data to UMAC supplied buffer*/
11102 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11103 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11105 vos_mem_free(pWdaParams);
11106
11107 /* Indicate VOSS about the start complete */
11108 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011109 return ;
11110}
11111
Jeff Johnson295189b2012-06-20 16:38:30 -070011112/*
11113 * FUNCTION: WDA_ProcessHALDumpCmdReq
11114 * Send Dump command to WDI
11115 */
11116VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11117 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11118 tANI_U32 arg4, tANI_U8 *pBuffer)
11119{
11120 WDI_Status status = WDI_STATUS_SUCCESS;
11121 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11122 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11123 tWDA_ReqParams *pWdaParams ;
11124 pVosContextType pVosContext = NULL;
11125 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011126 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11127 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011128 if(pVosContext)
11129 {
11130 if (pVosContext->isLogpInProgress)
11131 {
11132 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11133 "%s:LOGP in Progress. Ignore!!!", __func__);
11134 return VOS_STATUS_E_BUSY;
11135 }
11136 }
11137 else
11138 {
11139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11140 "%s: VOS Context Null", __func__);
11141 return VOS_STATUS_E_RESOURCES;
11142 }
11143
Jeff Johnson295189b2012-06-20 16:38:30 -070011144 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11145 if(NULL == pWdaParams)
11146 {
11147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011148 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011149 return VOS_STATUS_E_NOMEM;
11150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 /* Allocate memory WDI request structure*/
11152 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11153 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11154 if(NULL == wdiHALDumpCmdReqParam)
11155 {
11156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11157 "WDA HAL DUMP Command buffer alloc fail");
11158 vos_mem_free(pWdaParams);
11159 return WDI_STATUS_E_FAILURE;
11160 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011161 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011162 /* Extract the arguments */
11163 wdiHalDumpCmdInfo->command = cmd;
11164 wdiHalDumpCmdInfo->argument1 = arg1;
11165 wdiHalDumpCmdInfo->argument2 = arg2;
11166 wdiHalDumpCmdInfo->argument3 = arg3;
11167 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011168 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11170
11171 /* Response message will be passed through the buffer */
11172 pWdaParams->wdaMsgParam = (void *)pBuffer;
11173
11174 /* store Params pass it to WDI */
11175 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011176 /* Send command to WDI */
11177 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011178 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011179 if ( vStatus != VOS_STATUS_SUCCESS )
11180 {
11181 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11182 {
11183 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011184 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 }
11186 else
11187 {
11188 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011189 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011190 }
11191 VOS_ASSERT(0);
11192 }
11193 return status;
11194}
Jeff Johnson295189b2012-06-20 16:38:30 -070011195#ifdef WLAN_FEATURE_GTK_OFFLOAD
11196/*
11197 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11198 * Request to WDI to get GTK Offload Information
11199 */
11200VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11201 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11202{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011203 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011204 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11205 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11206 tWDA_ReqParams *pWdaParams ;
11207
11208 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11209 {
11210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 VOS_ASSERT(0);
11213 return VOS_STATUS_E_NOMEM;
11214 }
11215
11216 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11217 if(NULL == pWdaParams)
11218 {
11219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011220 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011221 VOS_ASSERT(0);
11222 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11223 return VOS_STATUS_E_NOMEM;
11224 }
11225
Yue Ma7f44bbe2013-04-12 11:47:39 -070011226 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11227 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011228
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 /* Store Params pass it to WDI */
11230 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11231 pWdaParams->pWdaContext = pWDA;
11232 /* Store param pointer as passed in by caller */
11233 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11234
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011235 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011236 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011237
Yue Ma7f44bbe2013-04-12 11:47:39 -070011238 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011239
11240 if(IS_WDI_STATUS_FAILURE(status))
11241 {
11242 /* failure returned by WDI API */
11243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11244 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11246 vos_mem_free(pWdaParams) ;
11247 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11248 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11249 }
11250
11251 return CONVERT_WDI2VOS_STATUS(status) ;
11252}
11253#endif // WLAN_FEATURE_GTK_OFFLOAD
11254
11255/*
Yue Mab9c86f42013-08-14 15:59:08 -070011256 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11257 *
11258 */
11259VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11260 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11261{
11262 WDI_Status wdiStatus;
11263 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11264
11265 addPeriodicTxPtrnParams =
11266 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11267
11268 if (NULL == addPeriodicTxPtrnParams)
11269 {
11270 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11271 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11272 __func__);
11273
11274 return VOS_STATUS_E_NOMEM;
11275 }
11276
11277 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11278 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11279
11280 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11281 addPeriodicTxPtrnParams->pUserData = pWDA;
11282
11283 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11284
11285 if (WDI_STATUS_PENDING == wdiStatus)
11286 {
11287 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11288 "Pending received for %s:%d", __func__, __LINE__ );
11289 }
11290 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11291 {
11292 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11293 "Failure in %s:%d", __func__, __LINE__ );
11294 }
11295
11296 vos_mem_free(addPeriodicTxPtrnParams);
11297
11298 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11299}
11300
11301/*
11302 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11303 *
11304 */
11305VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11306 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11307{
11308 WDI_Status wdiStatus;
11309 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11310
11311 delPeriodicTxPtrnParams =
11312 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11313
11314 if (NULL == delPeriodicTxPtrnParams)
11315 {
11316 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11317 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11318 __func__);
11319
11320 return VOS_STATUS_E_NOMEM;
11321 }
11322
11323 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11324 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11325
11326 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11327 delPeriodicTxPtrnParams->pUserData = pWDA;
11328
11329 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11330
11331 if (WDI_STATUS_PENDING == wdiStatus)
11332 {
11333 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11334 "Pending received for %s:%d", __func__, __LINE__ );
11335 }
11336 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11337 {
11338 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11339 "Failure in %s:%d", __func__, __LINE__ );
11340 }
11341
11342 vos_mem_free(delPeriodicTxPtrnParams);
11343
11344 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11345}
11346
Rajeev79dbe4c2013-10-05 11:03:42 +053011347#ifdef FEATURE_WLAN_BATCH_SCAN
11348/*
11349 * FUNCTION: WDA_ProcessStopBatchScanInd
11350 *
11351 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11352 *
11353 * PARAM:
11354 * pWDA: pointer to WDA context
11355 * pReq: pointer to stop batch scan request
11356 */
11357VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11358 tSirStopBatchScanInd *pReq)
11359{
11360 WDI_Status wdiStatus;
11361 WDI_StopBatchScanIndType wdiReq;
11362
11363 wdiReq.param = pReq->param;
11364
11365 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11366
11367 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11368 {
11369 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11370 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11371 }
11372
11373 vos_mem_free(pReq);
11374
11375 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11376}
11377/*==========================================================================
11378 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11379
11380 DESCRIPTION
11381 API to pull batch scan result from FW
11382
11383 PARAMETERS
11384 pWDA: Pointer to WDA context
11385 pGetBatchScanReq: Pointer to get batch scan result indication
11386
11387 RETURN VALUE
11388 NONE
11389
11390===========================================================================*/
11391VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11392 tSirTriggerBatchScanResultInd *pReq)
11393{
11394 WDI_Status wdiStatus;
11395 WDI_TriggerBatchScanResultIndType wdiReq;
11396
11397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11398 "------> %s " ,__func__);
11399
11400 wdiReq.param = pReq->param;
11401
11402 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11403
11404 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11405 {
11406 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11407 "Trigger batch scan result ind failed %s:%d",
11408 __func__, wdiStatus);
11409 }
11410
11411 vos_mem_free(pReq);
11412
11413 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11414}
11415
11416/*==========================================================================
11417 FUNCTION WDA_SetBatchScanRespCallback
11418
11419 DESCRIPTION
11420 API to process set batch scan response from FW
11421
11422 PARAMETERS
11423 pRsp: Pointer to set batch scan response
11424 pUserData: Pointer to user data
11425
11426 RETURN VALUE
11427 NONE
11428
11429===========================================================================*/
11430void WDA_SetBatchScanRespCallback
11431(
11432 WDI_SetBatchScanRspType *pRsp,
11433 void* pUserData
11434)
11435{
11436 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11437 tpAniSirGlobal pMac;
11438 void *pCallbackContext;
11439 tWDA_CbContext *pWDA = NULL ;
11440 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11441
11442
11443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11444 "<------ %s " ,__func__);
11445 if (NULL == pWdaParams)
11446 {
11447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11448 "%s: pWdaParams received NULL", __func__);
11449 VOS_ASSERT(0) ;
11450 return ;
11451 }
11452
11453 /*extract WDA context*/
11454 pWDA = pWdaParams->pWdaContext;
11455 if (NULL == pWDA)
11456 {
11457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11458 "%s:pWDA is NULL can't invole HDD callback",
11459 __func__);
11460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11461 vos_mem_free(pWdaParams->wdaMsgParam);
11462 vos_mem_free(pWdaParams);
11463 VOS_ASSERT(0);
11464 return;
11465 }
11466
11467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11468 vos_mem_free(pWdaParams->wdaMsgParam);
11469 vos_mem_free(pWdaParams);
11470
11471 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11472 if (NULL == pMac)
11473 {
11474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11475 "%s:pMac is NULL", __func__);
11476 VOS_ASSERT(0);
11477 return;
11478 }
11479
11480 pHddSetBatchScanRsp =
11481 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11482 if (NULL == pHddSetBatchScanRsp)
11483 {
11484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11485 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11486 VOS_ASSERT(0);
11487 return;
11488 }
11489
11490 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11491
11492 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11493 /*call hdd callback with set batch scan response data*/
11494 if(pMac->pmc.setBatchScanReqCallback)
11495 {
11496 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11497 }
11498 else
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11501 "%s:HDD callback is null", __func__);
11502 VOS_ASSERT(0);
11503 }
11504
11505 vos_mem_free(pHddSetBatchScanRsp);
11506 return ;
11507}
11508
11509/*==========================================================================
11510 FUNCTION WDA_ProcessSetBatchScanReq
11511
11512 DESCRIPTION
11513 API to send set batch scan request to WDI
11514
11515 PARAMETERS
11516 pWDA: Pointer to WDA context
11517 pSetBatchScanReq: Pointer to set batch scan req
11518
11519 RETURN VALUE
11520 NONE
11521
11522===========================================================================*/
11523VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11524 tSirSetBatchScanReq *pSetBatchScanReq)
11525{
11526 WDI_Status status;
11527 tWDA_ReqParams *pWdaParams ;
11528 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11529
11530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11531 "------> %s " ,__func__);
11532
11533 pWdiSetBatchScanReq =
11534 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11535 if (NULL == pWdiSetBatchScanReq)
11536 {
11537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11538 "%s: VOS MEM Alloc Failure", __func__);
11539 vos_mem_free(pSetBatchScanReq);
11540 VOS_ASSERT(0);
11541 return VOS_STATUS_E_NOMEM;
11542 }
11543
11544 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11545 if (NULL == pWdaParams)
11546 {
11547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11548 "%s: VOS MEM Alloc Failure", __func__);
11549 VOS_ASSERT(0);
11550 vos_mem_free(pSetBatchScanReq);
11551 vos_mem_free(pWdiSetBatchScanReq);
11552 return VOS_STATUS_E_NOMEM;
11553 }
11554
11555 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11556 pWdiSetBatchScanReq->numberOfScansToBatch =
11557 pSetBatchScanReq->numberOfScansToBatch;
11558 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11559 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11560 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11561
11562 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11563 pWdaParams->pWdaContext = pWDA;
11564 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11565
11566 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11567 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11568 if (IS_WDI_STATUS_FAILURE(status))
11569 {
11570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11571 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11573 vos_mem_free(pWdaParams->wdaMsgParam);
11574 vos_mem_free(pWdaParams);
11575 }
11576 return CONVERT_WDI2VOS_STATUS(status);
11577}
11578
11579#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011580/*
11581 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11582 *
11583 * DESCRIPTION: This function sends start/update OBSS scan
11584 * inidcation message to WDI
11585 *
11586 * PARAM:
11587 * pWDA: pointer to WDA context
11588 * pReq: pointer to start OBSS scan request
11589 */
11590VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11591 tSirHT40OBSSScanInd *pReq)
11592{
11593 WDI_Status status;
11594 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11595 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011596
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11598 "------> %s " ,__func__);
11599 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11600 wdiOBSSScanParams.pUserData = pWDA;
11601
11602 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11603 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11604 pWdiOBSSScanInd->scanType = pReq->scanType;
11605 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11606 pReq->OBSSScanActiveDwellTime;
11607 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11608 pReq->OBSSScanPassiveDwellTime;
11609 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11610 pReq->BSSChannelWidthTriggerScanInterval;
11611 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11612 pReq->BSSWidthChannelTransitionDelayFactor;
11613 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11614 pReq->OBSSScanActiveTotalPerChannel;
11615 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11616 pReq->OBSSScanPassiveTotalPerChannel;
11617 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11618 pReq->OBSSScanActivityThreshold;
11619 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11620 vos_mem_copy(pWdiOBSSScanInd->channels,
11621 pReq->channels,
11622 pReq->channelCount);
11623 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11624 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11625 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11626 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11627 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11628
11629 vos_mem_copy(pWdiOBSSScanInd->ieField,
11630 pReq->ieField,
11631 pReq->ieFieldLen);
11632
11633 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11634 if (WDI_STATUS_PENDING == status)
11635 {
11636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11637 "Pending received for %s:%d ",__func__,__LINE__ );
11638 }
11639 else if (WDI_STATUS_SUCCESS_SYNC != status)
11640 {
11641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11642 "Failure in %s:%d ",__func__,__LINE__ );
11643 }
11644 return CONVERT_WDI2VOS_STATUS(status) ;
11645}
11646/*
11647 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11648 *
11649 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11650 *
11651 * PARAM:
11652 * pWDA: pointer to WDA context
11653 * pReq: pointer to stop batch scan request
11654 */
11655VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11656 tANI_U8 *bssIdx)
11657{
11658 WDI_Status status;
11659
11660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11661 "------> %s " ,__func__);
11662
11663 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11664 if (WDI_STATUS_PENDING == status)
11665 {
11666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11667 "Pending received for %s:%d ",__func__,__LINE__ );
11668 }
11669 else if (WDI_STATUS_SUCCESS_SYNC != status)
11670 {
11671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11672 "Failure in %s:%d ",__func__,__LINE__ );
11673 }
11674 return CONVERT_WDI2VOS_STATUS(status) ;
11675}
Yue Mab9c86f42013-08-14 15:59:08 -070011676/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011677 * FUNCTION: WDA_ProcessRateUpdateInd
11678 *
11679 */
11680VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11681 tSirRateUpdateInd *pRateUpdateParams)
11682{
11683 WDI_Status wdiStatus;
11684 WDI_RateUpdateIndParams rateUpdateParams;
11685
11686 vos_mem_copy(rateUpdateParams.bssid,
11687 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11688
11689 rateUpdateParams.ucastDataRateTxFlag =
11690 pRateUpdateParams->ucastDataRateTxFlag;
11691 rateUpdateParams.reliableMcastDataRateTxFlag =
11692 pRateUpdateParams->reliableMcastDataRateTxFlag;
11693 rateUpdateParams.mcastDataRate24GHzTxFlag =
11694 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11695 rateUpdateParams.mcastDataRate5GHzTxFlag =
11696 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11697
11698 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11699 rateUpdateParams.reliableMcastDataRate =
11700 pRateUpdateParams->reliableMcastDataRate;
11701 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11702 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11703
11704 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11705 rateUpdateParams.pUserData = pWDA;
11706
11707 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11708
11709 if (WDI_STATUS_PENDING == wdiStatus)
11710 {
11711 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11712 "Pending received for %s:%d", __func__, __LINE__ );
11713 }
11714 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11715 {
11716 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11717 "Failure in %s:%d", __func__, __LINE__ );
11718 }
11719
11720 vos_mem_free(pRateUpdateParams);
11721
11722 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11723}
11724
11725/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011726 * -------------------------------------------------------------------------
11727 * DATA interface with WDI for Mgmt Frames
11728 * -------------------------------------------------------------------------
11729 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011730/*
11731 * FUNCTION: WDA_TxComplete
11732 * Callback function for the WDA_TxPacket
11733 */
11734VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11735 VOS_STATUS status )
11736{
11737
11738 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11739 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011740 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011741
11742 if(NULL == wdaContext)
11743 {
11744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11745 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011746 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011747 VOS_ASSERT(0);
11748 return VOS_STATUS_E_FAILURE;
11749 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011750
11751 /*Check if frame was timed out or not*/
11752 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11753 (v_PVOID_t)&uUserData);
11754
11755 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11756 {
11757 /*Discard frame - no further processing is needed*/
11758 vos_pkt_return_packet(pData);
11759 return VOS_STATUS_SUCCESS;
11760 }
11761
Jeff Johnson295189b2012-06-20 16:38:30 -070011762 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11763 if( NULL!=wdaContext->pTxCbFunc)
11764 {
11765 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011766 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 {
11768 wdaContext->pTxCbFunc(pMac, pData);
11769 }
11770 else
11771 {
11772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011773 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011774 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 //Return from here since we reaching here because the packet already timeout
11776 return status;
11777 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 }
11779
11780 /*
11781 * Trigger the event to bring the HAL TL Tx complete function to come
11782 * out of wait
11783 * Let the coe above to complete the packet first. When this event is set,
11784 * the thread waiting for the event may run and set Vospacket_freed causing the original
11785 * packet not being freed.
11786 */
11787 status = vos_event_set(&wdaContext->txFrameEvent);
11788 if(!VOS_IS_STATUS_SUCCESS(status))
11789 {
11790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011791 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011792 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011793 return status;
11794}
Jeff Johnson295189b2012-06-20 16:38:30 -070011795/*
11796 * FUNCTION: WDA_TxPacket
11797 * Forward TX management frame to WDI
11798 */
11799VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11800 void *pFrmBuf,
11801 tANI_U16 frmLen,
11802 eFrameType frmType,
11803 eFrameTxDir txDir,
11804 tANI_U8 tid,
11805 pWDATxRxCompFunc pCompFunc,
11806 void *pData,
11807 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011808 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011809{
11810 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11811 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11812 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11813 tANI_U8 eventIdx = 0;
11814 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11815 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011816 if((NULL == pWDA)||(NULL == pFrmBuf))
11817 {
11818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011819 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011820 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011821 VOS_ASSERT(0);
11822 return VOS_STATUS_E_FAILURE;
11823 }
11824
11825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011826 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011827 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11828 if(NULL == pMac)
11829 {
11830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011831 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011832 VOS_ASSERT(0);
11833 return VOS_STATUS_E_FAILURE;
11834 }
11835
11836
11837
11838 /* store the call back function in WDA context */
11839 pWDA->pTxCbFunc = pCompFunc;
11840 /* store the call back for the function of ackTxComplete */
11841 if( pAckTxComp )
11842 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011843 if( NULL != pWDA->pAckTxCbFunc )
11844 {
11845 /* Already TxComp is active no need to active again */
11846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011847 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011848 pWDA->pAckTxCbFunc( pMac, 0);
11849 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011850
Jeff Johnsone7245742012-09-05 17:12:55 -070011851 if( VOS_STATUS_SUCCESS !=
11852 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11853 {
11854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11855 "Tx Complete timeout Timer Stop Failed ");
11856 }
11857 else
11858 {
11859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011860 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011861 }
11862 }
11863
11864 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11865 pWDA->pAckTxCbFunc = pAckTxComp;
11866 if( VOS_STATUS_SUCCESS !=
11867 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11868 {
11869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11870 "Tx Complete Timer Start Failed ");
11871 pWDA->pAckTxCbFunc = NULL;
11872 return eHAL_STATUS_FAILURE;
11873 }
11874 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011875 /* Reset the event to be not signalled */
11876 status = vos_event_reset(&pWDA->txFrameEvent);
11877 if(!VOS_IS_STATUS_SUCCESS(status))
11878 {
11879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011880 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011881 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11882 if( pAckTxComp )
11883 {
11884 pWDA->pAckTxCbFunc = NULL;
11885 if( VOS_STATUS_SUCCESS !=
11886 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11887 {
11888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11889 "Tx Complete timeout Timer Stop Failed ");
11890 }
11891 }
11892 return VOS_STATUS_E_FAILURE;
11893 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011894
11895 /* If Peer Sta mask is set don't overwrite to self sta */
11896 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011897 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011898 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011899 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011900 else
11901 {
Ganesh K08bce952012-12-13 15:04:41 -080011902 /* Get system role, use the self station if in unknown role or STA role */
11903 systemRole = wdaGetGlobalSystemRole(pMac);
11904 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11905 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080011906#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011907 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011908#endif
Ganesh K08bce952012-12-13 15:04:41 -080011909 ))
11910 {
11911 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11912 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011913 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011914
Jeff Johnsone7245742012-09-05 17:12:55 -070011915 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11916 disassoc frame reaches the HW, HAL has already deleted the peer station */
11917 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011918 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011919 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011920 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011921 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011922 /*Send Probe request frames on self sta idx*/
11923 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011924 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011925 /* Since we donot want probe responses to be retried, send probe responses
11926 through the NO_ACK queues */
11927 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11928 {
11929 //probe response is sent out using self station and no retries options.
11930 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11931 }
11932 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11933 {
11934 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11935 }
11936 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011937 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011938
11939 /*Set frame tag to 0
11940 We will use the WDA user data in order to tag a frame as expired*/
11941 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11942 (v_PVOID_t)0);
11943
11944
11945 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11946 frmLen, ucTypeSubType, tid,
11947 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11948 {
11949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011950 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011951 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011952 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011953 if( pAckTxComp )
11954 {
11955 pWDA->pAckTxCbFunc = NULL;
11956 if( VOS_STATUS_SUCCESS !=
11957 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11958 {
11959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11960 "Tx Complete timeout Timer Stop Failed ");
11961 }
11962 }
11963 return VOS_STATUS_E_FAILURE;
11964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011965 /*
11966 * Wait for the event to be set by the TL, to get the response of TX
11967 * complete, this event should be set by the Callback function called by TL
11968 */
11969 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11970 &eventIdx);
11971 if(!VOS_IS_STATUS_SUCCESS(status))
11972 {
11973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11974 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011975 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011976 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11977 after the packet gets completed(packet freed once)*/
11978
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011979 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Mihir Shete40a55652014-03-02 14:14:47 +053011980 WDA_TransportChannelDebug(pMac, 1, WPAL_DEBUG_TX_DESC_RESYNC);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011981
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011982 /*Tag Frame as timed out for later deletion*/
11983 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11984 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11985
Jeff Johnson295189b2012-06-20 16:38:30 -070011986 /* check whether the packet was freed already,so need not free again when
11987 * TL calls the WDA_Txcomplete routine
11988 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011989 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
11990 /*if(vos_atomic_set(uintptr_t *)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -070011991 {
11992 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011993 } */
11994
Jeff Johnson295189b2012-06-20 16:38:30 -070011995 if( pAckTxComp )
11996 {
11997 pWDA->pAckTxCbFunc = NULL;
11998 if( VOS_STATUS_SUCCESS !=
11999 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12000 {
12001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12002 "Tx Complete timeout Timer Stop Failed ");
12003 }
12004 }
12005 status = VOS_STATUS_E_FAILURE;
12006 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053012007#ifdef WLAN_DUMP_MGMTFRAMES
12008 if (VOS_IS_STATUS_SUCCESS(status))
12009 {
12010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12011 "%s() TX packet : SubType %d", __func__,pFc->subType);
12012 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12013 pData, frmLen);
12014 }
12015#endif
12016
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012017 if (VOS_IS_STATUS_SUCCESS(status))
12018 {
12019 if (pMac->fEnableDebugLog & 0x1)
12020 {
12021 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12022 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12023 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12024 {
12025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12026 pFc->type, pFc->subType);
12027 }
12028 }
12029 }
12030
12031
Jeff Johnson295189b2012-06-20 16:38:30 -070012032 return status;
12033}
Jeff Johnson295189b2012-06-20 16:38:30 -070012034/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012035 * FUNCTION: WDA_ProcessDHCPStartInd
12036 * Forward DHCP Start to WDI
12037 */
12038static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12039 tAniDHCPInd *dhcpStartInd)
12040{
12041 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012042 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012043
c_hpothu0b0cab72014-02-13 21:52:40 +053012044 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12045 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012046 sizeof(tSirMacAddr));
12047
c_hpothu0b0cab72014-02-13 21:52:40 +053012048 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012049
c_hpothu0b0cab72014-02-13 21:52:40 +053012050 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012051 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12053 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012054 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012055 else if (WDI_STATUS_SUCCESS_SYNC != status)
12056 {
12057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12058 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12059 }
12060
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012061 vos_mem_free(dhcpStartInd);
12062 return CONVERT_WDI2VOS_STATUS(status) ;
12063}
12064
12065 /*
12066 * FUNCTION: WDA_ProcessDHCPStopInd
12067 * Forward DHCP Stop to WDI
12068 */
12069 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12070 tAniDHCPInd *dhcpStopInd)
12071 {
12072 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012073 WDI_DHCPInd wdiDHCPInd;
12074
12075 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12076 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12077
12078 status = WDI_dhcpStopInd(&wdiDHCPInd);
12079
12080 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012081 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12083 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012084 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012085 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012086 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12088 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012089 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012090
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012091 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012092
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012093 return CONVERT_WDI2VOS_STATUS(status) ;
12094 }
12095
12096/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012097 * FUNCTION: WDA_McProcessMsg
12098 * Trigger DAL-AL to start CFG download
12099 */
12100VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12101{
12102 VOS_STATUS status = VOS_STATUS_SUCCESS;
12103 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012104 if(NULL == pMsg)
12105 {
12106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012107 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012108 VOS_ASSERT(0);
12109 return VOS_STATUS_E_FAILURE;
12110 }
12111
12112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012113 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012114
12115 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12116 if(NULL == pWDA )
12117 {
12118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012119 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012120 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012121 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012122 return VOS_STATUS_E_FAILURE;
12123 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012124 /* Process all the WDA messages.. */
12125 switch( pMsg->type )
12126 {
12127 case WNI_CFG_DNLD_REQ:
12128 {
12129 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012130 /* call WDA complete event if config download success */
12131 if( VOS_IS_STATUS_SUCCESS(status) )
12132 {
12133 vos_WDAComplete_cback(pVosContext);
12134 }
12135 else
12136 {
12137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12138 "WDA Config Download failure" );
12139 }
12140 break ;
12141 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012142 /*
12143 * Init SCAN request from PE, convert it into DAL format
12144 * and send it to DAL
12145 */
12146 case WDA_INIT_SCAN_REQ:
12147 {
12148 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12149 break ;
12150 }
12151 /* start SCAN request from PE */
12152 case WDA_START_SCAN_REQ:
12153 {
12154 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12155 break ;
12156 }
12157 /* end SCAN request from PE */
12158 case WDA_END_SCAN_REQ:
12159 {
12160 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12161 break ;
12162 }
12163 /* end SCAN request from PE */
12164 case WDA_FINISH_SCAN_REQ:
12165 {
12166 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12167 break ;
12168 }
12169 /* join request from PE */
12170 case WDA_CHNL_SWITCH_REQ:
12171 {
12172 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12173 {
12174 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12175 }
12176 else
12177 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012178 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12179 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12180 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12181 {
12182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12183 "call ProcessChannelSwitchReq_V1" );
12184 WDA_ProcessChannelSwitchReq_V1(pWDA,
12185 (tSwitchChannelParams*)pMsg->bodyptr) ;
12186 }
12187 else
12188 {
12189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12190 "call ProcessChannelSwitchReq" );
12191 WDA_ProcessChannelSwitchReq(pWDA,
12192 (tSwitchChannelParams*)pMsg->bodyptr) ;
12193 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012194 }
12195 break ;
12196 }
12197 /* ADD BSS request from PE */
12198 case WDA_ADD_BSS_REQ:
12199 {
12200 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12201 break ;
12202 }
12203 case WDA_ADD_STA_REQ:
12204 {
12205 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12206 break ;
12207 }
12208 case WDA_DELETE_BSS_REQ:
12209 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012210 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12211 break ;
12212 }
12213 case WDA_DELETE_STA_REQ:
12214 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012215 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12216 break ;
12217 }
12218 case WDA_CONFIG_PARAM_UPDATE_REQ:
12219 {
12220 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12221 break ;
12222 }
12223 case WDA_SET_BSSKEY_REQ:
12224 {
12225 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12226 break ;
12227 }
12228 case WDA_SET_STAKEY_REQ:
12229 {
12230 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12231 break ;
12232 }
12233 case WDA_SET_STA_BCASTKEY_REQ:
12234 {
12235 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12236 break ;
12237 }
12238 case WDA_REMOVE_BSSKEY_REQ:
12239 {
12240 WDA_ProcessRemoveBssKeyReq(pWDA,
12241 (tRemoveBssKeyParams *)pMsg->bodyptr);
12242 break ;
12243 }
12244 case WDA_REMOVE_STAKEY_REQ:
12245 {
12246 WDA_ProcessRemoveStaKeyReq(pWDA,
12247 (tRemoveStaKeyParams *)pMsg->bodyptr);
12248 break ;
12249 }
12250 case WDA_REMOVE_STA_BCASTKEY_REQ:
12251 {
12252 /* TODO: currently UMAC is not sending this request, Add the code for
12253 handling this request when UMAC supports */
12254 break;
12255 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012256#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012257 case WDA_TSM_STATS_REQ:
12258 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012259 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012260 break;
12261 }
12262#endif
12263 case WDA_UPDATE_EDCA_PROFILE_IND:
12264 {
12265 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12266 break;
12267 }
12268 case WDA_ADD_TS_REQ:
12269 {
12270 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12271 break;
12272 }
12273 case WDA_DEL_TS_REQ:
12274 {
12275 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12276 break;
12277 }
12278 case WDA_ADDBA_REQ:
12279 {
12280 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12281 break;
12282 }
12283 case WDA_DELBA_IND:
12284 {
12285 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12286 break;
12287 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012288 case WDA_UPDATE_CHAN_LIST_REQ:
12289 {
12290 WDA_ProcessUpdateChannelList(pWDA,
12291 (tSirUpdateChanList *)pMsg->bodyptr);
12292 break;
12293 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012294 case WDA_SET_LINK_STATE:
12295 {
12296 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12297 break;
12298 }
12299 case WDA_GET_STATISTICS_REQ:
12300 {
12301 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12302 break;
12303 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012304#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012305 case WDA_GET_ROAM_RSSI_REQ:
12306 {
12307 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12308 break;
12309 }
12310#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012311 case WDA_PWR_SAVE_CFG:
12312 {
12313 if(pWDA->wdaState == WDA_READY_STATE)
12314 {
12315 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12316 }
12317 else
12318 {
12319 if(NULL != pMsg->bodyptr)
12320 {
12321 vos_mem_free(pMsg->bodyptr);
12322 }
12323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12324 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12325 }
12326 break;
12327 }
12328 case WDA_ENTER_IMPS_REQ:
12329 {
12330 if(pWDA->wdaState == WDA_READY_STATE)
12331 {
12332 WDA_ProcessEnterImpsReq(pWDA);
12333 }
12334 else
12335 {
12336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12337 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12338 }
12339 break;
12340 }
12341 case WDA_EXIT_IMPS_REQ:
12342 {
12343 if(pWDA->wdaState == WDA_READY_STATE)
12344 {
12345 WDA_ProcessExitImpsReq(pWDA);
12346 }
12347 else
12348 {
12349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12350 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12351 }
12352 break;
12353 }
12354 case WDA_ENTER_BMPS_REQ:
12355 {
12356 if(pWDA->wdaState == WDA_READY_STATE)
12357 {
12358 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12359 }
12360 else
12361 {
12362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12363 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12364 }
12365 break;
12366 }
12367 case WDA_EXIT_BMPS_REQ:
12368 {
12369 if(pWDA->wdaState == WDA_READY_STATE)
12370 {
12371 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12372 }
12373 else
12374 {
12375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12376 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12377 }
12378 break;
12379 }
12380 case WDA_ENTER_UAPSD_REQ:
12381 {
12382 if(pWDA->wdaState == WDA_READY_STATE)
12383 {
12384 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12385 }
12386 else
12387 {
12388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12389 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12390 }
12391 break;
12392 }
12393 case WDA_EXIT_UAPSD_REQ:
12394 {
12395 if(pWDA->wdaState == WDA_READY_STATE)
12396 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012397 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012398 }
12399 else
12400 {
12401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12402 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12403 }
12404 break;
12405 }
12406 case WDA_UPDATE_UAPSD_IND:
12407 {
12408 if(pWDA->wdaState == WDA_READY_STATE)
12409 {
12410 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12411 }
12412 else
12413 {
12414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12415 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12416 }
12417 break;
12418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012419 case WDA_REGISTER_PE_CALLBACK :
12420 {
12421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12422 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12423 /*TODO: store the PE callback */
12424 /* Do Nothing? MSG Body should be freed at here */
12425 if(NULL != pMsg->bodyptr)
12426 {
12427 vos_mem_free(pMsg->bodyptr);
12428 }
12429 break;
12430 }
12431 case WDA_SYS_READY_IND :
12432 {
12433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12434 "Handling msg type WDA_SYS_READY_IND " );
12435 pWDA->wdaState = WDA_READY_STATE;
12436 if(NULL != pMsg->bodyptr)
12437 {
12438 vos_mem_free(pMsg->bodyptr);
12439 }
12440 break;
12441 }
12442 case WDA_BEACON_FILTER_IND :
12443 {
12444 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12445 break;
12446 }
12447 case WDA_BTC_SET_CFG:
12448 {
12449 /*TODO: handle this while dealing with BTC */
12450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12451 "Handling msg type WDA_BTC_SET_CFG " );
12452 /* Do Nothing? MSG Body should be freed at here */
12453 if(NULL != pMsg->bodyptr)
12454 {
12455 vos_mem_free(pMsg->bodyptr);
12456 }
12457 break;
12458 }
12459 case WDA_SIGNAL_BT_EVENT:
12460 {
12461 /*TODO: handle this while dealing with BTC */
12462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12463 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12464 /* Do Nothing? MSG Body should be freed at here */
12465 if(NULL != pMsg->bodyptr)
12466 {
12467 vos_mem_free(pMsg->bodyptr);
12468 }
12469 break;
12470 }
12471 case WDA_CFG_RXP_FILTER_REQ:
12472 {
12473 WDA_ProcessConfigureRxpFilterReq(pWDA,
12474 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12475 break;
12476 }
12477 case WDA_SET_HOST_OFFLOAD:
12478 {
12479 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12480 break;
12481 }
12482 case WDA_SET_KEEP_ALIVE:
12483 {
12484 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12485 break;
12486 }
12487#ifdef WLAN_NS_OFFLOAD
12488 case WDA_SET_NS_OFFLOAD:
12489 {
12490 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12491 break;
12492 }
12493#endif //WLAN_NS_OFFLOAD
12494 case WDA_ADD_STA_SELF_REQ:
12495 {
12496 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12497 break;
12498 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012499 case WDA_DEL_STA_SELF_REQ:
12500 {
12501 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12502 break;
12503 }
12504 case WDA_WOWL_ADD_BCAST_PTRN:
12505 {
12506 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12507 break;
12508 }
12509 case WDA_WOWL_DEL_BCAST_PTRN:
12510 {
12511 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12512 break;
12513 }
12514 case WDA_WOWL_ENTER_REQ:
12515 {
12516 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12517 break;
12518 }
12519 case WDA_WOWL_EXIT_REQ:
12520 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012521 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012522 break;
12523 }
12524 case WDA_TL_FLUSH_AC_REQ:
12525 {
12526 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12527 break;
12528 }
12529 case WDA_SIGNAL_BTAMP_EVENT:
12530 {
12531 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12532 break;
12533 }
12534#ifdef WDA_UT
12535 case WDA_WDI_EVENT_MSG:
12536 {
12537 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12538 break ;
12539 }
12540#endif
12541 case WDA_UPDATE_BEACON_IND:
12542 {
12543 WDA_ProcessUpdateBeaconParams(pWDA,
12544 (tUpdateBeaconParams *)pMsg->bodyptr);
12545 break;
12546 }
12547 case WDA_SEND_BEACON_REQ:
12548 {
12549 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12550 break;
12551 }
12552 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12553 {
12554 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12555 (tSendProbeRespParams *)pMsg->bodyptr);
12556 break;
12557 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012558#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070012559 case WDA_SET_MAX_TX_POWER_REQ:
12560 {
12561 WDA_ProcessSetMaxTxPowerReq(pWDA,
12562 (tMaxTxPowerParams *)pMsg->bodyptr);
12563 break;
12564 }
12565#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012566 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12567 {
12568 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12569 pMsg->bodyptr);
12570 break;
12571 }
schang86c22c42013-03-13 18:41:24 -070012572 case WDA_SET_TX_POWER_REQ:
12573 {
12574 WDA_ProcessSetTxPowerReq(pWDA,
12575 (tSirSetTxPowerReq *)pMsg->bodyptr);
12576 break;
12577 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012578 case WDA_SET_P2P_GO_NOA_REQ:
12579 {
12580 WDA_ProcessSetP2PGONOAReq(pWDA,
12581 (tP2pPsParams *)pMsg->bodyptr);
12582 break;
12583 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012584 /* timer related messages */
12585 case WDA_TIMER_BA_ACTIVITY_REQ:
12586 {
12587 WDA_BaCheckActivity(pWDA) ;
12588 break ;
12589 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012590
12591 /* timer related messages */
12592 case WDA_TIMER_TRAFFIC_STATS_IND:
12593 {
12594 WDA_TimerTrafficStatsInd(pWDA);
12595 break;
12596 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012597#ifdef WLAN_FEATURE_VOWIFI_11R
12598 case WDA_AGGR_QOS_REQ:
12599 {
12600 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12601 break;
12602 }
12603#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012604 case WDA_FTM_CMD_REQ:
12605 {
12606 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12607 break ;
12608 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012609#ifdef FEATURE_OEM_DATA_SUPPORT
12610 case WDA_START_OEM_DATA_REQ:
12611 {
12612 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12613 break;
12614 }
12615#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012616 /* Tx Complete Time out Indication */
12617 case WDA_TX_COMPLETE_TIMEOUT_IND:
12618 {
12619 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12620 break;
12621 }
12622 case WDA_WLAN_SUSPEND_IND:
12623 {
12624 WDA_ProcessWlanSuspendInd(pWDA,
12625 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12626 break;
12627 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012628 case WDA_WLAN_RESUME_REQ:
12629 {
12630 WDA_ProcessWlanResumeReq(pWDA,
12631 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12632 break;
12633 }
12634
12635 case WDA_UPDATE_CF_IND:
12636 {
12637 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12638 pMsg->bodyptr = NULL;
12639 break;
12640 }
12641#ifdef FEATURE_WLAN_SCAN_PNO
12642 case WDA_SET_PNO_REQ:
12643 {
12644 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12645 break;
12646 }
12647 case WDA_UPDATE_SCAN_PARAMS_REQ:
12648 {
12649 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12650 break;
12651 }
12652 case WDA_SET_RSSI_FILTER_REQ:
12653 {
12654 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12655 break;
12656 }
12657#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012658#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012659 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012660 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012661 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012662 break;
12663 }
12664#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012665 case WDA_SET_TX_PER_TRACKING_REQ:
12666 {
12667 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12668 break;
12669 }
12670
12671#ifdef WLAN_FEATURE_PACKET_FILTERING
12672 case WDA_8023_MULTICAST_LIST_REQ:
12673 {
12674 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12675 break;
12676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12678 {
12679 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12680 break;
12681 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012682 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12683 {
12684 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12685 break;
12686 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012687 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12688 {
12689 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12690 break;
12691 }
12692#endif // WLAN_FEATURE_PACKET_FILTERING
12693
12694
12695 case WDA_TRANSMISSION_CONTROL_IND:
12696 {
12697 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12698 break;
12699 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012700 case WDA_SET_POWER_PARAMS_REQ:
12701 {
12702 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12703 break;
12704 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012705#ifdef WLAN_FEATURE_GTK_OFFLOAD
12706 case WDA_GTK_OFFLOAD_REQ:
12707 {
12708 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12709 break;
12710 }
12711
12712 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12713 {
12714 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12715 break;
12716 }
12717#endif //WLAN_FEATURE_GTK_OFFLOAD
12718
12719 case WDA_SET_TM_LEVEL_REQ:
12720 {
12721 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12722 break;
12723 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012724
Mohit Khanna4a70d262012-09-11 16:30:12 -070012725 case WDA_UPDATE_OP_MODE:
12726 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012727 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12728 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12729 {
12730 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12731 }
12732 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012733 {
12734 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12735 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12736 else
12737 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012738 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012739 }
12740 else
12741 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012742 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012743 break;
12744 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012745#ifdef WLAN_FEATURE_11W
12746 case WDA_EXCLUDE_UNENCRYPTED_IND:
12747 {
12748 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12749 break;
12750 }
12751#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012752#ifdef FEATURE_WLAN_TDLS
12753 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12754 {
12755 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12756 break;
12757 }
12758#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012759 case WDA_DHCP_START_IND:
12760 {
12761 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12762 break;
12763 }
12764 case WDA_DHCP_STOP_IND:
12765 {
12766 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12767 break;
12768 }
Leo Chang9056f462013-08-01 19:21:11 -070012769#ifdef FEATURE_WLAN_LPHB
12770 case WDA_LPHB_CONF_REQ:
12771 {
12772 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12773 break;
12774 }
12775#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012776 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12777 {
12778 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12779 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12780 break;
12781 }
12782 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12783 {
12784 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12785 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12786 break;
12787 }
12788
Rajeev79dbe4c2013-10-05 11:03:42 +053012789#ifdef FEATURE_WLAN_BATCH_SCAN
12790 case WDA_SET_BATCH_SCAN_REQ:
12791 {
12792 WDA_ProcessSetBatchScanReq(pWDA,
12793 (tSirSetBatchScanReq *)pMsg->bodyptr);
12794 break;
12795 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012796 case WDA_RATE_UPDATE_IND:
12797 {
12798 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12799 break;
12800 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012801 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12802 {
12803 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12804 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12805 break;
12806 }
12807 case WDA_STOP_BATCH_SCAN_IND:
12808 {
12809 WDA_ProcessStopBatchScanInd(pWDA,
12810 (tSirStopBatchScanInd *)pMsg->bodyptr);
12811 break;
12812 }
c_hpothu92367912014-05-01 15:18:17 +053012813 case WDA_GET_BCN_MISS_RATE_REQ:
12814 WDA_ProcessGetBcnMissRateReq(pWDA,
12815 (tSirBcnMissRateReq *)pMsg->bodyptr);
12816 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053012817#endif
12818
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012819 case WDA_HT40_OBSS_SCAN_IND:
12820 {
12821 WDA_ProcessHT40OBSSScanInd(pWDA,
12822 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12823 break;
12824 }
12825 case WDA_HT40_OBSS_STOP_SCAN_IND:
12826 {
12827 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12828 (tANI_U8*)pMsg->bodyptr);
12829 break;
12830 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012831 default:
12832 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053012833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070012834 "No Handling for msg type %x in WDA "
12835 ,pMsg->type);
12836 /* Do Nothing? MSG Body should be freed at here */
12837 if(NULL != pMsg->bodyptr)
12838 {
12839 vos_mem_free(pMsg->bodyptr);
12840 }
12841 //WDA_VOS_ASSERT(0) ;
12842 }
12843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012844 return status ;
12845}
12846
Jeff Johnson295189b2012-06-20 16:38:30 -070012847/*
12848 * FUNCTION: WDA_LowLevelIndCallback
12849 * IND API callback from WDI, send Ind to PE
12850 */
12851void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12852 void* pUserData )
12853{
12854 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12855#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12856 tSirRSSINotification rssiNotification;
12857#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012858 if(NULL == pWDA)
12859 {
12860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012861 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012862 VOS_ASSERT(0);
12863 return ;
12864 }
12865
12866 switch(wdiLowLevelInd->wdiIndicationType)
12867 {
12868 case WDI_RSSI_NOTIFICATION_IND:
12869 {
12870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12871 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012872#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12873 rssiNotification.bReserved =
12874 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12875 rssiNotification.bRssiThres1NegCross =
12876 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12877 rssiNotification.bRssiThres1PosCross =
12878 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12879 rssiNotification.bRssiThres2NegCross =
12880 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12881 rssiNotification.bRssiThres2PosCross =
12882 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12883 rssiNotification.bRssiThres3NegCross =
12884 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12885 rssiNotification.bRssiThres3PosCross =
12886 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012887 rssiNotification.avgRssi = (v_S7_t)
12888 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012889 WLANTL_BMPSRSSIRegionChangedNotification(
12890 pWDA->pVosContext,
12891 &rssiNotification);
12892#endif
12893 break ;
12894 }
12895 case WDI_MISSED_BEACON_IND:
12896 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012897 tpSirSmeMissedBeaconInd pMissBeacInd =
12898 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12900 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012901 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012902 if(NULL == pMissBeacInd)
12903 {
12904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12905 "%s: VOS MEM Alloc Failure", __func__);
12906 break;
12907 }
12908 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12909 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12910 pMissBeacInd->bssIdx =
12911 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12912 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012913 break ;
12914 }
12915 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12916 {
12917 /* TODO: Decode Ind and send Ind to PE */
12918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12919 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12920 break ;
12921 }
12922
12923 case WDI_MIC_FAILURE_IND:
12924 {
12925 tpSirSmeMicFailureInd pMicInd =
12926 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12927
12928 if(NULL == pMicInd)
12929 {
12930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012932 break;
12933 }
12934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12935 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012936 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12937 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12938 vos_mem_copy(pMicInd->bssId,
12939 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12940 sizeof(tSirMacAddr));
12941 vos_mem_copy(pMicInd->info.srcMacAddr,
12942 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12943 sizeof(tSirMacAddr));
12944 vos_mem_copy(pMicInd->info.taMacAddr,
12945 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12946 sizeof(tSirMacAddr));
12947 vos_mem_copy(pMicInd->info.dstMacAddr,
12948 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12949 sizeof(tSirMacAddr));
12950 vos_mem_copy(pMicInd->info.rxMacAddr,
12951 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12952 sizeof(tSirMacAddr));
12953 pMicInd->info.multicast =
12954 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12955 pMicInd->info.keyId=
12956 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12957 pMicInd->info.IV1=
12958 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12959 vos_mem_copy(pMicInd->info.TSC,
12960 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012961 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12962 (void *)pMicInd , 0) ;
12963 break ;
12964 }
12965 case WDI_FATAL_ERROR_IND:
12966 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012967 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012968 /* TODO: Decode Ind and send Ind to PE */
12969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12970 "Received WDI_FATAL_ERROR_IND from WDI ");
12971 break ;
12972 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012973 case WDI_DEL_STA_IND:
12974 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012975 tpDeleteStaContext pDelSTACtx =
12976 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12977
12978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12979 "Received WDI_DEL_STA_IND from WDI ");
12980 if(NULL == pDelSTACtx)
12981 {
12982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012984 break;
12985 }
12986 vos_mem_copy(pDelSTACtx->addr2,
12987 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12988 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012989 vos_mem_copy(pDelSTACtx->bssId,
12990 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12991 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012992 pDelSTACtx->assocId =
12993 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12994 pDelSTACtx->reasonCode =
12995 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12996 pDelSTACtx->staId =
12997 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012998 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12999 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013000 break ;
13001 }
13002 case WDI_COEX_IND:
13003 {
13004 tANI_U32 index;
13005 vos_msg_t vosMsg;
13006 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
13007 if(NULL == pSmeCoexInd)
13008 {
13009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013010 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013011 break;
13012 }
13013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13014 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013015 /* Message Header */
13016 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13017 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013018 /* Info from WDI Indication */
13019 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13020 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13021 {
13022 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13023 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013024 /* VOS message wrapper */
13025 vosMsg.type = eWNI_SME_COEX_IND;
13026 vosMsg.bodyptr = (void *)pSmeCoexInd;
13027 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013028 /* Send message to SME */
13029 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13030 {
13031 /* free the mem and return */
13032 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13033 }
13034 else
13035 {
13036 /* DEBUG */
13037 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13038 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13039 pSmeCoexInd->coexIndType,
13040 pSmeCoexInd->coexIndData[0],
13041 pSmeCoexInd->coexIndData[1],
13042 pSmeCoexInd->coexIndData[2],
13043 pSmeCoexInd->coexIndData[3]);
13044 }
13045 break;
13046 }
13047 case WDI_TX_COMPLETE_IND:
13048 {
13049 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13050 /* Calling TxCompleteAck Indication from wda context*/
13051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13052 "Complete Indication received from HAL");
13053 if( pWDA->pAckTxCbFunc )
13054 {
13055 if( VOS_STATUS_SUCCESS !=
13056 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13057 {
13058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13059 "Tx Complete timeout Timer Stop Failed ");
13060 }
13061 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13062 pWDA->pAckTxCbFunc = NULL;
13063 }
13064 else
13065 {
13066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13067 "Tx Complete Indication is received after timeout ");
13068 }
13069 break;
13070 }
Viral Modid86bde22012-12-10 13:09:21 -080013071 case WDI_P2P_NOA_START_IND :
13072 {
13073 tSirP2PNoaStart *pP2pNoaStart =
13074 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13075
13076 if (NULL == pP2pNoaStart)
13077 {
13078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13079 "Memory allocation failure, "
13080 "WDI_P2P_NOA_START_IND not forwarded");
13081 break;
13082 }
13083 pP2pNoaStart->status =
13084 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13085 pP2pNoaStart->bssIdx =
13086 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13087 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13088 (void *)pP2pNoaStart , 0) ;
13089 break;
13090 }
13091
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013092#ifdef FEATURE_WLAN_TDLS
13093 case WDI_TDLS_IND :
13094 {
13095 tSirTdlsInd *pTdlsInd =
13096 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13097
13098 if (NULL == pTdlsInd)
13099 {
13100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13101 "Memory allocation failure, "
13102 "WDI_TDLS_IND not forwarded");
13103 break;
13104 }
13105 pTdlsInd->status =
13106 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13107 pTdlsInd->assocId =
13108 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13109 pTdlsInd->staIdx =
13110 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13111 pTdlsInd->reasonCode =
13112 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13113 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13114 (void *)pTdlsInd , 0) ;
13115 break;
13116 }
13117#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013118 case WDI_P2P_NOA_ATTR_IND :
13119 {
13120 tSirP2PNoaAttr *pP2pNoaAttr =
13121 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13123 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013124 if (NULL == pP2pNoaAttr)
13125 {
13126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13127 "Memory allocation failure, "
13128 "WDI_P2P_NOA_ATTR_IND not forwarded");
13129 break;
13130 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013131 pP2pNoaAttr->index =
13132 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13133 pP2pNoaAttr->oppPsFlag =
13134 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13135 pP2pNoaAttr->ctWin =
13136 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13137
13138 pP2pNoaAttr->uNoa1IntervalCnt =
13139 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13140 pP2pNoaAttr->uNoa1Duration =
13141 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13142 pP2pNoaAttr->uNoa1Interval =
13143 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13144 pP2pNoaAttr->uNoa1StartTime =
13145 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013146 pP2pNoaAttr->uNoa2IntervalCnt =
13147 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13148 pP2pNoaAttr->uNoa2Duration =
13149 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13150 pP2pNoaAttr->uNoa2Interval =
13151 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13152 pP2pNoaAttr->uNoa2StartTime =
13153 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013154 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13155 (void *)pP2pNoaAttr , 0) ;
13156 break;
13157 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013158#ifdef FEATURE_WLAN_SCAN_PNO
13159 case WDI_PREF_NETWORK_FOUND_IND:
13160 {
13161 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013162 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13163 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13164 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13165 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13166
Jeff Johnson295189b2012-06-20 16:38:30 -070013167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13168 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 if (NULL == pPrefNetworkFoundInd)
13170 {
13171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13172 "Memory allocation failure, "
13173 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013174 if (NULL !=
13175 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13176 {
13177 wpalMemoryFree(
13178 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13179 );
13180 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13181 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 break;
13183 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013184 /* Message Header */
13185 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013186 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013187
13188 /* Info from WDI Indication */
13189 pPrefNetworkFoundInd->ssId.length =
13190 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013191 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013192 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13193 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13194 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013195 if (NULL !=
13196 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13197 {
13198 pPrefNetworkFoundInd->frameLength =
13199 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13200 vos_mem_copy( pPrefNetworkFoundInd->data,
13201 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13202 pPrefNetworkFoundInd->frameLength);
13203 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13204 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13205 }
13206 else
13207 {
13208 pPrefNetworkFoundInd->frameLength = 0;
13209 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013211 /* VOS message wrapper */
13212 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13213 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13214 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013215 /* Send message to SME */
13216 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13217 {
13218 /* free the mem and return */
13219 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13220 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013221 break;
13222 }
13223#endif // FEATURE_WLAN_SCAN_PNO
13224
13225#ifdef WLAN_WAKEUP_EVENTS
13226 case WDI_WAKE_REASON_IND:
13227 {
13228 vos_msg_t vosMsg;
13229 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13230 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13231 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13232
13233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13234 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
13235 wdiLowLevelInd->wdiIndicationType,
13236 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13237 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13238 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13239
13240 if (NULL == pWakeReasonInd)
13241 {
13242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13243 "Memory allocation failure, "
13244 "WDI_WAKE_REASON_IND not forwarded");
13245 break;
13246 }
13247
13248 vos_mem_zero(pWakeReasonInd, allocSize);
13249
13250 /* Message Header */
13251 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13252 pWakeReasonInd->mesgLen = allocSize;
13253
13254 /* Info from WDI Indication */
13255 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13256 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13257 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13258 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13259 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13260 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13261 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13262 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13263
13264 /* VOS message wrapper */
13265 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13266 vosMsg.bodyptr = (void *) pWakeReasonInd;
13267 vosMsg.bodyval = 0;
13268
13269 /* Send message to SME */
13270 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13271 {
13272 /* free the mem and return */
13273 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13274 }
13275
13276 break;
13277 }
13278#endif // WLAN_WAKEUP_EVENTS
13279
13280 case WDI_TX_PER_HIT_IND:
13281 {
13282 vos_msg_t vosMsg;
13283 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13284 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13285 /* VOS message wrapper */
13286 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13287 vosMsg.bodyptr = NULL;
13288 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013289 /* Send message to SME */
13290 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13291 {
13292 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13293 }
13294 break;
13295 }
13296
Leo Chang9056f462013-08-01 19:21:11 -070013297#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013298 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013299 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013300 vos_msg_t vosMsg;
13301 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013302
Leo Changd9df8aa2013-09-26 13:32:26 -070013303 lphbInd =
13304 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13305 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013306 {
13307 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13308 "%s: LPHB IND buffer alloc Fail", __func__);
13309 return ;
13310 }
13311
Leo Changd9df8aa2013-09-26 13:32:26 -070013312 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013313 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013314 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013315 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013316 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013317 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13318
13319 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013320 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013321 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13322
Leo Changd9df8aa2013-09-26 13:32:26 -070013323 vosMsg.type = eWNI_SME_LPHB_IND;
13324 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013325 vosMsg.bodyval = 0;
13326 /* Send message to SME */
13327 if (VOS_STATUS_SUCCESS !=
13328 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13329 {
13330 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13331 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013332 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013333 }
13334 break;
13335 }
13336#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013337 case WDI_PERIODIC_TX_PTRN_FW_IND:
13338 {
13339 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13340 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13341 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13342 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13343 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13344 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13345 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13346
13347 break;
13348 }
Leo Chang9056f462013-08-01 19:21:11 -070013349
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013350 case WDI_IBSS_PEER_INACTIVITY_IND:
13351 {
13352 tSirIbssPeerInactivityInd *pIbssInd =
13353 (tSirIbssPeerInactivityInd *)
13354 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13355
13356 if (NULL == pIbssInd)
13357 {
13358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13359 "Memory allocation failure, "
13360 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13361 break;
13362 }
13363
13364 pIbssInd->bssIdx =
13365 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13366 pIbssInd->staIdx =
13367 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13368 vos_mem_copy(pIbssInd->peerAddr,
13369 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13370 sizeof(tSirMacAddr));
13371 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13372 break;
13373 }
13374
Rajeev79dbe4c2013-10-05 11:03:42 +053013375#ifdef FEATURE_WLAN_BATCH_SCAN
13376 case WDI_BATCH_SCAN_RESULT_IND:
13377 {
13378 void *pBatchScanResult;
13379 void *pCallbackContext;
13380 tpAniSirGlobal pMac;
13381
13382 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13383 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13384
13385 /*sanity check*/
13386 if(NULL == pWDA)
13387 {
13388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13389 "%s:pWDA is NULL", __func__);
13390 VOS_ASSERT(0);
13391 return;
13392 }
13393
13394 pBatchScanResult =
13395 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13396 if (NULL == pBatchScanResult)
13397 {
13398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13399 "%s:Batch scan result from FW is null can't invoke HDD callback",
13400 __func__);
13401 VOS_ASSERT(0);
13402 return;
13403 }
13404
13405 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13406 if (NULL == pMac)
13407 {
13408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13409 "%s:pMac is NULL", __func__);
13410 VOS_ASSERT(0);
13411 return;
13412 }
13413
13414 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13415 /*call hdd callback with set batch scan response data*/
13416 if(pMac->pmc.batchScanResultCallback)
13417 {
13418 pMac->pmc.batchScanResultCallback(pCallbackContext,
13419 pBatchScanResult);
13420 }
13421 else
13422 {
13423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13424 "%s:HDD callback is null", __func__);
13425 VOS_ASSERT(0);
13426 }
13427 break;
13428 }
13429#endif
13430
Leo Chang0b0e45a2013-12-15 15:18:55 -080013431#ifdef FEATURE_WLAN_CH_AVOID
13432 case WDI_CH_AVOID_IND:
13433 {
13434 vos_msg_t vosMsg;
13435 tSirChAvoidIndType *chAvoidInd;
13436
13437 chAvoidInd =
13438 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13439 if (NULL == chAvoidInd)
13440 {
13441 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13442 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13443 return ;
13444 }
13445
13446 chAvoidInd->avoidRangeCount =
13447 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13448 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13449 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13450 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13451
13452 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13453 "%s : WDA CH avoid notification", __func__);
13454
13455 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13456 vosMsg.bodyptr = chAvoidInd;
13457 vosMsg.bodyval = 0;
13458 /* Send message to SME */
13459 if (VOS_STATUS_SUCCESS !=
13460 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13461 {
13462 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13463 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13464 vos_mem_free(chAvoidInd);
13465 }
13466 break;
13467 }
13468#endif /* FEATURE_WLAN_CH_AVOID */
13469
Jeff Johnson295189b2012-06-20 16:38:30 -070013470 default:
13471 {
13472 /* TODO error */
13473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13474 "Received UNKNOWN Indication from WDI ");
13475 }
13476 }
13477 return ;
13478}
13479
Jeff Johnson295189b2012-06-20 16:38:30 -070013480/*
13481 * BA related processing in WDA.
13482 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013483void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
13484 void* pUserData)
13485{
13486 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13487 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070013488 if(NULL == pWdaParams)
13489 {
13490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013491 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013492 VOS_ASSERT(0) ;
13493 return ;
13494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013495 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070013496 vos_mem_free(pWdaParams->wdaMsgParam) ;
13497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13498 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013500 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013501 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
13502 {
13503 tANI_U8 i = 0 ;
13504 tBaActivityInd *baActivityInd = NULL ;
13505 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
13506 tANI_U8 allocSize = sizeof(tBaActivityInd)
13507 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
13508 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
13509 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013510 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013511 if(NULL == baActivityInd)
13512 {
13513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013515 VOS_ASSERT(0) ;
13516 return;
13517 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013518 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13519 sizeof(tSirMacAddr)) ;
13520 baActivityInd->baCandidateCnt = baCandidateCount ;
13521
13522 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13523 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13524
13525 for(i = 0 ; i < baCandidateCount ; i++)
13526 {
13527 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013528 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13529 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013530 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13531 {
13532 baCandidate->baInfo[tid].fBaEnable =
13533 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13534 baCandidate->baInfo[tid].startingSeqNum =
13535 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13536 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013537 wdiBaCandidate++ ;
13538 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013539 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013540 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13541 }
13542 else
13543 {
13544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13545 "BA Trigger RSP with Failure received ");
13546 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013547 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013548}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013549
13550
13551/*
13552 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13553 * during MCC
13554 */
13555void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13556{
13557 wpt_uint32 enabled;
13558 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13559 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13560 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13561
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013562 if (NULL == pMac )
13563 {
13564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13565 "%s: Invoked with invalid MAC context ", __func__ );
13566 VOS_ASSERT(0);
13567 return;
13568 }
13569
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013570 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13571 != eSIR_SUCCESS)
13572 {
13573 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13574 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13575 return;
13576 }
13577
13578 if(!enabled)
13579 {
13580 return;
13581 }
13582
13583 if(NULL == pWDA)
13584 {
13585 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13586 "%s:WDA context is NULL", __func__);
13587 VOS_ASSERT(0);
13588 return;
13589 }
13590
13591 if(activate)
13592 {
13593 if( VOS_STATUS_SUCCESS !=
13594 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13595 {
13596 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13597 "Traffic Stats Timer Start Failed ");
13598 return;
13599 }
13600 WDI_DS_ActivateTrafficStats();
13601 }
13602 else
13603 {
13604 WDI_DS_DeactivateTrafficStats();
13605 WDI_DS_ClearTrafficStats();
13606
13607 if( VOS_STATUS_SUCCESS !=
13608 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13609 {
13610 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13611 "Traffic Stats Timer Stop Failed ");
13612 return;
13613 }
13614 }
13615}
13616
13617/*
13618 * Traffic Stats Timer handler
13619 */
13620void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13621{
13622 WDI_Status wdiStatus;
13623 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13624 WDI_TrafficStatsIndType trafficStatsIndParams;
13625 wpt_uint32 length, enabled;
13626 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13627
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013628 if (NULL == pMac )
13629 {
13630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13631 "%s: Invoked with invalid MAC context ", __func__ );
13632 VOS_ASSERT(0);
13633 return;
13634 }
13635
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013636 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13637 != eSIR_SUCCESS)
13638 {
13639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13640 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13641 return;
13642 }
13643
13644 if(!enabled)
13645 {
13646 WDI_DS_DeactivateTrafficStats();
13647 return;
13648 }
13649
13650 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13651
13652 if(pWdiTrafficStats != NULL)
13653 {
13654 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13655 trafficStatsIndParams.length = length;
13656 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013657 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013658 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13659 trafficStatsIndParams.pUserData = pWDA;
13660
13661 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13662
13663 if(WDI_STATUS_PENDING == wdiStatus)
13664 {
13665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13666 "Pending received for %s:%d ",__func__,__LINE__ );
13667 }
13668 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13669 {
13670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13671 "Failure in %s:%d ",__func__,__LINE__ );
13672 }
13673
13674 WDI_DS_ClearTrafficStats();
13675 }
13676 else
13677 {
13678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13679 "pWdiTrafficStats is Null");
13680 }
13681
13682 if( VOS_STATUS_SUCCESS !=
13683 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13684 {
13685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13686 "Traffic Stats Timer Start Failed ");
13687 return;
13688 }
13689}
13690
Jeff Johnson295189b2012-06-20 16:38:30 -070013691/*
13692 * BA Activity check timer handler
13693 */
13694void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13695{
13696 tANI_U8 curSta = 0 ;
13697 tANI_U8 tid = 0 ;
13698 tANI_U8 size = 0 ;
13699 tANI_U8 baCandidateCount = 0 ;
13700 tANI_U8 newBaCandidate = 0 ;
13701 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13702
13703 if(NULL == pWDA)
13704 {
13705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013706 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013707 VOS_ASSERT(0);
13708 return ;
13709 }
13710 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13711 {
13712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13713 "Inconsistent STA entries in WDA");
13714 VOS_ASSERT(0) ;
13715 }
13716 /* walk through all STA entries and find out TX packet count */
13717 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13718 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013719#ifdef WLAN_SOFTAP_VSTA_FEATURE
13720 // We can only do BA on "hard" STAs.
13721 if (!(IS_HWSTA_IDX(curSta)))
13722 {
13723 continue;
13724 }
13725#endif //WLAN_SOFTAP_VSTA_FEATURE
13726 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13727 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013728 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013729 tANI_U32 txPktCount = 0 ;
13730 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013731 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013732 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13733 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013734 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13735 curSta, tid, &txPktCount)))
13736 {
13737#if 0
13738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13739 "************* %d:%d, %d ",curSta, txPktCount,
13740 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13741#endif
13742 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013743 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013744 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13745 curSta, tid)))
13746 {
13747 /* get prepare for sending message to HAL */
13748 //baCandidate[baCandidateCount].staIdx = curSta ;
13749 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13750 newBaCandidate = WDA_ENABLE_BA ;
13751 }
13752 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13753 }
13754 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013755 /* fill the entry for all the sta with given TID's */
13756 if(WDA_ENABLE_BA == newBaCandidate)
13757 {
13758 /* move to next BA candidate */
13759 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13760 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13761 baCandidateCount++ ;
13762 newBaCandidate = WDA_DISABLE_BA ;
13763 }
13764 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013765 /* prepare and send message to hal */
13766 if( 0 < baCandidateCount)
13767 {
13768 WDI_Status status = WDI_STATUS_SUCCESS ;
13769 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13770 tWDA_ReqParams *pWdaParams =
13771 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013772 if(NULL == pWdaParams)
13773 {
13774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013775 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013776 VOS_ASSERT(0) ;
13777 return;
13778 }
13779 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13780 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13781 if(NULL == wdiTriggerBaReq)
13782 {
13783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013784 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013785 VOS_ASSERT(0) ;
13786 vos_mem_free(pWdaParams);
13787 return;
13788 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013789 do
13790 {
13791 WDI_TriggerBAReqinfoType *triggerBaInfo =
13792 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13793 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13794 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13795 * for each request */
13796 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13797 triggerBaInfo->ucBASessionID = 0;
13798 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13799 } while(0) ;
13800 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013802 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013803 pWdaParams->pWdaContext = pWDA;
13804 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13805 pWdaParams->wdaMsgParam = NULL;
13806 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13807 WDA_TriggerBaReqCallback, pWdaParams) ;
13808 if(IS_WDI_STATUS_FAILURE(status))
13809 {
13810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13811 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13812 vos_mem_free(pWdaParams->wdaMsgParam) ;
13813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13814 vos_mem_free(pWdaParams) ;
13815 }
13816 }
13817 else
13818 {
13819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13820 "There is no TID for initiating BA");
13821 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013822 if( VOS_STATUS_SUCCESS !=
13823 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13824 {
13825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13826 "BA Activity Timer Stop Failed ");
13827 return ;
13828 }
13829 if( VOS_STATUS_SUCCESS !=
13830 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13831 {
13832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13833 "BA Activity Timer Start Failed ");
13834 return;
13835 }
13836 return ;
13837}
Jeff Johnson295189b2012-06-20 16:38:30 -070013838/*
13839 * WDA common routine to create timer used by WDA.
13840 */
13841static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13842{
Jeff Johnson295189b2012-06-20 16:38:30 -070013843 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13844 tANI_U32 val = 0 ;
13845 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13846
13847 if(NULL == pMac)
13848 {
13849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013850 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013851 VOS_ASSERT(0);
13852 return VOS_STATUS_E_FAILURE;
13853 }
13854 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13855 != eSIR_SUCCESS)
13856 {
13857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13858 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13859 return VOS_STATUS_E_FAILURE;
13860 }
13861 val = SYS_MS_TO_TICKS(val) ;
13862
13863 /* BA activity check timer */
13864 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13865 "BA Activity Check timer", WDA_TimerHandler,
13866 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13867 if(status != TX_SUCCESS)
13868 {
13869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13870 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013871 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013872 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013873 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013874 /* Tx Complete Timeout timer */
13875 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13876 "Tx Complete Check timer", WDA_TimerHandler,
13877 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013878 if(status != TX_SUCCESS)
13879 {
13880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13881 "Unable to create Tx Complete Timeout timer");
13882 /* Destroy timer of BA activity check timer */
13883 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13884 if(status != TX_SUCCESS)
13885 {
13886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13887 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013888 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013889 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013890 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013891 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013892
13893 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13894
13895 /* Traffic Stats timer */
13896 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13897 "Traffic Stats timer", WDA_TimerHandler,
13898 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13899 if(status != TX_SUCCESS)
13900 {
13901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13902 "Unable to create traffic stats timer");
13903 /* Destroy timer of BA activity check timer */
13904 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13905 if(status != TX_SUCCESS)
13906 {
13907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13908 "Unable to Destroy BA activity timer");
13909 }
13910 /* Destroy timer of tx complete timer */
13911 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13912 if(status != TX_SUCCESS)
13913 {
13914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13915 "Unable to Tx complete timer");
13916 }
13917 return VOS_STATUS_E_FAILURE ;
13918 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013919 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013920}
Jeff Johnson295189b2012-06-20 16:38:30 -070013921/*
13922 * WDA common routine to destroy timer used by WDA.
13923 */
13924static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13925{
13926 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013927 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13928 if(status != TX_SUCCESS)
13929 {
13930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13931 "Unable to Destroy Tx Complete Timeout timer");
13932 return eSIR_FAILURE ;
13933 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013934 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13935 if(status != TX_SUCCESS)
13936 {
13937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13938 "Unable to Destroy BA activity timer");
13939 return eSIR_FAILURE ;
13940 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013941 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13942 if(status != TX_SUCCESS)
13943 {
13944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13945 "Unable to Destroy traffic stats timer");
13946 return eSIR_FAILURE ;
13947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013948 return eSIR_SUCCESS ;
13949}
Jeff Johnson295189b2012-06-20 16:38:30 -070013950/*
13951 * WDA timer handler.
13952 */
13953void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13954{
13955 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13956 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013957 /*
13958 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13959 */
13960 wdaMsg.type = timerInfo ;
13961 wdaMsg.bodyptr = NULL;
13962 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013963 /* post the message.. */
13964 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13965 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13966 {
13967 vosStatus = VOS_STATUS_E_BADMSG;
13968 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013969}
Jeff Johnson295189b2012-06-20 16:38:30 -070013970/*
13971 * WDA Tx Complete timeout Indication.
13972 */
13973void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13974{
13975 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013976 if( pWDA->pAckTxCbFunc )
13977 {
13978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013979 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013980 pWDA->pAckTxCbFunc( pMac, 0);
13981 pWDA->pAckTxCbFunc = NULL;
13982 }
13983 else
13984 {
13985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013986 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013988}
Jeff Johnson295189b2012-06-20 16:38:30 -070013989/*
13990 * WDA Set REG Domain to VOS NV
13991 */
Abhishek Singha306a442013-11-07 18:39:01 +053013992eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13993 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013994{
Abhishek Singha306a442013-11-07 18:39:01 +053013995 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013996 {
13997 return eHAL_STATUS_INVALID_PARAMETER;
13998 }
13999 return eHAL_STATUS_SUCCESS;
14000}
Jeff Johnson295189b2012-06-20 16:38:30 -070014001
Jeff Johnson295189b2012-06-20 16:38:30 -070014002#ifdef FEATURE_WLAN_SCAN_PNO
14003/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014004 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014005 *
14006 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014007void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014008{
14009 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014010 tSirPNOScanReq *pPNOScanReqParams;
14011
Jeff Johnson295189b2012-06-20 16:38:30 -070014012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014013 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014014 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014015 {
14016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014017 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014018 VOS_ASSERT(0) ;
14019 return ;
14020 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014021
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014022 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14023 if(pPNOScanReqParams->statusCallback)
14024 {
14025 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14026 (status == WDI_STATUS_SUCCESS) ?
14027 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14028 }
14029
Yue Ma7f44bbe2013-04-12 11:47:39 -070014030 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14031 vos_mem_free(pWdaParams->wdaMsgParam);
14032 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014033
14034 return ;
14035}
Jeff Johnson295189b2012-06-20 16:38:30 -070014036/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014037 * FUNCTION: WDA_PNOScanReqCallback
14038 * Free memory.
14039 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14040 */
14041void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014042{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014043 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014044 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014045
14046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14047 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14048
14049 if(NULL == pWdaParams)
14050 {
14051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14052 "%s: pWdaParams received NULL", __func__);
14053 VOS_ASSERT(0);
14054 return;
14055 }
14056
14057 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14058 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014059 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14060 if(pPNOScanReqParams->statusCallback)
14061 {
14062 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14063 VOS_STATUS_E_FAILURE);
14064 }
14065
Yue Ma7f44bbe2013-04-12 11:47:39 -070014066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14067 vos_mem_free(pWdaParams->wdaMsgParam);
14068 vos_mem_free(pWdaParams);
14069 }
14070
14071 return;
14072}
14073/*
14074 * FUNCTION: WDA_UpdateScanParamsRespCallback
14075 *
14076 */
14077void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14078{
14079 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014081 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014082 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014083 {
14084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014085 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014086 VOS_ASSERT(0) ;
14087 return ;
14088 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014089
14090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14091 vos_mem_free(pWdaParams->wdaMsgParam);
14092 vos_mem_free(pWdaParams);
14093
Jeff Johnson295189b2012-06-20 16:38:30 -070014094 return ;
14095}
Jeff Johnson295189b2012-06-20 16:38:30 -070014096/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014097 * FUNCTION: WDA_UpdateScanParamsReqCallback
14098 * Free memory.
14099 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14100 */
14101void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14102{
14103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14104
14105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14106 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14107
14108 if(NULL == pWdaParams)
14109 {
14110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14111 "%s: pWdaParams received NULL", __func__);
14112 VOS_ASSERT(0);
14113 return;
14114 }
14115
14116 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14117 {
14118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14119 vos_mem_free(pWdaParams->wdaMsgParam);
14120 vos_mem_free(pWdaParams);
14121 }
14122
14123 return;
14124}
14125/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014126 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14127 * Request to WDI to set Preferred Network List.Offload
14128 */
14129VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14130 tSirPNOScanReq *pPNOScanReqParams)
14131{
Jeff Johnson43971f52012-07-17 12:26:56 -070014132 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014133 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14134 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14135 tWDA_ReqParams *pWdaParams ;
14136 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014138 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014139 if(NULL == pwdiPNOScanReqInfo)
14140 {
14141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014142 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014143 VOS_ASSERT(0);
14144 return VOS_STATUS_E_NOMEM;
14145 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014146 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14147 if(NULL == pWdaParams)
14148 {
14149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014150 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014151 VOS_ASSERT(0);
14152 vos_mem_free(pwdiPNOScanReqInfo);
14153 return VOS_STATUS_E_NOMEM;
14154 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014155 //
14156 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14157 //
14158 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14159 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014160 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14161 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14162 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014163 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14164 {
14165 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14166 &pPNOScanReqParams->aNetworks[i],
14167 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014169 /*Scan timer intervals*/
14170 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14171 &pPNOScanReqParams->scanTimers,
14172 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014173 /*Probe template for 2.4GHz band*/
14174 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14175 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14176 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014177 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14178 pPNOScanReqParams->p24GProbeTemplate,
14179 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014180 /*Probe template for 5GHz band*/
14181 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14182 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14183 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014184 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14185 pPNOScanReqParams->p5GProbeTemplate,
14186 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014187 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14188 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014189
Jeff Johnson295189b2012-06-20 16:38:30 -070014190 /* Store Params pass it to WDI */
14191 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14192 pWdaParams->pWdaContext = pWDA;
14193 /* Store param pointer as passed in by caller */
14194 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014195 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014196 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014197 if(IS_WDI_STATUS_FAILURE(status))
14198 {
14199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14200 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014201 if(pPNOScanReqParams->statusCallback)
14202 {
14203 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14204 VOS_STATUS_E_FAILURE);
14205 }
14206
Jeff Johnson295189b2012-06-20 16:38:30 -070014207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14208 vos_mem_free(pWdaParams->wdaMsgParam);
14209 pWdaParams->wdaWdiApiMsgParam = NULL;
14210 pWdaParams->wdaMsgParam = NULL;
14211 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014212 return CONVERT_WDI2VOS_STATUS(status) ;
14213}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014214
14215#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14216
14217void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14218{
14219 /*Convert the CSR Auth types to WDI Auth types */
14220 switch (csrAuthType)
14221 {
14222 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14223 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14224 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014225#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014226 case eCSR_AUTH_TYPE_CCKM_WPA:
14227 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14228 break;
14229#endif
14230 case eCSR_AUTH_TYPE_WPA:
14231 *AuthType = eWDA_AUTH_TYPE_WPA;
14232 break;
14233 case eCSR_AUTH_TYPE_WPA_PSK:
14234 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14235 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014236#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014237 case eCSR_AUTH_TYPE_CCKM_RSN:
14238 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
14239 break;
14240#endif
14241 case eCSR_AUTH_TYPE_RSN:
14242 *AuthType = eWDA_AUTH_TYPE_RSN;
14243 break;
14244 case eCSR_AUTH_TYPE_RSN_PSK:
14245 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
14246 break;
14247#if defined WLAN_FEATURE_VOWIFI_11R
14248 case eCSR_AUTH_TYPE_FT_RSN:
14249 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
14250 break;
14251 case eCSR_AUTH_TYPE_FT_RSN_PSK:
14252 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
14253 break;
14254#endif
14255#ifdef FEATURE_WLAN_WAPI
14256 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
14257 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
14258 break;
14259 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
14260 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
14261 break;
14262#endif /* FEATURE_WLAN_WAPI */
14263 case eCSR_AUTH_TYPE_SHARED_KEY:
14264 case eCSR_AUTH_TYPE_AUTOSWITCH:
14265 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14266 break;
14267#if 0
14268 case eCSR_AUTH_TYPE_SHARED_KEY:
14269 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
14270 break;
14271 case eCSR_AUTH_TYPE_AUTOSWITCH:
14272 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
14273#endif
14274 default:
14275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14276 "%s: Unknown Auth Type", __func__);
14277 break;
14278 }
14279}
14280void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
14281{
14282 switch (csrEncrType)
14283 {
14284 case eCSR_ENCRYPT_TYPE_NONE:
14285 *EncrType = WDI_ED_NONE;
14286 break;
14287 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
14288 case eCSR_ENCRYPT_TYPE_WEP40:
14289 *EncrType = WDI_ED_WEP40;
14290 break;
14291 case eCSR_ENCRYPT_TYPE_WEP104:
14292 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
14293 *EncrType = WDI_ED_WEP104;
14294 break;
14295 case eCSR_ENCRYPT_TYPE_TKIP:
14296 *EncrType = WDI_ED_TKIP;
14297 break;
14298 case eCSR_ENCRYPT_TYPE_AES:
14299 *EncrType = WDI_ED_CCMP;
14300 break;
14301#ifdef WLAN_FEATURE_11W
14302 case eCSR_ENCRYPT_TYPE_AES_CMAC:
14303 *EncrType = WDI_ED_AES_128_CMAC;
14304 break;
14305#endif
14306#ifdef FEATURE_WLAN_WAPI
14307 case eCSR_ENCRYPT_TYPE_WPI:
14308 *EncrType = WDI_ED_WPI;
14309 break;
14310#endif
14311 case eCSR_ENCRYPT_TYPE_ANY:
14312 *EncrType = WDI_ED_ANY;
14313 break;
14314
14315 default:
14316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14317 "%s: Unknown Encryption Type", __func__);
14318 break;
14319 }
14320}
14321
14322/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014323 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014324 * Request to WDI to set Roam Offload Scan
14325 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014326VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014327 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
14328{
14329 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014330 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
14331 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014332 tWDA_ReqParams *pWdaParams ;
14333 v_U8_t csrAuthType;
14334 WDI_RoamNetworkType *pwdiRoamNetworkType;
14335 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
14336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14337 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014338 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014339 {
14340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14341 "%s: VOS MEM Alloc Failure", __func__);
14342 VOS_ASSERT(0);
14343 return VOS_STATUS_E_NOMEM;
14344 }
14345 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14346 if (NULL == pWdaParams)
14347 {
14348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14349 "%s: VOS MEM Alloc Failure", __func__);
14350 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014351 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014352 return VOS_STATUS_E_NOMEM;
14353 }
14354
14355 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014356 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014357 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014358 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
14359 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014360 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
14361 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
14362 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
14363 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
14364 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
14365 sizeof(pwdiRoamNetworkType->currAPbssid));
14366 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
14367 csrAuthType);
14368 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
14369 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
14370 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
14371 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
14372 pwdiRoamOffloadScanInfo->LookupThreshold =
14373 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080014374 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
14375 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014376 pwdiRoamOffloadScanInfo->RoamRssiDiff =
14377 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080014378 pwdiRoamOffloadScanInfo->MAWCEnabled =
14379 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014380 pwdiRoamOffloadScanInfo->Command =
14381 pRoamOffloadScanReqParams->Command ;
14382 pwdiRoamOffloadScanInfo->StartScanReason =
14383 pRoamOffloadScanReqParams->StartScanReason ;
14384 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
14385 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
14386 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
14387 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
14388 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
14389 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
14390 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
14391 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
14392 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
14393 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014394 pwdiRoamOffloadScanInfo->IsESEEnabled =
14395 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014396 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
14397 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
14398 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
14399 pwdiRoamNetworkType->ssId.ucLength =
14400 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
14401 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
14402 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
14403 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
14404 pwdiRoamNetworkType->ChannelCount =
14405 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
14406 pwdiRoamOffloadScanInfo->ChannelCacheType =
14407 pRoamOffloadScanReqParams->ChannelCacheType;
14408 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
14409 pRoamOffloadScanReqParams->ValidChannelList,
14410 pRoamOffloadScanReqParams->ValidChannelCount);
14411 pwdiRoamOffloadScanInfo->ValidChannelCount =
14412 pRoamOffloadScanReqParams->ValidChannelCount;
14413 pwdiRoamOffloadScanInfo->us24GProbeSize =
14414 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14415 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14416 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
14417 pRoamOffloadScanReqParams->p24GProbeTemplate,
14418 pwdiRoamOffloadScanInfo->us24GProbeSize);
14419 pwdiRoamOffloadScanInfo->us5GProbeSize =
14420 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14421 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14422 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
14423 pRoamOffloadScanReqParams->p5GProbeTemplate,
14424 pwdiRoamOffloadScanInfo->us5GProbeSize);
14425 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
14426 pRoamOffloadScanReqParams->MDID.mdiePresent;
14427 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
14428 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014429 pwdiRoamOffloadScanInfo->nProbes =
14430 pRoamOffloadScanReqParams->nProbes;
14431 pwdiRoamOffloadScanInfo->HomeAwayTime =
14432 pRoamOffloadScanReqParams->HomeAwayTime;
14433 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014434 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014435 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014436 pWdaParams->pWdaContext = pWDA;
14437 /* Store param pointer as passed in by caller */
14438 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014439 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014440 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
14441 if(IS_WDI_STATUS_FAILURE(status))
14442 {
14443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14444 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
14445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14446 vos_mem_free(pWdaParams->wdaMsgParam);
14447 pWdaParams->wdaWdiApiMsgParam = NULL;
14448 pWdaParams->wdaMsgParam = NULL;
14449 }
14450 return CONVERT_WDI2VOS_STATUS(status) ;
14451}
14452#endif
14453
Jeff Johnson295189b2012-06-20 16:38:30 -070014454/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014455 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014456 *
14457 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014458void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014459{
14460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14461
14462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014463 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014464
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014465 if(NULL == pWdaParams)
14466 {
14467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014468 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014469 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014470 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014471 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014472
Jeff Johnson295189b2012-06-20 16:38:30 -070014473 vos_mem_free(pWdaParams->wdaMsgParam) ;
14474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14475 vos_mem_free(pWdaParams) ;
14476
14477 return ;
14478}
14479/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014480 * FUNCTION: WDA_RssiFilterReqCallback
14481 * Free memory.
14482 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
14483 */
14484void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14485{
14486 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14487
14488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14489 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14490
14491 if(NULL == pWdaParams)
14492 {
14493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14494 "%s: pWdaParams received NULL", __func__);
14495 VOS_ASSERT(0);
14496 return;
14497 }
14498
14499 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14500 {
14501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14502 vos_mem_free(pWdaParams->wdaMsgParam);
14503 vos_mem_free(pWdaParams);
14504 }
14505
14506 return;
14507}
14508/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014509 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14510 * Request to WDI to set Preferred Network List.Offload
14511 */
14512VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
14513 tSirSetRSSIFilterReq* pRssiFilterParams)
14514{
Jeff Johnson43971f52012-07-17 12:26:56 -070014515 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014516 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
14517 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
14518 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014520 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014521 if(NULL == pwdiSetRssiFilterReqInfo)
14522 {
14523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014525 VOS_ASSERT(0);
14526 return VOS_STATUS_E_NOMEM;
14527 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014528 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14529 if(NULL == pWdaParams)
14530 {
14531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014533 VOS_ASSERT(0);
14534 vos_mem_free(pwdiSetRssiFilterReqInfo);
14535 return VOS_STATUS_E_NOMEM;
14536 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014537 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014538 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
14539 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014540
Jeff Johnson295189b2012-06-20 16:38:30 -070014541 /* Store Params pass it to WDI */
14542 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14543 pWdaParams->pWdaContext = pWDA;
14544 /* Store param pointer as passed in by caller */
14545 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014546 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014547 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014549 if(IS_WDI_STATUS_FAILURE(status))
14550 {
14551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14552 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14554 vos_mem_free(pWdaParams->wdaMsgParam);
14555 pWdaParams->wdaWdiApiMsgParam = NULL;
14556 pWdaParams->wdaMsgParam = NULL;
14557 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014558 return CONVERT_WDI2VOS_STATUS(status) ;
14559}
14560
Jeff Johnson295189b2012-06-20 16:38:30 -070014561/*
14562 * FUNCTION: WDA_ProcessUpdateScanParams
14563 * Request to WDI to update Scan Parameters
14564 */
14565VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14566 tSirUpdateScanParams *pUpdateScanParams)
14567{
Jeff Johnson43971f52012-07-17 12:26:56 -070014568 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014569 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14570 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14571 sizeof(WDI_UpdateScanParamsInfoType)) ;
14572 tWDA_ReqParams *pWdaParams ;
14573 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014575 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014576 if(NULL == wdiUpdateScanParamsInfoType)
14577 {
14578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014579 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014580 VOS_ASSERT(0);
14581 return VOS_STATUS_E_NOMEM;
14582 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014583 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14584 if ( NULL == pWdaParams )
14585 {
14586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014587 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014588 VOS_ASSERT(0);
14589 vos_mem_free(wdiUpdateScanParamsInfoType);
14590 return VOS_STATUS_E_NOMEM;
14591 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014592 //
14593 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14594 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14596 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14597 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14598 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014599 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014600 pUpdateScanParams->b11dEnabled,
14601 pUpdateScanParams->b11dResolved,
14602 pUpdateScanParams->ucChannelCount,
14603 pUpdateScanParams->usPassiveMinChTime,
14604 pUpdateScanParams->usPassiveMaxChTime,
14605 pUpdateScanParams->usActiveMinChTime,
14606 pUpdateScanParams->usActiveMaxChTime,
14607 sizeof(tSirUpdateScanParams),
14608 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14609
Jeff Johnson295189b2012-06-20 16:38:30 -070014610 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14611 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014612 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14613 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014614 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14615 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014616 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14617 pUpdateScanParams->usActiveMaxChTime;
14618 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14619 pUpdateScanParams->usActiveMinChTime;
14620 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14621 pUpdateScanParams->usPassiveMaxChTime;
14622 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14623 pUpdateScanParams->usPassiveMinChTime;
14624
Jeff Johnson295189b2012-06-20 16:38:30 -070014625 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014626 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14627 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014628
Jeff Johnson295189b2012-06-20 16:38:30 -070014629 for ( i = 0; i <
14630 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14631 i++)
14632 {
14633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14634 "Update Scan Parameters channel: %d",
14635 pUpdateScanParams->aChannels[i]);
14636
14637 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14638 pUpdateScanParams->aChannels[i];
14639 }
14640
Yue Ma7f44bbe2013-04-12 11:47:39 -070014641 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14642 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014643
Jeff Johnson295189b2012-06-20 16:38:30 -070014644 /* Store Params pass it to WDI */
14645 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
14646 pWdaParams->pWdaContext = pWDA;
14647 /* Store param pointer as passed in by caller */
14648 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014649
Jeff Johnson295189b2012-06-20 16:38:30 -070014650
14651
14652 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014653 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014654 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014655 if(IS_WDI_STATUS_FAILURE(status))
14656 {
14657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14658 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14660 vos_mem_free(pWdaParams->wdaMsgParam);
14661 vos_mem_free(pWdaParams);
14662 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014663 return CONVERT_WDI2VOS_STATUS(status) ;
14664}
14665#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014666
14667#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14668/*
14669 * FUNCTION: WDA_RoamOffloadScanReqCallback
14670 *
14671 */
14672void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14673{
14674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014675 vos_msg_t vosMsg;
14676 wpt_uint8 reason = 0;
14677
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014679 "<------ %s " ,__func__);
14680 if (NULL == pWdaParams)
14681 {
14682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14683 "%s: pWdaParams received NULL", __func__);
14684 VOS_ASSERT(0) ;
14685 return ;
14686 }
14687 if ( pWdaParams != NULL )
14688 {
14689 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14690 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014691 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14693 }
14694 if ( pWdaParams->wdaMsgParam != NULL)
14695 {
14696 vos_mem_free(pWdaParams->wdaMsgParam);
14697 }
14698
14699 vos_mem_free(pWdaParams) ;
14700 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014701 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14702 vosMsg.bodyptr = NULL;
14703 if (WDI_STATUS_SUCCESS != status)
14704 {
14705 reason = 0;
14706 }
14707 vosMsg.bodyval = reason;
14708 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14709 {
14710 /* free the mem and return */
14711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014712 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014713 }
14714
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014715 return ;
14716}
14717#endif
14718
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014719/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014720 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014721 *
14722 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014723void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014724{
14725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14726
14727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14728 "<------ %s " ,__func__);
14729
14730 if(NULL == pWdaParams)
14731 {
14732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14733 "%s: pWdaParams received NULL", __func__);
14734 VOS_ASSERT(0);
14735 return;
14736 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014737
14738 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14739 vos_mem_free(pWdaParams->wdaMsgParam);
14740 vos_mem_free(pWdaParams);
14741
14742 return;
14743}
14744/*
14745 * FUNCTION: WDA_SetPowerParamsReqCallback
14746 * Free memory.
14747 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14748 */
14749void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14750{
14751 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14752
14753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14754 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14755
14756 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014757 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14759 "%s: pWdaParams received NULL", __func__);
14760 VOS_ASSERT(0);
14761 return;
14762 }
14763
14764 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14765 {
14766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14767 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014768 vos_mem_free(pWdaParams);
14769 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014770
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014771 return;
14772}
14773
Jeff Johnson295189b2012-06-20 16:38:30 -070014774#ifdef WLAN_FEATURE_PACKET_FILTERING
14775/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014776 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014777 *
14778 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014779void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014780 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14781 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014782{
14783 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014785 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014786 if(NULL == pWdaParams)
14787 {
14788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014789 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014790 VOS_ASSERT(0) ;
14791 return ;
14792 }
14793
14794 vos_mem_free(pWdaParams->wdaMsgParam) ;
14795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14796 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014797 //print a msg, nothing else to do
14798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014799 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014800 return ;
14801}
Jeff Johnson295189b2012-06-20 16:38:30 -070014802/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014803 * FUNCTION: WDA_8023MulticastListReqCallback
14804 * Free memory.
14805 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14806 */
14807void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14808{
14809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14810
14811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14812 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14813
14814 if(NULL == pWdaParams)
14815 {
14816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14817 "%s: pWdaParams received NULL", __func__);
14818 VOS_ASSERT(0);
14819 return;
14820 }
14821
14822 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14823 {
14824 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14825 vos_mem_free(pWdaParams->wdaMsgParam);
14826 vos_mem_free(pWdaParams);
14827 }
14828
14829 return;
14830}
14831/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014832 * FUNCTION: WDA_Process8023MulticastListReq
14833 * Request to WDI to add 8023 Multicast List
14834 */
14835VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14836 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14837{
Jeff Johnson43971f52012-07-17 12:26:56 -070014838 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014839 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14840 tWDA_ReqParams *pWdaParams ;
14841 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014843 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014844 pwdiFltPktSetMcListReqParamsType =
14845 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14846 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14847 ) ;
14848 if(NULL == pwdiFltPktSetMcListReqParamsType)
14849 {
14850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014851 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014852 return VOS_STATUS_E_NOMEM;
14853 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014854 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14855 if(NULL == pWdaParams)
14856 {
14857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014859 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14860 return VOS_STATUS_E_NOMEM;
14861 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014862
Jeff Johnson295189b2012-06-20 16:38:30 -070014863 //
14864 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14865 //
14866 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014867 pRcvFltMcAddrList->ulMulticastAddrCnt;
14868
14869 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14870 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14871 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14872 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14873
Jeff Johnson295189b2012-06-20 16:38:30 -070014874 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14875 {
14876 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14877 &(pRcvFltMcAddrList->multicastAddr[i]),
14878 sizeof(tSirMacAddr));
14879 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014880 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14881 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014882
Jeff Johnson295189b2012-06-20 16:38:30 -070014883 /* Store Params pass it to WDI */
14884 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14885 pWdaParams->pWdaContext = pWDA;
14886 /* Store param pointer as passed in by caller */
14887 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014888 status = WDI_8023MulticastListReq(
14889 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014890 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014891 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014892 if(IS_WDI_STATUS_FAILURE(status))
14893 {
14894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14895 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14896 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14897 vos_mem_free(pWdaParams->wdaMsgParam);
14898 vos_mem_free(pWdaParams);
14899 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014900 return CONVERT_WDI2VOS_STATUS(status) ;
14901}
Jeff Johnson295189b2012-06-20 16:38:30 -070014902/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014903 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014904 *
14905 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014906void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014907 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14908 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014909{
14910 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014912 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014913 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014914 if(NULL == pWdaParams)
14915 {
14916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014917 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014918 VOS_ASSERT(0) ;
14919 return ;
14920 }
14921
14922 vos_mem_free(pWdaParams->wdaMsgParam) ;
14923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14924 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014925 //print a msg, nothing else to do
14926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014927 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014928 return ;
14929}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014930
14931/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014932 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14933 * Free memory.
14934 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014935 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014936void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014937 void* pUserData)
14938{
14939 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14940
14941 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14942 "<------ %s, wdiStatus: %d",
14943 __func__, wdiStatus);
14944
14945 if (NULL == pWdaParams)
14946 {
14947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14948 "%s: Invalid pWdaParams pointer", __func__);
14949 VOS_ASSERT(0);
14950 return;
14951 }
14952
14953 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14954 {
14955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14956 vos_mem_free(pWdaParams->wdaMsgParam);
14957 vos_mem_free(pWdaParams);
14958 }
14959
14960 return;
14961}
14962
Jeff Johnson295189b2012-06-20 16:38:30 -070014963/*
14964 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14965 * Request to WDI to set Receive Filters
14966 */
14967VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14968 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14969{
Jeff Johnson43971f52012-07-17 12:26:56 -070014970 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014971 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14972 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14973 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14974 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14975 tWDA_ReqParams *pWdaParams ;
14976 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014978 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014979 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14980 {
14981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014982 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014983 VOS_ASSERT(0);
14984 return VOS_STATUS_E_NOMEM;
14985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014986 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14987 if(NULL == pWdaParams)
14988 {
14989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014990 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014991 VOS_ASSERT(0);
14992 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14993 return VOS_STATUS_E_NOMEM;
14994 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014995 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14996 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14997 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14998 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014999 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
15000 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
15001
15002 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
15003 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015004
15005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15006 "FID %d FT %d NParams %d CT %d",
15007 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
15008 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
15009 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
15010 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070015011 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
15012 {
15013 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
15014 &pRcvPktFilterCfg->paramsData[i],
15015 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015017 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015018 pwdiSetRcvPktFilterReqParamsType->
15019 wdiPktFilterCfg.paramsData[i].protocolLayer,
15020 pwdiSetRcvPktFilterReqParamsType->
15021 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015023 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015024 pwdiSetRcvPktFilterReqParamsType->
15025 wdiPktFilterCfg.paramsData[i].dataOffset,
15026 pwdiSetRcvPktFilterReqParamsType->
15027 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015029 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015030 pwdiSetRcvPktFilterReqParamsType->
15031 wdiPktFilterCfg.paramsData[i].compareData[0],
15032 pwdiSetRcvPktFilterReqParamsType->
15033 wdiPktFilterCfg.paramsData[i].compareData[1],
15034 pwdiSetRcvPktFilterReqParamsType->
15035 wdiPktFilterCfg.paramsData[i].compareData[2],
15036 pwdiSetRcvPktFilterReqParamsType->
15037 wdiPktFilterCfg.paramsData[i].compareData[3],
15038 pwdiSetRcvPktFilterReqParamsType->
15039 wdiPktFilterCfg.paramsData[i].compareData[4],
15040 pwdiSetRcvPktFilterReqParamsType->
15041 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015043 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015044 pwdiSetRcvPktFilterReqParamsType->
15045 wdiPktFilterCfg.paramsData[i].dataMask[0],
15046 pwdiSetRcvPktFilterReqParamsType->
15047 wdiPktFilterCfg.paramsData[i].dataMask[1],
15048 pwdiSetRcvPktFilterReqParamsType->
15049 wdiPktFilterCfg.paramsData[i].dataMask[2],
15050 pwdiSetRcvPktFilterReqParamsType->
15051 wdiPktFilterCfg.paramsData[i].dataMask[3],
15052 pwdiSetRcvPktFilterReqParamsType->
15053 wdiPktFilterCfg.paramsData[i].dataMask[4],
15054 pwdiSetRcvPktFilterReqParamsType->
15055 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015056 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015057 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015058 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015059 /* Store Params pass it to WDI */
15060 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15061 pWdaParams->pWdaContext = pWDA;
15062 /* Store param pointer as passed in by caller */
15063 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015064 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015065 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015066 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015067 if(IS_WDI_STATUS_FAILURE(status))
15068 {
15069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15070 "Failure in SetFilter(),free all the memory,status %d ",status);
15071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15072 vos_mem_free(pWdaParams->wdaMsgParam);
15073 vos_mem_free(pWdaParams);
15074 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015075 return CONVERT_WDI2VOS_STATUS(status) ;
15076}
Jeff Johnson295189b2012-06-20 16:38:30 -070015077/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015078 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015079 *
15080 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015081void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015082 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15083 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015084{
15085 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15086 tWDA_CbContext *pWDA;
15087 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15088 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15089 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15090 tANI_U8 i;
15091 vos_msg_t vosMsg;
15092
15093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015094 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015095 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15096
Jeff Johnsone7245742012-09-05 17:12:55 -070015097 if(NULL == pRcvFltPktMatchCntRsp)
15098 {
15099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015100 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015101 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015102 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015103 return ;
15104 }
15105
Jeff Johnson295189b2012-06-20 16:38:30 -070015106 if(NULL == pWdaParams)
15107 {
15108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015109 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015110 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015111 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015112 return ;
15113 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015114 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15115 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015116 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15117 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15118
15119 /* Message Header */
15120 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15121 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15122
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015123 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015124
15125 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15126 {
15127 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15128 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15129 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015130 /* VOS message wrapper */
15131 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15132 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15133 vosMsg.bodyval = 0;
15134 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15135 {
15136 /* free the mem and return */
15137 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15138 }
15139
15140 vos_mem_free(pWdaParams->wdaMsgParam) ;
15141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15142 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015143
15144 return;
15145}
15146/*
15147 * FUNCTION: WDA_FilterMatchCountReqCallback
15148 * Free memory and send RSP back to SME.
15149 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15150 */
15151void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15152{
15153 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15154 vos_msg_t vosMsg;
15155
15156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15157 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15158
15159 if(NULL == pWdaParams)
15160 {
15161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15162 "%s: pWdaParams received NULL", __func__);
15163 VOS_ASSERT(0);
15164 return;
15165 }
15166
15167 /* VOS message wrapper */
15168 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15169 vosMsg.bodyptr = NULL;
15170 vosMsg.bodyval = 0;
15171
15172 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15173 {
15174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15175 vos_mem_free(pWdaParams->wdaMsgParam);
15176 vos_mem_free(pWdaParams);
15177 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15178 }
15179
15180 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015181}
Jeff Johnson295189b2012-06-20 16:38:30 -070015182/*
15183 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15184 * Request to WDI to get PC Filter Match Count
15185 */
15186VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15187{
Jeff Johnson43971f52012-07-17 12:26:56 -070015188 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015189 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15190 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15191 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015193 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015194 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15195 {
15196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015197 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015198 VOS_ASSERT(0);
15199 return VOS_STATUS_E_NOMEM;
15200 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015201 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15202 if(NULL == pWdaParams)
15203 {
15204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015206 VOS_ASSERT(0);
15207 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15208 return VOS_STATUS_E_NOMEM;
15209 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015210
Yue Ma7f44bbe2013-04-12 11:47:39 -070015211 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15212 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015213
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015214 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15215 pRcvFltPktMatchRsp->bssId,
15216 sizeof(wpt_macAddr));
15217
Jeff Johnson295189b2012-06-20 16:38:30 -070015218 /* Store Params pass it to WDI */
15219 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15220 pWdaParams->pWdaContext = pWDA;
15221 /* Store param pointer as passed in by caller */
15222 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015223 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015224 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015225 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015226 if(IS_WDI_STATUS_FAILURE(status))
15227 {
15228 /* failure returned by WDI API */
15229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15230 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15232 vos_mem_free(pWdaParams) ;
15233 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15234 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15235 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015236 return CONVERT_WDI2VOS_STATUS(status) ;
15237}
Jeff Johnson295189b2012-06-20 16:38:30 -070015238/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015239 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015240 *
15241 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015242void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015243 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
15244 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015245{
15246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015248 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015249/* WDA_VOS_ASSERT(NULL != pWdaParams); */
15250 if(NULL == pWdaParams)
15251 {
15252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015253 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015254 VOS_ASSERT(0) ;
15255 return ;
15256 }
15257
15258 vos_mem_free(pWdaParams->wdaMsgParam) ;
15259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15260 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015261 //print a msg, nothing else to do
15262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015263 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015264 return ;
15265}
Jeff Johnson295189b2012-06-20 16:38:30 -070015266/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015267 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
15268 * Free memory.
15269 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
15270 */
15271void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15272{
15273 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15274
15275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15276 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15277
15278 if(NULL == pWdaParams)
15279 {
15280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15281 "%s: Invalid pWdaParams pointer", __func__);
15282 VOS_ASSERT(0);
15283 return;
15284 }
15285
15286 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15287 {
15288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15289 vos_mem_free(pWdaParams->wdaMsgParam);
15290 vos_mem_free(pWdaParams);
15291 }
15292
15293 return;
15294}
15295/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015296 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
15297 * Request to WDI to clear Receive Filters
15298 */
15299VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
15300 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
15301{
Jeff Johnson43971f52012-07-17 12:26:56 -070015302 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015303 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
15304 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
15305 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015308 if(NULL == pwdiRcvFltPktClearReqParamsType)
15309 {
15310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015312 VOS_ASSERT(0);
15313 return VOS_STATUS_E_NOMEM;
15314 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15316 if(NULL == pWdaParams)
15317 {
15318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015320 VOS_ASSERT(0);
15321 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
15322 return VOS_STATUS_E_NOMEM;
15323 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015324 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
15325 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070015326 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
15327 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
15328 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
15329 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015330
Yue Ma7f44bbe2013-04-12 11:47:39 -070015331 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015332 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015333 /* Store Params pass it to WDI */
15334 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
15335 pWdaParams->pWdaContext = pWDA;
15336 /* Store param pointer as passed in by caller */
15337 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015338 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015339 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015340 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015341 if(IS_WDI_STATUS_FAILURE(status))
15342 {
15343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15344 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
15345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080015346 vos_mem_free(pWdaParams->wdaMsgParam);
15347 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015348 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015349 return CONVERT_WDI2VOS_STATUS(status) ;
15350}
15351#endif // WLAN_FEATURE_PACKET_FILTERING
15352
Jeff Johnson295189b2012-06-20 16:38:30 -070015353/*
15354 * FUNCTION: WDA_ProcessSetPowerParamsReq
15355 * Request to WDI to set power params
15356 */
15357VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
15358 tSirSetPowerParamsReq *pPowerParams)
15359{
Jeff Johnson43971f52012-07-17 12:26:56 -070015360 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015361 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
15362 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015363 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015365 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015366 if(NULL == pwdiSetPowerParamsReqInfo)
15367 {
15368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015369 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015370 VOS_ASSERT(0);
15371 return VOS_STATUS_E_NOMEM;
15372 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015373 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15374 if(NULL == pWdaParams)
15375 {
15376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015377 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015378 VOS_ASSERT(0);
15379 vos_mem_free(pwdiSetPowerParamsReqInfo);
15380 return VOS_STATUS_E_NOMEM;
15381 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015382
Jeff Johnson295189b2012-06-20 16:38:30 -070015383
15384 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
15385 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070015386 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
15387 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070015388 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
15389 pPowerParams->uListenInterval;
15390 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
15391 pPowerParams->uBcastMcastFilter;
15392 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
15393 pPowerParams->uEnableBET;
15394 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
15395 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070015396 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
15397 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015398 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
15399 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015400
Jeff Johnson295189b2012-06-20 16:38:30 -070015401 /* Store Params pass it to WDI */
15402 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
15403 pWdaParams->pWdaContext = pWDA;
15404 /* Store param pointer as passed in by caller */
15405 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015406 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015407 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015408 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015409 if(IS_WDI_STATUS_FAILURE(status))
15410 {
15411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15412 "Failure in Set power params REQ WDI API, free all the memory " );
15413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15414 vos_mem_free(pWdaParams->wdaMsgParam);
15415 pWdaParams->wdaWdiApiMsgParam = NULL;
15416 pWdaParams->wdaMsgParam = NULL;
15417 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015418 return CONVERT_WDI2VOS_STATUS(status) ;
15419}
15420
15421/*
15422 * FUNCTION: WDA_SetTmLevelRspCallback
15423 * Set TM Level response
15424 */
15425void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
15426{
15427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15428
15429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015430 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015431
15432 if(NULL == pWdaParams)
15433 {
15434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015435 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015436 VOS_ASSERT(0) ;
15437 return ;
15438 }
15439
15440 /* Dose not need to send notification to upper layer
15441 * Just free allocated resources */
15442 if( pWdaParams != NULL )
15443 {
15444 if( pWdaParams->wdaWdiApiMsgParam != NULL )
15445 {
15446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15447 }
15448 vos_mem_free(pWdaParams->wdaMsgParam) ;
15449 vos_mem_free(pWdaParams) ;
15450 }
15451}
15452
15453/*
15454 * FUNCTION: WDA_ProcessSetTmLevelReq
15455 * Set TM Level request
15456 */
15457VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
15458 tAniSetTmLevelReq *setTmLevelReq)
15459{
15460 WDI_Status status = WDI_STATUS_SUCCESS ;
15461 tWDA_ReqParams *pWdaParams ;
15462 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
15463 (WDI_SetTmLevelReqType *)vos_mem_malloc(
15464 sizeof(WDI_SetTmLevelReqType)) ;
15465 if(NULL == wdiSetTmLevelReq)
15466 {
15467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015469 VOS_ASSERT(0);
15470 return VOS_STATUS_E_NOMEM;
15471 }
15472
15473 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15474 if(NULL == pWdaParams)
15475 {
15476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015478 VOS_ASSERT(0);
15479 vos_mem_free(wdiSetTmLevelReq);
15480 return VOS_STATUS_E_NOMEM;
15481 }
15482
15483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015484 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015485
15486 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
15487 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
15488
15489 pWdaParams->pWdaContext = pWDA;
15490 pWdaParams->wdaMsgParam = setTmLevelReq;
15491 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
15492
15493 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
15494 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
15495
15496 if(IS_WDI_STATUS_FAILURE(status))
15497 {
15498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080015499 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070015500 vos_mem_free(pWdaParams->wdaMsgParam) ;
15501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15502 vos_mem_free(pWdaParams) ;
15503 }
15504
15505 return CONVERT_WDI2VOS_STATUS(status) ;
15506}
15507
15508VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
15509 tpTxControlParams pTxCtrlParam)
15510{
15511 VOS_STATUS wdaStatus;
15512
15513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015514 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015515 if( pTxCtrlParam == NULL )
15516 {
15517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015518 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015519 return VOS_STATUS_E_FAILURE;
15520 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015521 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
15522 {
15523 wdaStatus = WDA_SuspendDataTx(pWDA);
15524 }
15525 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
15526 {
15527 wdaStatus = WDA_ResumeDataTx(pWDA);
15528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015529 return wdaStatus;
15530}
15531
15532 /* FUNCTION WDA_featureCapsExchange
15533 * WDA API to invoke capability exchange between host and FW.
15534 */
15535void WDA_featureCapsExchange(v_PVOID_t pVosContext)
15536{
15537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015538 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015539 WDI_featureCapsExchangeReq( NULL, pVosContext);
15540}
15541
Yathish9f22e662012-12-10 14:21:35 -080015542/* FUNCTION WDA_disableCapablityFeature
15543 * WDA API to diable Active mode offload in host.
15544 */
15545void WDA_disableCapablityFeature(tANI_U8 feature_index)
15546{
15547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15548 "%s:enter", __func__ );
15549 WDI_disableCapablityFeature(feature_index);
15550}
15551
Jeff Johnson295189b2012-06-20 16:38:30 -070015552 /* FUNCTION WDA_getHostWlanFeatCaps
15553 * Wrapper for WDI API, that will return if the feature (enum value).passed
15554 * to this API is supported or not in Host
15555 * return value
15556 * 0 - implies feature is NOT Supported
15557 * any non zero value - implies feature is SUPPORTED
15558 */
15559tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15560{
15561 return WDI_getHostWlanFeatCaps(featEnumValue);
15562}
15563
15564 /* FUNCTION WDA_getFwWlanFeatCaps
15565 * Wrapper for WDI API, that will return if the feature (enum value).passed
15566 * to this API is supported or not in FW
15567 * return value
15568 * 0 - implies feature is NOT Supported
15569 * any non zero value - implies feature is SUPPORTED
15570 */
15571tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15572{
15573 return WDI_getFwWlanFeatCaps(featEnumValue);
15574}
15575
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015576
Jeff Johnson295189b2012-06-20 16:38:30 -070015577/*
15578 * FUNCTION: WDA_shutdown
15579 * Shutdown WDA/WDI without handshaking with Riva.
15580 * Synchronous function.
15581 */
15582VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15583{
15584 WDI_Status wdiStatus;
15585 //tANI_U8 eventIdx = 0;
15586 VOS_STATUS status = VOS_STATUS_SUCCESS;
15587 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015588 if (NULL == pWDA)
15589 {
15590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015591 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015592 VOS_ASSERT(0);
15593 return VOS_STATUS_E_FAILURE;
15594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015595 /* FTM mode stay START_STATE */
15596 if( (WDA_READY_STATE != pWDA->wdaState) &&
15597 (WDA_INIT_STATE != pWDA->wdaState) &&
15598 (WDA_START_STATE != pWDA->wdaState) )
15599 {
15600 VOS_ASSERT(0);
15601 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015602
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015603 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15604 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015605 {
15606 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015607 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015608 }
Leo Chang9d76f622013-08-23 16:34:52 -070015609 else
15610 {
15611 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15612 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015613
Jeff Johnson295189b2012-06-20 16:38:30 -070015614 /* call WDI shutdown */
15615 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015616 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15617 {
15618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15619 "error in WDA Stop" );
15620 status = VOS_STATUS_E_FAILURE;
15621 }
15622 /* WDI stop is synchrnous, shutdown is complete when it returns */
15623 pWDA->wdaState = WDA_STOP_STATE;
15624
Jeff Johnson295189b2012-06-20 16:38:30 -070015625 /* shutdown should perform the stop & close actions. */
15626 /* Destroy the event */
15627 status = vos_event_destroy(&pWDA->txFrameEvent);
15628 if(!VOS_IS_STATUS_SUCCESS(status))
15629 {
15630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015631 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015632 status = VOS_STATUS_E_FAILURE;
15633 }
15634 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15635 if(!VOS_IS_STATUS_SUCCESS(status))
15636 {
15637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015638 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015639 status = VOS_STATUS_E_FAILURE;
15640 }
15641 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15642 if(!VOS_IS_STATUS_SUCCESS(status))
15643 {
15644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015645 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015646 status = VOS_STATUS_E_FAILURE;
15647 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015648 /* free WDA context */
15649 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15650 if ( !VOS_IS_STATUS_SUCCESS(status) )
15651 {
15652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15653 "error in WDA close " );
15654 status = VOS_STATUS_E_FAILURE;
15655 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015656 return status;
15657}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015658
Jeff Johnsone7245742012-09-05 17:12:55 -070015659/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015660 * FUNCTION: WDA_setNeedShutdown
15661 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015662 */
15663
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015664void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015665{
15666 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015667 if(pWDA == NULL)
15668 {
15669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15670 "Could not get the WDA Context pointer" );
15671 return;
15672 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015673 pWDA->needShutdown = TRUE;
15674}
15675/*
15676 * FUNCTION: WDA_needShutdown
15677 * WDA needs a shutdown
15678 */
15679
15680v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15681{
15682 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015683 if(pWDA == NULL)
15684 {
15685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15686 "Could not get the WDA Context pointer" );
15687 return 0;
15688 }
15689 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015690}
15691
Mohit Khanna4a70d262012-09-11 16:30:12 -070015692#ifdef WLAN_FEATURE_11AC
15693/*
15694 * FUNCTION: WDA_SetBeaconFilterReqCallback
15695 *
15696 */
15697void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15698{
15699 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015701 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015702 if(NULL == pWdaParams)
15703 {
15704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015705 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015706 VOS_ASSERT(0) ;
15707 return ;
15708 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015709
Mohit Khanna4a70d262012-09-11 16:30:12 -070015710 vos_mem_free(pWdaParams->wdaMsgParam) ;
15711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15712 vos_mem_free(pWdaParams) ;
15713 /*
15714 * No respone required for SetBeaconFilter req so just free the request
15715 * param here
15716 */
15717
15718 return ;
15719}
15720
15721VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15722 tUpdateVHTOpMode *pData)
15723{
15724 WDI_Status status = WDI_STATUS_SUCCESS ;
15725 tWDA_ReqParams *pWdaParams ;
15726 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15727 sizeof(WDI_UpdateVHTOpMode)) ;
15728 if(NULL == wdiTemp)
15729 {
15730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015731 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015732 VOS_ASSERT(0);
15733 return VOS_STATUS_E_NOMEM;
15734 }
15735 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15736 if(NULL == pWdaParams)
15737 {
15738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015739 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015740 VOS_ASSERT(0);
15741 vos_mem_free(wdiTemp);
15742 return VOS_STATUS_E_NOMEM;
15743 }
15744
15745 wdiTemp->opMode = pData->opMode;
15746 wdiTemp->staId = pData->staId;
15747
15748 pWdaParams->pWdaContext = pWDA;
15749 /* Store Req pointer, as this will be used for response */
15750 pWdaParams->wdaMsgParam = (void *)pData;
15751 /* store Params pass it to WDI */
15752 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15753
15754 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15755
15756 if(IS_WDI_STATUS_FAILURE(status))
15757 {
15758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15759 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15761 vos_mem_free(pWdaParams->wdaMsgParam);
15762 vos_mem_free(pWdaParams);
15763 }
15764 return CONVERT_WDI2VOS_STATUS(status) ;
15765}
15766#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015767
15768/*==========================================================================
15769 FUNCTION WDA_TransportChannelDebug
15770
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015771 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015772 Display Transport Channel debugging information
15773 User may request to display DXE channel snapshot
15774 Or if host driver detects any abnormal stcuk may display
15775
15776 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015777 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015778 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053015779 debugFlags : Enable stall detect features
15780 defined by WPAL_DeviceDebugFlags
15781 These features may effect
15782 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015783
15784 RETURN VALUE
15785 NONE
15786
15787===========================================================================*/
15788void WDA_TransportChannelDebug
15789(
schang6295e542013-03-12 15:31:23 -070015790 tpAniSirGlobal pMac,
15791 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053015792 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015793)
15794{
Mihir Shete40a55652014-03-02 14:14:47 +053015795 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015796 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015797}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015798
15799/*==========================================================================
15800 FUNCTION WDA_SetEnableSSR
15801
15802 DESCRIPTION
15803 API to enable/disable SSR on WDI timeout
15804
15805 PARAMETERS
15806 enableSSR : enable/disable SSR
15807
15808 RETURN VALUE
15809 NONE
15810
15811===========================================================================*/
15812void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15813{
15814 WDI_SetEnableSSR(enableSSR);
15815}
Leo Chang9056f462013-08-01 19:21:11 -070015816
15817#ifdef FEATURE_WLAN_LPHB
15818/*
15819 * FUNCTION: WDA_LPHBconfRspCallback
15820 *
15821 */
15822void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15823{
15824 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15825
15826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15827 "<------ %s " ,__func__);
15828 if (NULL == pWdaParams)
15829 {
15830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15831 "%s: pWdaParams received NULL", __func__);
15832 VOS_ASSERT(0) ;
15833 return ;
15834 }
15835
15836 /* Do not need to send notification to upper layer
15837 * Just free allocated resources */
15838 if (pWdaParams != NULL)
15839 {
15840 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15841 {
15842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15843 }
15844 vos_mem_free(pWdaParams->wdaMsgParam) ;
15845 vos_mem_free(pWdaParams) ;
15846 }
15847
15848 return;
15849}
15850
15851/*
15852 * FUNCTION: WDA_ProcessLPHBConfReq
15853 *
15854 */
15855VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15856 tSirLPHBReq *pData)
15857{
15858 WDI_Status wdiStatus;
15859 tWDA_ReqParams *pWdaParams ;
15860
15861 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15862 "------> %s " , __func__);
15863
15864 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15865 if (NULL == pWdaParams)
15866 {
15867 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15868 "%s: VOS MEM Alloc Failure", __func__);
15869 VOS_ASSERT(0);
15870 vos_mem_free(pData);
15871 return VOS_STATUS_E_NOMEM;
15872 }
15873
15874 pWdaParams->pWdaContext = pWDA;
15875 pWdaParams->wdaMsgParam = (void *)pData;
15876 pWdaParams->wdaWdiApiMsgParam = NULL;
15877
15878 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15879 if (WDI_STATUS_PENDING == wdiStatus)
15880 {
15881 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15882 "Pending received for %s:%d ", __func__, __LINE__);
15883 }
15884 else if (WDI_STATUS_SUCCESS != wdiStatus)
15885 {
15886 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15887 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15888 vos_mem_free(pWdaParams->wdaMsgParam);
15889 vos_mem_free(pWdaParams);
15890 }
15891
15892 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15893}
15894#endif /* FEATURE_WLAN_LPHB */
15895
c_hpothu92367912014-05-01 15:18:17 +053015896void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
15897 void* pUserData)
15898{
15899 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
15900
15901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15902 "<------ %s " ,__func__);
15903 if (NULL == pBcnMissRateInfo)
15904 {
15905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15906 "%s: pWdaParams received NULL", __func__);
15907 VOS_ASSERT(0) ;
15908 return ;
15909 }
15910 if (pBcnMissRateInfo->callback)
15911 {
15912 pBcnMissRateInfo->callback(status, bcnMissRate,
15913 pBcnMissRateInfo->data);
15914 }
15915 vos_mem_free(pUserData);
15916
15917 return;
15918}
15919
15920v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
15921 tSirBcnMissRateReq *pData)
15922{
15923 WDI_Status wdiStatus;
15924 tSirBcnMissRateInfo *pBcnMissRateInfo;
15925
15926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15927 "------> %s " , __func__);
15928
15929 pBcnMissRateInfo =
15930 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
15931 if (NULL == pBcnMissRateInfo)
15932 {
15933 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15934 "%s: VOS MEM Alloc Failure", __func__);
15935 VOS_ASSERT(0);
15936 vos_mem_free(pData);
15937 return;
15938 }
15939
15940 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
15941 pBcnMissRateInfo->data = pData->data;
15942
15943 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
15944 WDA_GetBcnMissRateCallback,
15945 pData->bssid);
15946 if (WDI_STATUS_PENDING == wdiStatus)
15947 {
15948 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15949 "Pending received for %s:%d ", __func__, __LINE__);
15950 }
15951 else if (WDI_STATUS_SUCCESS != wdiStatus)
15952 {
15953 if (pBcnMissRateInfo->callback)
15954 {
15955 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
15956 -1, pBcnMissRateInfo->data);
15957 }
15958 }
15959 vos_mem_free(pData);
15960}