blob: 849129712ecf487ac9b85ecc9500a989aab6c4bd [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;
3933 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3934 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));
Jeff Johnson295189b2012-06-20 16:38:30 -07003951 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 return ;
3953}
Jeff Johnson295189b2012-06-20 16:38:30 -07003954/*
3955 * FUNCTION: WDA_ProcessAddStaSelfReq
3956 *
3957 */
3958VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3959{
3960 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003961 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003962 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3963 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3964 sizeof(WDI_AddSTASelfReqParamsType)) ;
3965 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003967 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 if( NULL == wdiAddStaSelfReq )
3969 {
3970 VOS_ASSERT( 0 );
3971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003972 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 return( VOS_STATUS_E_NOMEM );
3974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 if( NULL == pWdaParams )
3977 {
3978 VOS_ASSERT( 0 );
3979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003980 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 vos_mem_free(wdiAddStaSelfReq) ;
3982 return( VOS_STATUS_E_NOMEM );
3983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003984 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003985 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003986 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 /* Store Init Req pointer, as this will be used for response */
3988 /* store Params pass it to WDI */
3989 pWdaParams->pWdaContext = pWDA;
3990 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3991 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003992 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003993
Jeff Johnson43971f52012-07-17 12:26:56 -07003994 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 {
3996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3997 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003998 wstatus );
3999 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4001 vos_mem_free(pWdaParams) ;
4002 pAddStaSelfReq->status = eSIR_FAILURE ;
4003 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4004 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004005 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004006}
Jeff Johnson295189b2012-06-20 16:38:30 -07004007/*
4008 * FUNCTION: WDA_DelSTASelfRespCallback
4009 *
4010 */
4011void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4012 wdiDelStaSelfRspParams , void* pUserData)
4013{
4014 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4015 tWDA_CbContext *pWDA;
4016 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004018 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 if (NULL == pWdaParams)
4020 {
4021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004022 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 VOS_ASSERT(0);
4024 return;
4025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004026 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4027 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004029 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004030
4031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4032 vos_mem_free(pWdaParams) ;
4033
4034 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 return ;
4036}
Jeff Johnson295189b2012-06-20 16:38:30 -07004037/*
4038 * FUNCTION: WDA_DelSTASelfReqCallback
4039 *
4040 */
4041void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4042 void* pUserData)
4043{
4044 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4045 tWDA_CbContext *pWDA;
4046 tDelStaSelfParams *delStaSelfParams;
4047
4048 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304049 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004050 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004051
4052 if (NULL == pWdaParams)
4053 {
4054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004055 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004056 VOS_ASSERT(0);
4057 return;
4058 }
4059
4060 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4061 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4062
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004063 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004064
4065 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4066 {
4067 VOS_ASSERT(0);
4068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4069 vos_mem_free(pWdaParams) ;
4070 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4071 }
4072
4073 return ;
4074}
4075
4076/*
4077 * FUNCTION: WDA_DelSTASelfReq
4078 * Trigger Config STA processing in WDI
4079 */
4080VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4081 tDelStaSelfParams* pDelStaSelfReqParam)
4082{
4083 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004084 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 tWDA_ReqParams *pWdaParams = NULL;
4086 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4087 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4088 sizeof(WDI_DelSTASelfReqParamsType)) ;
4089
Jeff Johnson295189b2012-06-20 16:38:30 -07004090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004091 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004092 if( NULL == wdiDelStaSelfReq )
4093 {
4094 VOS_ASSERT( 0 );
4095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004096 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004097 return( VOS_STATUS_E_NOMEM );
4098 }
4099
4100 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4101 if( NULL == pWdaParams )
4102 {
4103 VOS_ASSERT( 0 );
4104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004105 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 vos_mem_free(wdiDelStaSelfReq) ;
4107 return( VOS_STATUS_E_NOMEM );
4108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 pWdaParams->pWdaContext = pWDA;
4110 /* Store param pointer as passed in by caller */
4111 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4112 /* store Params pass it to WDI */
4113 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004114 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4115 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4116
4117 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4118 wdiDelStaSelfReq->pUserData = pWdaParams;
4119
Jeff Johnson43971f52012-07-17 12:26:56 -07004120 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4122
Jeff Johnson43971f52012-07-17 12:26:56 -07004123 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 {
4125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4126 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4127 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004128 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4130 vos_mem_free(pWdaParams) ;
4131 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4132 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4133 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004134 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135}
4136
Jeff Johnson295189b2012-06-20 16:38:30 -07004137/*
4138 * FUNCTION: WDA_SendMsg
4139 * Send Message back to PE
4140 */
4141void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4142 void *pBodyptr, tANI_U32 bodyVal)
4143{
4144 tSirMsgQ msg = {0} ;
4145 tANI_U32 status = VOS_STATUS_SUCCESS ;
4146 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 msg.type = msgType;
4148 msg.bodyval = bodyVal;
4149 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004151 if (VOS_STATUS_SUCCESS != status)
4152 {
4153 if(NULL != pBodyptr)
4154 {
4155 vos_mem_free(pBodyptr);
4156 }
4157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004158 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 VOS_ASSERT(0) ;
4160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 return ;
4162}
Jeff Johnson295189b2012-06-20 16:38:30 -07004163/*
4164 * FUNCTION: WDA_UpdateBSSParams
4165 * Translated WDA/PE BSS info into WDI BSS info..
4166 */
4167void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4168 WDI_ConfigBSSReqInfoType *wdiBssParams,
4169 tAddBssParams *wdaBssParams)
4170{
4171 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 /* copy bssReq Params to WDI structure */
4173 vos_mem_copy(wdiBssParams->macBSSID,
4174 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4175 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4176 sizeof(tSirMacAddr)) ;
4177 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4178 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4179 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004180 wdiBssParams->ucShortSlotTimeSupported =
4181 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4183 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4184 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4185 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4186 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4187
4188 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4189 wdiBssParams->ucTXOPProtectionFullSupport =
4190 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004191 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4192 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4195 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4196 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4197 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4198
Chet Lanctot186b5732013-03-18 10:26:30 -07004199 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4200
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 /* copy SSID into WDI structure */
4202 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4203 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4204 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004205 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4206 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004207 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004208#ifdef WLAN_FEATURE_VOWIFI
4209 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4210#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004211 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004213#ifdef WLAN_FEATURE_VOWIFI_11R
4214 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004215 if(wdiBssParams->bExtSetStaKeyParamValid)
4216 {
4217 /* copy set STA key params to WDI structure */
4218 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4219 wdaBssParams->extSetStaKeyParam.staIdx;
4220 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4221 wdaBssParams->extSetStaKeyParam.encType;
4222 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4223 wdaBssParams->extSetStaKeyParam.wepType;
4224 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4225 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4227 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004228 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004229 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4230 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4231 {
4232 WDA_GetWepKeysFromCfg( pWDA,
4233 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4234 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4235 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4236 }
4237 else
4238 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4240 keyIndex++)
4241 {
4242 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4243 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4244 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4245 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4246 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4247 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004248 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4249 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4250 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4251 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4252 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4253 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4254 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4255 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004257 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4258 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004259 }
4260 }
4261 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4262 }
4263 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4264 {
4265 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4266 sizeof(wdaBssParams->extSetStaKeyParam) );
4267 }
4268#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004269#ifdef WLAN_FEATURE_11AC
4270 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4271 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4272#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004273
4274 return ;
4275}
Jeff Johnson295189b2012-06-20 16:38:30 -07004276/*
4277 * FUNCTION: WDA_UpdateSTAParams
4278 * Translated WDA/PE BSS info into WDI BSS info..
4279 */
4280void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4281 WDI_ConfigStaReqInfoType *wdiStaParams,
4282 tAddStaParams *wdaStaParams)
4283{
4284 tANI_U8 i = 0;
4285 /* Update STA params */
4286 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4287 sizeof(tSirMacAddr)) ;
4288 wdiStaParams->usAssocId = wdaStaParams->assocId;
4289 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004290 wdiStaParams->staIdx = wdaStaParams->staIdx;
4291
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 wdiStaParams->ucShortPreambleSupported =
4293 wdaStaParams->shortPreambleSupported;
4294 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4295 sizeof(tSirMacAddr)) ;
4296 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4297
4298 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4299
4300 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4301 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4302 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4303 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4304 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4305 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4306 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4307
4308 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4309 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004310 wdiStaParams->wdiSupportedRates.opRateMode =
4311 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004312 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4313 {
4314 wdiStaParams->wdiSupportedRates.llbRates[i] =
4315 wdaStaParams->supportedRates.llbRates[i];
4316 }
4317 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4318 {
4319 wdiStaParams->wdiSupportedRates.llaRates[i] =
4320 wdaStaParams->supportedRates.llaRates[i];
4321 }
4322 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4323 {
4324 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4325 wdaStaParams->supportedRates.aniLegacyRates[i];
4326 }
4327 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4328 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004329#ifdef WLAN_FEATURE_11AC
4330 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4331 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4332 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4333 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4334#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4336 {
4337 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4338 wdaStaParams->supportedRates.supportedMCSSet[i];
4339 }
4340 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4341 wdaStaParams->supportedRates.rxHighestDataRate;
4342
4343 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4344
4345 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4346
4347 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4348 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4349 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4350
4351 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4352 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4353 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4354 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004356#ifdef WLAN_FEATURE_11AC
4357 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4358 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004359 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004360#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004361 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4362 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 return ;
4364}
Jeff Johnson295189b2012-06-20 16:38:30 -07004365/*
4366 * -------------------------------------------------------------------------
4367 * CFG update to WDI
4368 * -------------------------------------------------------------------------
4369 */
4370
4371 /*
4372 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4373 * Convert the WNI CFG ID to HAL CFG ID
4374 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004375static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004376{
4377 switch(wniCfgId)
4378 {
4379 case WNI_CFG_STA_ID:
4380 return QWLAN_HAL_CFG_STA_ID;
4381 case WNI_CFG_CURRENT_TX_ANTENNA:
4382 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4383 case WNI_CFG_CURRENT_RX_ANTENNA:
4384 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4385 case WNI_CFG_LOW_GAIN_OVERRIDE:
4386 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4387 case WNI_CFG_POWER_STATE_PER_CHAIN:
4388 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4389 case WNI_CFG_CAL_PERIOD:
4390 return QWLAN_HAL_CFG_CAL_PERIOD;
4391 case WNI_CFG_CAL_CONTROL:
4392 return QWLAN_HAL_CFG_CAL_CONTROL;
4393 case WNI_CFG_PROXIMITY:
4394 return QWLAN_HAL_CFG_PROXIMITY;
4395 case WNI_CFG_NETWORK_DENSITY:
4396 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4397 case WNI_CFG_MAX_MEDIUM_TIME:
4398 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4399 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4400 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4401 case WNI_CFG_RTS_THRESHOLD:
4402 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4403 case WNI_CFG_SHORT_RETRY_LIMIT:
4404 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4405 case WNI_CFG_LONG_RETRY_LIMIT:
4406 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4407 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4408 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4409 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4410 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4411 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4412 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4413 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4414 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4415 case WNI_CFG_FIXED_RATE:
4416 return QWLAN_HAL_CFG_FIXED_RATE;
4417 case WNI_CFG_RETRYRATE_POLICY:
4418 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4419 case WNI_CFG_RETRYRATE_SECONDARY:
4420 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4421 case WNI_CFG_RETRYRATE_TERTIARY:
4422 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4423 case WNI_CFG_FORCE_POLICY_PROTECTION:
4424 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4425 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4426 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4427 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4428 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4429 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4430 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4431 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4432 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4433 case WNI_CFG_MAX_BA_SESSIONS:
4434 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4435 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4436 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4437 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4438 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4439 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4440 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4441 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4442 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4443 case WNI_CFG_STATS_PERIOD:
4444 return QWLAN_HAL_CFG_STATS_PERIOD;
4445 case WNI_CFG_CFP_MAX_DURATION:
4446 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4447#if 0 /*This is not part of CFG*/
4448 case WNI_CFG_FRAME_TRANS_ENABLED:
4449 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4450#endif
4451 case WNI_CFG_DTIM_PERIOD:
4452 return QWLAN_HAL_CFG_DTIM_PERIOD;
4453 case WNI_CFG_EDCA_WME_ACBK:
4454 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4455 case WNI_CFG_EDCA_WME_ACBE:
4456 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4457 case WNI_CFG_EDCA_WME_ACVI:
4458 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4459 case WNI_CFG_EDCA_WME_ACVO:
4460 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4461#if 0
4462 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4463 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4464 case WNI_CFG_TELE_BCN_TRANS_LI:
4465 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4466 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4467 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4468 case WNI_CFG_TELE_BCN_MAX_LI:
4469 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4470 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4471 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4472#endif
4473 case WNI_CFG_ENABLE_CLOSE_LOOP:
4474 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004475 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4476 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 default:
4478 {
4479 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004480 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 wniCfgId);
4482 return VOS_STATUS_E_INVAL;
4483 }
4484 }
4485}
Jeff Johnson295189b2012-06-20 16:38:30 -07004486/*
4487 * FUNCTION: WDA_UpdateCfgCallback
4488 *
4489 */
4490void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4491{
4492 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4493 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4494 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004496 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004497 /*
4498 * currently there is no response message is expected between PE and
4499 * WDA, Failure return from WDI is a ASSERT condition
4500 */
4501 if(WDI_STATUS_SUCCESS != wdiStatus)
4502 {
4503 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004504 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4506 }
4507
4508 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4509 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4510 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 return ;
4512}
Jeff Johnson295189b2012-06-20 16:38:30 -07004513/*
4514 * FUNCTION: WDA_UpdateCfg
4515 *
4516 */
4517VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4518{
4519
4520 WDI_Status status = WDI_STATUS_SUCCESS ;
4521 tANI_U32 val =0;
4522 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4523 tHalCfg *configData;
4524 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4525 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004527 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 if (NULL == pMac )
4529 {
4530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004531 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 return VOS_STATUS_E_FAILURE;
4533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 if(WDA_START_STATE != pWDA->wdaState)
4535 {
4536 return VOS_STATUS_E_FAILURE;
4537 }
4538
4539 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4540 {
4541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004542 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004543 VOS_ASSERT(0);
4544 return VOS_STATUS_E_FAILURE;
4545 }
4546
4547 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4548 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 if(NULL == wdiCfgReqParam)
4550 {
4551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004553 VOS_ASSERT(0);
4554 return VOS_STATUS_E_NOMEM;
4555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4557 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 if(NULL == wdiCfgReqParam->pConfigBuffer)
4559 {
4560 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004561 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 vos_mem_free(wdiCfgReqParam);
4563 VOS_ASSERT(0);
4564 return VOS_STATUS_E_NOMEM;
4565 }
4566
4567 /*convert the WNI CFG Id to HAL CFG Id*/
4568 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4569 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4570
4571 /*TODO: revisit this for handling string parameters */
4572 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4573 &val) != eSIR_SUCCESS)
4574 {
4575 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004576 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004577 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4578 vos_mem_free(wdiCfgReqParam);
4579 return eSIR_FAILURE;
4580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4582 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4583 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4584 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4585 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4586
4587 /* store Params pass it to WDI */
4588 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004589#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4590 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4591 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 if(IS_WDI_STATUS_FAILURE(status))
4593 {
4594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4595 "Failure in Update CFG WDI API, free all the memory " );
4596 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4597 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4598 pWDA->wdaWdiCfgApiMsgParam = NULL;
4599 /* Failure is not expected */
4600 VOS_ASSERT(0) ;
4601 }
4602#else
4603 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4604 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4605 pWDA->wdaWdiCfgApiMsgParam = NULL;
4606#endif
4607 return CONVERT_WDI2VOS_STATUS(status) ;
4608}
4609
Jeff Johnson295189b2012-06-20 16:38:30 -07004610VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4611 v_U8_t *pDefaultKeyId,
4612 v_U8_t *pNumKeys,
4613 WDI_KeysType *pWdiKeys )
4614{
4615 v_U32_t i, j, defKeyId = 0;
4616 v_U32_t val = SIR_MAC_KEY_LENGTH;
4617 VOS_STATUS status = WDI_STATUS_SUCCESS;
4618 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004619 if (NULL == pMac )
4620 {
4621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004622 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 return VOS_STATUS_E_FAILURE;
4624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4626 &defKeyId ))
4627 {
4628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4629 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4630 }
4631
4632 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004633 /* Need to extract ALL of the configured WEP Keys */
4634 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4635 {
4636 val = SIR_MAC_KEY_LENGTH;
4637 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4638 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4639 pWdiKeys[j].key,
4640 &val ))
4641 {
4642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004643 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 }
4645 else
4646 {
4647 pWdiKeys[j].keyId = (tANI_U8) i;
4648 /*
4649 * Actually, a DC (Don't Care) because
4650 * this is determined (and set) by PE/MLME
4651 */
4652 pWdiKeys[j].unicast = 0;
4653 /*
4654 * Another DC (Don't Care)
4655 */
4656 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4657 /* Another DC (Don't Care). Unused for WEP */
4658 pWdiKeys[j].paeRole = 0;
4659 /* Determined from wlan_cfgGetStr() above.*/
4660 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004661 j++;
4662 *pNumKeys = (tANI_U8) j;
4663 }
4664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 return status;
4666}
Jeff Johnson295189b2012-06-20 16:38:30 -07004667/*
4668 * FUNCTION: WDA_SetBssKeyReqCallback
4669 * send SET BSS key RSP back to PE
4670 */
4671void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4672{
4673 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4674 tWDA_CbContext *pWDA;
4675 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004677 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004678 if(NULL == pWdaParams)
4679 {
4680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004681 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004682 VOS_ASSERT(0) ;
4683 return ;
4684 }
4685 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4686 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4688 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004689 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 return ;
4692}
Jeff Johnson295189b2012-06-20 16:38:30 -07004693/*
4694 * FUNCTION: WDA_ProcessSetBssKeyReq
4695 * Request to WDI for programming the BSS key( key for
4696 * broadcast/multicast frames Encryption)
4697 */
4698VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4699 tSetBssKeyParams *setBssKeyParams )
4700{
4701 WDI_Status status = WDI_STATUS_SUCCESS ;
4702 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4703 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4704 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4705 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004708 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 if(NULL == wdiSetBssKeyParam)
4710 {
4711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004712 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 VOS_ASSERT(0);
4714 return VOS_STATUS_E_NOMEM;
4715 }
4716 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4717 if(NULL == pWdaParams)
4718 {
4719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 VOS_ASSERT(0);
4722 vos_mem_free(wdiSetBssKeyParam);
4723 return VOS_STATUS_E_NOMEM;
4724 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 /* copy set BSS params to WDI structure */
4727 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4728 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4729 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 if(setBssKeyParams->encType != eSIR_ED_NONE)
4731 {
4732 if( setBssKeyParams->numKeys == 0 &&
4733 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4734 setBssKeyParams->encType == eSIR_ED_WEP104))
4735 {
4736 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004737 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4738 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4739 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4740 }
4741 else
4742 {
4743 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4744 {
4745 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4746 setBssKeyParams->key[keyIndex].keyId;
4747 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4748 setBssKeyParams->key[keyIndex].unicast;
4749 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4750 setBssKeyParams->key[keyIndex].keyDirection;
4751 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4752 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4753 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4754 setBssKeyParams->key[keyIndex].paeRole;
4755 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4756 setBssKeyParams->key[keyIndex].keyLength;
4757 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4758 setBssKeyParams->key[keyIndex].key,
4759 SIR_MAC_MAX_KEY_LENGTH);
4760 }
4761 }
4762 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4764 setBssKeyParams->singleTidRc;
4765 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 /* Store set key pointer, as this will be used for response */
4767 /* store Params pass it to WDI */
4768 pWdaParams->pWdaContext = pWDA;
4769 pWdaParams->wdaMsgParam = setBssKeyParams;
4770 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4772 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4773
4774 if(IS_WDI_STATUS_FAILURE(status))
4775 {
4776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4777 "Failure in Set BSS Key Req WDI API, free all the memory " );
4778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4779 vos_mem_free(pWdaParams) ;
4780 setBssKeyParams->status = eSIR_FAILURE ;
4781 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 return CONVERT_WDI2VOS_STATUS(status) ;
4784}
Jeff Johnson295189b2012-06-20 16:38:30 -07004785/*
4786 * FUNCTION: WDA_RemoveBssKeyReqCallback
4787 * send SET BSS key RSP back to PE
4788 */
4789void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4790{
4791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4792 tWDA_CbContext *pWDA;
4793 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004795 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 if(NULL == pWdaParams)
4797 {
4798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004799 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 VOS_ASSERT(0) ;
4801 return ;
4802 }
4803 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4804 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4806 vos_mem_free(pWdaParams) ;
4807
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004808 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004809 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 return ;
4811}
Jeff Johnson295189b2012-06-20 16:38:30 -07004812/*
4813 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4814 * Request to WDI to remove the BSS key( key for broadcast/multicast
4815 * frames Encryption)
4816 */
4817VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4818 tRemoveBssKeyParams *removeBssKeyParams )
4819{
4820 WDI_Status status = WDI_STATUS_SUCCESS ;
4821 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4822 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4823 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4824 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004826 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 if(NULL == wdiRemoveBssKeyParam)
4828 {
4829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 VOS_ASSERT(0);
4832 return VOS_STATUS_E_NOMEM;
4833 }
4834 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4835 if(NULL == pWdaParams)
4836 {
4837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004839 VOS_ASSERT(0);
4840 vos_mem_free(wdiRemoveBssKeyParam);
4841 return VOS_STATUS_E_NOMEM;
4842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 /* copy Remove BSS key params to WDI structure*/
4844 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4845 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4846 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4847 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4848 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 /* Store remove key pointer, as this will be used for response */
4850 /* store Params pass it to WDI */
4851 pWdaParams->pWdaContext = pWDA;
4852 pWdaParams->wdaMsgParam = removeBssKeyParams;
4853 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4855 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 if(IS_WDI_STATUS_FAILURE(status))
4857 {
4858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4859 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4861 vos_mem_free(pWdaParams) ;
4862 removeBssKeyParams->status = eSIR_FAILURE ;
4863 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 return CONVERT_WDI2VOS_STATUS(status) ;
4866}
Jeff Johnson295189b2012-06-20 16:38:30 -07004867/*
4868 * FUNCTION: WDA_SetBssKeyReqCallback
4869 * send SET BSS key RSP back to PE
4870 */
4871void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4872{
4873 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4874 tWDA_CbContext *pWDA;
4875 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004877 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 if(NULL == pWdaParams)
4879 {
4880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004881 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 VOS_ASSERT(0) ;
4883 return ;
4884 }
4885 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4886 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4888 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004889 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 return ;
4892}
Jeff Johnson295189b2012-06-20 16:38:30 -07004893/*
4894 * FUNCTION: WDA_ProcessSetStaKeyReq
4895 * Request to WDI for programming the STA key( key for Unicast frames
4896 * Encryption)
4897 */
4898VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4899 tSetStaKeyParams *setStaKeyParams )
4900{
4901 WDI_Status status = WDI_STATUS_SUCCESS ;
4902 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4903 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4904 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4905 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004908 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 if(NULL == wdiSetStaKeyParam)
4910 {
4911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 VOS_ASSERT(0);
4914 return VOS_STATUS_E_NOMEM;
4915 }
4916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4917 if(NULL == pWdaParams)
4918 {
4919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 VOS_ASSERT(0);
4922 vos_mem_free(wdiSetStaKeyParam);
4923 return VOS_STATUS_E_NOMEM;
4924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 /* copy set STA key params to WDI structure */
4928 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4929 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4930 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4931 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 if(setStaKeyParams->encType != eSIR_ED_NONE)
4933 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004934 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004935 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4936 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4937 {
4938 WDA_GetWepKeysFromCfg( pWDA,
4939 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4940 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4941 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4942 }
4943 else
4944 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4946 keyIndex++)
4947 {
4948 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4949 setStaKeyParams->key[keyIndex].keyId;
4950 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4951 setStaKeyParams->key[keyIndex].unicast;
4952 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4953 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004954 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4955 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4956 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4957 setStaKeyParams->key[keyIndex].paeRole;
4958 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4959 setStaKeyParams->key[keyIndex].keyLength;
4960 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4961 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4962 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4963 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4964 {
4965 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4966 }
4967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4969 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004970 }
4971 }
4972 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4973 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004974 /* Store set key pointer, as this will be used for response */
4975 /* store Params pass it to WDI */
4976 pWdaParams->pWdaContext = pWDA;
4977 pWdaParams->wdaMsgParam = setStaKeyParams;
4978 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4980 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 if(IS_WDI_STATUS_FAILURE(status))
4982 {
4983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4984 "Failure in set STA Key Req WDI API, free all the memory " );
4985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4986 vos_mem_free(pWdaParams) ;
4987 setStaKeyParams->status = eSIR_FAILURE ;
4988 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 return CONVERT_WDI2VOS_STATUS(status) ;
4991}
Jeff Johnson295189b2012-06-20 16:38:30 -07004992/*
4993 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4994 * send SET Bcast STA key RSP back to PE
4995 */
4996void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4997{
4998 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4999 tWDA_CbContext *pWDA;
5000 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005002 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005003 if(NULL == pWdaParams)
5004 {
5005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005006 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 VOS_ASSERT(0) ;
5008 return ;
5009 }
5010 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5011 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5013 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005014 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005015 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 return ;
5017}
5018
Jeff Johnson295189b2012-06-20 16:38:30 -07005019/*
5020 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5021 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5022 * Encryption)
5023 */
5024VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5025 tSetStaKeyParams *setStaKeyParams )
5026{
5027 WDI_Status status = WDI_STATUS_SUCCESS ;
5028 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5029 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5030 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5031 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 if(NULL == wdiSetStaKeyParam)
5036 {
5037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 VOS_ASSERT(0);
5040 return VOS_STATUS_E_NOMEM;
5041 }
5042 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5043 if(NULL == pWdaParams)
5044 {
5045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 VOS_ASSERT(0);
5048 vos_mem_free(wdiSetStaKeyParam);
5049 return VOS_STATUS_E_NOMEM;
5050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005053 /* copy set STA key params to WDI structure */
5054 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5055 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5056 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5057 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 if(setStaKeyParams->encType != eSIR_ED_NONE)
5059 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005060 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5061 keyIndex++)
5062 {
5063 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5064 setStaKeyParams->key[keyIndex].keyId;
5065 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5066 setStaKeyParams->key[keyIndex].unicast;
5067 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5068 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005069 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5070 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5071 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5072 setStaKeyParams->key[keyIndex].paeRole;
5073 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5074 setStaKeyParams->key[keyIndex].keyLength;
5075 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5076 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5079 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005080 }
5081 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 /* Store set key pointer, as this will be used for response */
5083 /* store Params pass it to WDI */
5084 pWdaParams->pWdaContext = pWDA;
5085 pWdaParams->wdaMsgParam = setStaKeyParams;
5086 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005087 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5088 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005089 if(IS_WDI_STATUS_FAILURE(status))
5090 {
5091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5092 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5094 vos_mem_free(pWdaParams) ;
5095 setStaKeyParams->status = eSIR_FAILURE ;
5096 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005098 return CONVERT_WDI2VOS_STATUS(status) ;
5099}
Jeff Johnson295189b2012-06-20 16:38:30 -07005100/*
5101 * FUNCTION: WDA_RemoveStaKeyReqCallback
5102 * send SET BSS key RSP back to PE
5103 */
5104void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5105{
5106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5107 tWDA_CbContext *pWDA;
5108 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 if(NULL == pWdaParams)
5112 {
5113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 VOS_ASSERT(0) ;
5116 return ;
5117 }
5118 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5119 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5121 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005122 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 return ;
5125}
5126
Jeff Johnson295189b2012-06-20 16:38:30 -07005127/*
5128 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5129 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5130 */
5131VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5132 tRemoveStaKeyParams *removeStaKeyParams )
5133{
5134 WDI_Status status = WDI_STATUS_SUCCESS ;
5135 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5136 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5137 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5138 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005140 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005141 if(NULL == wdiRemoveStaKeyParam)
5142 {
5143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005144 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 VOS_ASSERT(0);
5146 return VOS_STATUS_E_NOMEM;
5147 }
5148 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5149 if(NULL == pWdaParams)
5150 {
5151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005152 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005153 VOS_ASSERT(0);
5154 vos_mem_free(wdiRemoveStaKeyParam);
5155 return VOS_STATUS_E_NOMEM;
5156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005157 /* copy remove STA key params to WDI structure*/
5158 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5159 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5160 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5161 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5162 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 /* Store remove key pointer, as this will be used for response */
5164 /* store Params pass it to WDI */
5165 pWdaParams->pWdaContext = pWDA;
5166 pWdaParams->wdaMsgParam = removeStaKeyParams;
5167 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5169 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 if(IS_WDI_STATUS_FAILURE(status))
5171 {
5172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5173 "Failure in remove STA Key Req WDI API, free all the memory " );
5174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5175 vos_mem_free(pWdaParams) ;
5176 removeStaKeyParams->status = eSIR_FAILURE ;
5177 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005179 return CONVERT_WDI2VOS_STATUS(status) ;
5180}
Jeff Johnson295189b2012-06-20 16:38:30 -07005181/*
5182 * FUNCTION: WDA_IsHandleSetLinkStateReq
5183 * Update the WDA state and return the status to handle this message or not
5184 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005185WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5186 tWDA_CbContext *pWDA,
5187 tLinkStateParams *linkStateParams)
5188{
5189 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005190 switch(linkStateParams->state)
5191 {
5192 case eSIR_LINK_PREASSOC_STATE:
5193 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5194 /*
5195 * set the WDA state to PRE ASSOC
5196 * copy the BSSID into pWDA to use it in join request and return,
5197 * No need to handle these messages.
5198 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005199 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5200 {
5201 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005202 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005203 }
5204 else
5205 {
5206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005207 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005208 VOS_ASSERT(0);
5209 }
5210
5211 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5212 {
5213 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005214 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005215 }
5216 else
5217 {
5218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005219 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005220 VOS_ASSERT(0);
5221 }
5222
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5224 *channel and after ) so reset the WDA state to ready when the second
5225 * time UMAC issue the link state with PREASSOC
5226 */
5227 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5228 {
5229 /* RESET WDA state back to WDA_READY_STATE */
5230 pWDA->wdaState = WDA_READY_STATE;
5231 }
5232 else
5233 {
5234 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5235 }
5236 //populate linkState info in WDACbCtxt
5237 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 default:
5240 if(pWDA->wdaState != WDA_READY_STATE)
5241 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005242 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5243 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5244 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5245 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5246 *the ASSERT in WDA_Stop during module unload.*/
5247 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5248 {
5249 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005250 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005251 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005252 else
5253 {
5254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005255 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005256 status = WDA_IGNORE_SET_LINK_STATE;
5257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 }
5259 break;
5260 }
5261
5262 return status;
5263}
Jeff Johnson295189b2012-06-20 16:38:30 -07005264/*
5265 * FUNCTION: WDA_SetLinkStateCallback
5266 * call back function for set link state from WDI
5267 */
5268void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5269{
5270 tWDA_CbContext *pWDA;
5271 tLinkStateParams *linkStateParams;
5272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005274 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 if(NULL == pWdaParams)
5276 {
5277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005278 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 VOS_ASSERT(0) ;
5280 return ;
5281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005282 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005283 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005284 /*
5285 * In STA mode start the BA activity check timer after association
5286 * and in AP mode start BA activity check timer after BSS start */
5287 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5288 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005289 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5290 ((status == WDI_STATUS_SUCCESS) &&
5291 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005292 {
5293 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 /*
5297 * No respone required for WDA_SET_LINK_STATE so free the request
5298 * param here
5299 */
5300 if( pWdaParams != NULL )
5301 {
5302 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5303 {
5304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5305 }
5306 vos_mem_free(pWdaParams);
5307 }
5308 return ;
5309}
Jeff Johnson295189b2012-06-20 16:38:30 -07005310/*
5311 * FUNCTION: WDA_ProcessSetLinkState
5312 * Request to WDI to set the link status.
5313 */
5314VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5315 tLinkStateParams *linkStateParams)
5316{
5317 WDI_Status status = WDI_STATUS_SUCCESS ;
5318 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5319 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5320 sizeof(WDI_SetLinkReqParamsType)) ;
5321 tWDA_ReqParams *pWdaParams ;
5322 tpAniSirGlobal pMac;
5323 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5324
5325 if(NULL == pMac)
5326 {
5327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005328 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005330 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 return VOS_STATUS_E_FAILURE;
5332 }
5333
5334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005335 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 if(NULL == wdiSetLinkStateParam)
5337 {
5338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005340 VOS_ASSERT(0);
5341 return VOS_STATUS_E_NOMEM;
5342 }
5343 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5344 if(NULL == pWdaParams)
5345 {
5346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 VOS_ASSERT(0);
5349 vos_mem_free(wdiSetLinkStateParam);
5350 return VOS_STATUS_E_NOMEM;
5351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005352 if(WDA_IGNORE_SET_LINK_STATE ==
5353 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5354 {
5355 status = WDI_STATUS_E_FAILURE;
5356 }
5357 else
5358 {
5359 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5360 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5362 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5364 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 pWdaParams->pWdaContext = pWDA;
5366 /* Store remove key pointer, as this will be used for response */
5367 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 /* store Params pass it to WDI */
5369 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5370 /* Stop Timer only other than GO role and concurrent session */
5371 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005372 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5374 {
5375 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5378 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 if(IS_WDI_STATUS_FAILURE(status))
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5382 "Failure in set link state Req WDI API, free all the memory " );
5383 }
5384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 if(IS_WDI_STATUS_FAILURE(status))
5386 {
5387 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005388 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 vos_mem_free(pWdaParams);
5390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 return CONVERT_WDI2VOS_STATUS(status) ;
5392}
Jeff Johnson295189b2012-06-20 16:38:30 -07005393/*
5394 * FUNCTION: WDA_GetStatsReqParamsCallback
5395 * send the response to PE with Stats received from WDI
5396 */
5397void WDA_GetStatsReqParamsCallback(
5398 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5399 void* pUserData)
5400{
5401 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5402 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5403
5404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005405 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 pGetPEStatsRspParams =
5407 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5408 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5409
5410 if(NULL == pGetPEStatsRspParams)
5411 {
5412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 VOS_ASSERT(0);
5415 return;
5416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5418 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5419 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5420 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005421
5422 //Fill the Session Id Properly in PE
5423 pGetPEStatsRspParams->sessionId = 0;
5424 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005425 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005426 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5427 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 vos_mem_copy( pGetPEStatsRspParams + 1,
5429 wdiGetStatsRsp + 1,
5430 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 /* send response to UMAC*/
5432 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5433
5434 return;
5435}
5436
Jeff Johnson295189b2012-06-20 16:38:30 -07005437/*
5438 * FUNCTION: WDA_ProcessGetStatsReq
5439 * Request to WDI to get the statistics
5440 */
5441VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5442 tAniGetPEStatsReq *pGetStatsParams)
5443{
5444 WDI_Status status = WDI_STATUS_SUCCESS ;
5445 WDI_GetStatsReqParamsType wdiGetStatsParam;
5446 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005448 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5450 pGetStatsParams->staId;
5451 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5452 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 status = WDI_GetStatsReq(&wdiGetStatsParam,
5455 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 if(IS_WDI_STATUS_FAILURE(status))
5457 {
5458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5459 "Failure in Get Stats Req WDI API, free all the memory " );
5460 pGetPEStatsRspParams =
5461 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5462 if(NULL == pGetPEStatsRspParams)
5463 {
5464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005466 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005467 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005468 return VOS_STATUS_E_NOMEM;
5469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005470 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5471 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5472 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5473 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5474 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5475 (void *)pGetPEStatsRspParams, 0) ;
5476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 /* Free the request message */
5478 vos_mem_free(pGetStatsParams);
5479 return CONVERT_WDI2VOS_STATUS(status);
5480}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005481
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005482#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005483/*
5484 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5485 * send the response to PE with roam Rssi received from WDI
5486 */
5487void WDA_GetRoamRssiReqParamsCallback(
5488 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5489 void* pUserData)
5490{
5491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5492 tWDA_CbContext *pWDA = NULL;
5493 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5494 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5496 "<------ %s " ,__func__);
5497 if(NULL == pWdaParams)
5498 {
5499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5500 "%s: pWdaParams received NULL", __func__);
5501 VOS_ASSERT(0) ;
5502 return ;
5503 }
5504 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5505 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5506
5507 if(NULL == pGetRoamRssiReqParams)
5508 {
5509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5510 "%s: pGetRoamRssiReqParams received NULL", __func__);
5511 VOS_ASSERT(0);
5512 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5513 vos_mem_free(pWdaParams);
5514 return ;
5515 }
5516 pGetRoamRssiRspParams =
5517 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5518
5519 if(NULL == pGetRoamRssiRspParams)
5520 {
5521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5522 "%s: VOS MEM Alloc Failure", __func__);
5523 VOS_ASSERT(0);
5524 return;
5525 }
5526 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5527 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005528 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005529 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5530 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5531
5532 /* Assign get roam rssi req (backup) in to the response */
5533 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5534
5535 /* free WDI command buffer */
5536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5537 vos_mem_free(pWdaParams) ;
5538
5539 /* send response to UMAC*/
5540 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5541
5542 return;
5543}
5544
5545
5546
5547/*
5548 * FUNCTION: WDA_ProcessGetRoamRssiReq
5549 * Request to WDI to get the statistics
5550 */
5551VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5552 tAniGetRssiReq *pGetRoamRssiParams)
5553{
5554 WDI_Status status = WDI_STATUS_SUCCESS ;
5555 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5556 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5557 tWDA_ReqParams *pWdaParams = NULL;
5558
5559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5560 "------> %s " ,__func__);
5561 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5562 pGetRoamRssiParams->staId;
5563 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5564
5565 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5566 if(NULL == pWdaParams)
5567 {
5568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5569 "%s: VOS MEM Alloc Failure", __func__);
5570 VOS_ASSERT(0);
5571 return VOS_STATUS_E_NOMEM;
5572 }
5573
5574 /* Store Init Req pointer, as this will be used for response */
5575 pWdaParams->pWdaContext = pWDA;
5576
5577 /* Take Get roam Rssi req backup as it stores the callback to be called after
5578 receiving the response */
5579 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5580 pWdaParams->wdaWdiApiMsgParam = NULL;
5581
5582 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5583 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5584 if(IS_WDI_STATUS_FAILURE(status))
5585 {
5586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5587 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5588 pGetRoamRssiRspParams =
5589 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5590 if(NULL == pGetRoamRssiRspParams)
5591 {
5592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5593 "%s: VOS MEM Alloc Failure", __func__);
5594 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305595 vos_mem_free(pGetRoamRssiParams);
5596 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005597 return VOS_STATUS_E_NOMEM;
5598 }
5599 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5600 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5601 pGetRoamRssiRspParams->rssi = 0;
5602 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5603 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5604 (void *)pGetRoamRssiRspParams, 0) ;
5605 }
5606 return CONVERT_WDI2VOS_STATUS(status);
5607}
5608#endif
5609
5610
Jeff Johnson295189b2012-06-20 16:38:30 -07005611/*
5612 * FUNCTION: WDA_UpdateEDCAParamCallback
5613 * call back function for Update EDCA params from WDI
5614 */
5615void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5616{
5617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5618 tEdcaParams *pEdcaParams;
5619
5620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005621 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 if(NULL == pWdaParams)
5623 {
5624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005625 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 VOS_ASSERT(0) ;
5627 return ;
5628 }
5629 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5631 vos_mem_free(pWdaParams);
5632 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 return ;
5634}
Jeff Johnson295189b2012-06-20 16:38:30 -07005635/*
5636 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5637 * Request to WDI to Update the EDCA params.
5638 */
5639VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5640 tEdcaParams *pEdcaParams)
5641{
5642 WDI_Status status = WDI_STATUS_SUCCESS ;
5643 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5644 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5645 sizeof(WDI_UpdateEDCAParamsType)) ;
5646 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005648 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005649 if(NULL == wdiEdcaParam)
5650 {
5651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005652 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005654 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 return VOS_STATUS_E_NOMEM;
5656 }
5657 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5658 if(NULL == pWdaParams)
5659 {
5660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005661 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 VOS_ASSERT(0);
5663 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005664 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 return VOS_STATUS_E_NOMEM;
5666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005667 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005668 /*
5669 Since firmware is not using highperformance flag, we have removed
5670 this flag from wdiEDCAInfo structure to match sizeof the structure
5671 between host and firmware.In future if we are planning to use
5672 highperformance flag then Please define this flag in wdiEDCAInfo
5673 structure, update it here and send it to firmware. i.e.
5674 Following is the original line which we removed as part of the fix
5675 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5676 pEdcaParams->highPerformance;
5677 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5679 &pEdcaParams->acbe);
5680 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5681 &pEdcaParams->acbk);
5682 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5683 &pEdcaParams->acvi);
5684 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5685 &pEdcaParams->acvo);
5686 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 pWdaParams->pWdaContext = pWDA;
5688 /* Store remove key pointer, as this will be used for response */
5689 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005690 /* store Params pass it to WDI */
5691 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5693 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005694 if(IS_WDI_STATUS_FAILURE(status))
5695 {
5696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5697 "Failure in Update EDCA Params WDI API, free all the memory " );
5698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5699 vos_mem_free(pWdaParams);
5700 vos_mem_free(pEdcaParams);
5701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 return CONVERT_WDI2VOS_STATUS(status) ;
5703}
Jeff Johnson295189b2012-06-20 16:38:30 -07005704/*
5705 * FUNCTION: WDA_AddBAReqCallback
5706 * send ADD BA RSP back to PE
5707 */
5708void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5709 void* pUserData)
5710{
5711 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5712 tWDA_CbContext *pWDA;
5713 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005715 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 if(NULL == pWdaParams)
5717 {
5718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005719 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005720 VOS_ASSERT(0) ;
5721 return ;
5722 }
5723 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5724 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5726 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005727 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005729 return ;
5730}
5731
Jeff Johnson295189b2012-06-20 16:38:30 -07005732/*
5733 * FUNCTION: WDA_ProcessAddBAReq
5734 * Request to WDI to Update the ADDBA REQ params.
5735 */
5736VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5737 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5738{
Jeff Johnson43971f52012-07-17 12:26:56 -07005739 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5741 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5742 sizeof(WDI_AddBAReqParamsType)) ;
5743 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005745 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 if(NULL == wdiAddBAReqParam)
5747 {
5748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005750 VOS_ASSERT(0);
5751 return VOS_STATUS_E_NOMEM;
5752 }
5753 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5754 if(NULL == pWdaParams)
5755 {
5756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 VOS_ASSERT(0);
5759 vos_mem_free(wdiAddBAReqParam);
5760 return VOS_STATUS_E_NOMEM;
5761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005762 do
5763 {
5764 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 wdiAddBaInfo->ucSTAIdx = staIdx ;
5766 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5767 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005768 } while(0) ;
5769 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005770 pWdaParams->pWdaContext = pWDA;
5771 /* store Params pass it to WDI */
5772 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5773 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005774 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5775 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005776
Jeff Johnson43971f52012-07-17 12:26:56 -07005777 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005778 {
5779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005780 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5781 status = CONVERT_WDI2VOS_STATUS(wstatus);
5782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005783 vos_mem_free(pWdaParams);
5784 pAddBAReqParams->status = eSIR_FAILURE;
5785 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5786 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005787 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005788}
Jeff Johnson295189b2012-06-20 16:38:30 -07005789/*
5790 * FUNCTION: WDA_AddBASessionReqCallback
5791 * send ADD BA SESSION RSP back to PE/(or TL)
5792 */
5793void WDA_AddBASessionReqCallback(
5794 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5795{
5796 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5797 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5798 tWDA_CbContext *pWDA;
5799 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005801 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005802 if(NULL == pWdaParams)
5803 {
5804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005805 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005806 VOS_ASSERT(0) ;
5807 return ;
5808 }
5809 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5810 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 if( NULL == pAddBAReqParams )
5812 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005814 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005816 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5817 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 return ;
5819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5821 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005822 /*
5823 * if WDA in update TL state, update TL with BA session parama and send
5824 * another request to HAL(/WDI) (ADD_BA_REQ)
5825 */
5826
5827 if((VOS_STATUS_SUCCESS ==
5828 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5829 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5830 {
5831 /* Update TL with BA info received from HAL/WDI */
5832 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5833 wdiAddBaSession->usBaSessionID,
5834 wdiAddBaSession->ucSTAIdx,
5835 wdiAddBaSession->ucBaTID,
5836 wdiAddBaSession->ucBaBufferSize,
5837 wdiAddBaSession->ucWinSize,
5838 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005839 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5840 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5841 }
5842 else
5843 {
5844 pAddBAReqParams->status =
5845 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5846
5847 /* Setting Flag to indicate that Set BA is success */
5848 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5849 {
5850 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5851 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5852 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 /*Reset the WDA state to READY */
5857 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 return ;
5859}
5860
Jeff Johnson295189b2012-06-20 16:38:30 -07005861/*
5862 * FUNCTION: WDA_ProcessAddBASessionReq
5863 * Request to WDI to Update the ADDBA REQ params.
5864 */
5865VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5866 tAddBAParams *pAddBAReqParams)
5867{
5868 WDI_Status status = WDI_STATUS_SUCCESS ;
5869 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5870 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5871 sizeof(WDI_AddBASessionReqParamsType)) ;
5872 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005873 WLANTL_STAStateType tlSTAState = 0;
5874
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005876 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 if(NULL == wdiAddBASessionReqParam)
5878 {
5879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005880 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005881 VOS_ASSERT(0);
5882 return VOS_STATUS_E_NOMEM;
5883 }
5884 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5885 if(NULL == pWdaParams)
5886 {
5887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005888 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 VOS_ASSERT(0);
5890 vos_mem_free(wdiAddBASessionReqParam);
5891 return VOS_STATUS_E_NOMEM;
5892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 /*
5894 * Populate ADD BA parameters and pass these paarmeters to WDI.
5895 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5896 * the state to track if these is BA recipient case or BA initiator
5897 * case.
5898 */
5899 do
5900 {
5901 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5902 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5903 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5904 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5905 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5906 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5907 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5910 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5911 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5912 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5913 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 /* check the BA direction and update state accordingly */
5915 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5916 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5917 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5918
5919 }while(0) ;
5920 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 pWdaParams->pWdaContext = pWDA;
5922 /* Store ADD BA pointer, as this will be used for response */
5923 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5924 /* store Params pass it to WDI */
5925 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005926
5927 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5928 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5929 */
5930 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5931 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5932 {
5933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005934 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005935 status = WDI_STATUS_E_NOT_ALLOWED;
5936 pAddBAReqParams->status =
5937 CONVERT_WDI2SIR_STATUS(status) ;
5938 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5939 /*Reset the WDA state to READY */
5940 pWDA->wdaState = WDA_READY_STATE;
5941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5942 vos_mem_free(pWdaParams);
5943
5944 return CONVERT_WDI2VOS_STATUS(status) ;
5945 }
5946
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5948 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 if(IS_WDI_STATUS_FAILURE(status))
5950 {
5951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005952 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005954 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005955 pAddBAReqParams->status =
5956 CONVERT_WDI2SIR_STATUS(status) ;
5957 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005958 /*Reset the WDA state to READY */
5959 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 vos_mem_free(pWdaParams);
5962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005964}
Jeff Johnson295189b2012-06-20 16:38:30 -07005965/*
5966 * FUNCTION: WDA_DelBANotifyTL
5967 * send DEL BA IND to TL
5968 */
5969void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5970 tDelBAParams *pDelBAReqParams)
5971{
5972 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5973 //tSirMsgQ msg;
5974 vos_msg_t vosMsg;
5975 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 if(NULL == pDelBAInd)
5977 {
5978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005980 VOS_ASSERT(0) ;
5981 return;
5982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005983 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5984 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5985 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5986 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005987
Jeff Johnson295189b2012-06-20 16:38:30 -07005988
5989 vosMsg.type = WDA_DELETEBA_IND;
5990 vosMsg.bodyptr = pDelBAInd;
5991 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5992 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5993 {
5994 vosStatus = VOS_STATUS_E_BADMSG;
5995 }
5996}
Jeff Johnson295189b2012-06-20 16:38:30 -07005997/*
5998 * FUNCTION: WDA_DelBAReqCallback
5999 * send DEL BA RSP back to PE
6000 */
6001void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6002{
6003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6004 tWDA_CbContext *pWDA;
6005 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006008 if(NULL == pWdaParams)
6009 {
6010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006011 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 VOS_ASSERT(0) ;
6013 return ;
6014 }
6015 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6016 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 /* Notify TL about DEL BA in case of recipinet */
6018 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6019 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6020 {
6021 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 /*
6024 * No respone required for WDA_DELBA_IND so just free the request
6025 * param here
6026 */
6027 vos_mem_free(pDelBAReqParams);
6028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6029 vos_mem_free(pWdaParams);
6030 return ;
6031}
6032
Jeff Johnson295189b2012-06-20 16:38:30 -07006033/*
6034 * FUNCTION: WDA_ProcessDelBAReq
6035 * Request to WDI to Update the DELBA REQ params.
6036 */
6037VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6038 tDelBAParams *pDelBAReqParams)
6039{
6040 WDI_Status status = WDI_STATUS_SUCCESS ;
6041 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6042 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6043 sizeof(WDI_DelBAReqParamsType)) ;
6044 tWDA_ReqParams *pWdaParams ;
6045 tANI_U16 staIdx = 0;
6046 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006048 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006049 if(NULL == wdiDelBAReqParam)
6050 {
6051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 VOS_ASSERT(0);
6054 return VOS_STATUS_E_NOMEM;
6055 }
6056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6057 if(NULL == pWdaParams)
6058 {
6059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006061 VOS_ASSERT(0);
6062 vos_mem_free(wdiDelBAReqParam);
6063 return VOS_STATUS_E_NOMEM;
6064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006065 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6066 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6067 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6068 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 pWdaParams->pWdaContext = pWDA;
6070 /* Store DEL BA pointer, as this will be used for response */
6071 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 /* store Params pass it to WDI */
6073 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6075 * maintained in WDA, so that WDA can retry for another BA session
6076 */
6077 staIdx = pDelBAReqParams->staIdx;
6078 tid = pDelBAReqParams->baTID;
6079 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 status = WDI_DelBAReq(wdiDelBAReqParam,
6081 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 if(IS_WDI_STATUS_FAILURE(status))
6083 {
6084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6085 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6087 vos_mem_free(pWdaParams->wdaMsgParam);
6088 vos_mem_free(pWdaParams);
6089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006090 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006091}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006092
6093/*
6094 * FUNCTION: WDA_UpdateChReqCallback
6095 *
6096 */
6097void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6098{
Siddharth Bhala006c122014-05-03 12:13:27 +05306099 tWDA_ReqParams *pWdaParams;
6100 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6101 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6102 WDI_UpdateChannelReqinfoType *pChanInfoType;
6103 tSirUpdateChanList *pChanList;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006104
6105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6106 "<------ %s " ,__func__);
Siddharth Bhala006c122014-05-03 12:13:27 +05306107 if(NULL == pUserData)
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006108 {
6109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Siddharth Bhala006c122014-05-03 12:13:27 +05306110 "%s: pUserData received NULL", __func__);
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006111 VOS_ASSERT(0);
6112 return;
6113 }
6114
Siddharth Bhala006c122014-05-03 12:13:27 +05306115 pWdaParams = (tWDA_ReqParams *)pUserData;
6116 pwdiUpdateChReqParam =
6117 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6118 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6119 pChanInfoType = pwdiUpdateChanReqType->pchanParam;
6120 pChanList = (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006121 /*
6122 * currently there is no response message is expected between PE and
6123 * WDA, Failure return from WDI is a ASSERT condition
6124 */
6125 vos_mem_free(pChanInfoType);
6126 vos_mem_free(pChanList);
6127 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6128 vos_mem_free(pWdaParams);
6129
6130 return;
6131}
6132
6133/*
6134 * FUNCTION: WDA_ProcessUpdateChannelList
6135 * Request to WDI to Update the ChannelList params.
6136 */
6137VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6138 tSirUpdateChanList *pChanList)
6139{
6140 WDI_Status status = WDI_STATUS_SUCCESS;
6141 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6142 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6143 WDI_UpdateChannelReqinfoType *pChanInfoType;
6144 tWDA_ReqParams *pWdaParams;
6145 wpt_uint8 i;
6146
6147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6148 "------> %s " ,__func__);
6149 if(NULL == pChanList)
6150 {
6151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6152 "%s: NULL pChanList", __func__);
6153 VOS_ASSERT(0);
6154 return VOS_STATUS_E_INVAL;
6155 }
6156
6157 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6158 {
6159 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6160 "Update channel list capability Not Supported");
6161 vos_mem_free(pChanList);
6162 return VOS_STATUS_E_INVAL;
6163 }
6164
6165 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6166 sizeof(WDI_UpdateChReqParamsType));
6167 if(NULL == pwdiUpdateChReqParam)
6168 {
6169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6170 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6171 __func__);
6172 VOS_ASSERT(0);
6173 vos_mem_free(pChanList);
6174 return VOS_STATUS_E_NOMEM;
6175 }
6176 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6177 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6178 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6179 pChanList->numChan);
6180 if(NULL == pChanInfoType)
6181 {
6182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6183 "%s: VOS MEM Alloc Failure", __func__);
6184 VOS_ASSERT(0);
6185 vos_mem_free(pChanList);
6186 vos_mem_free(pwdiUpdateChReqParam);
6187 return VOS_STATUS_E_NOMEM;
6188 }
6189 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6190 * pChanList->numChan);
6191 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6192
6193 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6194 if(NULL == pWdaParams)
6195 {
6196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6197 "%s: VOS MEM Alloc Failure", __func__);
6198 VOS_ASSERT(0);
6199 vos_mem_free(pChanList);
6200 vos_mem_free(pChanInfoType);
6201 vos_mem_free(pwdiUpdateChReqParam);
6202 return VOS_STATUS_E_NOMEM;
6203 }
6204 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6205
6206 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6207 {
6208 pChanInfoType->mhz =
6209 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6210
6211 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6212 pChanInfoType->band_center_freq2 = 0;
6213
6214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6215 "chan[%d] = %u", i, pChanInfoType->mhz);
6216 if (pChanList->chanParam[i].dfsSet)
6217 {
6218 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6220 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6221 pChanList->chanParam[i].dfsSet);
6222 }
6223
6224 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6225 {
6226 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6227 }
6228 else
6229 {
6230 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6231 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6232 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6233 }
6234
6235 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6236 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6237
6238 pChanInfoType++;
6239 }
6240
6241 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6242 pWdaParams->pWdaContext = pWDA;
6243 pWdaParams->wdaMsgParam = (void *)pChanList;
6244 /* store Params pass it to WDI */
6245 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6246 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6247 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6248 if(IS_WDI_STATUS_FAILURE(status))
6249 {
6250 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6251 "Failure in Update Channel REQ Params WDI API, free all the memory");
6252 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6253 vos_mem_free(pwdiUpdateChReqParam);
6254 vos_mem_free(pWdaParams->wdaMsgParam);
6255 vos_mem_free(pWdaParams);
6256 }
6257 return CONVERT_WDI2VOS_STATUS(status);
6258}
6259
Jeff Johnson295189b2012-06-20 16:38:30 -07006260/*
6261 * FUNCTION: WDA_AddTSReqCallback
6262 * send ADD TS RSP back to PE
6263 */
6264void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6265{
6266 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6267 tWDA_CbContext *pWDA;
6268 tAddTsParams *pAddTsReqParams;
6269
6270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006271 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006272 if(NULL == pWdaParams)
6273 {
6274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006275 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 VOS_ASSERT(0) ;
6277 return ;
6278 }
6279 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6280 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6282 vos_mem_free(pWdaParams);
6283
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006284 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006286 return ;
6287}
6288
Jeff Johnson295189b2012-06-20 16:38:30 -07006289/*
6290 * FUNCTION: WDA_ProcessAddTSReq
6291 * Request to WDI to Update the ADD TS REQ params.
6292 */
6293VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6294 tAddTsParams *pAddTsReqParams)
6295{
6296 WDI_Status status = WDI_STATUS_SUCCESS ;
6297 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6298 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6299 sizeof(WDI_AddTSReqParamsType)) ;
6300 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006302 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 if(NULL == wdiAddTSReqParam)
6304 {
6305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006306 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 VOS_ASSERT(0);
6308 return VOS_STATUS_E_NOMEM;
6309 }
6310 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6311 if(NULL == pWdaParams)
6312 {
6313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006314 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006315 VOS_ASSERT(0);
6316 vos_mem_free(wdiAddTSReqParam);
6317 return VOS_STATUS_E_NOMEM;
6318 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006319 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6320 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 //TS IE
6322 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6323 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6324 pAddTsReqParams->tspec.length;
6325
6326 //TS IE : TS INFO : TRAFFIC
6327 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6328 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6329 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6330 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6331 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6332 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6333 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6334 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6335 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6336 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6337 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6338 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6339 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6340 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6341 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6342 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6343
6344 //TS IE : TS INFO : SCHEDULE
6345 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6346 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6347 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6348 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006349 //TS IE
6350 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6351 pAddTsReqParams->tspec.nomMsduSz;
6352 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6353 pAddTsReqParams->tspec.maxMsduSz;
6354 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6355 pAddTsReqParams->tspec.minSvcInterval;
6356 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6357 pAddTsReqParams->tspec.maxSvcInterval;
6358 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6359 pAddTsReqParams->tspec.inactInterval;
6360 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6361 pAddTsReqParams->tspec.suspendInterval;
6362 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6363 pAddTsReqParams->tspec.svcStartTime;
6364 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6365 pAddTsReqParams->tspec.minDataRate;
6366 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6367 pAddTsReqParams->tspec.meanDataRate;
6368 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6369 pAddTsReqParams->tspec.peakDataRate;
6370 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6371 pAddTsReqParams->tspec.maxBurstSz;
6372 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6373 pAddTsReqParams->tspec.delayBound;
6374 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6375 pAddTsReqParams->tspec.minPhyRate;
6376 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6377 pAddTsReqParams->tspec.surplusBw;
6378 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6379 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006380 /* TODO: tAddTsParams doesn't have the following fields */
6381#if 0
6382 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6383 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6384 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6385 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6386#endif
6387 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6388
6389 pWdaParams->pWdaContext = pWDA;
6390 /* Store ADD TS pointer, as this will be used for response */
6391 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 /* store Params pass it to WDI */
6393 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 status = WDI_AddTSReq(wdiAddTSReqParam,
6395 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 if(IS_WDI_STATUS_FAILURE(status))
6397 {
6398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6399 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6401 vos_mem_free(pWdaParams);
6402 pAddTsReqParams->status = eSIR_FAILURE ;
6403 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6404 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006406}
6407
Jeff Johnson295189b2012-06-20 16:38:30 -07006408/*
6409 * FUNCTION: WDA_DelTSReqCallback
6410 * send DEL TS RSP back to PE
6411 */
6412void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6413{
6414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6418 vos_mem_free(pWdaParams->wdaMsgParam) ;
6419 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 /*
6421 * No respone required for WDA_DEL_TS_REQ so just free the request
6422 * param here
6423 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006424 return ;
6425}
6426
Jeff Johnson295189b2012-06-20 16:38:30 -07006427/*
6428 * FUNCTION: WDA_ProcessDelTSReq
6429 * Request to WDI to Update the DELTS REQ params.
6430 */
6431VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6432 tDelTsParams *pDelTSReqParams)
6433{
6434 WDI_Status status = WDI_STATUS_SUCCESS ;
6435 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6436 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6437 sizeof(WDI_DelTSReqParamsType)) ;
6438 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006440 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006441 if(NULL == wdiDelTSReqParam)
6442 {
6443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006445 VOS_ASSERT(0);
6446 return VOS_STATUS_E_NOMEM;
6447 }
6448 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6449 if(NULL == pWdaParams)
6450 {
6451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006453 VOS_ASSERT(0);
6454 vos_mem_free(wdiDelTSReqParam);
6455 return VOS_STATUS_E_NOMEM;
6456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6458 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6459 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6460 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6461 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 pWdaParams->pWdaContext = pWDA;
6463 /* Store DEL TS pointer, as this will be used for response */
6464 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 /* store Params pass it to WDI */
6466 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006467 status = WDI_DelTSReq(wdiDelTSReqParam,
6468 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006469 if(IS_WDI_STATUS_FAILURE(status))
6470 {
6471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6472 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6474 vos_mem_free(pWdaParams->wdaMsgParam);
6475 vos_mem_free(pWdaParams);
6476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006477 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006478}
Jeff Johnson295189b2012-06-20 16:38:30 -07006479/*
6480 * FUNCTION: WDA_UpdateBeaconParamsCallback
6481 * Free the memory. No need to send any response to PE in this case
6482 */
6483void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6484{
6485 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006487 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 if(NULL == pWdaParams)
6489 {
6490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006491 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 VOS_ASSERT(0) ;
6493 return ;
6494 }
6495 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6496 vos_mem_free(pWdaParams->wdaMsgParam) ;
6497 vos_mem_free(pWdaParams);
6498 /*
6499 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6500 * param here
6501 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006502 return ;
6503}
Jeff Johnson295189b2012-06-20 16:38:30 -07006504/*
6505 * FUNCTION: WDA_ProcessUpdateBeaconParams
6506 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6507 */
6508VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6509 tUpdateBeaconParams *pUpdateBeaconParams)
6510{
6511 WDI_Status status = WDI_STATUS_SUCCESS ;
6512 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6513 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6514 sizeof(WDI_UpdateBeaconParamsType)) ;
6515 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006517 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 if(NULL == wdiUpdateBeaconParams)
6519 {
6520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006521 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006522 VOS_ASSERT(0);
6523 return VOS_STATUS_E_NOMEM;
6524 }
6525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6526 if(NULL == pWdaParams)
6527 {
6528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006529 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 VOS_ASSERT(0);
6531 vos_mem_free(wdiUpdateBeaconParams);
6532 return VOS_STATUS_E_NOMEM;
6533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6535 pUpdateBeaconParams->bssIdx;
6536 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6537 pUpdateBeaconParams->fShortPreamble;
6538 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6539 pUpdateBeaconParams->fShortSlotTime;
6540 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6541 pUpdateBeaconParams->beaconInterval;
6542 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6543 pUpdateBeaconParams->llaCoexist;
6544 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6545 pUpdateBeaconParams->llbCoexist;
6546 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6547 pUpdateBeaconParams->llgCoexist;
6548 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6549 pUpdateBeaconParams->ht20MhzCoexist;
6550 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6551 pUpdateBeaconParams->llnNonGFCoexist;
6552 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6553 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6554 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6555 pUpdateBeaconParams->fRIFSMode;
6556 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6557 pUpdateBeaconParams->paramChangeBitmap;
6558 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6559
6560 pWdaParams->pWdaContext = pWDA;
6561 /* Store UpdateBeacon Req pointer, as this will be used for response */
6562 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 /* store Params pass it to WDI */
6564 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006565 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6566 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6567 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006568 if(IS_WDI_STATUS_FAILURE(status))
6569 {
6570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6571 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6573 vos_mem_free(pWdaParams->wdaMsgParam);
6574 vos_mem_free(pWdaParams);
6575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006576 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006577}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006578#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006579/*
6580 * FUNCTION: WDA_TSMStatsReqCallback
6581 * send TSM Stats RSP back to PE
6582 */
6583void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6584{
6585 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6586 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006587 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6588 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006589
6590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006591 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006592 if(NULL == pWdaParams)
6593 {
6594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006595 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006596 VOS_ASSERT(0) ;
6597 return ;
6598 }
6599 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006600 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6601
6602 if(NULL == pGetTsmStatsReqParams)
6603 {
6604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6605 "%s: pGetTsmStatsReqParams received NULL", __func__);
6606 VOS_ASSERT(0);
6607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6608 vos_mem_free(pWdaParams);
6609 return;
6610 }
6611
6612 pTsmRspParams =
6613 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006614 if( NULL == pTsmRspParams )
6615 {
6616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006617 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 VOS_ASSERT( 0 );
6619 return ;
6620 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006621 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6622 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6623 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6624
Jeff Johnson295189b2012-06-20 16:38:30 -07006625 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6626 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6627 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6628 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6629 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6630 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6631 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6632 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6633 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6634 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006635
6636 /* Assign get tsm stats req req (backup) in to the response */
6637 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6638
6639 /* free WDI command buffer */
6640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6641 vos_mem_free(pWdaParams);
6642
Jeff Johnson295189b2012-06-20 16:38:30 -07006643 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006644 return ;
6645}
6646
6647
Jeff Johnson295189b2012-06-20 16:38:30 -07006648/*
6649 * FUNCTION: WDA_ProcessTsmStatsReq
6650 * Request to WDI to get the TSM Stats params.
6651 */
6652VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006653 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006654{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006655 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006656 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006657 tWDA_ReqParams *pWdaParams = NULL;
6658 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6659
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006661 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6663 sizeof(WDI_TSMStatsReqParamsType));
6664 if(NULL == wdiTSMReqParam)
6665 {
6666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006667 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006668 VOS_ASSERT(0);
6669 return VOS_STATUS_E_NOMEM;
6670 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6672 if(NULL == pWdaParams)
6673 {
6674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006675 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006676 VOS_ASSERT(0);
6677 vos_mem_free(wdiTSMReqParam);
6678 return VOS_STATUS_E_NOMEM;
6679 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006680 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6681 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6682 pTsmStats->bssId,
6683 sizeof(wpt_macAddr));
6684 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6685
6686 pWdaParams->pWdaContext = pWDA;
6687 /* Store TSM Stats pointer, as this will be used for response */
6688 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006689 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 status = WDI_TSMStatsReq(wdiTSMReqParam,
6691 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006692 if(IS_WDI_STATUS_FAILURE(status))
6693 {
6694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6695 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006696 vos_mem_free(pWdaParams);
6697
6698 pGetTsmStatsRspParams =
6699 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6700 if(NULL == pGetTsmStatsRspParams)
6701 {
6702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6703 "%s: VOS MEM Alloc Failure", __func__);
6704 VOS_ASSERT(0);
6705 vos_mem_free(pTsmStats);
6706 return VOS_STATUS_E_NOMEM;
6707 }
6708 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6709 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6710 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6711
6712 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 return CONVERT_WDI2VOS_STATUS(status) ;
6715}
6716#endif
6717/*
6718 * FUNCTION: WDA_SendBeaconParamsCallback
6719 * No need to send any response to PE in this case
6720 */
6721void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6722{
6723
Jeff Johnson295189b2012-06-20 16:38:30 -07006724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006725 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 return ;
6727}
Jeff Johnson295189b2012-06-20 16:38:30 -07006728/*
6729 * FUNCTION: WDA_ProcessSendBeacon
6730 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6731 * start beacon trasmission
6732 */
6733VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6734 tSendbeaconParams *pSendbeaconParams)
6735{
6736 WDI_Status status = WDI_STATUS_SUCCESS ;
6737 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006739 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6741 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6742 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6743 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6745 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306746 /* p2pIeOffset should be atleast greater than timIeOffset */
6747 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6748 (pSendbeaconParams->p2pIeOffset <
6749 pSendbeaconParams->timIeOffset))
6750 {
6751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6752 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6753 VOS_ASSERT( 0 );
6754 return WDI_STATUS_E_FAILURE;
6755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6757 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 /* Copy the beacon template to local buffer */
6759 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6760 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6761 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6762
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6764 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006765 if(IS_WDI_STATUS_FAILURE(status))
6766 {
6767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6768 "Failure in SEND BEACON REQ Params WDI API" );
6769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006770 vos_mem_free(pSendbeaconParams);
6771 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006772}
Jeff Johnson295189b2012-06-20 16:38:30 -07006773/*
6774 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6775 * No need to send any response to PE in this case
6776 */
6777void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6778{
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006780 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006781 return ;
6782}
6783
Jeff Johnson295189b2012-06-20 16:38:30 -07006784/*
6785 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6786 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6787 * send probe response
6788 */
6789VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6790 tSendProbeRespParams *pSendProbeRspParams)
6791{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006792 WDI_Status status = WDI_STATUS_SUCCESS;
6793 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6794 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006796 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006797
6798 if (!wdiSendProbeRspParam)
6799 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6800
Jeff Johnson295189b2012-06-20 16:38:30 -07006801 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006802 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006803 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006804 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006805 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 /* Copy the Probe Response template to local buffer */
6807 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006808 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 pSendProbeRspParams->pProbeRespTemplate,
6810 pSendProbeRspParams->probeRespTemplateLen);
6811 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006812 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006813 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6814 WDI_PROBE_REQ_BITMAP_IE_LEN);
6815
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006816 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006817
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006818 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006820 if(IS_WDI_STATUS_FAILURE(status))
6821 {
6822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6823 "Failure in SEND Probe RSP Params WDI API" );
6824 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006825 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006826 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006828}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006829#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07006830/*
6831 * FUNCTION: WDA_SetMaxTxPowerCallBack
6832 * send the response to PE with power value received from WDI
6833 */
6834void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6835 void* pUserData)
6836{
6837 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6838 tWDA_CbContext *pWDA = NULL;
6839 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6840
6841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006842 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 if(NULL == pWdaParams)
6844 {
6845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006846 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 VOS_ASSERT(0) ;
6848 return ;
6849 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6851 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 if( NULL == pMaxTxPowerParams )
6853 {
6854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006855 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006856 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6858 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 return ;
6860 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006861
Jeff Johnson295189b2012-06-20 16:38:30 -07006862
6863 /*need to free memory for the pointers used in the
6864 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6866 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006868
Jeff Johnson295189b2012-06-20 16:38:30 -07006869
6870 /* send response to UMAC*/
6871 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6872
6873 return;
6874}
Jeff Johnson295189b2012-06-20 16:38:30 -07006875/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006876 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 * Request to WDI to send set Max Tx Power Request
6878 */
6879 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6880 tMaxTxPowerParams *MaxTxPowerParams)
6881{
6882 WDI_Status status = WDI_STATUS_SUCCESS;
6883 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6884 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006885
Jeff Johnson295189b2012-06-20 16:38:30 -07006886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006887 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006888
Jeff Johnson295189b2012-06-20 16:38:30 -07006889 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6890 sizeof(WDI_SetMaxTxPowerParamsType));
6891 if(NULL == wdiSetMaxTxPowerParams)
6892 {
6893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006894 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 VOS_ASSERT(0);
6896 return VOS_STATUS_E_NOMEM;
6897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6899 if(NULL == pWdaParams)
6900 {
6901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006902 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 vos_mem_free(wdiSetMaxTxPowerParams);
6904 VOS_ASSERT(0);
6905 return VOS_STATUS_E_NOMEM;
6906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006907 /* Copy.Max.Tx.Power Params to WDI structure */
6908 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6909 MaxTxPowerParams->bssId,
6910 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006911 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6912 MaxTxPowerParams->selfStaMacAddr,
6913 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6915 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006916 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 pWdaParams->pWdaContext = pWDA;
6918 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 /* store Params pass it to WDI */
6920 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006921 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6922 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 if(IS_WDI_STATUS_FAILURE(status))
6924 {
6925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6926 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6927 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6928 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006929 /* send response to UMAC*/
6930 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 }
6932 return CONVERT_WDI2VOS_STATUS(status);
6933
6934}
Jeff Johnson295189b2012-06-20 16:38:30 -07006935#endif
schang86c22c42013-03-13 18:41:24 -07006936
6937/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006938 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6939 * send the response to PE with power value received from WDI
6940 */
6941void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6942 *pwdiSetMaxTxPowerPerBandRsp,
6943 void* pUserData)
6944{
6945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6946 tWDA_CbContext *pWDA = NULL;
6947 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6948
6949 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6950 "<------ %s ", __func__);
6951 if (NULL == pWdaParams)
6952 {
6953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6954 "%s: pWdaParams received NULL", __func__);
6955 VOS_ASSERT(0);
6956 return ;
6957 }
6958 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6959 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6960 if ( NULL == pMxTxPwrPerBandParams )
6961 {
6962 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6963 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6964 VOS_ASSERT(0);
6965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6966 vos_mem_free(pWdaParams);
6967 return;
6968 }
6969
6970 /*need to free memory for the pointers used in the
6971 WDA Process.Set Max Tx Power Req function*/
6972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6973 vos_mem_free(pWdaParams);
6974 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6975
6976 /* send response to UMAC*/
6977 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6978 pMxTxPwrPerBandParams, 0);
6979
6980 return;
6981}
6982
6983/*
6984 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6985 * Request to WDI to send set Max Tx Power Per band Request
6986 */
6987 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6988 tMaxTxPowerPerBandParams
6989 *MaxTxPowerPerBandParams)
6990{
6991 WDI_Status status = WDI_STATUS_SUCCESS;
6992 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6993 tWDA_ReqParams *pWdaParams = NULL;
6994
6995 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6996 "------> %s ", __func__);
6997
6998 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6999 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
7000
7001 if (NULL == wdiSetMxTxPwrPerBandParams)
7002 {
7003 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7004 "%s: VOS MEM Alloc Failure", __func__);
7005 VOS_ASSERT(0);
7006 return VOS_STATUS_E_NOMEM;
7007 }
7008 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7009 if (NULL == pWdaParams)
7010 {
7011 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7012 "%s: VOS MEM Alloc Failure", __func__);
7013 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7014 VOS_ASSERT(0);
7015 return VOS_STATUS_E_NOMEM;
7016 }
7017 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7018 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7019 MaxTxPowerPerBandParams->bandInfo;
7020 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7021 MaxTxPowerPerBandParams->power;
7022 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7023 pWdaParams->pWdaContext = pWDA;
7024 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7025 /* store Params pass it to WDI */
7026 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7027 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7028 WDA_SetMaxTxPowerPerBandCallBack,
7029 pWdaParams);
7030 if (IS_WDI_STATUS_FAILURE(status))
7031 {
7032 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7033 "Failure in SET MAX TX Power REQ Params WDI API,"
7034 " free all the memory");
7035 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7036 vos_mem_free(pWdaParams);
7037 /* send response to UMAC*/
7038 WDA_SendMsg(pWDA,
7039 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7040 MaxTxPowerPerBandParams, 0);
7041 }
7042 return CONVERT_WDI2VOS_STATUS(status);
7043}
7044
7045/*
schang86c22c42013-03-13 18:41:24 -07007046 * FUNCTION: WDA_SetTxPowerCallBack
7047 * send the response to PE with power value received from WDI
7048 */
7049void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7050 void* pUserData)
7051{
7052 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7053 tWDA_CbContext *pWDA = NULL;
7054 tSirSetTxPowerReq *pTxPowerParams = NULL;
7055
7056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7057 "<------ %s ", __func__);
7058 if(NULL == pWdaParams)
7059 {
7060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7061 "%s: pWdaParams received NULL", __func__);
7062 VOS_ASSERT(0) ;
7063 return ;
7064 }
7065 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7066 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7067 if(NULL == pTxPowerParams)
7068 {
7069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7070 "%s: pTxPowerParams received NULL " ,__func__);
7071 VOS_ASSERT(0);
7072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7073 vos_mem_free(pWdaParams);
7074 return ;
7075 }
7076
7077 /*need to free memory for the pointers used in the
7078 WDA Process.Set Max Tx Power Req function*/
7079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7080 vos_mem_free(pWdaParams);
7081
7082 /* send response to UMAC*/
7083 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7084 return;
7085}
7086
7087/*
7088 * FUNCTION: WDA_ProcessSetTxPowerReq
7089 * Request to WDI to send set Tx Power Request
7090 */
7091 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7092 tSirSetTxPowerReq *txPowerParams)
7093{
7094 WDI_Status status = WDI_STATUS_SUCCESS;
7095 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7096 tWDA_ReqParams *pWdaParams = NULL;
7097
7098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7099 "------> %s ", __func__);
7100
7101 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7102 sizeof(WDI_SetTxPowerParamsType));
7103 if(NULL == wdiSetTxPowerParams)
7104 {
7105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7106 "%s: VOS MEM Alloc Failure", __func__);
7107 VOS_ASSERT(0);
7108 return VOS_STATUS_E_NOMEM;
7109 }
7110 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7111 if(NULL == pWdaParams)
7112 {
7113 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7114 "%s: VOS MEM Alloc Failure", __func__);
7115 vos_mem_free(wdiSetTxPowerParams);
7116 VOS_ASSERT(0);
7117 return VOS_STATUS_E_NOMEM;
7118 }
7119 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7120 txPowerParams->bssIdx;
7121 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7122 txPowerParams->mwPower;
7123 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7124 pWdaParams->pWdaContext = pWDA;
7125 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7126 /* store Params pass it to WDI */
7127 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7128 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7129 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7130 if(IS_WDI_STATUS_FAILURE(status))
7131 {
7132 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7133 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7135 vos_mem_free(pWdaParams);
7136 /* send response to UMAC*/
7137 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7138 }
7139 return CONVERT_WDI2VOS_STATUS(status);
7140}
7141
Jeff Johnson295189b2012-06-20 16:38:30 -07007142/*
7143 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7144 * Free the memory. No need to send any response to PE in this case
7145 */
7146void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7147{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007148 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7149
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007151 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007152
7153 if(NULL == pWdaParams)
7154 {
7155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007156 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007157 VOS_ASSERT(0) ;
7158 return ;
7159 }
7160
7161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7162 vos_mem_free(pWdaParams->wdaMsgParam) ;
7163 vos_mem_free(pWdaParams);
7164
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 /*
7166 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7167 * so just free the request param here
7168 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007169 return ;
7170}
7171
Jeff Johnson295189b2012-06-20 16:38:30 -07007172/*
7173 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7174 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7175 */
7176VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7177 tP2pPsParams *pP2pPsConfigParams)
7178{
7179 WDI_Status status = WDI_STATUS_SUCCESS ;
7180 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7181 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7182 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007183 tWDA_ReqParams *pWdaParams = NULL;
7184
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007186 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007187 if(NULL == wdiSetP2PGONOAReqParam)
7188 {
7189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 VOS_ASSERT(0);
7192 return VOS_STATUS_E_NOMEM;
7193 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007194
7195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7196 if(NULL == pWdaParams)
7197 {
7198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007199 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007200 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007201 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007202 VOS_ASSERT(0);
7203 return VOS_STATUS_E_NOMEM;
7204 }
7205
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7207 pP2pPsConfigParams->opp_ps;
7208 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7209 pP2pPsConfigParams->ctWindow;
7210 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7211 pP2pPsConfigParams->count;
7212 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7213 pP2pPsConfigParams->duration;
7214 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7215 pP2pPsConfigParams->interval;
7216 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7217 pP2pPsConfigParams->single_noa_duration;
7218 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7219 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007220
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7222 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007223 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7224
Jeff Johnson295189b2012-06-20 16:38:30 -07007225 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007226 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7227 pWdaParams->pWdaContext = pWDA;
7228
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007230 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7231
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 if(IS_WDI_STATUS_FAILURE(status))
7233 {
7234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7235 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7237 vos_mem_free(pWdaParams->wdaMsgParam);
7238 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007239 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007240 return CONVERT_WDI2VOS_STATUS(status);
7241
Jeff Johnson295189b2012-06-20 16:38:30 -07007242}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307243
7244#ifdef FEATURE_WLAN_TDLS
7245/*
7246 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7247 * Free the memory. No need to send any response to PE in this case
7248 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307249void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7250 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307251{
7252 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7253 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307254 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307255
7256
7257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7258 "<------ %s " ,__func__);
7259 if(NULL == pWdaParams)
7260 {
7261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7262 "%s: pWdaParams received NULL", __func__);
7263 VOS_ASSERT(0) ;
7264 return ;
7265 }
7266 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7267
7268 if(NULL == pWdaParams)
7269 {
7270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7271 "%s: pWdaParams received NULL", __func__);
7272 VOS_ASSERT(0) ;
7273 return ;
7274 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307275 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7276 if( NULL == pTdlsLinkEstablishParams )
7277 {
7278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7279 "%s: pTdlsLinkEstablishParams "
7280 "received NULL " ,__func__);
7281 VOS_ASSERT(0);
7282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7283 vos_mem_free(pWdaParams);
7284 return ;
7285 }
7286 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7287 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307289 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307290 /* send response to UMAC*/
7291 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7292
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307293 return ;
7294}
7295
7296VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7297 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7298{
7299 WDI_Status status = WDI_STATUS_SUCCESS ;
7300 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7301 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7302 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7303 tWDA_ReqParams *pWdaParams = NULL;
7304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7305 "------> %s " ,__func__);
7306 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7307 {
7308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7309 "%s: VOS MEM Alloc Failure", __func__);
7310 VOS_ASSERT(0);
7311 return VOS_STATUS_E_NOMEM;
7312 }
7313 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7314 if(NULL == pWdaParams)
7315 {
7316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7317 "%s: VOS MEM Alloc Failure", __func__);
7318 vos_mem_free(pTdlsLinkEstablishParams);
7319 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7320 VOS_ASSERT(0);
7321 return VOS_STATUS_E_NOMEM;
7322 }
7323 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307324 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307325 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307326 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307327 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307328 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307329 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307330 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307331 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307332 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307333 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7334 pTdlsLinkEstablishParams->isOffChannelSupported;
7335
7336 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7337 pTdlsLinkEstablishParams->validChannels,
7338 pTdlsLinkEstablishParams->validChannelsLen);
7339
7340 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7341 pTdlsLinkEstablishParams->validChannelsLen;
7342
7343 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7344 pTdlsLinkEstablishParams->validOperClasses,
7345 pTdlsLinkEstablishParams->validOperClassesLen);
7346 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7347 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307348
7349 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7350 /* Store msg pointer from PE, as this will be used for response */
7351 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7352 /* store Params pass it to WDI */
7353 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7354 pWdaParams->pWdaContext = pWDA;
7355
7356 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7357 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7358 WDA_SetTDLSLinkEstablishReqParamsCallback,
7359 pWdaParams);
7360 if(IS_WDI_STATUS_FAILURE(status))
7361 {
7362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7363 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7364 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7365 vos_mem_free(pWdaParams->wdaMsgParam);
7366 vos_mem_free(pWdaParams);
7367 }
7368 return CONVERT_WDI2VOS_STATUS(status);
7369}
7370#endif
7371
7372
Jeff Johnson295189b2012-06-20 16:38:30 -07007373#ifdef WLAN_FEATURE_VOWIFI_11R
7374/*
7375 * FUNCTION: WDA_AggrAddTSReqCallback
7376 * send ADD AGGREGATED TS RSP back to PE
7377 */
7378void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7379{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7381 tWDA_CbContext *pWDA;
7382 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007383 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007385 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007386 if(NULL == pWdaParams)
7387 {
7388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007389 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007390 VOS_ASSERT(0) ;
7391 return ;
7392 }
7393
7394 pWDA = pWdaParams->pWdaContext;
7395 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007396
7397 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7398 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007399 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007402
7403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7404 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007405 return ;
7406}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007407/*
7408 * FUNCTION: WDA_ProcessAddTSReq
7409 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7410 */
7411VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7412 tAggrAddTsParams *pAggrAddTsReqParams)
7413{
7414 WDI_Status status = WDI_STATUS_SUCCESS ;
7415 int i;
7416 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007417 tWDA_ReqParams *pWdaParams = NULL;
7418
7419
Jeff Johnson295189b2012-06-20 16:38:30 -07007420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007421 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007422 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7423 sizeof(WDI_AggrAddTSReqParamsType)) ;
7424 if(NULL == wdiAggrAddTSReqParam)
7425 {
7426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007428 VOS_ASSERT(0);
7429 return VOS_STATUS_E_NOMEM;
7430 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007431
7432
7433 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7434 if(NULL == pWdaParams)
7435 {
7436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007437 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007438 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007439 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007440 VOS_ASSERT(0);
7441 return VOS_STATUS_E_NOMEM;
7442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7444 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7445 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007446 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7447 {
7448 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7449 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7450 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7452 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7453 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7454 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7455 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7456 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7457 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7458 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7459 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7460 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7461 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7462 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7463 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7464 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7465 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7466 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7468 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7470 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7471 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7472 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7473 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7474 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7475 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7476 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7477 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7478 pAggrAddTsReqParams->tspec[i].inactInterval;
7479 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7480 pAggrAddTsReqParams->tspec[i].suspendInterval;
7481 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7482 pAggrAddTsReqParams->tspec[i].svcStartTime;
7483 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7484 pAggrAddTsReqParams->tspec[i].minDataRate;
7485 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7486 pAggrAddTsReqParams->tspec[i].meanDataRate;
7487 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7488 pAggrAddTsReqParams->tspec[i].peakDataRate;
7489 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7490 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7491 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7492 pAggrAddTsReqParams->tspec[i].delayBound;
7493 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7494 pAggrAddTsReqParams->tspec[i].minPhyRate;
7495 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7496 pAggrAddTsReqParams->tspec[i].surplusBw;
7497 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7498 pAggrAddTsReqParams->tspec[i].mediumTime;
7499 }
7500
7501 /* TODO: tAggrAddTsParams doesn't have the following fields */
7502#if 0
7503 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7504 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7505 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7506 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7507#endif
7508 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7509
7510 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007511 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007512 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007513 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7514
7515 pWdaParams->pWdaContext = pWDA;
7516
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007518 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7519
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 if(IS_WDI_STATUS_FAILURE(status))
7521 {
7522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7523 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7525 vos_mem_free(pWdaParams);
7526
7527 /* send the failure response back to PE*/
7528 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7529 {
7530 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7531 }
7532
7533 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7534 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007536 return CONVERT_WDI2VOS_STATUS(status) ;
7537}
7538#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007539/*
Mihir Shetea4306052014-03-25 00:02:54 +05307540 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 * send Enter IMPS RSP back to PE
7542 */
Mihir Shetea4306052014-03-25 00:02:54 +05307543void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007544{
Mihir Shetea4306052014-03-25 00:02:54 +05307545 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7546 tWDA_CbContext *pWDA;
7547
Jeff Johnson295189b2012-06-20 16:38:30 -07007548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307549 "<------ %s status=%d" ,__func__,status);
7550 if(NULL == pWdaParams)
7551 {
7552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7553 "%s: pWdaParams received NULL", __func__);
7554 VOS_ASSERT(0);
7555 return;
7556 }
7557
7558 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7559
7560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7561 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007562 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 return ;
7564}
Mihir Shetea4306052014-03-25 00:02:54 +05307565
7566
7567/*
7568 * FUNCTION: WDA_EnterImpsReqCallback
7569 * Free memory and send Enter IMPS RSP back to PE.
7570 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7571 */
7572void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7573{
7574 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7575 tWDA_CbContext *pWDA;
7576
7577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7578 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7579
7580 if(NULL == pWdaParams)
7581 {
7582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7583 "%s: pWdaParams received NULL", __func__);
7584 VOS_ASSERT(0);
7585 return;
7586 }
7587
7588 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7589
7590 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7591 {
7592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7593 vos_mem_free(pWdaParams);
7594 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7595 CONVERT_WDI2SIR_STATUS(wdiStatus));
7596 }
7597
7598 return;
7599}
Jeff Johnson295189b2012-06-20 16:38:30 -07007600/*
7601 * FUNCTION: WDA_ProcessEnterImpsReq
7602 * Request to WDI to Enter IMPS power state.
7603 */
7604VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7605{
7606 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307607 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7608 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007610 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307611
7612
7613 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7614 if (NULL == wdiEnterImpsReqParams)
7615 {
7616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7617 "%s: VOS MEM Alloc Failure", __func__);
7618 VOS_ASSERT(0);
7619 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7620 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7621 return VOS_STATUS_E_NOMEM;
7622 }
7623
7624 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7625 if (NULL == pWdaParams)
7626 {
7627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7628 "%s: VOS MEM Alloc Failure", __func__);
7629 VOS_ASSERT(0);
7630 vos_mem_free(wdiEnterImpsReqParams);
7631 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
7632 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7633 return VOS_STATUS_E_NOMEM;
7634 }
7635
7636 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
7637 wdiEnterImpsReqParams->pUserData = pWdaParams;
7638
7639 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
7640 pWdaParams->wdaMsgParam = NULL;
7641 pWdaParams->pWdaContext = pWDA;
7642
7643 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
7644 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
7645 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007646 if(IS_WDI_STATUS_FAILURE(status))
7647 {
7648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7649 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05307650 vos_mem_free(wdiEnterImpsReqParams);
7651 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007652 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007654 return CONVERT_WDI2VOS_STATUS(status) ;
7655}
Jeff Johnson295189b2012-06-20 16:38:30 -07007656/*
7657 * FUNCTION: WDA_ExitImpsReqCallback
7658 * send Exit IMPS RSP back to PE
7659 */
7660void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7661{
7662 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007664 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007665 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007666 return ;
7667}
Jeff Johnson295189b2012-06-20 16:38:30 -07007668/*
7669 * FUNCTION: WDA_ProcessExitImpsReq
7670 * Request to WDI to Exit IMPS power state.
7671 */
7672VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7673{
7674 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007676 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 if(IS_WDI_STATUS_FAILURE(status))
7679 {
7680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7681 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007682 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007684 return CONVERT_WDI2VOS_STATUS(status) ;
7685}
Jeff Johnson295189b2012-06-20 16:38:30 -07007686/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007687 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007688 * send Enter BMPS RSP back to PE
7689 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007690void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007691{
7692 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7693 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007694 tEnterBmpsParams *pEnterBmpsRspParams;
7695
Jeff Johnson295189b2012-06-20 16:38:30 -07007696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007697 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007698 if(NULL == pWdaParams)
7699 {
7700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007701 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007702 VOS_ASSERT(0) ;
7703 return ;
7704 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007705
7706 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7707 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7708
7709 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007710 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007711
7712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007714 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7715
Jeff Johnson295189b2012-06-20 16:38:30 -07007716 return ;
7717}
Jeff Johnson295189b2012-06-20 16:38:30 -07007718/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007719 * FUNCTION: WDA_EnterBmpsReqCallback
7720 * Free memory and send Enter BMPS RSP back to PE.
7721 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7722 */
7723void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7724{
7725 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7726 tWDA_CbContext *pWDA;
7727 tEnterBmpsParams *pEnterBmpsRspParams;
7728
7729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7730 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7731
7732 if(NULL == pWdaParams)
7733 {
7734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7735 "%s: pWdaParams received NULL", __func__);
7736 VOS_ASSERT(0);
7737 return;
7738 }
7739
7740 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7741 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7742 pEnterBmpsRspParams->status = wdiStatus;
7743
7744 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7745 {
7746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7747 vos_mem_free(pWdaParams);
7748 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7749 }
7750
7751 return;
7752}
7753/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007754 * FUNCTION: WDA_ProcessEnterBmpsReq
7755 * Request to WDI to Enter BMPS power state.
7756 */
7757VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7758 tEnterBmpsParams *pEnterBmpsReqParams)
7759{
7760 WDI_Status status = WDI_STATUS_SUCCESS;
7761 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7762 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007764 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007765 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7766 {
7767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007768 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007769 VOS_ASSERT(0);
7770 return VOS_STATUS_E_FAILURE;
7771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007772 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7773 if (NULL == wdiEnterBmpsReqParams)
7774 {
7775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007776 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007778 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7779 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 return VOS_STATUS_E_NOMEM;
7781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007782 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7783 if (NULL == pWdaParams)
7784 {
7785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 VOS_ASSERT(0);
7788 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007789 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7790 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 return VOS_STATUS_E_NOMEM;
7792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7794 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7795 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7796 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007797 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07007798 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7799 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7800 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007801 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7802 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007803
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 /* Store param pointer as passed in by caller */
7805 /* store Params pass it to WDI */
7806 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007807 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007810 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007811 if (IS_WDI_STATUS_FAILURE(status))
7812 {
7813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7814 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7815 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007816 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007818 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007820 return CONVERT_WDI2VOS_STATUS(status);
7821}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007822
7823
7824static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7825 WDI_Status wdiStatus,
7826 tExitBmpsParams *pExitBmpsReqParams)
7827{
7828 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7829
7830 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7831}
7832
7833
Jeff Johnson295189b2012-06-20 16:38:30 -07007834/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007835 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007836 * send Exit BMPS RSP back to PE
7837 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007838void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007839{
7840 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7841 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007842 tExitBmpsParams *pExitBmpsRspParams;
7843
Jeff Johnson295189b2012-06-20 16:38:30 -07007844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007845 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 if(NULL == pWdaParams)
7847 {
7848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007849 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007850 VOS_ASSERT(0) ;
7851 return ;
7852 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007853
7854 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7855 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7856
7857 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007858 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007859
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7861 vos_mem_free(pWdaParams) ;
7862
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007863 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007864 return ;
7865}
Jeff Johnson295189b2012-06-20 16:38:30 -07007866/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007867 * FUNCTION: WDA_ExitBmpsReqCallback
7868 * Free memory and send Exit BMPS RSP back to PE.
7869 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7870 */
7871void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7872{
7873 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7874 tWDA_CbContext *pWDA;
7875 tExitBmpsParams *pExitBmpsRspParams;
7876
7877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7878 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7879
7880 if(NULL == pWdaParams)
7881 {
7882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7883 "%s: pWdaParams received NULL", __func__);
7884 VOS_ASSERT(0);
7885 return;
7886 }
7887
7888 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7889 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7890 pExitBmpsRspParams->status = wdiStatus;
7891
7892 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7893 {
7894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7895 vos_mem_free(pWdaParams);
7896 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7897 }
7898
7899 return;
7900}
7901/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 * FUNCTION: WDA_ProcessExitBmpsReq
7903 * Request to WDI to Exit BMPS power state.
7904 */
7905VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7906 tExitBmpsParams *pExitBmpsReqParams)
7907{
7908 WDI_Status status = WDI_STATUS_SUCCESS ;
7909 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7910 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7911 sizeof(WDI_ExitBmpsReqParamsType)) ;
7912 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007914 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007915 if(NULL == wdiExitBmpsReqParams)
7916 {
7917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007918 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007920 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007921 return VOS_STATUS_E_NOMEM;
7922 }
7923 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7924 if(NULL == pWdaParams)
7925 {
7926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 VOS_ASSERT(0);
7929 vos_mem_free(wdiExitBmpsReqParams);
7930 return VOS_STATUS_E_NOMEM;
7931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007933
7934 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7935
Yue Ma7f44bbe2013-04-12 11:47:39 -07007936 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7937 wdiExitBmpsReqParams->pUserData = pWdaParams;
7938
Jeff Johnson295189b2012-06-20 16:38:30 -07007939 /* Store param pointer as passed in by caller */
7940 /* store Params pass it to WDI */
7941 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7942 pWdaParams->pWdaContext = pWDA;
7943 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007944 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007945 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007946 if(IS_WDI_STATUS_FAILURE(status))
7947 {
7948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7949 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7951 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007952 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 return CONVERT_WDI2VOS_STATUS(status) ;
7955}
Jeff Johnson295189b2012-06-20 16:38:30 -07007956/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007957 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007958 * send Enter UAPSD RSP back to PE
7959 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007960void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007961{
7962 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7963 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007964 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007966 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007967 if(NULL == pWdaParams)
7968 {
7969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007970 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 VOS_ASSERT(0) ;
7972 return ;
7973 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007974
7975 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7976 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7977
7978 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007979 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007980
Jeff Johnson295189b2012-06-20 16:38:30 -07007981 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7982 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007983 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 return ;
7985}
Jeff Johnson295189b2012-06-20 16:38:30 -07007986/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007987 * FUNCTION: WDA_EnterUapsdReqCallback
7988 * Free memory and send Enter UAPSD RSP back to PE.
7989 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7990 */
7991void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7992{
7993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7994 tWDA_CbContext *pWDA;
7995 tUapsdParams *pEnterUapsdRsqParams;
7996
7997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7998 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7999
8000 if(NULL == pWdaParams)
8001 {
8002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8003 "%s: pWdaParams received NULL", __func__);
8004 VOS_ASSERT(0);
8005 return;
8006 }
8007
8008 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8009 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8010 pEnterUapsdRsqParams->status = wdiStatus;
8011
8012 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8013 {
8014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8015 vos_mem_free(pWdaParams);
8016 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8017 }
8018
8019 return;
8020}
8021/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008022 * FUNCTION: WDA_ProcessEnterUapsdReq
8023 * Request to WDI to Enter UAPSD power state.
8024 */
8025VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8026 tUapsdParams *pEnterUapsdReqParams)
8027{
8028 WDI_Status status = WDI_STATUS_SUCCESS ;
8029 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8030 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8031 sizeof(WDI_EnterUapsdReqParamsType)) ;
8032 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 if(NULL == wdiEnterUapsdReqParams)
8036 {
8037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 VOS_ASSERT(0);
8040 return VOS_STATUS_E_NOMEM;
8041 }
8042 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8043 if(NULL == pWdaParams)
8044 {
8045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008047 VOS_ASSERT(0);
8048 vos_mem_free(wdiEnterUapsdReqParams);
8049 return VOS_STATUS_E_NOMEM;
8050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008051 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8052 pEnterUapsdReqParams->beDeliveryEnabled;
8053 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8054 pEnterUapsdReqParams->beTriggerEnabled;
8055 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8056 pEnterUapsdReqParams->bkDeliveryEnabled;
8057 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8058 pEnterUapsdReqParams->bkTriggerEnabled;
8059 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8060 pEnterUapsdReqParams->viDeliveryEnabled;
8061 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8062 pEnterUapsdReqParams->viTriggerEnabled;
8063 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8064 pEnterUapsdReqParams->voDeliveryEnabled;
8065 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8066 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008067 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008068
Yue Ma7f44bbe2013-04-12 11:47:39 -07008069 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8070 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008071
Jeff Johnson295189b2012-06-20 16:38:30 -07008072 /* Store param pointer as passed in by caller */
8073 /* store Params pass it to WDI */
8074 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8075 pWdaParams->pWdaContext = pWDA;
8076 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008077 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008078 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 if(IS_WDI_STATUS_FAILURE(status))
8080 {
8081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8082 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8083 vos_mem_free(pWdaParams->wdaMsgParam) ;
8084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8085 vos_mem_free(pWdaParams) ;
8086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 return CONVERT_WDI2VOS_STATUS(status) ;
8088}
Jeff Johnson295189b2012-06-20 16:38:30 -07008089/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008090 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008091 * send Exit UAPSD RSP back to PE
8092 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008093void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008094{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008095
8096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8097 tWDA_CbContext *pWDA;
8098 tExitUapsdParams *pExitUapsdRspParams;
8099
Jeff Johnson295189b2012-06-20 16:38:30 -07008100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008101 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008102 if(NULL == pWdaParams)
8103 {
8104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008105 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008106 VOS_ASSERT(0);
8107 return;
8108 }
8109
8110 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8111 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8112
8113 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008114 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008115
8116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8117 vos_mem_free(pWdaParams) ;
8118
8119 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008120 return ;
8121}
Jeff Johnson295189b2012-06-20 16:38:30 -07008122/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008123 * FUNCTION: WDA_ExitUapsdReqCallback
8124 * Free memory and send Exit UAPSD RSP back to PE.
8125 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8126 */
8127void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8128{
8129 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8130 tWDA_CbContext *pWDA;
8131 tExitUapsdParams *pExitUapsdRspParams;
8132
8133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8134 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8135
8136 if(NULL == pWdaParams)
8137 {
8138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8139 "%s: pWdaParams received NULL", __func__);
8140 VOS_ASSERT(0);
8141 return;
8142 }
8143
8144 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8145 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8146 pExitUapsdRspParams->status = wdiStatus;
8147
8148 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8149 {
8150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8151 vos_mem_free(pWdaParams);
8152 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8153 }
8154
8155 return;
8156}
8157/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008158 * FUNCTION: WDA_ProcessExitUapsdReq
8159 * Request to WDI to Exit UAPSD power state.
8160 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008161VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8162 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008163{
8164 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008165 tWDA_ReqParams *pWdaParams ;
8166 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8167 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8168 sizeof(WDI_ExitUapsdReqParamsType)) ;
8169
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008171 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008172
8173 if(NULL == wdiExitUapsdReqParams)
8174 {
8175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008176 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008177 VOS_ASSERT(0);
8178 return VOS_STATUS_E_NOMEM;
8179 }
8180 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8181 if(NULL == pWdaParams)
8182 {
8183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008184 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008185 VOS_ASSERT(0);
8186 vos_mem_free(wdiExitUapsdReqParams);
8187 return VOS_STATUS_E_NOMEM;
8188 }
8189
8190 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008191 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8192 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008193
8194 /* Store param pointer as passed in by caller */
8195 /* store Params pass it to WDI */
8196 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8197 pWdaParams->pWdaContext = pWDA;
8198 pWdaParams->wdaMsgParam = pExitUapsdParams;
8199
Yue Ma7f44bbe2013-04-12 11:47:39 -07008200 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 if(IS_WDI_STATUS_FAILURE(status))
8202 {
8203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8204 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008205 vos_mem_free(pWdaParams->wdaMsgParam) ;
8206 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8207 vos_mem_free(pWdaParams) ;
8208
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008210 return CONVERT_WDI2VOS_STATUS(status) ;
8211}
8212
Jeff Johnson295189b2012-06-20 16:38:30 -07008213/*
8214 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8215 *
8216 */
8217void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8218{
8219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008221 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008222 if(NULL == pWdaParams)
8223 {
8224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008225 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008226 VOS_ASSERT(0) ;
8227 return ;
8228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008229 if( pWdaParams != NULL )
8230 {
8231 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8232 {
8233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8234 }
8235 if( pWdaParams->wdaMsgParam != NULL )
8236 {
8237 vos_mem_free(pWdaParams->wdaMsgParam) ;
8238 }
8239 vos_mem_free(pWdaParams) ;
8240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 return ;
8242}
Jeff Johnson295189b2012-06-20 16:38:30 -07008243/*
8244 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8245 * Request to WDI to set the power save params at start.
8246 */
8247VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8248 tSirPowerSaveCfg *pPowerSaveCfg)
8249{
8250 WDI_Status status = WDI_STATUS_SUCCESS ;
8251 tHalCfg *tlvStruct = NULL ;
8252 tANI_U8 *tlvStructStart = NULL ;
8253 v_PVOID_t *configParam;
8254 tANI_U32 configParamSize;
8255 tANI_U32 *configDataValue;
8256 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8257 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008259 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008260 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8261 {
8262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008263 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008264 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008265 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008266 return VOS_STATUS_E_FAILURE;
8267 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008268 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8269 if (NULL == wdiPowerSaveCfg)
8270 {
8271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008273 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008274 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 return VOS_STATUS_E_NOMEM;
8276 }
8277 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8278 if(NULL == pWdaParams)
8279 {
8280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008281 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 VOS_ASSERT(0);
8283 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008284 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008285 return VOS_STATUS_E_NOMEM;
8286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8288 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008289 if(NULL == configParam)
8290 {
8291 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008292 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008293 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008294 vos_mem_free(pWdaParams);
8295 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008296 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008297 return VOS_STATUS_E_NOMEM;
8298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008299 vos_mem_set(configParam, configParamSize, 0);
8300 wdiPowerSaveCfg->pConfigBuffer = configParam;
8301 tlvStruct = (tHalCfg *)configParam;
8302 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8304 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8305 tlvStruct->length = sizeof(tANI_U32);
8306 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8307 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8309 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8311 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8312 tlvStruct->length = sizeof(tANI_U32);
8313 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8314 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008315 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8316 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8318 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8319 tlvStruct->length = sizeof(tANI_U32);
8320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8321 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8323 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8325 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8326 tlvStruct->length = sizeof(tANI_U32);
8327 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8328 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8330 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8332 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8333 tlvStruct->length = sizeof(tANI_U32);
8334 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8335 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8337 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008338 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8339 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8340 tlvStruct->length = sizeof(tANI_U32);
8341 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8342 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8344 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8346 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8347 tlvStruct->length = sizeof(tANI_U32);
8348 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8349 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008350 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8351 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8353 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8354 tlvStruct->length = sizeof(tANI_U32);
8355 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8356 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8357 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8358 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8360 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8361 tlvStruct->length = sizeof(tANI_U32);
8362 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8363 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8364 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8365 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008366 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8367 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8368 tlvStruct->length = sizeof(tANI_U32);
8369 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8370 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8372 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8374 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8375 tlvStruct->length = sizeof(tANI_U32);
8376 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8377 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8379 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008380 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008381 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008382 /* store Params pass it to WDI */
8383 pWdaParams->wdaMsgParam = configParam;
8384 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8385 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008386 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8387 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008388 if(IS_WDI_STATUS_FAILURE(status))
8389 {
8390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8391 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8392 vos_mem_free(pWdaParams->wdaMsgParam);
8393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8394 vos_mem_free(pWdaParams);
8395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 return CONVERT_WDI2VOS_STATUS(status);
8398}
Jeff Johnson295189b2012-06-20 16:38:30 -07008399/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008400 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 *
8402 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008403void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008404{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008405 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8406
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008408 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008409
8410 if(NULL == pWdaParams)
8411 {
8412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8413 "%s: pWdaParams received NULL", __func__);
8414 VOS_ASSERT(0);
8415 return ;
8416 }
8417
8418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 vos_mem_free(pWdaParams);
8420
Jeff Johnson295189b2012-06-20 16:38:30 -07008421 return ;
8422}
Jeff Johnson295189b2012-06-20 16:38:30 -07008423/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008424 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8425 * Free memory.
8426 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8427 */
8428void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8429{
8430 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8431
8432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8433 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8434
8435 if(NULL == pWdaParams)
8436 {
8437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8438 "%s: pWdaParams received NULL", __func__);
8439 VOS_ASSERT(0);
8440 return;
8441 }
8442
8443 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8444 {
8445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8446 vos_mem_free(pWdaParams);
8447 }
8448
8449 return;
8450}
8451/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 * FUNCTION: WDA_SetUapsdAcParamsReq
8453 * Request to WDI to set the UAPSD params for an ac (sta mode).
8454 */
8455VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8456 tUapsdInfo *pUapsdInfo)
8457{
8458 WDI_Status status = WDI_STATUS_SUCCESS;
8459 tWDA_CbContext *pWDA = NULL ;
8460 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8461 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8462 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8463 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008465 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008466 if(NULL == wdiUapsdParams)
8467 {
8468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008470 VOS_ASSERT(0);
8471 return VOS_STATUS_E_NOMEM;
8472 }
8473 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8474 if(NULL == pWdaParams)
8475 {
8476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008478 VOS_ASSERT(0);
8479 vos_mem_free(wdiUapsdParams);
8480 return VOS_STATUS_E_NOMEM;
8481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8483 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8484 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8485 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8486 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8487 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008488 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8489 wdiUapsdParams->pUserData = pWdaParams;
8490
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008492 pWdaParams->pWdaContext = pWDA;
8493 /* Store param pointer as passed in by caller */
8494 pWdaParams->wdaMsgParam = pUapsdInfo;
8495 /* store Params pass it to WDI */
8496 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008497 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008498 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 if(IS_WDI_STATUS_FAILURE(status))
8501 {
8502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8503 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8505 vos_mem_free(pWdaParams);
8506 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8508 return VOS_STATUS_SUCCESS;
8509 else
8510 return VOS_STATUS_E_FAILURE;
8511
Jeff Johnson295189b2012-06-20 16:38:30 -07008512}
8513/*
8514 * FUNCTION: WDA_ClearUapsdAcParamsReq
8515 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8516 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8517 * and again enter the UPASD with the modified params. Hence the disable
8518 * function was kept empty.
8519 *
8520 */
8521VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8522{
8523 /* do nothing */
8524 return VOS_STATUS_SUCCESS;
8525}
Jeff Johnson295189b2012-06-20 16:38:30 -07008526/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008527 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008528 *
8529 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008530void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008531{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008532 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8533
Jeff Johnson295189b2012-06-20 16:38:30 -07008534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008535 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008536
8537 if(NULL == pWdaParams)
8538 {
8539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008540 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008541 VOS_ASSERT(0) ;
8542 return ;
8543 }
8544
8545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8546 vos_mem_free(pWdaParams->wdaMsgParam);
8547 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008548
Jeff Johnson295189b2012-06-20 16:38:30 -07008549 //print a msg, nothing else to do
8550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008551 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008552 return ;
8553}
Jeff Johnson295189b2012-06-20 16:38:30 -07008554/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008555 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8556 * Free memory.
8557 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8558 */
8559void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8560{
8561 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8562
8563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8564 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8565
8566 if(NULL == pWdaParams)
8567 {
8568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8569 "%s: pWdaParams received NULL", __func__);
8570 VOS_ASSERT(0);
8571 return;
8572 }
8573
8574 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8575 {
8576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8577 vos_mem_free(pWdaParams->wdaMsgParam);
8578 vos_mem_free(pWdaParams);
8579 }
8580
8581 return;
8582}
8583/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008584 * FUNCTION: WDA_UpdateUapsdParamsReq
8585 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8586 */
8587VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8588 tUpdateUapsdParams* pUpdateUapsdInfo)
8589{
8590 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008591 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8593 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8594 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008595 tWDA_ReqParams *pWdaParams = NULL;
8596
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008598 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008599 if(NULL == wdiUpdateUapsdParams)
8600 {
8601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008602 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008603 VOS_ASSERT(0);
8604 return VOS_STATUS_E_NOMEM;
8605 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008606 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8607 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8608 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008609 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8610 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008611
8612 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8613 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008614 {
8615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008617 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008618 vos_mem_free(pUpdateUapsdInfo);
8619 vos_mem_free(wdiUpdateUapsdParams);
8620 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008621 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008623 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008624 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008625 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8626 pWdaParams->pWdaContext = pWDA;
8627
Jeff Johnson43971f52012-07-17 12:26:56 -07008628 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008629 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008630 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008631
Jeff Johnson43971f52012-07-17 12:26:56 -07008632 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 {
8634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8635 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008636 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8638 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008639 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008640 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008641 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008642}
Jeff Johnson295189b2012-06-20 16:38:30 -07008643/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008644 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008645 *
8646 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008647void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008648{
8649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008651 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008652 if(WDI_STATUS_SUCCESS != wdiStatus)
8653 {
8654 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008655 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008656 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008657 if(NULL == pWdaParams)
8658 {
8659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008660 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 VOS_ASSERT(0) ;
8662 return ;
8663 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8665 vos_mem_free(pWdaParams->wdaMsgParam);
8666 vos_mem_free(pWdaParams);
8667 return ;
8668}
Jeff Johnson295189b2012-06-20 16:38:30 -07008669/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008670 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8671 * Free memory.
8672 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8673 */
8674void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8675{
8676 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8677
8678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8679 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8680
8681 if(NULL == pWdaParams)
8682 {
8683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8684 "%s: pWdaParams received NULL", __func__);
8685 VOS_ASSERT(0);
8686 return;
8687 }
8688
8689 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8690 {
8691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8692 vos_mem_free(pWdaParams->wdaMsgParam);
8693 vos_mem_free(pWdaParams);
8694 }
8695
8696 return;
8697}
8698/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008699 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8700 *
8701 */
8702VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8703 tSirWlanSetRxpFilters *pWlanSuspendParam)
8704{
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008706 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05308707 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008708 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05308709 /* Sanity Check
8710 * This is very unlikely and add assert to collect more info next time */
8711 if(NULL == pWlanSuspendParam)
8712 {
8713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8714 "%s: pWlanSuspendParam received NULL", __func__);
8715 VOS_ASSERT(0) ;
8716 return VOS_STATUS_E_FAULT;
8717 }
8718 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8719 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008721 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008722 if(NULL == wdiRxpFilterParams)
8723 {
8724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 VOS_ASSERT(0);
8727 vos_mem_free(pWlanSuspendParam);
8728 return VOS_STATUS_E_NOMEM;
8729 }
8730 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8731 if(NULL == pWdaParams)
8732 {
8733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 VOS_ASSERT(0);
8736 vos_mem_free(wdiRxpFilterParams);
8737 vos_mem_free(pWlanSuspendParam);
8738 return VOS_STATUS_E_NOMEM;
8739 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8741 pWlanSuspendParam->setMcstBcstFilter;
8742 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8743 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8744
Yue Ma7f44bbe2013-04-12 11:47:39 -07008745 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8746 wdiRxpFilterParams->pUserData = pWdaParams;
8747
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 pWdaParams->pWdaContext = pWDA;
8749 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8750 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008751 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008752 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008754 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 {
8756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8757 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008758 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8760 vos_mem_free(pWdaParams->wdaMsgParam);
8761 vos_mem_free(pWdaParams);
8762 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008763 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008764}
Jeff Johnson295189b2012-06-20 16:38:30 -07008765/*
8766 * FUNCTION: WDA_WdiIndicationCallback
8767 *
8768 */
8769void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8770 void* pUserData)
8771{
8772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008773 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008774}
Jeff Johnson295189b2012-06-20 16:38:30 -07008775/*
8776 * FUNCTION: WDA_ProcessWlanSuspendInd
8777 *
8778 */
8779VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8780 tSirWlanSuspendParam *pWlanSuspendParam)
8781{
8782 WDI_Status wdiStatus;
8783 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008785 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008786 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8787 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8788 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8789 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008791 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8792 if(WDI_STATUS_PENDING == wdiStatus)
8793 {
8794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008795 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 }
8797 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8798 {
8799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008800 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008802 vos_mem_free(pWlanSuspendParam);
8803 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8804}
8805
Chet Lanctot186b5732013-03-18 10:26:30 -07008806#ifdef WLAN_FEATURE_11W
8807/*
8808 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8809 *
8810 */
8811VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8812 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8813{
8814 WDI_Status wdiStatus;
8815 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8817 "------> %s ", __func__);
8818
8819 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8820 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8821 sizeof(tSirMacAddr));
8822
8823 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8824 wdiExclUnencryptParams.pUserData = pWDA;
8825
8826 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8827 if(WDI_STATUS_PENDING == wdiStatus)
8828 {
8829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8830 "Pending received for %s:%d ", __func__, __LINE__ );
8831 }
8832 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8833 {
8834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8835 "Failure in %s:%d ", __func__, __LINE__ );
8836 }
8837 vos_mem_free(pExclUnencryptParam);
8838 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8839}
8840#endif
8841
Jeff Johnson295189b2012-06-20 16:38:30 -07008842/*
8843 * FUNCTION: WDA_ProcessWlanResumeCallback
8844 *
8845 */
8846void WDA_ProcessWlanResumeCallback(
8847 WDI_SuspendResumeRspParamsType *resumeRspParams,
8848 void* pUserData)
8849{
8850 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008852 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008853 if(NULL == pWdaParams)
8854 {
8855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008856 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008857 VOS_ASSERT(0) ;
8858 return ;
8859 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008860 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8861 {
8862 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008863 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8866 vos_mem_free(pWdaParams->wdaMsgParam);
8867 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 return ;
8869}
Jeff Johnson295189b2012-06-20 16:38:30 -07008870/*
8871 * FUNCTION: WDA_ProcessWlanResumeReq
8872 *
8873 */
8874VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8875 tSirWlanResumeParam *pWlanResumeParam)
8876{
8877 WDI_Status wdiStatus;
8878 WDI_ResumeParamsType *wdiResumeParams =
8879 (WDI_ResumeParamsType *)vos_mem_malloc(
8880 sizeof(WDI_ResumeParamsType) ) ;
8881 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008883 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008884 if(NULL == wdiResumeParams)
8885 {
8886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008887 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008888 VOS_ASSERT(0);
8889 return VOS_STATUS_E_NOMEM;
8890 }
8891 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8892 if(NULL == pWdaParams)
8893 {
8894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008896 VOS_ASSERT(0);
8897 vos_mem_free(wdiResumeParams);
8898 return VOS_STATUS_E_NOMEM;
8899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008900 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8901 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008903 wdiResumeParams->wdiReqStatusCB = NULL;
8904 pWdaParams->wdaMsgParam = pWlanResumeParam;
8905 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8906 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008907 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8908 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8909 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008910 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8911 {
8912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8913 "Failure in Host Resume REQ WDI API, free all the memory " );
8914 VOS_ASSERT(0);
8915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8916 vos_mem_free(pWdaParams->wdaMsgParam);
8917 vos_mem_free(pWdaParams);
8918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8920}
8921
Jeff Johnson295189b2012-06-20 16:38:30 -07008922/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008923 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008924 *
8925 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008926void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008927{
8928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008930 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008931 if(NULL == pWdaParams)
8932 {
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008934 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008935 VOS_ASSERT(0) ;
8936 return ;
8937 }
8938
8939 vos_mem_free(pWdaParams->wdaMsgParam) ;
8940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8941 vos_mem_free(pWdaParams) ;
8942 /*
8943 * No respone required for SetBeaconFilter req so just free the request
8944 * param here
8945 */
8946
Jeff Johnson295189b2012-06-20 16:38:30 -07008947 return ;
8948}
Jeff Johnson295189b2012-06-20 16:38:30 -07008949/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008950 * FUNCTION: WDA_SetBeaconFilterReqCallback
8951 * Free memory.
8952 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8953 */
8954void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8955{
8956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8957
8958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8959 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8960
8961 if(NULL == pWdaParams)
8962 {
8963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8964 "%s: pWdaParams received NULL", __func__);
8965 VOS_ASSERT(0);
8966 return;
8967 }
8968
8969 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8970 {
8971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8972 vos_mem_free(pWdaParams->wdaMsgParam);
8973 vos_mem_free(pWdaParams);
8974 }
8975
8976 return;
8977}
8978/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008979 * FUNCTION: WDA_SetBeaconFilterReq
8980 * Request to WDI to send the beacon filtering related information.
8981 */
8982VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8983 tBeaconFilterMsg* pBeaconFilterInfo)
8984{
8985 WDI_Status status = WDI_STATUS_SUCCESS;
8986 tANI_U8 *dstPtr, *srcPtr;
8987 tANI_U8 filterLength;
8988 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8989 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8990 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8991 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008993 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 if(NULL == wdiBeaconFilterInfo)
8995 {
8996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 VOS_ASSERT(0);
8999 return VOS_STATUS_E_NOMEM;
9000 }
9001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9002 if(NULL == pWdaParams)
9003 {
9004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009006 VOS_ASSERT(0);
9007 vos_mem_free(wdiBeaconFilterInfo);
9008 return VOS_STATUS_E_NOMEM;
9009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9011 pBeaconFilterInfo->beaconInterval;
9012 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9013 pBeaconFilterInfo->capabilityInfo;
9014 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9015 pBeaconFilterInfo->capabilityMask;
9016 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009017
9018 //Fill the BssIdx
9019 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9020
Jeff Johnson295189b2012-06-20 16:38:30 -07009021 //Fill structure with info contained in the beaconFilterTable
9022 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9023 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9024 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9025 if(WDI_BEACON_FILTER_LEN < filterLength)
9026 {
9027 filterLength = WDI_BEACON_FILTER_LEN;
9028 }
9029 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009030 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9031 wdiBeaconFilterInfo->pUserData = pWdaParams;
9032
Jeff Johnson295189b2012-06-20 16:38:30 -07009033 /* Store param pointer as passed in by caller */
9034 /* store Params pass it to WDI */
9035 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9036 pWdaParams->pWdaContext = pWDA;
9037 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9038
Jeff Johnson295189b2012-06-20 16:38:30 -07009039 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009040 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009041 if(IS_WDI_STATUS_FAILURE(status))
9042 {
9043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9044 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9045 vos_mem_free(pWdaParams->wdaMsgParam) ;
9046 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9047 vos_mem_free(pWdaParams) ;
9048 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009049 return CONVERT_WDI2VOS_STATUS(status) ;
9050}
Jeff Johnson295189b2012-06-20 16:38:30 -07009051/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009052 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009053 *
9054 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009055void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009056{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009057 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9058
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009060 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009061
9062 if(NULL == pWdaParams)
9063 {
9064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009065 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009066 VOS_ASSERT(0) ;
9067 return ;
9068 }
9069
9070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9071 vos_mem_free(pWdaParams->wdaMsgParam);
9072 vos_mem_free(pWdaParams);
9073
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 //print a msg, nothing else to do
9075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009076 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009077 return ;
9078}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009079/*
9080 * FUNCTION: WDA_RemBeaconFilterReqCallback
9081 * Free memory.
9082 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9083 */
9084void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9085{
9086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9087
9088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9089 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9090
9091 if(NULL == pWdaParams)
9092 {
9093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9094 "%s: pWdaParams received NULL", __func__);
9095 VOS_ASSERT(0);
9096 return;
9097 }
9098
9099 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9100 {
9101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9102 vos_mem_free(pWdaParams->wdaMsgParam);
9103 vos_mem_free(pWdaParams);
9104 }
9105
9106 return;
9107}
Jeff Johnson295189b2012-06-20 16:38:30 -07009108 // TODO: PE does not have this feature for now implemented,
9109 // but the support for removing beacon filter exists between
9110 // HAL and FW. This function can be called whenever PE defines
9111 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009112/*
9113 * FUNCTION: WDA_RemBeaconFilterReq
9114 * Request to WDI to send the removal of beacon filtering related information.
9115 */
9116VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9117 tRemBeaconFilterMsg* pBeaconFilterInfo)
9118{
9119 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009120 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009121 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9122 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9123 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009124 tWDA_ReqParams *pWdaParams ;
9125
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009127 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009128 if(NULL == wdiBeaconFilterInfo)
9129 {
9130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009132 VOS_ASSERT(0);
9133 return VOS_STATUS_E_NOMEM;
9134 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009135 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9136 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009137 {
9138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009139 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009140 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009141 vos_mem_free(wdiBeaconFilterInfo);
9142 vos_mem_free(pBeaconFilterInfo);
9143 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009144 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009145
9146 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9147 pBeaconFilterInfo->ucIeCount;
9148 //Fill structure with info contained in the ucRemIeId
9149 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9150 pBeaconFilterInfo->ucRemIeId,
9151 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9152 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9153 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009154
9155 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009156 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009158 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9159
9160 pWdaParams->pWdaContext = pWDA;
9161
Jeff Johnson43971f52012-07-17 12:26:56 -07009162 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009163 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009164 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 {
9166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9167 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009168 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9170 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009171 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009172 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009173 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009174}
Jeff Johnson295189b2012-06-20 16:38:30 -07009175/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009176 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009177 *
9178 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009179void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009180{
9181 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009183 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 if(NULL == pWdaParams)
9185 {
9186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009187 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 VOS_ASSERT(0) ;
9189 return ;
9190 }
9191
9192 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9193 vos_mem_free(pWdaParams) ;
9194
Jeff Johnson295189b2012-06-20 16:38:30 -07009195 return ;
9196}
Jeff Johnson295189b2012-06-20 16:38:30 -07009197/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009198 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9199 * Free memory.
9200 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9201 */
9202void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9203{
9204 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9205
9206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9207 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9208
9209 if(NULL == pWdaParams)
9210 {
9211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9212 "%s: pWdaParams received NULL", __func__);
9213 VOS_ASSERT(0);
9214 return;
9215 }
9216
9217 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9218 {
9219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9220 vos_mem_free(pWdaParams);
9221 }
9222
9223 return;
9224}
9225/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009226 * FUNCTION: WDA_SetRSSIThresholdsReq
9227 * Request to WDI to set the RSSI thresholds (sta mode).
9228 */
9229VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9230{
9231 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009232 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009233 tWDA_CbContext *pWDA = NULL ;
9234 v_PVOID_t pVosContext = NULL;
9235 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9236 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9237 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9238 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009240 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009241 if(NULL == wdiRSSIThresholdsInfo)
9242 {
9243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009244 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009245 VOS_ASSERT(0);
9246 return VOS_STATUS_E_NOMEM;
9247 }
9248 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9249 if(NULL == pWdaParams)
9250 {
9251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009252 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009253 VOS_ASSERT(0);
9254 vos_mem_free(wdiRSSIThresholdsInfo);
9255 return VOS_STATUS_E_NOMEM;
9256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009257 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009258 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9259 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9260 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009261 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9262 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9263 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009264 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9265 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9266 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009267 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9268 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009269 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9270 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9271
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 /* Store param pointer as passed in by caller */
9273 /* store Params pass it to WDI */
9274 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9275 pWdaParams->pWdaContext = pWDA;
9276 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009277 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009278 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009279 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009280 {
9281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9282 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009283 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9285 vos_mem_free(pWdaParams) ;
9286 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009287 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009288
9289}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009290/*
Yue Madb90ac12013-04-04 13:39:13 -07009291 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009292 *
9293 */
Yue Madb90ac12013-04-04 13:39:13 -07009294void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009295{
9296 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9297
9298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009299 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009300 if(NULL == pWdaParams)
9301 {
9302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009303 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009304 VOS_ASSERT(0) ;
9305 return ;
9306 }
9307
9308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9309 vos_mem_free(pWdaParams->wdaMsgParam);
9310 vos_mem_free(pWdaParams) ;
9311
9312 //print a msg, nothing else to do
9313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009314 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009315 return ;
9316}
Jeff Johnson295189b2012-06-20 16:38:30 -07009317/*
Yue Madb90ac12013-04-04 13:39:13 -07009318 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009319 * Free memory.
9320 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009321 */
9322void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9323{
9324 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9325
9326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9327 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9328
9329 if(NULL == pWdaParams)
9330 {
9331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9332 "%s: Invalid pWdaParams pointer", __func__);
9333 VOS_ASSERT(0);
9334 return;
9335 }
9336
9337 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9338 {
9339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9340 vos_mem_free(pWdaParams->wdaMsgParam);
9341 vos_mem_free(pWdaParams);
9342 }
9343
9344 return;
9345}
9346/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009347 * FUNCTION: WDA_ProcessHostOffloadReq
9348 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9349 * to broadcast traffic (sta mode).
9350 */
9351VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9352 tSirHostOffloadReq *pHostOffloadParams)
9353{
9354 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009355 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009356 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9357 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9358 sizeof(WDI_HostOffloadReqParamsType)) ;
9359 tWDA_ReqParams *pWdaParams ;
9360
9361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009362 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009363
9364 if(NULL == wdiHostOffloadInfo)
9365 {
9366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009367 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009368 VOS_ASSERT(0);
9369 return VOS_STATUS_E_NOMEM;
9370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9372 if(NULL == pWdaParams)
9373 {
9374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009375 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009376 VOS_ASSERT(0);
9377 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009378 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 return VOS_STATUS_E_NOMEM;
9380 }
9381
9382 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9383 pHostOffloadParams->offloadType;
9384 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9385 pHostOffloadParams->enableOrDisable;
9386
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009387 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9388 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9389
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9391 {
9392 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9393 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9394 pHostOffloadParams->params.hostIpv4Addr,
9395 4);
9396 break;
9397 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9398 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9399 pHostOffloadParams->params.hostIpv6Addr,
9400 16);
9401 break;
9402 case SIR_IPV6_NS_OFFLOAD:
9403 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9404 pHostOffloadParams->params.hostIpv6Addr,
9405 16);
9406
9407#ifdef WLAN_NS_OFFLOAD
9408 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9409 {
9410 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9411 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9412 16);
9413 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9414 }
9415 else
9416 {
9417 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9418 }
9419
9420 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9421 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9422 16);
9423 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9424 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9425 6);
9426
9427 //Only two are supported so let's go through them without a loop
9428 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9429 {
9430 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9431 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9432 16);
9433 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9434 }
9435 else
9436 {
9437 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9438 }
9439
9440 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9441 {
9442 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9443 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9444 16);
9445 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9446 }
9447 else
9448 {
9449 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9450 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309451 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9452 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009453 break;
9454#endif //WLAN_NS_OFFLOAD
9455 default:
9456 {
9457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9458 "No Handling for Offload Type %x in WDA "
9459 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9460 //WDA_VOS_ASSERT(0) ;
9461 }
9462 }
Yue Madb90ac12013-04-04 13:39:13 -07009463 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9464 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009465
Jeff Johnson295189b2012-06-20 16:38:30 -07009466 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009467 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009468 /* store Params pass it to WDI */
9469 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9470 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009471
Jeff Johnson295189b2012-06-20 16:38:30 -07009472
Jeff Johnson43971f52012-07-17 12:26:56 -07009473 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009474 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009475
Jeff Johnson43971f52012-07-17 12:26:56 -07009476 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009477 {
9478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9479 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009480 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9482 vos_mem_free(pWdaParams->wdaMsgParam);
9483 vos_mem_free(pWdaParams) ;
9484 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009485 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009486
9487}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009488/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009489 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 *
9491 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009492void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009493{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9495
Jeff Johnson295189b2012-06-20 16:38:30 -07009496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009497 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009498
9499 if(NULL == pWdaParams)
9500 {
9501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009502 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009503 VOS_ASSERT(0) ;
9504 return ;
9505 }
9506
9507 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9508 vos_mem_free(pWdaParams->wdaMsgParam);
9509 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009510
Jeff Johnson295189b2012-06-20 16:38:30 -07009511 //print a msg, nothing else to do
9512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009513 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 return ;
9515}
Jeff Johnson295189b2012-06-20 16:38:30 -07009516/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009517 * FUNCTION: WDA_KeepAliveReqCallback
9518 * Free memory.
9519 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9520 */
9521void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9522{
9523 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9524
9525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9526 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9527
9528 if(NULL == pWdaParams)
9529 {
9530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9531 "%s: pWdaParams received NULL", __func__);
9532 VOS_ASSERT(0);
9533 return;
9534 }
9535
9536 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9537 {
9538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9539 vos_mem_free(pWdaParams->wdaMsgParam);
9540 vos_mem_free(pWdaParams);
9541 }
9542
9543 return;
9544}
9545/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009546 * FUNCTION: WDA_ProcessKeepAliveReq
9547 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9548 * wakeup due to broadcast traffic (sta mode).
9549 */
9550VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9551 tSirKeepAliveReq *pKeepAliveParams)
9552{
9553 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009554 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009555 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9556 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9557 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009558 tWDA_ReqParams *pWdaParams;
9559
Jeff Johnson295189b2012-06-20 16:38:30 -07009560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009561 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009562 if(NULL == wdiKeepAliveInfo)
9563 {
9564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009565 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009566 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009567 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009568 return VOS_STATUS_E_NOMEM;
9569 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009570
9571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9572 if(NULL == pWdaParams)
9573 {
9574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009575 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009576 VOS_ASSERT(0);
9577 vos_mem_free(wdiKeepAliveInfo);
9578 vos_mem_free(pKeepAliveParams);
9579 return VOS_STATUS_E_NOMEM;
9580 }
9581
Jeff Johnson295189b2012-06-20 16:38:30 -07009582 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9583 pKeepAliveParams->packetType;
9584 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9585 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009586
9587 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9588 pKeepAliveParams->bssId,
9589 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009590
9591 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9592 {
9593 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9594 pKeepAliveParams->hostIpv4Addr,
9595 SIR_IPV4_ADDR_LEN);
9596 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9597 pKeepAliveParams->destIpv4Addr,
9598 SIR_IPV4_ADDR_LEN);
9599 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9600 pKeepAliveParams->destMacAddr,
9601 SIR_MAC_ADDR_LEN);
9602 }
9603 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9604 {
9605 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9606 SIR_IPV4_ADDR_LEN,
9607 0);
9608 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9609 SIR_IPV4_ADDR_LEN,
9610 0);
9611 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9612 SIR_MAC_ADDR_LEN,
9613 0);
9614 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009615 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9616 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009617
Jeff Johnson295189b2012-06-20 16:38:30 -07009618 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009619 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009621 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9622 pWdaParams->pWdaContext = pWDA;
9623
Jeff Johnson295189b2012-06-20 16:38:30 -07009624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9625 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9626 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9627 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9628 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9630 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9631 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9632 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9633 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9635 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9636 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9637 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9638 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9639 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9640 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9641 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9643 "TimePeriod %d PacketType %d",
9644 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9645 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009646 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009647 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009648
Jeff Johnson43971f52012-07-17 12:26:56 -07009649 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 {
9651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9652 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009653 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9655 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009656 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009658 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009659
9660}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009661/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009662 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009663 *
9664 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009665void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009666 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9667 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009668{
9669 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009671 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009672 if(NULL == pWdaParams)
9673 {
9674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009675 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009676 VOS_ASSERT(0) ;
9677 return ;
9678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9680 vos_mem_free(pWdaParams->wdaMsgParam);
9681 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009682 return ;
9683}
Jeff Johnson295189b2012-06-20 16:38:30 -07009684/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009685 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9686 * Free memory.
9687 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9688 */
9689void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9690{
9691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9692
9693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9694 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9695
9696 if(NULL == pWdaParams)
9697 {
9698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9699 "%s: pWdaParams received NULL", __func__);
9700 VOS_ASSERT(0);
9701 return;
9702 }
9703
9704 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9705 {
9706 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9707 vos_mem_free(pWdaParams->wdaMsgParam);
9708 vos_mem_free(pWdaParams);
9709 }
9710
9711 return;
9712}
9713
9714/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9716 * Request to WDI to add WOWL Bcast pattern
9717 */
9718VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9719 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9720{
9721 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009722 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009723 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9724 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9725 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9726 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009728 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009729 if(NULL == wdiWowlAddBcPtrnInfo)
9730 {
9731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009733 VOS_ASSERT(0);
9734 return VOS_STATUS_E_NOMEM;
9735 }
9736 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9737 if(NULL == pWdaParams)
9738 {
9739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009740 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009741 VOS_ASSERT(0);
9742 vos_mem_free(wdiWowlAddBcPtrnInfo);
9743 return VOS_STATUS_E_NOMEM;
9744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009745 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9746 pWowlAddBcPtrnParams->ucPatternId;
9747 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9748 pWowlAddBcPtrnParams->ucPatternByteOffset;
9749 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9750 pWowlAddBcPtrnParams->ucPatternMaskSize;
9751 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9752 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009753 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9754 {
9755 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9756 pWowlAddBcPtrnParams->ucPattern,
9757 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9758 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9759 pWowlAddBcPtrnParams->ucPatternMask,
9760 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9761 }
9762 else
9763 {
9764 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9765 pWowlAddBcPtrnParams->ucPattern,
9766 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9767 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9768 pWowlAddBcPtrnParams->ucPatternMask,
9769 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9770
9771 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9772 pWowlAddBcPtrnParams->ucPatternExt,
9773 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9774 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9775 pWowlAddBcPtrnParams->ucPatternMaskExt,
9776 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9777 }
9778
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009779 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9780 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9781
Yue Ma7f44bbe2013-04-12 11:47:39 -07009782 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9783 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009784 /* Store param pointer as passed in by caller */
9785 /* store Params pass it to WDI */
9786 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9787 pWdaParams->pWdaContext = pWDA;
9788 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009789 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009790 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009791 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009792 {
9793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9794 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009795 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009796 vos_mem_free(pWdaParams->wdaMsgParam) ;
9797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9798 vos_mem_free(pWdaParams) ;
9799 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009800 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009801
9802}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009803/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009804 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009805 *
9806 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009807void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009808 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9809 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009810{
9811 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009813 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009814 if(NULL == pWdaParams)
9815 {
9816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009817 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009818 VOS_ASSERT(0) ;
9819 return ;
9820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9822 vos_mem_free(pWdaParams->wdaMsgParam);
9823 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009824 return ;
9825}
Jeff Johnson295189b2012-06-20 16:38:30 -07009826/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009827 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9828 * Free memory.
9829 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9830 */
9831void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9832{
9833 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9834
9835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9836 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9837
9838 if(NULL == pWdaParams)
9839 {
9840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9841 "%s: pWdaParams received NULL", __func__);
9842 VOS_ASSERT(0);
9843 return;
9844 }
9845
9846 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9847 {
9848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9849 vos_mem_free(pWdaParams->wdaMsgParam);
9850 vos_mem_free(pWdaParams);
9851 }
9852
9853 return;
9854}
9855/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009856 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9857 * Request to WDI to delete WOWL Bcast pattern
9858 */
9859VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9860 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9861{
9862 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009863 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9865 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9866 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9867 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009869 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009870 if(NULL == wdiWowlDelBcPtrnInfo)
9871 {
9872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009874 VOS_ASSERT(0);
9875 return VOS_STATUS_E_NOMEM;
9876 }
9877 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9878 if(NULL == pWdaParams)
9879 {
9880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009881 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009882 VOS_ASSERT(0);
9883 vos_mem_free(wdiWowlDelBcPtrnInfo);
9884 return VOS_STATUS_E_NOMEM;
9885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009886 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9887 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009888
9889 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9890 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9891
Yue Ma7f44bbe2013-04-12 11:47:39 -07009892 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9893 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009894 /* Store param pointer as passed in by caller */
9895 /* store Params pass it to WDI */
9896 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9897 pWdaParams->pWdaContext = pWDA;
9898 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009899 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009900 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009901 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009902 {
9903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9904 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009905 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009906 vos_mem_free(pWdaParams->wdaMsgParam) ;
9907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9908 vos_mem_free(pWdaParams) ;
9909 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009910 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009911
9912}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009913/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009914 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 *
9916 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009917void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009918{
9919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9920 tWDA_CbContext *pWDA;
9921 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009923 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009924 if(NULL == pWdaParams)
9925 {
9926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009927 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009928 VOS_ASSERT(0) ;
9929 return ;
9930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009931 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9932 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9933
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009934 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9935
Jeff Johnson295189b2012-06-20 16:38:30 -07009936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9937 vos_mem_free(pWdaParams) ;
9938
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009939 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009940 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009941 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009942 return ;
9943}
Jeff Johnson295189b2012-06-20 16:38:30 -07009944/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009945 * FUNCTION: WDA_WowlEnterReqCallback
9946 * Free memory and send WOWL Enter RSP back to PE.
9947 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9948 */
9949void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9950{
9951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9952 tWDA_CbContext *pWDA;
9953 tSirHalWowlEnterParams *pWowlEnterParams;
9954
9955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9956 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9957
9958 if(NULL == pWdaParams)
9959 {
9960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9961 "%s: pWdaParams received NULL", __func__);
9962 VOS_ASSERT(0);
9963 return;
9964 }
9965
9966 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9967 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9968 pWowlEnterParams->status = wdiStatus;
9969
9970 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9971 {
9972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9973 vos_mem_free(pWdaParams);
9974 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9975 }
9976
9977 return;
9978}
9979/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009980 * FUNCTION: WDA_ProcessWowlEnterReq
9981 * Request to WDI to enter WOWL
9982 */
9983VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9984 tSirHalWowlEnterParams *pWowlEnterParams)
9985{
9986 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009987 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009988 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9989 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9990 sizeof(WDI_WowlEnterReqParamsType)) ;
9991 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009993 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009994 if(NULL == wdiWowlEnterInfo)
9995 {
9996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009998 VOS_ASSERT(0);
9999 return VOS_STATUS_E_NOMEM;
10000 }
10001 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10002 if(NULL == pWdaParams)
10003 {
10004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010005 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010006 VOS_ASSERT(0);
10007 vos_mem_free(wdiWowlEnterInfo);
10008 return VOS_STATUS_E_NOMEM;
10009 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010010
10011 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10012
Jeff Johnson295189b2012-06-20 16:38:30 -070010013 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10014 pWowlEnterParams->magicPtrn,
10015 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10017 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10019 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10021 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10023 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10025 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10027 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10029 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010030 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10031 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010032#ifdef WLAN_WAKEUP_EVENTS
10033 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10034 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10035
10036 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10037 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10038
10039 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10040 pWowlEnterParams->ucWowNetScanOffloadMatch;
10041
10042 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10043 pWowlEnterParams->ucWowGTKRekeyError;
10044
10045 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10046 pWowlEnterParams->ucWoWBSSConnLoss;
10047#endif // WLAN_WAKEUP_EVENTS
10048
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010049 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10050 pWowlEnterParams->bssIdx;
10051
Yue Ma7f44bbe2013-04-12 11:47:39 -070010052 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10053 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010054 /* Store param pointer as passed in by caller */
10055 /* store Params pass it to WDI */
10056 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10057 pWdaParams->pWdaContext = pWDA;
10058 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010059 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010060 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010061 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010062 {
10063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10064 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010065 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010066 vos_mem_free(pWdaParams->wdaMsgParam) ;
10067 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10068 vos_mem_free(pWdaParams) ;
10069 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010070 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010071
10072}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010073/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010074 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010075 *
10076 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010077void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010078{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010079 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10080 tWDA_CbContext *pWDA;
10081 tSirHalWowlExitParams *pWowlExitParams;
10082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010083 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010084 if(NULL == pWdaParams)
10085 {
10086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010087 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010088 VOS_ASSERT(0) ;
10089 return ;
10090 }
10091 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10092 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10093
10094 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010095 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010096
10097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10098 vos_mem_free(pWdaParams) ;
10099
Jeff Johnson295189b2012-06-20 16:38:30 -070010100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010101 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010102 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010103 return ;
10104}
Jeff Johnson295189b2012-06-20 16:38:30 -070010105/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010106 * FUNCTION: WDA_WowlExitReqCallback
10107 * Free memory and send WOWL Exit RSP back to PE.
10108 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10109 */
10110void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10111{
10112 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10113 tWDA_CbContext *pWDA;
10114 tSirHalWowlExitParams *pWowlExitParams;
10115
10116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10117 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10118
10119 if(NULL == pWdaParams)
10120 {
10121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10122 "%s: pWdaParams received NULL", __func__);
10123 VOS_ASSERT(0);
10124 return;
10125 }
10126
10127 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10128 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10129 pWowlExitParams->status = wdiStatus;
10130
10131 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10132 {
10133 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10134 vos_mem_free(pWdaParams);
10135 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10136 }
10137
10138 return;
10139}
10140/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 * FUNCTION: WDA_ProcessWowlExitReq
10142 * Request to WDI to add WOWL Bcast pattern
10143 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010144VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10145 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010146{
10147 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010148 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010149 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10150 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10151 sizeof(WDI_WowlExitReqParamsType)) ;
10152 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010154 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010155 if(NULL == wdiWowlExitInfo)
10156 {
10157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010158 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010159 VOS_ASSERT(0);
10160 return VOS_STATUS_E_NOMEM;
10161 }
10162 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10163 if(NULL == pWdaParams)
10164 {
10165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010166 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010167 VOS_ASSERT(0);
10168 vos_mem_free(wdiWowlExitInfo);
10169 return VOS_STATUS_E_NOMEM;
10170 }
10171
10172 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10173 pWowlExitParams->bssIdx;
10174
Yue Ma7f44bbe2013-04-12 11:47:39 -070010175 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10176 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010177
10178 /* Store param pointer as passed in by caller */
10179 /* store Params pass it to WDI */
10180 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10181 pWdaParams->pWdaContext = pWDA;
10182 pWdaParams->wdaMsgParam = pWowlExitParams;
10183
10184 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010185 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010186
Jeff Johnson43971f52012-07-17 12:26:56 -070010187 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010188 {
10189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10190 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010191 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010192 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10193 vos_mem_free(pWdaParams->wdaMsgParam);
10194 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010195 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010196 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010197}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010198/*
10199 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10200 * Request to WDI to determine whether a given station is capable of
10201 * using HW-based frame translation
10202 */
10203v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10204 tANI_U8 staIdx)
10205{
10206 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10207}
Jeff Johnson295189b2012-06-20 16:38:30 -070010208/*
10209 * FUNCTION: WDA_NvDownloadReqCallback
10210 * send NV Download RSP back to PE
10211 */
10212void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10213 void* pUserData)
10214{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010215
10216 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10217 tWDA_CbContext *pWDA;
10218
Jeff Johnson295189b2012-06-20 16:38:30 -070010219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010220 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010221
10222 if(NULL == pWdaParams)
10223 {
10224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010225 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010226 VOS_ASSERT(0) ;
10227 return ;
10228 }
10229
10230 pWDA = pWdaParams->pWdaContext;
10231
Jeff Johnson295189b2012-06-20 16:38:30 -070010232 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10234 vos_mem_free(pWdaParams);
10235
Jeff Johnson295189b2012-06-20 16:38:30 -070010236 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010237 return ;
10238}
Jeff Johnson295189b2012-06-20 16:38:30 -070010239/*
10240 * FUNCTION: WDA_ProcessNvDownloadReq
10241 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10242 */
10243VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10244{
10245 /* Initialize the local Variables*/
10246 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10247 v_VOID_t *pNvBuffer=NULL;
10248 v_SIZE_t bufferSize = 0;
10249 WDI_Status status = WDI_STATUS_E_FAILURE;
10250 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010251 tWDA_ReqParams *pWdaParams ;
10252
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010254 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010255 if(NULL == pWDA)
10256 {
10257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010258 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010259 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010260 return VOS_STATUS_E_FAILURE;
10261 }
10262
10263 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010264 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10265
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10267 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 if(NULL == wdiNvDownloadReqParam)
10269 {
10270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010271 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 VOS_ASSERT(0);
10273 return VOS_STATUS_E_NOMEM;
10274 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 /* Copy Params to wdiNvDownloadReqParam*/
10276 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10277 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010278
10279 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10280 if(NULL == pWdaParams)
10281 {
10282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010283 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010284 VOS_ASSERT(0);
10285 vos_mem_free(wdiNvDownloadReqParam);
10286 return VOS_STATUS_E_NOMEM;
10287 }
10288
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010290 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10291 pWdaParams->wdaMsgParam = NULL;
10292 pWdaParams->pWdaContext = pWDA;
10293
10294
Jeff Johnson295189b2012-06-20 16:38:30 -070010295 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010296
Jeff Johnson295189b2012-06-20 16:38:30 -070010297 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010298 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10299
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 if(IS_WDI_STATUS_FAILURE(status))
10301 {
10302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10303 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10305 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010306 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010307 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010308}
10309/*
10310 * FUNCTION: WDA_FlushAcReqCallback
10311 * send Flush AC RSP back to TL
10312 */
10313void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10314{
10315 vos_msg_t wdaMsg = {0} ;
10316 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10317 tFlushACReq *pFlushACReqParams;
10318 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010320 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010321 if(NULL == pWdaParams)
10322 {
10323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010324 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010325 VOS_ASSERT(0) ;
10326 return ;
10327 }
10328
10329 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10330 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10331 if(NULL == pFlushACRspParams)
10332 {
10333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010334 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010335 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010336 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010337 return ;
10338 }
10339 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10340 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10341 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10342 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10343 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010344 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010345 vos_mem_free(pWdaParams->wdaMsgParam) ;
10346 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10347 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010348 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10349 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10350 // POST message to TL
10351 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10352
Jeff Johnson295189b2012-06-20 16:38:30 -070010353 return ;
10354}
Jeff Johnson295189b2012-06-20 16:38:30 -070010355/*
10356 * FUNCTION: WDA_ProcessFlushAcReq
10357 * Request to WDI to Update the DELBA REQ params.
10358 */
10359VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10360 tFlushACReq *pFlushAcReqParams)
10361{
10362 WDI_Status status = WDI_STATUS_SUCCESS ;
10363 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10364 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10365 sizeof(WDI_FlushAcReqParamsType)) ;
10366 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010367 if(NULL == wdiFlushAcReqParam)
10368 {
10369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010371 VOS_ASSERT(0);
10372 return VOS_STATUS_E_NOMEM;
10373 }
10374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10375 if(NULL == pWdaParams)
10376 {
10377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010378 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010379 VOS_ASSERT(0);
10380 vos_mem_free(wdiFlushAcReqParam);
10381 return VOS_STATUS_E_NOMEM;
10382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010384 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010385 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10386 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10387 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10388 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010389 /* Store Flush AC pointer, as this will be used for response */
10390 /* store Params pass it to WDI */
10391 pWdaParams->pWdaContext = pWDA;
10392 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10393 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10395 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010396 if(IS_WDI_STATUS_FAILURE(status))
10397 {
10398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10399 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10400 vos_mem_free(pWdaParams->wdaMsgParam) ;
10401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10402 vos_mem_free(pWdaParams) ;
10403 //TODO: respond to TL with failure
10404 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010406}
Jeff Johnson295189b2012-06-20 16:38:30 -070010407/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010408 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010409 *
10410 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010411void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010412{
10413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10414 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010415 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010416
10417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010418 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010419 if(NULL == pWdaParams)
10420 {
10421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010422 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010423 VOS_ASSERT(0) ;
10424 return ;
10425 }
10426 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10427 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10428 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10429 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10430 {
10431 pWDA->wdaAmpSessionOn = VOS_FALSE;
10432 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010433 vos_mem_free(pWdaParams->wdaMsgParam) ;
10434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10435 vos_mem_free(pWdaParams) ;
10436 /*
10437 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10438 * param here
10439 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010440 return ;
10441}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010442/*
10443 * FUNCTION: WDA_BtAmpEventReqCallback
10444 * Free memory.
10445 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10446 */
10447void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10448{
10449 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10450 tWDA_CbContext *pWDA;
10451 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010452
Yue Ma7f44bbe2013-04-12 11:47:39 -070010453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10454 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10455
10456 if(NULL == pWdaParams)
10457 {
10458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10459 "%s: pWdaParams received NULL", __func__);
10460 VOS_ASSERT(0);
10461 return;
10462 }
10463
10464 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10465 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10466
10467 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10468 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10469 {
10470 pWDA->wdaAmpSessionOn = VOS_FALSE;
10471 }
10472
10473 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10474 {
10475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10476 vos_mem_free(pWdaParams->wdaMsgParam);
10477 vos_mem_free(pWdaParams);
10478 }
10479
10480 return;
10481}
Jeff Johnson295189b2012-06-20 16:38:30 -070010482/*
10483 * FUNCTION: WDA_ProcessBtAmpEventReq
10484 * Request to WDI to Update with BT AMP events.
10485 */
10486VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10487 tSmeBtAmpEvent *pBtAmpEventParams)
10488{
10489 WDI_Status status = WDI_STATUS_SUCCESS ;
10490 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10491 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10492 sizeof(WDI_BtAmpEventParamsType)) ;
10493 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010495 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010496 if(NULL == wdiBtAmpEventParam)
10497 {
10498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010500 VOS_ASSERT(0);
10501 return VOS_STATUS_E_NOMEM;
10502 }
10503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10504 if(NULL == pWdaParams)
10505 {
10506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010508 VOS_ASSERT(0);
10509 vos_mem_free(wdiBtAmpEventParam);
10510 return VOS_STATUS_E_NOMEM;
10511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010512 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10513 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010514 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10515 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010516 /* Store BT AMP event pointer, as this will be used for response */
10517 /* store Params pass it to WDI */
10518 pWdaParams->pWdaContext = pWDA;
10519 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10520 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010521 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010522 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010523 if(IS_WDI_STATUS_FAILURE(status))
10524 {
10525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10526 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10527 vos_mem_free(pWdaParams->wdaMsgParam) ;
10528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10529 vos_mem_free(pWdaParams) ;
10530 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010531 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10532 {
10533 pWDA->wdaAmpSessionOn = VOS_TRUE;
10534 }
10535 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010536}
10537
Jeff Johnson295189b2012-06-20 16:38:30 -070010538/*
10539 * FUNCTION: WDA_FTMCommandReqCallback
10540 * Handle FTM CMD response came from HAL
10541 * Route responce to HDD FTM
10542 */
10543void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10544 void *usrData)
10545{
10546 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010547 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10548 {
10549 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010550 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 return;
10552 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010553 /* Release Current FTM Command Request */
10554 vos_mem_free(pWDA->wdaFTMCmdReq);
10555 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010556 /* Post FTM Responce to HDD FTM */
10557 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010558 return;
10559}
Jeff Johnson295189b2012-06-20 16:38:30 -070010560/*
10561 * FUNCTION: WDA_ProcessFTMCommand
10562 * Send FTM command to WDI
10563 */
10564VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10565 tPttMsgbuffer *pPTTFtmCmd)
10566{
10567 WDI_Status status = WDI_STATUS_SUCCESS;
10568 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010569 ftmCMDReq = (WDI_FTMCommandReqType *)
10570 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10571 if(NULL == ftmCMDReq)
10572 {
10573 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10574 "WDA FTM Command buffer alloc fail");
10575 return VOS_STATUS_E_NOMEM;
10576 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010577 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10578 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010579 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010580 /* Send command to WDI */
10581 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010582 return status;
10583}
Jeff Johnsone7245742012-09-05 17:12:55 -070010584#ifdef FEATURE_OEM_DATA_SUPPORT
10585/*
10586 * FUNCTION: WDA_StartOemDataReqCallback
10587 *
10588 */
10589void WDA_StartOemDataReqCallback(
10590 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10591 void* pUserData)
10592{
10593 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010594 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10595 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010596 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010597
Jeff Johnsone7245742012-09-05 17:12:55 -070010598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010599 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010600
10601 if(NULL == pWdaParams)
10602 {
10603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010604 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010605 VOS_ASSERT(0) ;
10606 return ;
10607 }
10608 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10609
Jeff Johnsone7245742012-09-05 17:12:55 -070010610 if(NULL == pWDA)
10611 {
10612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010613 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010614 VOS_ASSERT(0);
10615 return ;
10616 }
10617
10618 /*
10619 * Allocate memory for response params sent to PE
10620 */
10621 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10622
10623 // Check if memory is allocated for OemdataMeasRsp Params.
10624 if(NULL == pOemDataRspParams)
10625 {
10626 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10627 "OEM DATA WDA callback alloc fail");
10628 VOS_ASSERT(0) ;
10629 return;
10630 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010631
Jeff Johnsone7245742012-09-05 17:12:55 -070010632 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10634 vos_mem_free(pWdaParams->wdaMsgParam);
10635 vos_mem_free(pWdaParams) ;
10636
Jeff Johnsone7245742012-09-05 17:12:55 -070010637 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010638 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010639 * Also, here success always means that we have atleast one BSSID.
10640 */
10641 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10642
10643 //enable Tx
10644 status = WDA_ResumeDataTx(pWDA);
10645 if(status != VOS_STATUS_SUCCESS)
10646 {
10647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10648 }
10649 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10650 return ;
10651}
10652/*
10653 * FUNCTION: WDA_ProcessStartOemDataReq
10654 * Send Start Oem Data Req to WDI
10655 */
10656VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10657 tStartOemDataReq *pOemDataReqParams)
10658{
10659 WDI_Status status = WDI_STATUS_SUCCESS;
10660 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010661 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010662
10663 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10664
10665 if(NULL == wdiOemDataReqParams)
10666 {
10667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010668 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010669 VOS_ASSERT(0);
10670 return VOS_STATUS_E_NOMEM;
10671 }
10672
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010673 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10674 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10675 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10676 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010677
10678 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10679
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010680 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10681 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010682 {
10683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010685 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010686 vos_mem_free(pOemDataReqParams);
10687 VOS_ASSERT(0);
10688 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010689 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010690
Bernald44a1ae2013-01-09 08:30:39 -080010691 pWdaParams->pWdaContext = (void*)pWDA;
10692 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10693 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010694
10695 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10696 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010697
10698 if(IS_WDI_STATUS_FAILURE(status))
10699 {
10700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10701 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010702 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10703 vos_mem_free(pWdaParams->wdaMsgParam);
10704 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010705 }
10706 return CONVERT_WDI2VOS_STATUS(status) ;
10707}
10708#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010709/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010710 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010711 *
10712 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010713void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010714{
10715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010717 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010718 if(NULL == pWdaParams)
10719 {
10720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010721 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010722 VOS_ASSERT(0) ;
10723 return ;
10724 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010725
10726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10727 vos_mem_free(pWdaParams->wdaMsgParam);
10728 vos_mem_free(pWdaParams);
10729
10730 return ;
10731}
10732/*
10733 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10734 * Free memory.
10735 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10736 */
10737void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10738{
10739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10740
10741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10742 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10743
10744 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010745 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10747 "%s: pWdaParams received NULL", __func__);
10748 VOS_ASSERT(0);
10749 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010751
10752 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010753 {
10754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010755 vos_mem_free(pWdaParams->wdaMsgParam);
10756 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010757 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010758
10759 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010760}
Jeff Johnson295189b2012-06-20 16:38:30 -070010761#ifdef WLAN_FEATURE_GTK_OFFLOAD
10762/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010763 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010764 *
10765 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010766void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010767 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010768{
10769 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10770
10771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010772 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010773 if(NULL == pWdaParams)
10774 {
10775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10776 "%s: pWdaParams received NULL", __func__);
10777 VOS_ASSERT(0);
10778 return;
10779 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010780
Jeff Johnson295189b2012-06-20 16:38:30 -070010781 vos_mem_free(pWdaParams->wdaMsgParam) ;
10782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10783 vos_mem_free(pWdaParams) ;
10784
10785 //print a msg, nothing else to do
10786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010787 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010788
10789 return ;
10790}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010791/*
10792 * FUNCTION: WDA_GTKOffloadReqCallback
10793 * Free memory.
10794 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10795 */
10796void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10797{
10798 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010799
Yue Ma7f44bbe2013-04-12 11:47:39 -070010800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10801 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10802
10803 if(NULL == pWdaParams)
10804 {
10805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10806 "%s: pWdaParams received NULL", __func__);
10807 VOS_ASSERT(0);
10808 return;
10809 }
10810
10811 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10812 {
10813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10814 vos_mem_free(pWdaParams->wdaMsgParam);
10815 vos_mem_free(pWdaParams);
10816 }
10817
10818 return;
10819}
Jeff Johnson295189b2012-06-20 16:38:30 -070010820/*
10821 * FUNCTION: WDA_ProcessGTKOffloadReq
10822 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10823 * to broadcast traffic (sta mode).
10824 */
10825VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10826 tpSirGtkOffloadParams pGtkOffloadParams)
10827{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010828 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010829 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10830 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10831 sizeof(WDI_GtkOffloadReqMsg)) ;
10832 tWDA_ReqParams *pWdaParams ;
10833
10834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010835 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010836
10837 if(NULL == wdiGtkOffloadReqMsg)
10838 {
10839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010840 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 VOS_ASSERT(0);
10842 return VOS_STATUS_E_NOMEM;
10843 }
10844
10845 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10846 if(NULL == pWdaParams)
10847 {
10848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010849 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 VOS_ASSERT(0);
10851 vos_mem_free(wdiGtkOffloadReqMsg);
10852 return VOS_STATUS_E_NOMEM;
10853 }
10854
10855 //
10856 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10857 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010858
10859 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010860 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010861
Jeff Johnson295189b2012-06-20 16:38:30 -070010862 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10863 // Copy KCK
10864 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10865 // Copy KEK
10866 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10867 // Copy KeyReplayCounter
10868 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10869 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10870
Yue Ma7f44bbe2013-04-12 11:47:39 -070010871 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10872 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010873
Jeff Johnson295189b2012-06-20 16:38:30 -070010874
10875 /* Store Params pass it to WDI */
10876 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10877 pWdaParams->pWdaContext = pWDA;
10878 /* Store param pointer as passed in by caller */
10879 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10880
Yue Ma7f44bbe2013-04-12 11:47:39 -070010881 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010882
10883 if(IS_WDI_STATUS_FAILURE(status))
10884 {
10885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10886 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10888 vos_mem_free(pWdaParams->wdaMsgParam);
10889 vos_mem_free(pWdaParams);
10890 }
10891
10892 return CONVERT_WDI2VOS_STATUS(status) ;
10893}
10894
10895/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010896 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010897 *
10898 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010899void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010900 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010901{
10902 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10903 tWDA_CbContext *pWDA;
10904 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053010905 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070010906 vos_msg_t vosMsg;
10907
10908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010909 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053010910
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010911 if(NULL == pWdaParams)
10912 {
10913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10914 "%s: pWdaParams received NULL", __func__);
10915 VOS_ASSERT(0);
10916 return;
10917 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010918
Nirav Shah374de6e2014-02-13 16:40:01 +053010919 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
10920 if(NULL == pGtkOffloadGetInfoRsp)
10921 {
10922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10923 "%s: vos_mem_malloc failed ", __func__);
10924 VOS_ASSERT(0);
10925 return;
10926 }
10927
Jeff Johnson295189b2012-06-20 16:38:30 -070010928 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10929 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10930
10931 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10932 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10933
10934 /* Message Header */
10935 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010936 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010937
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010938 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10939 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10940 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10941 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10942 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010943
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010944 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10945 pwdiGtkOffloadGetInfoRsparams->bssId,
10946 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010947 /* VOS message wrapper */
10948 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10949 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10950 vosMsg.bodyval = 0;
10951
10952 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10953 {
10954 /* free the mem and return */
10955 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10956 }
10957
10958 vos_mem_free(pWdaParams->wdaMsgParam) ;
10959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10960 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010961
10962 return;
10963}
10964/*
10965 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10966 * Free memory and send RSP back to SME.
10967 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10968 */
10969void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10970{
10971 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10972 vos_msg_t vosMsg;
10973
10974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10975 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10976
10977 if(NULL == pWdaParams)
10978 {
10979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10980 "%s: pWdaParams received NULL", __func__);
10981 VOS_ASSERT(0);
10982 return;
10983 }
10984
10985 /* VOS message wrapper */
10986 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10987 vosMsg.bodyptr = NULL;
10988 vosMsg.bodyval = 0;
10989
10990 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10991 {
10992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10993 vos_mem_free(pWdaParams->wdaMsgParam);
10994 vos_mem_free(pWdaParams);
10995 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10996 }
10997
10998 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010999}
11000#endif
11001
11002/*
11003 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11004 * Request to WDI to set Tx Per Tracking configurations
11005 */
11006VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11007{
11008 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011009 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11011 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11012 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11013 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011015 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011016 if(NULL == pwdiSetTxPerTrackingReqParams)
11017 {
11018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011020 vos_mem_free(pTxPerTrackingParams);
11021 VOS_ASSERT(0);
11022 return VOS_STATUS_E_NOMEM;
11023 }
11024 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11025 if(NULL == pWdaParams)
11026 {
11027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011029 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11030 vos_mem_free(pTxPerTrackingParams);
11031 VOS_ASSERT(0);
11032 return VOS_STATUS_E_NOMEM;
11033 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011034 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11035 pTxPerTrackingParams->ucTxPerTrackingEnable;
11036 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11037 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11038 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11039 pTxPerTrackingParams->ucTxPerTrackingRatio;
11040 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11041 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011042 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11043 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011044 /* Store param pointer as passed in by caller */
11045 /* store Params pass it to WDI
11046 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11047 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11048 pWdaParams->pWdaContext = pWDA;
11049 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011050 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011051 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011052 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011053 {
11054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11055 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011056 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011057 vos_mem_free(pWdaParams->wdaMsgParam) ;
11058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11059 vos_mem_free(pWdaParams) ;
11060 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011061 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011062
11063}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011064/*
11065 * FUNCTION: WDA_HALDumpCmdCallback
11066 * Send the VOS complete .
11067 */
11068void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11069 void* pUserData)
11070{
11071 tANI_U8 *buffer = NULL;
11072 tWDA_CbContext *pWDA = NULL;
11073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 if(NULL == pWdaParams)
11075 {
11076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011077 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011078 VOS_ASSERT(0) ;
11079 return ;
11080 }
11081
11082 pWDA = pWdaParams->pWdaContext;
11083 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011084 if(wdiRspParams->usBufferLen > 0)
11085 {
11086 /*Copy the Resp data to UMAC supplied buffer*/
11087 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11088 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11090 vos_mem_free(pWdaParams);
11091
11092 /* Indicate VOSS about the start complete */
11093 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011094 return ;
11095}
11096
Jeff Johnson295189b2012-06-20 16:38:30 -070011097/*
11098 * FUNCTION: WDA_ProcessHALDumpCmdReq
11099 * Send Dump command to WDI
11100 */
11101VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11102 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11103 tANI_U32 arg4, tANI_U8 *pBuffer)
11104{
11105 WDI_Status status = WDI_STATUS_SUCCESS;
11106 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11107 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11108 tWDA_ReqParams *pWdaParams ;
11109 pVosContextType pVosContext = NULL;
11110 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011111 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11112 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011113 if(pVosContext)
11114 {
11115 if (pVosContext->isLogpInProgress)
11116 {
11117 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11118 "%s:LOGP in Progress. Ignore!!!", __func__);
11119 return VOS_STATUS_E_BUSY;
11120 }
11121 }
11122 else
11123 {
11124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11125 "%s: VOS Context Null", __func__);
11126 return VOS_STATUS_E_RESOURCES;
11127 }
11128
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11130 if(NULL == pWdaParams)
11131 {
11132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011133 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011134 return VOS_STATUS_E_NOMEM;
11135 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011136 /* Allocate memory WDI request structure*/
11137 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11138 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11139 if(NULL == wdiHALDumpCmdReqParam)
11140 {
11141 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11142 "WDA HAL DUMP Command buffer alloc fail");
11143 vos_mem_free(pWdaParams);
11144 return WDI_STATUS_E_FAILURE;
11145 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011146 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011147 /* Extract the arguments */
11148 wdiHalDumpCmdInfo->command = cmd;
11149 wdiHalDumpCmdInfo->argument1 = arg1;
11150 wdiHalDumpCmdInfo->argument2 = arg2;
11151 wdiHalDumpCmdInfo->argument3 = arg3;
11152 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011153 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011154 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11155
11156 /* Response message will be passed through the buffer */
11157 pWdaParams->wdaMsgParam = (void *)pBuffer;
11158
11159 /* store Params pass it to WDI */
11160 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011161 /* Send command to WDI */
11162 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011163 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011164 if ( vStatus != VOS_STATUS_SUCCESS )
11165 {
11166 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11167 {
11168 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011169 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011170 }
11171 else
11172 {
11173 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011174 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011175 }
11176 VOS_ASSERT(0);
11177 }
11178 return status;
11179}
Jeff Johnson295189b2012-06-20 16:38:30 -070011180#ifdef WLAN_FEATURE_GTK_OFFLOAD
11181/*
11182 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11183 * Request to WDI to get GTK Offload Information
11184 */
11185VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11186 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11187{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011188 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011189 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11190 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11191 tWDA_ReqParams *pWdaParams ;
11192
11193 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11194 {
11195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011196 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011197 VOS_ASSERT(0);
11198 return VOS_STATUS_E_NOMEM;
11199 }
11200
11201 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11202 if(NULL == pWdaParams)
11203 {
11204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011206 VOS_ASSERT(0);
11207 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11208 return VOS_STATUS_E_NOMEM;
11209 }
11210
Yue Ma7f44bbe2013-04-12 11:47:39 -070011211 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11212 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011213
Jeff Johnson295189b2012-06-20 16:38:30 -070011214 /* Store Params pass it to WDI */
11215 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11216 pWdaParams->pWdaContext = pWDA;
11217 /* Store param pointer as passed in by caller */
11218 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11219
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011220 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011221 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011222
Yue Ma7f44bbe2013-04-12 11:47:39 -070011223 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011224
11225 if(IS_WDI_STATUS_FAILURE(status))
11226 {
11227 /* failure returned by WDI API */
11228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11229 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11231 vos_mem_free(pWdaParams) ;
11232 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11233 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11234 }
11235
11236 return CONVERT_WDI2VOS_STATUS(status) ;
11237}
11238#endif // WLAN_FEATURE_GTK_OFFLOAD
11239
11240/*
Yue Mab9c86f42013-08-14 15:59:08 -070011241 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11242 *
11243 */
11244VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11245 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11246{
11247 WDI_Status wdiStatus;
11248 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11249
11250 addPeriodicTxPtrnParams =
11251 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11252
11253 if (NULL == addPeriodicTxPtrnParams)
11254 {
11255 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11256 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11257 __func__);
11258
11259 return VOS_STATUS_E_NOMEM;
11260 }
11261
11262 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11263 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11264
11265 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11266 addPeriodicTxPtrnParams->pUserData = pWDA;
11267
11268 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11269
11270 if (WDI_STATUS_PENDING == wdiStatus)
11271 {
11272 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11273 "Pending received for %s:%d", __func__, __LINE__ );
11274 }
11275 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11276 {
11277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11278 "Failure in %s:%d", __func__, __LINE__ );
11279 }
11280
11281 vos_mem_free(addPeriodicTxPtrnParams);
11282
11283 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11284}
11285
11286/*
11287 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11288 *
11289 */
11290VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11291 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11292{
11293 WDI_Status wdiStatus;
11294 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11295
11296 delPeriodicTxPtrnParams =
11297 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11298
11299 if (NULL == delPeriodicTxPtrnParams)
11300 {
11301 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11302 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11303 __func__);
11304
11305 return VOS_STATUS_E_NOMEM;
11306 }
11307
11308 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11309 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11310
11311 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11312 delPeriodicTxPtrnParams->pUserData = pWDA;
11313
11314 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11315
11316 if (WDI_STATUS_PENDING == wdiStatus)
11317 {
11318 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11319 "Pending received for %s:%d", __func__, __LINE__ );
11320 }
11321 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11322 {
11323 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11324 "Failure in %s:%d", __func__, __LINE__ );
11325 }
11326
11327 vos_mem_free(delPeriodicTxPtrnParams);
11328
11329 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11330}
11331
Rajeev79dbe4c2013-10-05 11:03:42 +053011332#ifdef FEATURE_WLAN_BATCH_SCAN
11333/*
11334 * FUNCTION: WDA_ProcessStopBatchScanInd
11335 *
11336 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11337 *
11338 * PARAM:
11339 * pWDA: pointer to WDA context
11340 * pReq: pointer to stop batch scan request
11341 */
11342VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11343 tSirStopBatchScanInd *pReq)
11344{
11345 WDI_Status wdiStatus;
11346 WDI_StopBatchScanIndType wdiReq;
11347
11348 wdiReq.param = pReq->param;
11349
11350 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11351
11352 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11353 {
11354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11355 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11356 }
11357
11358 vos_mem_free(pReq);
11359
11360 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11361}
11362/*==========================================================================
11363 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11364
11365 DESCRIPTION
11366 API to pull batch scan result from FW
11367
11368 PARAMETERS
11369 pWDA: Pointer to WDA context
11370 pGetBatchScanReq: Pointer to get batch scan result indication
11371
11372 RETURN VALUE
11373 NONE
11374
11375===========================================================================*/
11376VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11377 tSirTriggerBatchScanResultInd *pReq)
11378{
11379 WDI_Status wdiStatus;
11380 WDI_TriggerBatchScanResultIndType wdiReq;
11381
11382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11383 "------> %s " ,__func__);
11384
11385 wdiReq.param = pReq->param;
11386
11387 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11388
11389 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11390 {
11391 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11392 "Trigger batch scan result ind failed %s:%d",
11393 __func__, wdiStatus);
11394 }
11395
11396 vos_mem_free(pReq);
11397
11398 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11399}
11400
11401/*==========================================================================
11402 FUNCTION WDA_SetBatchScanRespCallback
11403
11404 DESCRIPTION
11405 API to process set batch scan response from FW
11406
11407 PARAMETERS
11408 pRsp: Pointer to set batch scan response
11409 pUserData: Pointer to user data
11410
11411 RETURN VALUE
11412 NONE
11413
11414===========================================================================*/
11415void WDA_SetBatchScanRespCallback
11416(
11417 WDI_SetBatchScanRspType *pRsp,
11418 void* pUserData
11419)
11420{
11421 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11422 tpAniSirGlobal pMac;
11423 void *pCallbackContext;
11424 tWDA_CbContext *pWDA = NULL ;
11425 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11426
11427
11428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11429 "<------ %s " ,__func__);
11430 if (NULL == pWdaParams)
11431 {
11432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11433 "%s: pWdaParams received NULL", __func__);
11434 VOS_ASSERT(0) ;
11435 return ;
11436 }
11437
11438 /*extract WDA context*/
11439 pWDA = pWdaParams->pWdaContext;
11440 if (NULL == pWDA)
11441 {
11442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11443 "%s:pWDA is NULL can't invole HDD callback",
11444 __func__);
11445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11446 vos_mem_free(pWdaParams->wdaMsgParam);
11447 vos_mem_free(pWdaParams);
11448 VOS_ASSERT(0);
11449 return;
11450 }
11451
11452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11453 vos_mem_free(pWdaParams->wdaMsgParam);
11454 vos_mem_free(pWdaParams);
11455
11456 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11457 if (NULL == pMac)
11458 {
11459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11460 "%s:pMac is NULL", __func__);
11461 VOS_ASSERT(0);
11462 return;
11463 }
11464
11465 pHddSetBatchScanRsp =
11466 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11467 if (NULL == pHddSetBatchScanRsp)
11468 {
11469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11470 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11471 VOS_ASSERT(0);
11472 return;
11473 }
11474
11475 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11476
11477 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11478 /*call hdd callback with set batch scan response data*/
11479 if(pMac->pmc.setBatchScanReqCallback)
11480 {
11481 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11482 }
11483 else
11484 {
11485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11486 "%s:HDD callback is null", __func__);
11487 VOS_ASSERT(0);
11488 }
11489
11490 vos_mem_free(pHddSetBatchScanRsp);
11491 return ;
11492}
11493
11494/*==========================================================================
11495 FUNCTION WDA_ProcessSetBatchScanReq
11496
11497 DESCRIPTION
11498 API to send set batch scan request to WDI
11499
11500 PARAMETERS
11501 pWDA: Pointer to WDA context
11502 pSetBatchScanReq: Pointer to set batch scan req
11503
11504 RETURN VALUE
11505 NONE
11506
11507===========================================================================*/
11508VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11509 tSirSetBatchScanReq *pSetBatchScanReq)
11510{
11511 WDI_Status status;
11512 tWDA_ReqParams *pWdaParams ;
11513 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11514
11515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11516 "------> %s " ,__func__);
11517
11518 pWdiSetBatchScanReq =
11519 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11520 if (NULL == pWdiSetBatchScanReq)
11521 {
11522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11523 "%s: VOS MEM Alloc Failure", __func__);
11524 vos_mem_free(pSetBatchScanReq);
11525 VOS_ASSERT(0);
11526 return VOS_STATUS_E_NOMEM;
11527 }
11528
11529 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11530 if (NULL == pWdaParams)
11531 {
11532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11533 "%s: VOS MEM Alloc Failure", __func__);
11534 VOS_ASSERT(0);
11535 vos_mem_free(pSetBatchScanReq);
11536 vos_mem_free(pWdiSetBatchScanReq);
11537 return VOS_STATUS_E_NOMEM;
11538 }
11539
11540 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11541 pWdiSetBatchScanReq->numberOfScansToBatch =
11542 pSetBatchScanReq->numberOfScansToBatch;
11543 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11544 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11545 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11546
11547 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11548 pWdaParams->pWdaContext = pWDA;
11549 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11550
11551 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11552 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11553 if (IS_WDI_STATUS_FAILURE(status))
11554 {
11555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11556 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11557 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11558 vos_mem_free(pWdaParams->wdaMsgParam);
11559 vos_mem_free(pWdaParams);
11560 }
11561 return CONVERT_WDI2VOS_STATUS(status);
11562}
11563
11564#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011565/*
11566 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11567 *
11568 * DESCRIPTION: This function sends start/update OBSS scan
11569 * inidcation message to WDI
11570 *
11571 * PARAM:
11572 * pWDA: pointer to WDA context
11573 * pReq: pointer to start OBSS scan request
11574 */
11575VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11576 tSirHT40OBSSScanInd *pReq)
11577{
11578 WDI_Status status;
11579 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11580 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011581
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11583 "------> %s " ,__func__);
11584 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11585 wdiOBSSScanParams.pUserData = pWDA;
11586
11587 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11588 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11589 pWdiOBSSScanInd->scanType = pReq->scanType;
11590 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11591 pReq->OBSSScanActiveDwellTime;
11592 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11593 pReq->OBSSScanPassiveDwellTime;
11594 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11595 pReq->BSSChannelWidthTriggerScanInterval;
11596 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11597 pReq->BSSWidthChannelTransitionDelayFactor;
11598 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11599 pReq->OBSSScanActiveTotalPerChannel;
11600 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11601 pReq->OBSSScanPassiveTotalPerChannel;
11602 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11603 pReq->OBSSScanActivityThreshold;
11604 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11605 vos_mem_copy(pWdiOBSSScanInd->channels,
11606 pReq->channels,
11607 pReq->channelCount);
11608 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11609 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11610 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11611 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11612 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11613
11614 vos_mem_copy(pWdiOBSSScanInd->ieField,
11615 pReq->ieField,
11616 pReq->ieFieldLen);
11617
11618 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11619 if (WDI_STATUS_PENDING == status)
11620 {
11621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11622 "Pending received for %s:%d ",__func__,__LINE__ );
11623 }
11624 else if (WDI_STATUS_SUCCESS_SYNC != status)
11625 {
11626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11627 "Failure in %s:%d ",__func__,__LINE__ );
11628 }
11629 return CONVERT_WDI2VOS_STATUS(status) ;
11630}
11631/*
11632 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11633 *
11634 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11635 *
11636 * PARAM:
11637 * pWDA: pointer to WDA context
11638 * pReq: pointer to stop batch scan request
11639 */
11640VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11641 tANI_U8 *bssIdx)
11642{
11643 WDI_Status status;
11644
11645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11646 "------> %s " ,__func__);
11647
11648 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11649 if (WDI_STATUS_PENDING == status)
11650 {
11651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11652 "Pending received for %s:%d ",__func__,__LINE__ );
11653 }
11654 else if (WDI_STATUS_SUCCESS_SYNC != status)
11655 {
11656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11657 "Failure in %s:%d ",__func__,__LINE__ );
11658 }
11659 return CONVERT_WDI2VOS_STATUS(status) ;
11660}
Yue Mab9c86f42013-08-14 15:59:08 -070011661/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011662 * FUNCTION: WDA_ProcessRateUpdateInd
11663 *
11664 */
11665VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11666 tSirRateUpdateInd *pRateUpdateParams)
11667{
11668 WDI_Status wdiStatus;
11669 WDI_RateUpdateIndParams rateUpdateParams;
11670
11671 vos_mem_copy(rateUpdateParams.bssid,
11672 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11673
11674 rateUpdateParams.ucastDataRateTxFlag =
11675 pRateUpdateParams->ucastDataRateTxFlag;
11676 rateUpdateParams.reliableMcastDataRateTxFlag =
11677 pRateUpdateParams->reliableMcastDataRateTxFlag;
11678 rateUpdateParams.mcastDataRate24GHzTxFlag =
11679 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11680 rateUpdateParams.mcastDataRate5GHzTxFlag =
11681 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11682
11683 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11684 rateUpdateParams.reliableMcastDataRate =
11685 pRateUpdateParams->reliableMcastDataRate;
11686 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11687 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11688
11689 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11690 rateUpdateParams.pUserData = pWDA;
11691
11692 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11693
11694 if (WDI_STATUS_PENDING == wdiStatus)
11695 {
11696 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11697 "Pending received for %s:%d", __func__, __LINE__ );
11698 }
11699 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11700 {
11701 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11702 "Failure in %s:%d", __func__, __LINE__ );
11703 }
11704
11705 vos_mem_free(pRateUpdateParams);
11706
11707 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11708}
11709
11710/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011711 * -------------------------------------------------------------------------
11712 * DATA interface with WDI for Mgmt Frames
11713 * -------------------------------------------------------------------------
11714 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011715/*
11716 * FUNCTION: WDA_TxComplete
11717 * Callback function for the WDA_TxPacket
11718 */
11719VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11720 VOS_STATUS status )
11721{
11722
11723 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11724 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011725 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011726
11727 if(NULL == wdaContext)
11728 {
11729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11730 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011731 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011732 VOS_ASSERT(0);
11733 return VOS_STATUS_E_FAILURE;
11734 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011735
11736 /*Check if frame was timed out or not*/
11737 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11738 (v_PVOID_t)&uUserData);
11739
11740 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11741 {
11742 /*Discard frame - no further processing is needed*/
11743 vos_pkt_return_packet(pData);
11744 return VOS_STATUS_SUCCESS;
11745 }
11746
Jeff Johnson295189b2012-06-20 16:38:30 -070011747 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11748 if( NULL!=wdaContext->pTxCbFunc)
11749 {
11750 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011751 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011752 {
11753 wdaContext->pTxCbFunc(pMac, pData);
11754 }
11755 else
11756 {
11757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011758 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011759 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011760 //Return from here since we reaching here because the packet already timeout
11761 return status;
11762 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011763 }
11764
11765 /*
11766 * Trigger the event to bring the HAL TL Tx complete function to come
11767 * out of wait
11768 * Let the coe above to complete the packet first. When this event is set,
11769 * the thread waiting for the event may run and set Vospacket_freed causing the original
11770 * packet not being freed.
11771 */
11772 status = vos_event_set(&wdaContext->txFrameEvent);
11773 if(!VOS_IS_STATUS_SUCCESS(status))
11774 {
11775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011776 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011777 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 return status;
11779}
Jeff Johnson295189b2012-06-20 16:38:30 -070011780/*
11781 * FUNCTION: WDA_TxPacket
11782 * Forward TX management frame to WDI
11783 */
11784VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11785 void *pFrmBuf,
11786 tANI_U16 frmLen,
11787 eFrameType frmType,
11788 eFrameTxDir txDir,
11789 tANI_U8 tid,
11790 pWDATxRxCompFunc pCompFunc,
11791 void *pData,
11792 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011793 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011794{
11795 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11796 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11797 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11798 tANI_U8 eventIdx = 0;
11799 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11800 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011801 if((NULL == pWDA)||(NULL == pFrmBuf))
11802 {
11803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011804 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011805 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011806 VOS_ASSERT(0);
11807 return VOS_STATUS_E_FAILURE;
11808 }
11809
11810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011811 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011812 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11813 if(NULL == pMac)
11814 {
11815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011816 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011817 VOS_ASSERT(0);
11818 return VOS_STATUS_E_FAILURE;
11819 }
11820
11821
11822
11823 /* store the call back function in WDA context */
11824 pWDA->pTxCbFunc = pCompFunc;
11825 /* store the call back for the function of ackTxComplete */
11826 if( pAckTxComp )
11827 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011828 if( NULL != pWDA->pAckTxCbFunc )
11829 {
11830 /* Already TxComp is active no need to active again */
11831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011832 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011833 pWDA->pAckTxCbFunc( pMac, 0);
11834 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011835
Jeff Johnsone7245742012-09-05 17:12:55 -070011836 if( VOS_STATUS_SUCCESS !=
11837 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11838 {
11839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11840 "Tx Complete timeout Timer Stop Failed ");
11841 }
11842 else
11843 {
11844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011845 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011846 }
11847 }
11848
11849 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11850 pWDA->pAckTxCbFunc = pAckTxComp;
11851 if( VOS_STATUS_SUCCESS !=
11852 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11853 {
11854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11855 "Tx Complete Timer Start Failed ");
11856 pWDA->pAckTxCbFunc = NULL;
11857 return eHAL_STATUS_FAILURE;
11858 }
11859 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011860 /* Reset the event to be not signalled */
11861 status = vos_event_reset(&pWDA->txFrameEvent);
11862 if(!VOS_IS_STATUS_SUCCESS(status))
11863 {
11864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011865 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011866 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11867 if( pAckTxComp )
11868 {
11869 pWDA->pAckTxCbFunc = NULL;
11870 if( VOS_STATUS_SUCCESS !=
11871 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11872 {
11873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11874 "Tx Complete timeout Timer Stop Failed ");
11875 }
11876 }
11877 return VOS_STATUS_E_FAILURE;
11878 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011879
11880 /* If Peer Sta mask is set don't overwrite to self sta */
11881 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011882 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011883 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011884 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011885 else
11886 {
Ganesh K08bce952012-12-13 15:04:41 -080011887 /* Get system role, use the self station if in unknown role or STA role */
11888 systemRole = wdaGetGlobalSystemRole(pMac);
11889 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11890 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080011891#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011892 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011893#endif
Ganesh K08bce952012-12-13 15:04:41 -080011894 ))
11895 {
11896 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11897 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011898 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011899
Jeff Johnsone7245742012-09-05 17:12:55 -070011900 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11901 disassoc frame reaches the HW, HAL has already deleted the peer station */
11902 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011903 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011904 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011905 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011906 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011907 /*Send Probe request frames on self sta idx*/
11908 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011909 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011910 /* Since we donot want probe responses to be retried, send probe responses
11911 through the NO_ACK queues */
11912 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11913 {
11914 //probe response is sent out using self station and no retries options.
11915 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11916 }
11917 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11918 {
11919 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11920 }
11921 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011922 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011923
11924 /*Set frame tag to 0
11925 We will use the WDA user data in order to tag a frame as expired*/
11926 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11927 (v_PVOID_t)0);
11928
11929
11930 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11931 frmLen, ucTypeSubType, tid,
11932 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11933 {
11934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011935 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011937 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 -070011938 if( pAckTxComp )
11939 {
11940 pWDA->pAckTxCbFunc = NULL;
11941 if( VOS_STATUS_SUCCESS !=
11942 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11943 {
11944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11945 "Tx Complete timeout Timer Stop Failed ");
11946 }
11947 }
11948 return VOS_STATUS_E_FAILURE;
11949 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011950 /*
11951 * Wait for the event to be set by the TL, to get the response of TX
11952 * complete, this event should be set by the Callback function called by TL
11953 */
11954 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11955 &eventIdx);
11956 if(!VOS_IS_STATUS_SUCCESS(status))
11957 {
11958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11959 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011960 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011961 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11962 after the packet gets completed(packet freed once)*/
11963
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011964 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Mihir Shete40a55652014-03-02 14:14:47 +053011965 WDA_TransportChannelDebug(pMac, 1, WPAL_DEBUG_TX_DESC_RESYNC);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011966
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011967 /*Tag Frame as timed out for later deletion*/
11968 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11969 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11970
Jeff Johnson295189b2012-06-20 16:38:30 -070011971 /* check whether the packet was freed already,so need not free again when
11972 * TL calls the WDA_Txcomplete routine
11973 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011974 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
11975 /*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 -070011976 {
11977 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011978 } */
11979
Jeff Johnson295189b2012-06-20 16:38:30 -070011980 if( pAckTxComp )
11981 {
11982 pWDA->pAckTxCbFunc = NULL;
11983 if( VOS_STATUS_SUCCESS !=
11984 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11985 {
11986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11987 "Tx Complete timeout Timer Stop Failed ");
11988 }
11989 }
11990 status = VOS_STATUS_E_FAILURE;
11991 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011992#ifdef WLAN_DUMP_MGMTFRAMES
11993 if (VOS_IS_STATUS_SUCCESS(status))
11994 {
11995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11996 "%s() TX packet : SubType %d", __func__,pFc->subType);
11997 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11998 pData, frmLen);
11999 }
12000#endif
12001
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012002 if (VOS_IS_STATUS_SUCCESS(status))
12003 {
12004 if (pMac->fEnableDebugLog & 0x1)
12005 {
12006 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12007 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12008 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12009 {
12010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12011 pFc->type, pFc->subType);
12012 }
12013 }
12014 }
12015
12016
Jeff Johnson295189b2012-06-20 16:38:30 -070012017 return status;
12018}
Jeff Johnson295189b2012-06-20 16:38:30 -070012019/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012020 * FUNCTION: WDA_ProcessDHCPStartInd
12021 * Forward DHCP Start to WDI
12022 */
12023static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12024 tAniDHCPInd *dhcpStartInd)
12025{
12026 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012027 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012028
c_hpothu0b0cab72014-02-13 21:52:40 +053012029 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12030 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012031 sizeof(tSirMacAddr));
12032
c_hpothu0b0cab72014-02-13 21:52:40 +053012033 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012034
c_hpothu0b0cab72014-02-13 21:52:40 +053012035 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012036 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12038 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012039 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012040 else if (WDI_STATUS_SUCCESS_SYNC != status)
12041 {
12042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12043 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12044 }
12045
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012046 vos_mem_free(dhcpStartInd);
12047 return CONVERT_WDI2VOS_STATUS(status) ;
12048}
12049
12050 /*
12051 * FUNCTION: WDA_ProcessDHCPStopInd
12052 * Forward DHCP Stop to WDI
12053 */
12054 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12055 tAniDHCPInd *dhcpStopInd)
12056 {
12057 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012058 WDI_DHCPInd wdiDHCPInd;
12059
12060 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12061 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12062
12063 status = WDI_dhcpStopInd(&wdiDHCPInd);
12064
12065 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012066 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12068 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012069 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012070 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012071 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12073 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012074 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012075
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012076 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012077
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012078 return CONVERT_WDI2VOS_STATUS(status) ;
12079 }
12080
12081/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012082 * FUNCTION: WDA_McProcessMsg
12083 * Trigger DAL-AL to start CFG download
12084 */
12085VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12086{
12087 VOS_STATUS status = VOS_STATUS_SUCCESS;
12088 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 if(NULL == pMsg)
12090 {
12091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012092 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 VOS_ASSERT(0);
12094 return VOS_STATUS_E_FAILURE;
12095 }
12096
12097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012098 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012099
12100 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12101 if(NULL == pWDA )
12102 {
12103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012104 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012105 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012106 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 return VOS_STATUS_E_FAILURE;
12108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012109 /* Process all the WDA messages.. */
12110 switch( pMsg->type )
12111 {
12112 case WNI_CFG_DNLD_REQ:
12113 {
12114 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012115 /* call WDA complete event if config download success */
12116 if( VOS_IS_STATUS_SUCCESS(status) )
12117 {
12118 vos_WDAComplete_cback(pVosContext);
12119 }
12120 else
12121 {
12122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12123 "WDA Config Download failure" );
12124 }
12125 break ;
12126 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012127 /*
12128 * Init SCAN request from PE, convert it into DAL format
12129 * and send it to DAL
12130 */
12131 case WDA_INIT_SCAN_REQ:
12132 {
12133 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12134 break ;
12135 }
12136 /* start SCAN request from PE */
12137 case WDA_START_SCAN_REQ:
12138 {
12139 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12140 break ;
12141 }
12142 /* end SCAN request from PE */
12143 case WDA_END_SCAN_REQ:
12144 {
12145 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12146 break ;
12147 }
12148 /* end SCAN request from PE */
12149 case WDA_FINISH_SCAN_REQ:
12150 {
12151 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12152 break ;
12153 }
12154 /* join request from PE */
12155 case WDA_CHNL_SWITCH_REQ:
12156 {
12157 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12158 {
12159 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12160 }
12161 else
12162 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012163 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12164 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12165 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12166 {
12167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12168 "call ProcessChannelSwitchReq_V1" );
12169 WDA_ProcessChannelSwitchReq_V1(pWDA,
12170 (tSwitchChannelParams*)pMsg->bodyptr) ;
12171 }
12172 else
12173 {
12174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12175 "call ProcessChannelSwitchReq" );
12176 WDA_ProcessChannelSwitchReq(pWDA,
12177 (tSwitchChannelParams*)pMsg->bodyptr) ;
12178 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012179 }
12180 break ;
12181 }
12182 /* ADD BSS request from PE */
12183 case WDA_ADD_BSS_REQ:
12184 {
12185 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12186 break ;
12187 }
12188 case WDA_ADD_STA_REQ:
12189 {
12190 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12191 break ;
12192 }
12193 case WDA_DELETE_BSS_REQ:
12194 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012195 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12196 break ;
12197 }
12198 case WDA_DELETE_STA_REQ:
12199 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012200 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12201 break ;
12202 }
12203 case WDA_CONFIG_PARAM_UPDATE_REQ:
12204 {
12205 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12206 break ;
12207 }
12208 case WDA_SET_BSSKEY_REQ:
12209 {
12210 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12211 break ;
12212 }
12213 case WDA_SET_STAKEY_REQ:
12214 {
12215 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12216 break ;
12217 }
12218 case WDA_SET_STA_BCASTKEY_REQ:
12219 {
12220 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12221 break ;
12222 }
12223 case WDA_REMOVE_BSSKEY_REQ:
12224 {
12225 WDA_ProcessRemoveBssKeyReq(pWDA,
12226 (tRemoveBssKeyParams *)pMsg->bodyptr);
12227 break ;
12228 }
12229 case WDA_REMOVE_STAKEY_REQ:
12230 {
12231 WDA_ProcessRemoveStaKeyReq(pWDA,
12232 (tRemoveStaKeyParams *)pMsg->bodyptr);
12233 break ;
12234 }
12235 case WDA_REMOVE_STA_BCASTKEY_REQ:
12236 {
12237 /* TODO: currently UMAC is not sending this request, Add the code for
12238 handling this request when UMAC supports */
12239 break;
12240 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012241#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012242 case WDA_TSM_STATS_REQ:
12243 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012244 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012245 break;
12246 }
12247#endif
12248 case WDA_UPDATE_EDCA_PROFILE_IND:
12249 {
12250 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12251 break;
12252 }
12253 case WDA_ADD_TS_REQ:
12254 {
12255 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12256 break;
12257 }
12258 case WDA_DEL_TS_REQ:
12259 {
12260 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12261 break;
12262 }
12263 case WDA_ADDBA_REQ:
12264 {
12265 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12266 break;
12267 }
12268 case WDA_DELBA_IND:
12269 {
12270 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12271 break;
12272 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012273 case WDA_UPDATE_CHAN_LIST_REQ:
12274 {
12275 WDA_ProcessUpdateChannelList(pWDA,
12276 (tSirUpdateChanList *)pMsg->bodyptr);
12277 break;
12278 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012279 case WDA_SET_LINK_STATE:
12280 {
12281 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12282 break;
12283 }
12284 case WDA_GET_STATISTICS_REQ:
12285 {
12286 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12287 break;
12288 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012289#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012290 case WDA_GET_ROAM_RSSI_REQ:
12291 {
12292 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12293 break;
12294 }
12295#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012296 case WDA_PWR_SAVE_CFG:
12297 {
12298 if(pWDA->wdaState == WDA_READY_STATE)
12299 {
12300 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12301 }
12302 else
12303 {
12304 if(NULL != pMsg->bodyptr)
12305 {
12306 vos_mem_free(pMsg->bodyptr);
12307 }
12308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12309 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12310 }
12311 break;
12312 }
12313 case WDA_ENTER_IMPS_REQ:
12314 {
12315 if(pWDA->wdaState == WDA_READY_STATE)
12316 {
12317 WDA_ProcessEnterImpsReq(pWDA);
12318 }
12319 else
12320 {
12321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12322 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12323 }
12324 break;
12325 }
12326 case WDA_EXIT_IMPS_REQ:
12327 {
12328 if(pWDA->wdaState == WDA_READY_STATE)
12329 {
12330 WDA_ProcessExitImpsReq(pWDA);
12331 }
12332 else
12333 {
12334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12335 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12336 }
12337 break;
12338 }
12339 case WDA_ENTER_BMPS_REQ:
12340 {
12341 if(pWDA->wdaState == WDA_READY_STATE)
12342 {
12343 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12344 }
12345 else
12346 {
12347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12348 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12349 }
12350 break;
12351 }
12352 case WDA_EXIT_BMPS_REQ:
12353 {
12354 if(pWDA->wdaState == WDA_READY_STATE)
12355 {
12356 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12357 }
12358 else
12359 {
12360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12361 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12362 }
12363 break;
12364 }
12365 case WDA_ENTER_UAPSD_REQ:
12366 {
12367 if(pWDA->wdaState == WDA_READY_STATE)
12368 {
12369 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12370 }
12371 else
12372 {
12373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12374 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12375 }
12376 break;
12377 }
12378 case WDA_EXIT_UAPSD_REQ:
12379 {
12380 if(pWDA->wdaState == WDA_READY_STATE)
12381 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012382 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012383 }
12384 else
12385 {
12386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12387 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12388 }
12389 break;
12390 }
12391 case WDA_UPDATE_UAPSD_IND:
12392 {
12393 if(pWDA->wdaState == WDA_READY_STATE)
12394 {
12395 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12396 }
12397 else
12398 {
12399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12400 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12401 }
12402 break;
12403 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012404 case WDA_REGISTER_PE_CALLBACK :
12405 {
12406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12407 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12408 /*TODO: store the PE callback */
12409 /* Do Nothing? MSG Body should be freed at here */
12410 if(NULL != pMsg->bodyptr)
12411 {
12412 vos_mem_free(pMsg->bodyptr);
12413 }
12414 break;
12415 }
12416 case WDA_SYS_READY_IND :
12417 {
12418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12419 "Handling msg type WDA_SYS_READY_IND " );
12420 pWDA->wdaState = WDA_READY_STATE;
12421 if(NULL != pMsg->bodyptr)
12422 {
12423 vos_mem_free(pMsg->bodyptr);
12424 }
12425 break;
12426 }
12427 case WDA_BEACON_FILTER_IND :
12428 {
12429 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12430 break;
12431 }
12432 case WDA_BTC_SET_CFG:
12433 {
12434 /*TODO: handle this while dealing with BTC */
12435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12436 "Handling msg type WDA_BTC_SET_CFG " );
12437 /* Do Nothing? MSG Body should be freed at here */
12438 if(NULL != pMsg->bodyptr)
12439 {
12440 vos_mem_free(pMsg->bodyptr);
12441 }
12442 break;
12443 }
12444 case WDA_SIGNAL_BT_EVENT:
12445 {
12446 /*TODO: handle this while dealing with BTC */
12447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12448 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12449 /* Do Nothing? MSG Body should be freed at here */
12450 if(NULL != pMsg->bodyptr)
12451 {
12452 vos_mem_free(pMsg->bodyptr);
12453 }
12454 break;
12455 }
12456 case WDA_CFG_RXP_FILTER_REQ:
12457 {
12458 WDA_ProcessConfigureRxpFilterReq(pWDA,
12459 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12460 break;
12461 }
12462 case WDA_SET_HOST_OFFLOAD:
12463 {
12464 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12465 break;
12466 }
12467 case WDA_SET_KEEP_ALIVE:
12468 {
12469 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12470 break;
12471 }
12472#ifdef WLAN_NS_OFFLOAD
12473 case WDA_SET_NS_OFFLOAD:
12474 {
12475 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12476 break;
12477 }
12478#endif //WLAN_NS_OFFLOAD
12479 case WDA_ADD_STA_SELF_REQ:
12480 {
12481 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12482 break;
12483 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012484 case WDA_DEL_STA_SELF_REQ:
12485 {
12486 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12487 break;
12488 }
12489 case WDA_WOWL_ADD_BCAST_PTRN:
12490 {
12491 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12492 break;
12493 }
12494 case WDA_WOWL_DEL_BCAST_PTRN:
12495 {
12496 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12497 break;
12498 }
12499 case WDA_WOWL_ENTER_REQ:
12500 {
12501 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12502 break;
12503 }
12504 case WDA_WOWL_EXIT_REQ:
12505 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012506 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012507 break;
12508 }
12509 case WDA_TL_FLUSH_AC_REQ:
12510 {
12511 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12512 break;
12513 }
12514 case WDA_SIGNAL_BTAMP_EVENT:
12515 {
12516 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12517 break;
12518 }
12519#ifdef WDA_UT
12520 case WDA_WDI_EVENT_MSG:
12521 {
12522 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12523 break ;
12524 }
12525#endif
12526 case WDA_UPDATE_BEACON_IND:
12527 {
12528 WDA_ProcessUpdateBeaconParams(pWDA,
12529 (tUpdateBeaconParams *)pMsg->bodyptr);
12530 break;
12531 }
12532 case WDA_SEND_BEACON_REQ:
12533 {
12534 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12535 break;
12536 }
12537 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12538 {
12539 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12540 (tSendProbeRespParams *)pMsg->bodyptr);
12541 break;
12542 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012543#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070012544 case WDA_SET_MAX_TX_POWER_REQ:
12545 {
12546 WDA_ProcessSetMaxTxPowerReq(pWDA,
12547 (tMaxTxPowerParams *)pMsg->bodyptr);
12548 break;
12549 }
12550#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012551 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12552 {
12553 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12554 pMsg->bodyptr);
12555 break;
12556 }
schang86c22c42013-03-13 18:41:24 -070012557 case WDA_SET_TX_POWER_REQ:
12558 {
12559 WDA_ProcessSetTxPowerReq(pWDA,
12560 (tSirSetTxPowerReq *)pMsg->bodyptr);
12561 break;
12562 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012563 case WDA_SET_P2P_GO_NOA_REQ:
12564 {
12565 WDA_ProcessSetP2PGONOAReq(pWDA,
12566 (tP2pPsParams *)pMsg->bodyptr);
12567 break;
12568 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012569 /* timer related messages */
12570 case WDA_TIMER_BA_ACTIVITY_REQ:
12571 {
12572 WDA_BaCheckActivity(pWDA) ;
12573 break ;
12574 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012575
12576 /* timer related messages */
12577 case WDA_TIMER_TRAFFIC_STATS_IND:
12578 {
12579 WDA_TimerTrafficStatsInd(pWDA);
12580 break;
12581 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012582#ifdef WLAN_FEATURE_VOWIFI_11R
12583 case WDA_AGGR_QOS_REQ:
12584 {
12585 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12586 break;
12587 }
12588#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012589 case WDA_FTM_CMD_REQ:
12590 {
12591 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12592 break ;
12593 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012594#ifdef FEATURE_OEM_DATA_SUPPORT
12595 case WDA_START_OEM_DATA_REQ:
12596 {
12597 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12598 break;
12599 }
12600#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012601 /* Tx Complete Time out Indication */
12602 case WDA_TX_COMPLETE_TIMEOUT_IND:
12603 {
12604 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12605 break;
12606 }
12607 case WDA_WLAN_SUSPEND_IND:
12608 {
12609 WDA_ProcessWlanSuspendInd(pWDA,
12610 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12611 break;
12612 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012613 case WDA_WLAN_RESUME_REQ:
12614 {
12615 WDA_ProcessWlanResumeReq(pWDA,
12616 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12617 break;
12618 }
12619
12620 case WDA_UPDATE_CF_IND:
12621 {
12622 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12623 pMsg->bodyptr = NULL;
12624 break;
12625 }
12626#ifdef FEATURE_WLAN_SCAN_PNO
12627 case WDA_SET_PNO_REQ:
12628 {
12629 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12630 break;
12631 }
12632 case WDA_UPDATE_SCAN_PARAMS_REQ:
12633 {
12634 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12635 break;
12636 }
12637 case WDA_SET_RSSI_FILTER_REQ:
12638 {
12639 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12640 break;
12641 }
12642#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012643#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012644 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012645 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012646 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012647 break;
12648 }
12649#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012650 case WDA_SET_TX_PER_TRACKING_REQ:
12651 {
12652 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12653 break;
12654 }
12655
12656#ifdef WLAN_FEATURE_PACKET_FILTERING
12657 case WDA_8023_MULTICAST_LIST_REQ:
12658 {
12659 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12660 break;
12661 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012662 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12663 {
12664 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12665 break;
12666 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012667 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12668 {
12669 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12670 break;
12671 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012672 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12673 {
12674 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12675 break;
12676 }
12677#endif // WLAN_FEATURE_PACKET_FILTERING
12678
12679
12680 case WDA_TRANSMISSION_CONTROL_IND:
12681 {
12682 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12683 break;
12684 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012685 case WDA_SET_POWER_PARAMS_REQ:
12686 {
12687 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12688 break;
12689 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012690#ifdef WLAN_FEATURE_GTK_OFFLOAD
12691 case WDA_GTK_OFFLOAD_REQ:
12692 {
12693 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12694 break;
12695 }
12696
12697 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12698 {
12699 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12700 break;
12701 }
12702#endif //WLAN_FEATURE_GTK_OFFLOAD
12703
12704 case WDA_SET_TM_LEVEL_REQ:
12705 {
12706 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12707 break;
12708 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012709
Mohit Khanna4a70d262012-09-11 16:30:12 -070012710 case WDA_UPDATE_OP_MODE:
12711 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012712 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12713 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12714 {
12715 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12716 }
12717 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012718 {
12719 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12720 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12721 else
12722 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012723 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012724 }
12725 else
12726 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012727 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012728 break;
12729 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012730#ifdef WLAN_FEATURE_11W
12731 case WDA_EXCLUDE_UNENCRYPTED_IND:
12732 {
12733 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12734 break;
12735 }
12736#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012737#ifdef FEATURE_WLAN_TDLS
12738 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12739 {
12740 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12741 break;
12742 }
12743#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012744 case WDA_DHCP_START_IND:
12745 {
12746 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12747 break;
12748 }
12749 case WDA_DHCP_STOP_IND:
12750 {
12751 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12752 break;
12753 }
Leo Chang9056f462013-08-01 19:21:11 -070012754#ifdef FEATURE_WLAN_LPHB
12755 case WDA_LPHB_CONF_REQ:
12756 {
12757 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12758 break;
12759 }
12760#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012761 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12762 {
12763 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12764 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12765 break;
12766 }
12767 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12768 {
12769 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12770 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12771 break;
12772 }
12773
Rajeev79dbe4c2013-10-05 11:03:42 +053012774#ifdef FEATURE_WLAN_BATCH_SCAN
12775 case WDA_SET_BATCH_SCAN_REQ:
12776 {
12777 WDA_ProcessSetBatchScanReq(pWDA,
12778 (tSirSetBatchScanReq *)pMsg->bodyptr);
12779 break;
12780 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012781 case WDA_RATE_UPDATE_IND:
12782 {
12783 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12784 break;
12785 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012786 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12787 {
12788 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12789 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12790 break;
12791 }
12792 case WDA_STOP_BATCH_SCAN_IND:
12793 {
12794 WDA_ProcessStopBatchScanInd(pWDA,
12795 (tSirStopBatchScanInd *)pMsg->bodyptr);
12796 break;
12797 }
c_hpothu92367912014-05-01 15:18:17 +053012798 case WDA_GET_BCN_MISS_RATE_REQ:
12799 WDA_ProcessGetBcnMissRateReq(pWDA,
12800 (tSirBcnMissRateReq *)pMsg->bodyptr);
12801 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053012802#endif
12803
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012804 case WDA_HT40_OBSS_SCAN_IND:
12805 {
12806 WDA_ProcessHT40OBSSScanInd(pWDA,
12807 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12808 break;
12809 }
12810 case WDA_HT40_OBSS_STOP_SCAN_IND:
12811 {
12812 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12813 (tANI_U8*)pMsg->bodyptr);
12814 break;
12815 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012816 default:
12817 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053012818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070012819 "No Handling for msg type %x in WDA "
12820 ,pMsg->type);
12821 /* Do Nothing? MSG Body should be freed at here */
12822 if(NULL != pMsg->bodyptr)
12823 {
12824 vos_mem_free(pMsg->bodyptr);
12825 }
12826 //WDA_VOS_ASSERT(0) ;
12827 }
12828 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012829 return status ;
12830}
12831
Jeff Johnson295189b2012-06-20 16:38:30 -070012832/*
12833 * FUNCTION: WDA_LowLevelIndCallback
12834 * IND API callback from WDI, send Ind to PE
12835 */
12836void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12837 void* pUserData )
12838{
12839 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12840#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12841 tSirRSSINotification rssiNotification;
12842#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012843 if(NULL == pWDA)
12844 {
12845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012846 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012847 VOS_ASSERT(0);
12848 return ;
12849 }
12850
12851 switch(wdiLowLevelInd->wdiIndicationType)
12852 {
12853 case WDI_RSSI_NOTIFICATION_IND:
12854 {
12855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12856 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012857#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12858 rssiNotification.bReserved =
12859 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12860 rssiNotification.bRssiThres1NegCross =
12861 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12862 rssiNotification.bRssiThres1PosCross =
12863 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12864 rssiNotification.bRssiThres2NegCross =
12865 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12866 rssiNotification.bRssiThres2PosCross =
12867 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12868 rssiNotification.bRssiThres3NegCross =
12869 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12870 rssiNotification.bRssiThres3PosCross =
12871 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012872 rssiNotification.avgRssi = (v_S7_t)
12873 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012874 WLANTL_BMPSRSSIRegionChangedNotification(
12875 pWDA->pVosContext,
12876 &rssiNotification);
12877#endif
12878 break ;
12879 }
12880 case WDI_MISSED_BEACON_IND:
12881 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012882 tpSirSmeMissedBeaconInd pMissBeacInd =
12883 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12885 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012886 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012887 if(NULL == pMissBeacInd)
12888 {
12889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12890 "%s: VOS MEM Alloc Failure", __func__);
12891 break;
12892 }
12893 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12894 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12895 pMissBeacInd->bssIdx =
12896 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12897 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 break ;
12899 }
12900 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12901 {
12902 /* TODO: Decode Ind and send Ind to PE */
12903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12904 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12905 break ;
12906 }
12907
12908 case WDI_MIC_FAILURE_IND:
12909 {
12910 tpSirSmeMicFailureInd pMicInd =
12911 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12912
12913 if(NULL == pMicInd)
12914 {
12915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012917 break;
12918 }
12919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12920 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012921 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12922 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12923 vos_mem_copy(pMicInd->bssId,
12924 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12925 sizeof(tSirMacAddr));
12926 vos_mem_copy(pMicInd->info.srcMacAddr,
12927 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12928 sizeof(tSirMacAddr));
12929 vos_mem_copy(pMicInd->info.taMacAddr,
12930 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12931 sizeof(tSirMacAddr));
12932 vos_mem_copy(pMicInd->info.dstMacAddr,
12933 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12934 sizeof(tSirMacAddr));
12935 vos_mem_copy(pMicInd->info.rxMacAddr,
12936 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12937 sizeof(tSirMacAddr));
12938 pMicInd->info.multicast =
12939 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12940 pMicInd->info.keyId=
12941 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12942 pMicInd->info.IV1=
12943 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12944 vos_mem_copy(pMicInd->info.TSC,
12945 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012946 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12947 (void *)pMicInd , 0) ;
12948 break ;
12949 }
12950 case WDI_FATAL_ERROR_IND:
12951 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012952 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012953 /* TODO: Decode Ind and send Ind to PE */
12954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12955 "Received WDI_FATAL_ERROR_IND from WDI ");
12956 break ;
12957 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012958 case WDI_DEL_STA_IND:
12959 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012960 tpDeleteStaContext pDelSTACtx =
12961 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12962
12963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12964 "Received WDI_DEL_STA_IND from WDI ");
12965 if(NULL == pDelSTACtx)
12966 {
12967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012968 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012969 break;
12970 }
12971 vos_mem_copy(pDelSTACtx->addr2,
12972 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12973 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012974 vos_mem_copy(pDelSTACtx->bssId,
12975 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12976 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012977 pDelSTACtx->assocId =
12978 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12979 pDelSTACtx->reasonCode =
12980 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12981 pDelSTACtx->staId =
12982 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012983 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12984 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012985 break ;
12986 }
12987 case WDI_COEX_IND:
12988 {
12989 tANI_U32 index;
12990 vos_msg_t vosMsg;
12991 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12992 if(NULL == pSmeCoexInd)
12993 {
12994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012995 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012996 break;
12997 }
12998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12999 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070013000 /* Message Header */
13001 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13002 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013003 /* Info from WDI Indication */
13004 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13005 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13006 {
13007 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13008 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013009 /* VOS message wrapper */
13010 vosMsg.type = eWNI_SME_COEX_IND;
13011 vosMsg.bodyptr = (void *)pSmeCoexInd;
13012 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013013 /* Send message to SME */
13014 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13015 {
13016 /* free the mem and return */
13017 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13018 }
13019 else
13020 {
13021 /* DEBUG */
13022 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13023 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13024 pSmeCoexInd->coexIndType,
13025 pSmeCoexInd->coexIndData[0],
13026 pSmeCoexInd->coexIndData[1],
13027 pSmeCoexInd->coexIndData[2],
13028 pSmeCoexInd->coexIndData[3]);
13029 }
13030 break;
13031 }
13032 case WDI_TX_COMPLETE_IND:
13033 {
13034 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13035 /* Calling TxCompleteAck Indication from wda context*/
13036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13037 "Complete Indication received from HAL");
13038 if( pWDA->pAckTxCbFunc )
13039 {
13040 if( VOS_STATUS_SUCCESS !=
13041 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13042 {
13043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13044 "Tx Complete timeout Timer Stop Failed ");
13045 }
13046 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13047 pWDA->pAckTxCbFunc = NULL;
13048 }
13049 else
13050 {
13051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13052 "Tx Complete Indication is received after timeout ");
13053 }
13054 break;
13055 }
Viral Modid86bde22012-12-10 13:09:21 -080013056 case WDI_P2P_NOA_START_IND :
13057 {
13058 tSirP2PNoaStart *pP2pNoaStart =
13059 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13060
13061 if (NULL == pP2pNoaStart)
13062 {
13063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13064 "Memory allocation failure, "
13065 "WDI_P2P_NOA_START_IND not forwarded");
13066 break;
13067 }
13068 pP2pNoaStart->status =
13069 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13070 pP2pNoaStart->bssIdx =
13071 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13072 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13073 (void *)pP2pNoaStart , 0) ;
13074 break;
13075 }
13076
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013077#ifdef FEATURE_WLAN_TDLS
13078 case WDI_TDLS_IND :
13079 {
13080 tSirTdlsInd *pTdlsInd =
13081 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13082
13083 if (NULL == pTdlsInd)
13084 {
13085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13086 "Memory allocation failure, "
13087 "WDI_TDLS_IND not forwarded");
13088 break;
13089 }
13090 pTdlsInd->status =
13091 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13092 pTdlsInd->assocId =
13093 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13094 pTdlsInd->staIdx =
13095 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13096 pTdlsInd->reasonCode =
13097 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13098 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13099 (void *)pTdlsInd , 0) ;
13100 break;
13101 }
13102#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013103 case WDI_P2P_NOA_ATTR_IND :
13104 {
13105 tSirP2PNoaAttr *pP2pNoaAttr =
13106 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13108 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013109 if (NULL == pP2pNoaAttr)
13110 {
13111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13112 "Memory allocation failure, "
13113 "WDI_P2P_NOA_ATTR_IND not forwarded");
13114 break;
13115 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013116 pP2pNoaAttr->index =
13117 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13118 pP2pNoaAttr->oppPsFlag =
13119 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13120 pP2pNoaAttr->ctWin =
13121 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13122
13123 pP2pNoaAttr->uNoa1IntervalCnt =
13124 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13125 pP2pNoaAttr->uNoa1Duration =
13126 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13127 pP2pNoaAttr->uNoa1Interval =
13128 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13129 pP2pNoaAttr->uNoa1StartTime =
13130 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013131 pP2pNoaAttr->uNoa2IntervalCnt =
13132 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13133 pP2pNoaAttr->uNoa2Duration =
13134 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13135 pP2pNoaAttr->uNoa2Interval =
13136 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13137 pP2pNoaAttr->uNoa2StartTime =
13138 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013139 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13140 (void *)pP2pNoaAttr , 0) ;
13141 break;
13142 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013143#ifdef FEATURE_WLAN_SCAN_PNO
13144 case WDI_PREF_NETWORK_FOUND_IND:
13145 {
13146 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013147 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13148 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13149 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13150 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13151
Jeff Johnson295189b2012-06-20 16:38:30 -070013152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13153 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013154 if (NULL == pPrefNetworkFoundInd)
13155 {
13156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13157 "Memory allocation failure, "
13158 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013159 if (NULL !=
13160 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13161 {
13162 wpalMemoryFree(
13163 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13164 );
13165 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13166 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013167 break;
13168 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013169 /* Message Header */
13170 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013171 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013172
13173 /* Info from WDI Indication */
13174 pPrefNetworkFoundInd->ssId.length =
13175 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013176 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013177 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13178 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13179 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013180 if (NULL !=
13181 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13182 {
13183 pPrefNetworkFoundInd->frameLength =
13184 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13185 vos_mem_copy( pPrefNetworkFoundInd->data,
13186 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13187 pPrefNetworkFoundInd->frameLength);
13188 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13189 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13190 }
13191 else
13192 {
13193 pPrefNetworkFoundInd->frameLength = 0;
13194 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013195 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013196 /* VOS message wrapper */
13197 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13198 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13199 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013200 /* Send message to SME */
13201 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13202 {
13203 /* free the mem and return */
13204 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13205 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 break;
13207 }
13208#endif // FEATURE_WLAN_SCAN_PNO
13209
13210#ifdef WLAN_WAKEUP_EVENTS
13211 case WDI_WAKE_REASON_IND:
13212 {
13213 vos_msg_t vosMsg;
13214 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13215 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13216 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13217
13218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13219 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
13220 wdiLowLevelInd->wdiIndicationType,
13221 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13222 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13223 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13224
13225 if (NULL == pWakeReasonInd)
13226 {
13227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13228 "Memory allocation failure, "
13229 "WDI_WAKE_REASON_IND not forwarded");
13230 break;
13231 }
13232
13233 vos_mem_zero(pWakeReasonInd, allocSize);
13234
13235 /* Message Header */
13236 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13237 pWakeReasonInd->mesgLen = allocSize;
13238
13239 /* Info from WDI Indication */
13240 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13241 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13242 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13243 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13244 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13245 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13246 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13247 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13248
13249 /* VOS message wrapper */
13250 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13251 vosMsg.bodyptr = (void *) pWakeReasonInd;
13252 vosMsg.bodyval = 0;
13253
13254 /* Send message to SME */
13255 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13256 {
13257 /* free the mem and return */
13258 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13259 }
13260
13261 break;
13262 }
13263#endif // WLAN_WAKEUP_EVENTS
13264
13265 case WDI_TX_PER_HIT_IND:
13266 {
13267 vos_msg_t vosMsg;
13268 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13269 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13270 /* VOS message wrapper */
13271 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13272 vosMsg.bodyptr = NULL;
13273 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013274 /* Send message to SME */
13275 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13276 {
13277 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13278 }
13279 break;
13280 }
13281
Leo Chang9056f462013-08-01 19:21:11 -070013282#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013283 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013284 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013285 vos_msg_t vosMsg;
13286 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013287
Leo Changd9df8aa2013-09-26 13:32:26 -070013288 lphbInd =
13289 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13290 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013291 {
13292 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13293 "%s: LPHB IND buffer alloc Fail", __func__);
13294 return ;
13295 }
13296
Leo Changd9df8aa2013-09-26 13:32:26 -070013297 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013298 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013299 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013300 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013301 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013302 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13303
13304 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013305 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013306 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13307
Leo Changd9df8aa2013-09-26 13:32:26 -070013308 vosMsg.type = eWNI_SME_LPHB_IND;
13309 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013310 vosMsg.bodyval = 0;
13311 /* Send message to SME */
13312 if (VOS_STATUS_SUCCESS !=
13313 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13314 {
13315 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13316 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013317 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013318 }
13319 break;
13320 }
13321#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013322 case WDI_PERIODIC_TX_PTRN_FW_IND:
13323 {
13324 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13325 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13326 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13327 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13328 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13329 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13330 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13331
13332 break;
13333 }
Leo Chang9056f462013-08-01 19:21:11 -070013334
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013335 case WDI_IBSS_PEER_INACTIVITY_IND:
13336 {
13337 tSirIbssPeerInactivityInd *pIbssInd =
13338 (tSirIbssPeerInactivityInd *)
13339 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13340
13341 if (NULL == pIbssInd)
13342 {
13343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13344 "Memory allocation failure, "
13345 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13346 break;
13347 }
13348
13349 pIbssInd->bssIdx =
13350 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13351 pIbssInd->staIdx =
13352 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13353 vos_mem_copy(pIbssInd->peerAddr,
13354 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13355 sizeof(tSirMacAddr));
13356 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13357 break;
13358 }
13359
Rajeev79dbe4c2013-10-05 11:03:42 +053013360#ifdef FEATURE_WLAN_BATCH_SCAN
13361 case WDI_BATCH_SCAN_RESULT_IND:
13362 {
13363 void *pBatchScanResult;
13364 void *pCallbackContext;
13365 tpAniSirGlobal pMac;
13366
13367 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13368 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13369
13370 /*sanity check*/
13371 if(NULL == pWDA)
13372 {
13373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13374 "%s:pWDA is NULL", __func__);
13375 VOS_ASSERT(0);
13376 return;
13377 }
13378
13379 pBatchScanResult =
13380 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13381 if (NULL == pBatchScanResult)
13382 {
13383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13384 "%s:Batch scan result from FW is null can't invoke HDD callback",
13385 __func__);
13386 VOS_ASSERT(0);
13387 return;
13388 }
13389
13390 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13391 if (NULL == pMac)
13392 {
13393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13394 "%s:pMac is NULL", __func__);
13395 VOS_ASSERT(0);
13396 return;
13397 }
13398
13399 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13400 /*call hdd callback with set batch scan response data*/
13401 if(pMac->pmc.batchScanResultCallback)
13402 {
13403 pMac->pmc.batchScanResultCallback(pCallbackContext,
13404 pBatchScanResult);
13405 }
13406 else
13407 {
13408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13409 "%s:HDD callback is null", __func__);
13410 VOS_ASSERT(0);
13411 }
13412 break;
13413 }
13414#endif
13415
Leo Chang0b0e45a2013-12-15 15:18:55 -080013416#ifdef FEATURE_WLAN_CH_AVOID
13417 case WDI_CH_AVOID_IND:
13418 {
13419 vos_msg_t vosMsg;
13420 tSirChAvoidIndType *chAvoidInd;
13421
13422 chAvoidInd =
13423 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13424 if (NULL == chAvoidInd)
13425 {
13426 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13427 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13428 return ;
13429 }
13430
13431 chAvoidInd->avoidRangeCount =
13432 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13433 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13434 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13435 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13436
13437 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13438 "%s : WDA CH avoid notification", __func__);
13439
13440 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13441 vosMsg.bodyptr = chAvoidInd;
13442 vosMsg.bodyval = 0;
13443 /* Send message to SME */
13444 if (VOS_STATUS_SUCCESS !=
13445 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13446 {
13447 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13448 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13449 vos_mem_free(chAvoidInd);
13450 }
13451 break;
13452 }
13453#endif /* FEATURE_WLAN_CH_AVOID */
13454
Jeff Johnson295189b2012-06-20 16:38:30 -070013455 default:
13456 {
13457 /* TODO error */
13458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13459 "Received UNKNOWN Indication from WDI ");
13460 }
13461 }
13462 return ;
13463}
13464
Jeff Johnson295189b2012-06-20 16:38:30 -070013465/*
13466 * BA related processing in WDA.
13467 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013468void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
13469 void* pUserData)
13470{
13471 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13472 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070013473 if(NULL == pWdaParams)
13474 {
13475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013476 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013477 VOS_ASSERT(0) ;
13478 return ;
13479 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013480 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070013481 vos_mem_free(pWdaParams->wdaMsgParam) ;
13482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13483 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013485 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013486 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
13487 {
13488 tANI_U8 i = 0 ;
13489 tBaActivityInd *baActivityInd = NULL ;
13490 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
13491 tANI_U8 allocSize = sizeof(tBaActivityInd)
13492 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
13493 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
13494 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013495 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013496 if(NULL == baActivityInd)
13497 {
13498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013500 VOS_ASSERT(0) ;
13501 return;
13502 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013503 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13504 sizeof(tSirMacAddr)) ;
13505 baActivityInd->baCandidateCnt = baCandidateCount ;
13506
13507 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13508 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13509
13510 for(i = 0 ; i < baCandidateCount ; i++)
13511 {
13512 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013513 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13514 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013515 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13516 {
13517 baCandidate->baInfo[tid].fBaEnable =
13518 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13519 baCandidate->baInfo[tid].startingSeqNum =
13520 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13521 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013522 wdiBaCandidate++ ;
13523 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013524 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013525 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13526 }
13527 else
13528 {
13529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13530 "BA Trigger RSP with Failure received ");
13531 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013532 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013533}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013534
13535
13536/*
13537 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13538 * during MCC
13539 */
13540void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13541{
13542 wpt_uint32 enabled;
13543 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13544 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13545 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13546
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013547 if (NULL == pMac )
13548 {
13549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13550 "%s: Invoked with invalid MAC context ", __func__ );
13551 VOS_ASSERT(0);
13552 return;
13553 }
13554
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013555 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13556 != eSIR_SUCCESS)
13557 {
13558 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13559 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13560 return;
13561 }
13562
13563 if(!enabled)
13564 {
13565 return;
13566 }
13567
13568 if(NULL == pWDA)
13569 {
13570 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13571 "%s:WDA context is NULL", __func__);
13572 VOS_ASSERT(0);
13573 return;
13574 }
13575
13576 if(activate)
13577 {
13578 if( VOS_STATUS_SUCCESS !=
13579 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13580 {
13581 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13582 "Traffic Stats Timer Start Failed ");
13583 return;
13584 }
13585 WDI_DS_ActivateTrafficStats();
13586 }
13587 else
13588 {
13589 WDI_DS_DeactivateTrafficStats();
13590 WDI_DS_ClearTrafficStats();
13591
13592 if( VOS_STATUS_SUCCESS !=
13593 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13594 {
13595 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13596 "Traffic Stats Timer Stop Failed ");
13597 return;
13598 }
13599 }
13600}
13601
13602/*
13603 * Traffic Stats Timer handler
13604 */
13605void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13606{
13607 WDI_Status wdiStatus;
13608 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13609 WDI_TrafficStatsIndType trafficStatsIndParams;
13610 wpt_uint32 length, enabled;
13611 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13612
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013613 if (NULL == pMac )
13614 {
13615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13616 "%s: Invoked with invalid MAC context ", __func__ );
13617 VOS_ASSERT(0);
13618 return;
13619 }
13620
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013621 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13622 != eSIR_SUCCESS)
13623 {
13624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13625 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13626 return;
13627 }
13628
13629 if(!enabled)
13630 {
13631 WDI_DS_DeactivateTrafficStats();
13632 return;
13633 }
13634
13635 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13636
13637 if(pWdiTrafficStats != NULL)
13638 {
13639 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13640 trafficStatsIndParams.length = length;
13641 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013642 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013643 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13644 trafficStatsIndParams.pUserData = pWDA;
13645
13646 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13647
13648 if(WDI_STATUS_PENDING == wdiStatus)
13649 {
13650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13651 "Pending received for %s:%d ",__func__,__LINE__ );
13652 }
13653 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13654 {
13655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13656 "Failure in %s:%d ",__func__,__LINE__ );
13657 }
13658
13659 WDI_DS_ClearTrafficStats();
13660 }
13661 else
13662 {
13663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13664 "pWdiTrafficStats is Null");
13665 }
13666
13667 if( VOS_STATUS_SUCCESS !=
13668 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13669 {
13670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13671 "Traffic Stats Timer Start Failed ");
13672 return;
13673 }
13674}
13675
Jeff Johnson295189b2012-06-20 16:38:30 -070013676/*
13677 * BA Activity check timer handler
13678 */
13679void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13680{
13681 tANI_U8 curSta = 0 ;
13682 tANI_U8 tid = 0 ;
13683 tANI_U8 size = 0 ;
13684 tANI_U8 baCandidateCount = 0 ;
13685 tANI_U8 newBaCandidate = 0 ;
13686 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13687
13688 if(NULL == pWDA)
13689 {
13690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013691 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013692 VOS_ASSERT(0);
13693 return ;
13694 }
13695 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13696 {
13697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13698 "Inconsistent STA entries in WDA");
13699 VOS_ASSERT(0) ;
13700 }
13701 /* walk through all STA entries and find out TX packet count */
13702 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13703 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013704#ifdef WLAN_SOFTAP_VSTA_FEATURE
13705 // We can only do BA on "hard" STAs.
13706 if (!(IS_HWSTA_IDX(curSta)))
13707 {
13708 continue;
13709 }
13710#endif //WLAN_SOFTAP_VSTA_FEATURE
13711 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13712 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013713 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013714 tANI_U32 txPktCount = 0 ;
13715 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013716 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013717 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13718 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013719 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13720 curSta, tid, &txPktCount)))
13721 {
13722#if 0
13723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13724 "************* %d:%d, %d ",curSta, txPktCount,
13725 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13726#endif
13727 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013728 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013729 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13730 curSta, tid)))
13731 {
13732 /* get prepare for sending message to HAL */
13733 //baCandidate[baCandidateCount].staIdx = curSta ;
13734 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13735 newBaCandidate = WDA_ENABLE_BA ;
13736 }
13737 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13738 }
13739 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 /* fill the entry for all the sta with given TID's */
13741 if(WDA_ENABLE_BA == newBaCandidate)
13742 {
13743 /* move to next BA candidate */
13744 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13745 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13746 baCandidateCount++ ;
13747 newBaCandidate = WDA_DISABLE_BA ;
13748 }
13749 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013750 /* prepare and send message to hal */
13751 if( 0 < baCandidateCount)
13752 {
13753 WDI_Status status = WDI_STATUS_SUCCESS ;
13754 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13755 tWDA_ReqParams *pWdaParams =
13756 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013757 if(NULL == pWdaParams)
13758 {
13759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013761 VOS_ASSERT(0) ;
13762 return;
13763 }
13764 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13765 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13766 if(NULL == wdiTriggerBaReq)
13767 {
13768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013769 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013770 VOS_ASSERT(0) ;
13771 vos_mem_free(pWdaParams);
13772 return;
13773 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013774 do
13775 {
13776 WDI_TriggerBAReqinfoType *triggerBaInfo =
13777 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13778 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13779 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13780 * for each request */
13781 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13782 triggerBaInfo->ucBASessionID = 0;
13783 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13784 } while(0) ;
13785 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013787 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013788 pWdaParams->pWdaContext = pWDA;
13789 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13790 pWdaParams->wdaMsgParam = NULL;
13791 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13792 WDA_TriggerBaReqCallback, pWdaParams) ;
13793 if(IS_WDI_STATUS_FAILURE(status))
13794 {
13795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13796 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13797 vos_mem_free(pWdaParams->wdaMsgParam) ;
13798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13799 vos_mem_free(pWdaParams) ;
13800 }
13801 }
13802 else
13803 {
13804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13805 "There is no TID for initiating BA");
13806 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013807 if( VOS_STATUS_SUCCESS !=
13808 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13809 {
13810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13811 "BA Activity Timer Stop Failed ");
13812 return ;
13813 }
13814 if( VOS_STATUS_SUCCESS !=
13815 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13816 {
13817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13818 "BA Activity Timer Start Failed ");
13819 return;
13820 }
13821 return ;
13822}
Jeff Johnson295189b2012-06-20 16:38:30 -070013823/*
13824 * WDA common routine to create timer used by WDA.
13825 */
13826static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13827{
Jeff Johnson295189b2012-06-20 16:38:30 -070013828 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13829 tANI_U32 val = 0 ;
13830 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13831
13832 if(NULL == pMac)
13833 {
13834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013835 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013836 VOS_ASSERT(0);
13837 return VOS_STATUS_E_FAILURE;
13838 }
13839 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13840 != eSIR_SUCCESS)
13841 {
13842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13843 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13844 return VOS_STATUS_E_FAILURE;
13845 }
13846 val = SYS_MS_TO_TICKS(val) ;
13847
13848 /* BA activity check timer */
13849 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13850 "BA Activity Check timer", WDA_TimerHandler,
13851 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13852 if(status != TX_SUCCESS)
13853 {
13854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13855 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013856 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013857 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013858 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013859 /* Tx Complete Timeout timer */
13860 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13861 "Tx Complete Check timer", WDA_TimerHandler,
13862 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013863 if(status != TX_SUCCESS)
13864 {
13865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13866 "Unable to create Tx Complete Timeout timer");
13867 /* Destroy timer of BA activity check timer */
13868 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13869 if(status != TX_SUCCESS)
13870 {
13871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13872 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013873 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013874 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013875 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013876 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013877
13878 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13879
13880 /* Traffic Stats timer */
13881 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13882 "Traffic Stats timer", WDA_TimerHandler,
13883 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13884 if(status != TX_SUCCESS)
13885 {
13886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13887 "Unable to create traffic stats timer");
13888 /* Destroy timer of BA activity check timer */
13889 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13890 if(status != TX_SUCCESS)
13891 {
13892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13893 "Unable to Destroy BA activity timer");
13894 }
13895 /* Destroy timer of tx complete timer */
13896 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13897 if(status != TX_SUCCESS)
13898 {
13899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13900 "Unable to Tx complete timer");
13901 }
13902 return VOS_STATUS_E_FAILURE ;
13903 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013904 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013905}
Jeff Johnson295189b2012-06-20 16:38:30 -070013906/*
13907 * WDA common routine to destroy timer used by WDA.
13908 */
13909static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13910{
13911 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013912 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13913 if(status != TX_SUCCESS)
13914 {
13915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13916 "Unable to Destroy Tx Complete Timeout timer");
13917 return eSIR_FAILURE ;
13918 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013919 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13920 if(status != TX_SUCCESS)
13921 {
13922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13923 "Unable to Destroy BA activity timer");
13924 return eSIR_FAILURE ;
13925 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013926 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13927 if(status != TX_SUCCESS)
13928 {
13929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13930 "Unable to Destroy traffic stats timer");
13931 return eSIR_FAILURE ;
13932 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013933 return eSIR_SUCCESS ;
13934}
Jeff Johnson295189b2012-06-20 16:38:30 -070013935/*
13936 * WDA timer handler.
13937 */
13938void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13939{
13940 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13941 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013942 /*
13943 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13944 */
13945 wdaMsg.type = timerInfo ;
13946 wdaMsg.bodyptr = NULL;
13947 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013948 /* post the message.. */
13949 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13950 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13951 {
13952 vosStatus = VOS_STATUS_E_BADMSG;
13953 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013954}
Jeff Johnson295189b2012-06-20 16:38:30 -070013955/*
13956 * WDA Tx Complete timeout Indication.
13957 */
13958void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13959{
13960 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013961 if( pWDA->pAckTxCbFunc )
13962 {
13963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013964 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013965 pWDA->pAckTxCbFunc( pMac, 0);
13966 pWDA->pAckTxCbFunc = NULL;
13967 }
13968 else
13969 {
13970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013971 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013972 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013973}
Jeff Johnson295189b2012-06-20 16:38:30 -070013974/*
13975 * WDA Set REG Domain to VOS NV
13976 */
Abhishek Singha306a442013-11-07 18:39:01 +053013977eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13978 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013979{
Abhishek Singha306a442013-11-07 18:39:01 +053013980 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013981 {
13982 return eHAL_STATUS_INVALID_PARAMETER;
13983 }
13984 return eHAL_STATUS_SUCCESS;
13985}
Jeff Johnson295189b2012-06-20 16:38:30 -070013986
Jeff Johnson295189b2012-06-20 16:38:30 -070013987#ifdef FEATURE_WLAN_SCAN_PNO
13988/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013989 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013990 *
13991 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013992void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013993{
13994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013995 tSirPNOScanReq *pPNOScanReqParams;
13996
Jeff Johnson295189b2012-06-20 16:38:30 -070013997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013998 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013999 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014000 {
14001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014002 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014003 VOS_ASSERT(0) ;
14004 return ;
14005 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014006
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014007 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14008 if(pPNOScanReqParams->statusCallback)
14009 {
14010 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14011 (status == WDI_STATUS_SUCCESS) ?
14012 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14013 }
14014
Yue Ma7f44bbe2013-04-12 11:47:39 -070014015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14016 vos_mem_free(pWdaParams->wdaMsgParam);
14017 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014018
14019 return ;
14020}
Jeff Johnson295189b2012-06-20 16:38:30 -070014021/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014022 * FUNCTION: WDA_PNOScanReqCallback
14023 * Free memory.
14024 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14025 */
14026void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014027{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014028 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014029 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014030
14031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14032 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14033
14034 if(NULL == pWdaParams)
14035 {
14036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14037 "%s: pWdaParams received NULL", __func__);
14038 VOS_ASSERT(0);
14039 return;
14040 }
14041
14042 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14043 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014044 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14045 if(pPNOScanReqParams->statusCallback)
14046 {
14047 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14048 VOS_STATUS_E_FAILURE);
14049 }
14050
Yue Ma7f44bbe2013-04-12 11:47:39 -070014051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14052 vos_mem_free(pWdaParams->wdaMsgParam);
14053 vos_mem_free(pWdaParams);
14054 }
14055
14056 return;
14057}
14058/*
14059 * FUNCTION: WDA_UpdateScanParamsRespCallback
14060 *
14061 */
14062void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14063{
14064 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014066 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014067 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014068 {
14069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014070 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 VOS_ASSERT(0) ;
14072 return ;
14073 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014074
14075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14076 vos_mem_free(pWdaParams->wdaMsgParam);
14077 vos_mem_free(pWdaParams);
14078
Jeff Johnson295189b2012-06-20 16:38:30 -070014079 return ;
14080}
Jeff Johnson295189b2012-06-20 16:38:30 -070014081/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014082 * FUNCTION: WDA_UpdateScanParamsReqCallback
14083 * Free memory.
14084 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14085 */
14086void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14087{
14088 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14089
14090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14091 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14092
14093 if(NULL == pWdaParams)
14094 {
14095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14096 "%s: pWdaParams received NULL", __func__);
14097 VOS_ASSERT(0);
14098 return;
14099 }
14100
14101 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14102 {
14103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14104 vos_mem_free(pWdaParams->wdaMsgParam);
14105 vos_mem_free(pWdaParams);
14106 }
14107
14108 return;
14109}
14110/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014111 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14112 * Request to WDI to set Preferred Network List.Offload
14113 */
14114VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14115 tSirPNOScanReq *pPNOScanReqParams)
14116{
Jeff Johnson43971f52012-07-17 12:26:56 -070014117 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014118 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14119 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14120 tWDA_ReqParams *pWdaParams ;
14121 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014123 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014124 if(NULL == pwdiPNOScanReqInfo)
14125 {
14126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014128 VOS_ASSERT(0);
14129 return VOS_STATUS_E_NOMEM;
14130 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014131 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14132 if(NULL == pWdaParams)
14133 {
14134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014135 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014136 VOS_ASSERT(0);
14137 vos_mem_free(pwdiPNOScanReqInfo);
14138 return VOS_STATUS_E_NOMEM;
14139 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014140 //
14141 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14142 //
14143 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14144 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014145 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14146 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14147 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014148 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14149 {
14150 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14151 &pPNOScanReqParams->aNetworks[i],
14152 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14153 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014154 /*Scan timer intervals*/
14155 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14156 &pPNOScanReqParams->scanTimers,
14157 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014158 /*Probe template for 2.4GHz band*/
14159 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14160 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14161 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014162 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14163 pPNOScanReqParams->p24GProbeTemplate,
14164 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014165 /*Probe template for 5GHz band*/
14166 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14167 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14168 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014169 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14170 pPNOScanReqParams->p5GProbeTemplate,
14171 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014172 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14173 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014174
Jeff Johnson295189b2012-06-20 16:38:30 -070014175 /* Store Params pass it to WDI */
14176 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14177 pWdaParams->pWdaContext = pWDA;
14178 /* Store param pointer as passed in by caller */
14179 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014180 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014181 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014182 if(IS_WDI_STATUS_FAILURE(status))
14183 {
14184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14185 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014186 if(pPNOScanReqParams->statusCallback)
14187 {
14188 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14189 VOS_STATUS_E_FAILURE);
14190 }
14191
Jeff Johnson295189b2012-06-20 16:38:30 -070014192 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14193 vos_mem_free(pWdaParams->wdaMsgParam);
14194 pWdaParams->wdaWdiApiMsgParam = NULL;
14195 pWdaParams->wdaMsgParam = NULL;
14196 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014197 return CONVERT_WDI2VOS_STATUS(status) ;
14198}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014199
14200#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14201
14202void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14203{
14204 /*Convert the CSR Auth types to WDI Auth types */
14205 switch (csrAuthType)
14206 {
14207 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14208 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14209 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014210#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014211 case eCSR_AUTH_TYPE_CCKM_WPA:
14212 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14213 break;
14214#endif
14215 case eCSR_AUTH_TYPE_WPA:
14216 *AuthType = eWDA_AUTH_TYPE_WPA;
14217 break;
14218 case eCSR_AUTH_TYPE_WPA_PSK:
14219 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14220 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014221#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014222 case eCSR_AUTH_TYPE_CCKM_RSN:
14223 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
14224 break;
14225#endif
14226 case eCSR_AUTH_TYPE_RSN:
14227 *AuthType = eWDA_AUTH_TYPE_RSN;
14228 break;
14229 case eCSR_AUTH_TYPE_RSN_PSK:
14230 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
14231 break;
14232#if defined WLAN_FEATURE_VOWIFI_11R
14233 case eCSR_AUTH_TYPE_FT_RSN:
14234 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
14235 break;
14236 case eCSR_AUTH_TYPE_FT_RSN_PSK:
14237 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
14238 break;
14239#endif
14240#ifdef FEATURE_WLAN_WAPI
14241 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
14242 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
14243 break;
14244 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
14245 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
14246 break;
14247#endif /* FEATURE_WLAN_WAPI */
14248 case eCSR_AUTH_TYPE_SHARED_KEY:
14249 case eCSR_AUTH_TYPE_AUTOSWITCH:
14250 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14251 break;
14252#if 0
14253 case eCSR_AUTH_TYPE_SHARED_KEY:
14254 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
14255 break;
14256 case eCSR_AUTH_TYPE_AUTOSWITCH:
14257 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
14258#endif
14259 default:
14260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14261 "%s: Unknown Auth Type", __func__);
14262 break;
14263 }
14264}
14265void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
14266{
14267 switch (csrEncrType)
14268 {
14269 case eCSR_ENCRYPT_TYPE_NONE:
14270 *EncrType = WDI_ED_NONE;
14271 break;
14272 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
14273 case eCSR_ENCRYPT_TYPE_WEP40:
14274 *EncrType = WDI_ED_WEP40;
14275 break;
14276 case eCSR_ENCRYPT_TYPE_WEP104:
14277 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
14278 *EncrType = WDI_ED_WEP104;
14279 break;
14280 case eCSR_ENCRYPT_TYPE_TKIP:
14281 *EncrType = WDI_ED_TKIP;
14282 break;
14283 case eCSR_ENCRYPT_TYPE_AES:
14284 *EncrType = WDI_ED_CCMP;
14285 break;
14286#ifdef WLAN_FEATURE_11W
14287 case eCSR_ENCRYPT_TYPE_AES_CMAC:
14288 *EncrType = WDI_ED_AES_128_CMAC;
14289 break;
14290#endif
14291#ifdef FEATURE_WLAN_WAPI
14292 case eCSR_ENCRYPT_TYPE_WPI:
14293 *EncrType = WDI_ED_WPI;
14294 break;
14295#endif
14296 case eCSR_ENCRYPT_TYPE_ANY:
14297 *EncrType = WDI_ED_ANY;
14298 break;
14299
14300 default:
14301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14302 "%s: Unknown Encryption Type", __func__);
14303 break;
14304 }
14305}
14306
14307/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014308 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014309 * Request to WDI to set Roam Offload Scan
14310 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014311VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014312 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
14313{
14314 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014315 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
14316 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014317 tWDA_ReqParams *pWdaParams ;
14318 v_U8_t csrAuthType;
14319 WDI_RoamNetworkType *pwdiRoamNetworkType;
14320 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
14321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14322 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014323 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014324 {
14325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14326 "%s: VOS MEM Alloc Failure", __func__);
14327 VOS_ASSERT(0);
14328 return VOS_STATUS_E_NOMEM;
14329 }
14330 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14331 if (NULL == pWdaParams)
14332 {
14333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14334 "%s: VOS MEM Alloc Failure", __func__);
14335 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014336 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014337 return VOS_STATUS_E_NOMEM;
14338 }
14339
14340 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014341 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014342 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014343 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
14344 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014345 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
14346 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
14347 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
14348 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
14349 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
14350 sizeof(pwdiRoamNetworkType->currAPbssid));
14351 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
14352 csrAuthType);
14353 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
14354 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
14355 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
14356 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
14357 pwdiRoamOffloadScanInfo->LookupThreshold =
14358 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080014359 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
14360 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014361 pwdiRoamOffloadScanInfo->RoamRssiDiff =
14362 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080014363 pwdiRoamOffloadScanInfo->MAWCEnabled =
14364 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014365 pwdiRoamOffloadScanInfo->Command =
14366 pRoamOffloadScanReqParams->Command ;
14367 pwdiRoamOffloadScanInfo->StartScanReason =
14368 pRoamOffloadScanReqParams->StartScanReason ;
14369 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
14370 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
14371 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
14372 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
14373 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
14374 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
14375 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
14376 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
14377 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
14378 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014379 pwdiRoamOffloadScanInfo->IsESEEnabled =
14380 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014381 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
14382 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
14383 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
14384 pwdiRoamNetworkType->ssId.ucLength =
14385 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
14386 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
14387 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
14388 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
14389 pwdiRoamNetworkType->ChannelCount =
14390 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
14391 pwdiRoamOffloadScanInfo->ChannelCacheType =
14392 pRoamOffloadScanReqParams->ChannelCacheType;
14393 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
14394 pRoamOffloadScanReqParams->ValidChannelList,
14395 pRoamOffloadScanReqParams->ValidChannelCount);
14396 pwdiRoamOffloadScanInfo->ValidChannelCount =
14397 pRoamOffloadScanReqParams->ValidChannelCount;
14398 pwdiRoamOffloadScanInfo->us24GProbeSize =
14399 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14400 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14401 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
14402 pRoamOffloadScanReqParams->p24GProbeTemplate,
14403 pwdiRoamOffloadScanInfo->us24GProbeSize);
14404 pwdiRoamOffloadScanInfo->us5GProbeSize =
14405 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14406 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14407 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
14408 pRoamOffloadScanReqParams->p5GProbeTemplate,
14409 pwdiRoamOffloadScanInfo->us5GProbeSize);
14410 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
14411 pRoamOffloadScanReqParams->MDID.mdiePresent;
14412 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
14413 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014414 pwdiRoamOffloadScanInfo->nProbes =
14415 pRoamOffloadScanReqParams->nProbes;
14416 pwdiRoamOffloadScanInfo->HomeAwayTime =
14417 pRoamOffloadScanReqParams->HomeAwayTime;
14418 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014419 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014420 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014421 pWdaParams->pWdaContext = pWDA;
14422 /* Store param pointer as passed in by caller */
14423 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014424 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014425 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
14426 if(IS_WDI_STATUS_FAILURE(status))
14427 {
14428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14429 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
14430 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14431 vos_mem_free(pWdaParams->wdaMsgParam);
14432 pWdaParams->wdaWdiApiMsgParam = NULL;
14433 pWdaParams->wdaMsgParam = NULL;
14434 }
14435 return CONVERT_WDI2VOS_STATUS(status) ;
14436}
14437#endif
14438
Jeff Johnson295189b2012-06-20 16:38:30 -070014439/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014440 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014441 *
14442 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014443void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014444{
14445 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14446
14447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014448 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014449
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014450 if(NULL == pWdaParams)
14451 {
14452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014453 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014454 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014455 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014456 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014457
Jeff Johnson295189b2012-06-20 16:38:30 -070014458 vos_mem_free(pWdaParams->wdaMsgParam) ;
14459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14460 vos_mem_free(pWdaParams) ;
14461
14462 return ;
14463}
14464/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014465 * FUNCTION: WDA_RssiFilterReqCallback
14466 * Free memory.
14467 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
14468 */
14469void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14470{
14471 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14472
14473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14474 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14475
14476 if(NULL == pWdaParams)
14477 {
14478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14479 "%s: pWdaParams received NULL", __func__);
14480 VOS_ASSERT(0);
14481 return;
14482 }
14483
14484 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14485 {
14486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14487 vos_mem_free(pWdaParams->wdaMsgParam);
14488 vos_mem_free(pWdaParams);
14489 }
14490
14491 return;
14492}
14493/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014494 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14495 * Request to WDI to set Preferred Network List.Offload
14496 */
14497VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
14498 tSirSetRSSIFilterReq* pRssiFilterParams)
14499{
Jeff Johnson43971f52012-07-17 12:26:56 -070014500 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014501 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
14502 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
14503 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014505 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014506 if(NULL == pwdiSetRssiFilterReqInfo)
14507 {
14508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014509 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014510 VOS_ASSERT(0);
14511 return VOS_STATUS_E_NOMEM;
14512 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014513 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14514 if(NULL == pWdaParams)
14515 {
14516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014517 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014518 VOS_ASSERT(0);
14519 vos_mem_free(pwdiSetRssiFilterReqInfo);
14520 return VOS_STATUS_E_NOMEM;
14521 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014522 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014523 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
14524 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014525
Jeff Johnson295189b2012-06-20 16:38:30 -070014526 /* Store Params pass it to WDI */
14527 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14528 pWdaParams->pWdaContext = pWDA;
14529 /* Store param pointer as passed in by caller */
14530 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014531 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014532 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014533 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014534 if(IS_WDI_STATUS_FAILURE(status))
14535 {
14536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14537 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14538 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14539 vos_mem_free(pWdaParams->wdaMsgParam);
14540 pWdaParams->wdaWdiApiMsgParam = NULL;
14541 pWdaParams->wdaMsgParam = NULL;
14542 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014543 return CONVERT_WDI2VOS_STATUS(status) ;
14544}
14545
Jeff Johnson295189b2012-06-20 16:38:30 -070014546/*
14547 * FUNCTION: WDA_ProcessUpdateScanParams
14548 * Request to WDI to update Scan Parameters
14549 */
14550VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14551 tSirUpdateScanParams *pUpdateScanParams)
14552{
Jeff Johnson43971f52012-07-17 12:26:56 -070014553 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014554 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14555 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14556 sizeof(WDI_UpdateScanParamsInfoType)) ;
14557 tWDA_ReqParams *pWdaParams ;
14558 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014560 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014561 if(NULL == wdiUpdateScanParamsInfoType)
14562 {
14563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014564 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014565 VOS_ASSERT(0);
14566 return VOS_STATUS_E_NOMEM;
14567 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014568 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14569 if ( NULL == pWdaParams )
14570 {
14571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014572 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014573 VOS_ASSERT(0);
14574 vos_mem_free(wdiUpdateScanParamsInfoType);
14575 return VOS_STATUS_E_NOMEM;
14576 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014577 //
14578 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14579 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14581 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14582 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14583 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014584 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014585 pUpdateScanParams->b11dEnabled,
14586 pUpdateScanParams->b11dResolved,
14587 pUpdateScanParams->ucChannelCount,
14588 pUpdateScanParams->usPassiveMinChTime,
14589 pUpdateScanParams->usPassiveMaxChTime,
14590 pUpdateScanParams->usActiveMinChTime,
14591 pUpdateScanParams->usActiveMaxChTime,
14592 sizeof(tSirUpdateScanParams),
14593 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14594
Jeff Johnson295189b2012-06-20 16:38:30 -070014595 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14596 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014597 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14598 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014599 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14600 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014601 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14602 pUpdateScanParams->usActiveMaxChTime;
14603 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14604 pUpdateScanParams->usActiveMinChTime;
14605 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14606 pUpdateScanParams->usPassiveMaxChTime;
14607 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14608 pUpdateScanParams->usPassiveMinChTime;
14609
Jeff Johnson295189b2012-06-20 16:38:30 -070014610 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014611 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14612 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014613
Jeff Johnson295189b2012-06-20 16:38:30 -070014614 for ( i = 0; i <
14615 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14616 i++)
14617 {
14618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14619 "Update Scan Parameters channel: %d",
14620 pUpdateScanParams->aChannels[i]);
14621
14622 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14623 pUpdateScanParams->aChannels[i];
14624 }
14625
Yue Ma7f44bbe2013-04-12 11:47:39 -070014626 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14627 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014628
Jeff Johnson295189b2012-06-20 16:38:30 -070014629 /* Store Params pass it to WDI */
14630 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
14631 pWdaParams->pWdaContext = pWDA;
14632 /* Store param pointer as passed in by caller */
14633 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014634
Jeff Johnson295189b2012-06-20 16:38:30 -070014635
14636
14637 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014638 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014639 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014640 if(IS_WDI_STATUS_FAILURE(status))
14641 {
14642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14643 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14644 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14645 vos_mem_free(pWdaParams->wdaMsgParam);
14646 vos_mem_free(pWdaParams);
14647 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014648 return CONVERT_WDI2VOS_STATUS(status) ;
14649}
14650#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014651
14652#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14653/*
14654 * FUNCTION: WDA_RoamOffloadScanReqCallback
14655 *
14656 */
14657void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14658{
14659 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014660 vos_msg_t vosMsg;
14661 wpt_uint8 reason = 0;
14662
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014664 "<------ %s " ,__func__);
14665 if (NULL == pWdaParams)
14666 {
14667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14668 "%s: pWdaParams received NULL", __func__);
14669 VOS_ASSERT(0) ;
14670 return ;
14671 }
14672 if ( pWdaParams != NULL )
14673 {
14674 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14675 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014676 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14678 }
14679 if ( pWdaParams->wdaMsgParam != NULL)
14680 {
14681 vos_mem_free(pWdaParams->wdaMsgParam);
14682 }
14683
14684 vos_mem_free(pWdaParams) ;
14685 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014686 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14687 vosMsg.bodyptr = NULL;
14688 if (WDI_STATUS_SUCCESS != status)
14689 {
14690 reason = 0;
14691 }
14692 vosMsg.bodyval = reason;
14693 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14694 {
14695 /* free the mem and return */
14696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014697 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014698 }
14699
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014700 return ;
14701}
14702#endif
14703
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014704/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014705 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014706 *
14707 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014708void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014709{
14710 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14711
14712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14713 "<------ %s " ,__func__);
14714
14715 if(NULL == pWdaParams)
14716 {
14717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14718 "%s: pWdaParams received NULL", __func__);
14719 VOS_ASSERT(0);
14720 return;
14721 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014722
14723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14724 vos_mem_free(pWdaParams->wdaMsgParam);
14725 vos_mem_free(pWdaParams);
14726
14727 return;
14728}
14729/*
14730 * FUNCTION: WDA_SetPowerParamsReqCallback
14731 * Free memory.
14732 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14733 */
14734void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14735{
14736 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14737
14738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14739 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14740
14741 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014742 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14744 "%s: pWdaParams received NULL", __func__);
14745 VOS_ASSERT(0);
14746 return;
14747 }
14748
14749 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14750 {
14751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14752 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014753 vos_mem_free(pWdaParams);
14754 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014755
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014756 return;
14757}
14758
Jeff Johnson295189b2012-06-20 16:38:30 -070014759#ifdef WLAN_FEATURE_PACKET_FILTERING
14760/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014761 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014762 *
14763 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014764void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014765 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14766 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014767{
14768 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014770 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014771 if(NULL == pWdaParams)
14772 {
14773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014774 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014775 VOS_ASSERT(0) ;
14776 return ;
14777 }
14778
14779 vos_mem_free(pWdaParams->wdaMsgParam) ;
14780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14781 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014782 //print a msg, nothing else to do
14783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014784 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014785 return ;
14786}
Jeff Johnson295189b2012-06-20 16:38:30 -070014787/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014788 * FUNCTION: WDA_8023MulticastListReqCallback
14789 * Free memory.
14790 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14791 */
14792void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14793{
14794 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14795
14796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14797 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14798
14799 if(NULL == pWdaParams)
14800 {
14801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14802 "%s: pWdaParams received NULL", __func__);
14803 VOS_ASSERT(0);
14804 return;
14805 }
14806
14807 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14808 {
14809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14810 vos_mem_free(pWdaParams->wdaMsgParam);
14811 vos_mem_free(pWdaParams);
14812 }
14813
14814 return;
14815}
14816/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014817 * FUNCTION: WDA_Process8023MulticastListReq
14818 * Request to WDI to add 8023 Multicast List
14819 */
14820VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14821 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14822{
Jeff Johnson43971f52012-07-17 12:26:56 -070014823 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014824 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14825 tWDA_ReqParams *pWdaParams ;
14826 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014828 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014829 pwdiFltPktSetMcListReqParamsType =
14830 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14831 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14832 ) ;
14833 if(NULL == pwdiFltPktSetMcListReqParamsType)
14834 {
14835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014837 return VOS_STATUS_E_NOMEM;
14838 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014839 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14840 if(NULL == pWdaParams)
14841 {
14842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014843 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014844 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14845 return VOS_STATUS_E_NOMEM;
14846 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014847
Jeff Johnson295189b2012-06-20 16:38:30 -070014848 //
14849 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14850 //
14851 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014852 pRcvFltMcAddrList->ulMulticastAddrCnt;
14853
14854 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14855 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14856 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14857 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14858
Jeff Johnson295189b2012-06-20 16:38:30 -070014859 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14860 {
14861 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14862 &(pRcvFltMcAddrList->multicastAddr[i]),
14863 sizeof(tSirMacAddr));
14864 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014865 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14866 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014867
Jeff Johnson295189b2012-06-20 16:38:30 -070014868 /* Store Params pass it to WDI */
14869 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14870 pWdaParams->pWdaContext = pWDA;
14871 /* Store param pointer as passed in by caller */
14872 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014873 status = WDI_8023MulticastListReq(
14874 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014875 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014876 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014877 if(IS_WDI_STATUS_FAILURE(status))
14878 {
14879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14880 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14882 vos_mem_free(pWdaParams->wdaMsgParam);
14883 vos_mem_free(pWdaParams);
14884 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014885 return CONVERT_WDI2VOS_STATUS(status) ;
14886}
Jeff Johnson295189b2012-06-20 16:38:30 -070014887/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014888 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014889 *
14890 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014891void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014892 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14893 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014894{
14895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014897 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014898 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014899 if(NULL == pWdaParams)
14900 {
14901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014902 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014903 VOS_ASSERT(0) ;
14904 return ;
14905 }
14906
14907 vos_mem_free(pWdaParams->wdaMsgParam) ;
14908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14909 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014910 //print a msg, nothing else to do
14911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014912 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014913 return ;
14914}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014915
14916/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014917 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14918 * Free memory.
14919 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014920 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014921void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014922 void* pUserData)
14923{
14924 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14925
14926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14927 "<------ %s, wdiStatus: %d",
14928 __func__, wdiStatus);
14929
14930 if (NULL == pWdaParams)
14931 {
14932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14933 "%s: Invalid pWdaParams pointer", __func__);
14934 VOS_ASSERT(0);
14935 return;
14936 }
14937
14938 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14939 {
14940 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14941 vos_mem_free(pWdaParams->wdaMsgParam);
14942 vos_mem_free(pWdaParams);
14943 }
14944
14945 return;
14946}
14947
Jeff Johnson295189b2012-06-20 16:38:30 -070014948/*
14949 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14950 * Request to WDI to set Receive Filters
14951 */
14952VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14953 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14954{
Jeff Johnson43971f52012-07-17 12:26:56 -070014955 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014956 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14957 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14958 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14959 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14960 tWDA_ReqParams *pWdaParams ;
14961 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014963 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014964 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14965 {
14966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014968 VOS_ASSERT(0);
14969 return VOS_STATUS_E_NOMEM;
14970 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014971 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14972 if(NULL == pWdaParams)
14973 {
14974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014976 VOS_ASSERT(0);
14977 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14978 return VOS_STATUS_E_NOMEM;
14979 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014980 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14981 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14982 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14983 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014984 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14985 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14986
14987 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14988 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014989
14990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14991 "FID %d FT %d NParams %d CT %d",
14992 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14993 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14994 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14995 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014996 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14997 {
14998 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14999 &pRcvPktFilterCfg->paramsData[i],
15000 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070015001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015002 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015003 pwdiSetRcvPktFilterReqParamsType->
15004 wdiPktFilterCfg.paramsData[i].protocolLayer,
15005 pwdiSetRcvPktFilterReqParamsType->
15006 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015008 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015009 pwdiSetRcvPktFilterReqParamsType->
15010 wdiPktFilterCfg.paramsData[i].dataOffset,
15011 pwdiSetRcvPktFilterReqParamsType->
15012 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015014 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015015 pwdiSetRcvPktFilterReqParamsType->
15016 wdiPktFilterCfg.paramsData[i].compareData[0],
15017 pwdiSetRcvPktFilterReqParamsType->
15018 wdiPktFilterCfg.paramsData[i].compareData[1],
15019 pwdiSetRcvPktFilterReqParamsType->
15020 wdiPktFilterCfg.paramsData[i].compareData[2],
15021 pwdiSetRcvPktFilterReqParamsType->
15022 wdiPktFilterCfg.paramsData[i].compareData[3],
15023 pwdiSetRcvPktFilterReqParamsType->
15024 wdiPktFilterCfg.paramsData[i].compareData[4],
15025 pwdiSetRcvPktFilterReqParamsType->
15026 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015028 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015029 pwdiSetRcvPktFilterReqParamsType->
15030 wdiPktFilterCfg.paramsData[i].dataMask[0],
15031 pwdiSetRcvPktFilterReqParamsType->
15032 wdiPktFilterCfg.paramsData[i].dataMask[1],
15033 pwdiSetRcvPktFilterReqParamsType->
15034 wdiPktFilterCfg.paramsData[i].dataMask[2],
15035 pwdiSetRcvPktFilterReqParamsType->
15036 wdiPktFilterCfg.paramsData[i].dataMask[3],
15037 pwdiSetRcvPktFilterReqParamsType->
15038 wdiPktFilterCfg.paramsData[i].dataMask[4],
15039 pwdiSetRcvPktFilterReqParamsType->
15040 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015041 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015042 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015043 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015044 /* Store Params pass it to WDI */
15045 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15046 pWdaParams->pWdaContext = pWDA;
15047 /* Store param pointer as passed in by caller */
15048 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015049 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015050 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015051 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015052 if(IS_WDI_STATUS_FAILURE(status))
15053 {
15054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15055 "Failure in SetFilter(),free all the memory,status %d ",status);
15056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15057 vos_mem_free(pWdaParams->wdaMsgParam);
15058 vos_mem_free(pWdaParams);
15059 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015060 return CONVERT_WDI2VOS_STATUS(status) ;
15061}
Jeff Johnson295189b2012-06-20 16:38:30 -070015062/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015063 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015064 *
15065 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015066void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015067 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15068 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015069{
15070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15071 tWDA_CbContext *pWDA;
15072 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15073 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15074 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15075 tANI_U8 i;
15076 vos_msg_t vosMsg;
15077
15078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015079 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015080 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15081
Jeff Johnsone7245742012-09-05 17:12:55 -070015082 if(NULL == pRcvFltPktMatchCntRsp)
15083 {
15084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015085 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015086 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015087 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015088 return ;
15089 }
15090
Jeff Johnson295189b2012-06-20 16:38:30 -070015091 if(NULL == pWdaParams)
15092 {
15093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015094 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015095 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015096 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015097 return ;
15098 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015099 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15100 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015101 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15102 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15103
15104 /* Message Header */
15105 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15106 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15107
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015108 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015109
15110 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15111 {
15112 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15113 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015115 /* VOS message wrapper */
15116 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15117 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15118 vosMsg.bodyval = 0;
15119 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15120 {
15121 /* free the mem and return */
15122 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15123 }
15124
15125 vos_mem_free(pWdaParams->wdaMsgParam) ;
15126 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15127 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015128
15129 return;
15130}
15131/*
15132 * FUNCTION: WDA_FilterMatchCountReqCallback
15133 * Free memory and send RSP back to SME.
15134 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15135 */
15136void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15137{
15138 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15139 vos_msg_t vosMsg;
15140
15141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15142 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15143
15144 if(NULL == pWdaParams)
15145 {
15146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15147 "%s: pWdaParams received NULL", __func__);
15148 VOS_ASSERT(0);
15149 return;
15150 }
15151
15152 /* VOS message wrapper */
15153 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15154 vosMsg.bodyptr = NULL;
15155 vosMsg.bodyval = 0;
15156
15157 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15158 {
15159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15160 vos_mem_free(pWdaParams->wdaMsgParam);
15161 vos_mem_free(pWdaParams);
15162 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15163 }
15164
15165 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015166}
Jeff Johnson295189b2012-06-20 16:38:30 -070015167/*
15168 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15169 * Request to WDI to get PC Filter Match Count
15170 */
15171VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15172{
Jeff Johnson43971f52012-07-17 12:26:56 -070015173 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015174 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15175 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15176 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015178 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015179 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15180 {
15181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015182 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015183 VOS_ASSERT(0);
15184 return VOS_STATUS_E_NOMEM;
15185 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015186 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15187 if(NULL == pWdaParams)
15188 {
15189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015191 VOS_ASSERT(0);
15192 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15193 return VOS_STATUS_E_NOMEM;
15194 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015195
Yue Ma7f44bbe2013-04-12 11:47:39 -070015196 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15197 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015198
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015199 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15200 pRcvFltPktMatchRsp->bssId,
15201 sizeof(wpt_macAddr));
15202
Jeff Johnson295189b2012-06-20 16:38:30 -070015203 /* Store Params pass it to WDI */
15204 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15205 pWdaParams->pWdaContext = pWDA;
15206 /* Store param pointer as passed in by caller */
15207 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015208 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015209 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015210 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015211 if(IS_WDI_STATUS_FAILURE(status))
15212 {
15213 /* failure returned by WDI API */
15214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15215 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15217 vos_mem_free(pWdaParams) ;
15218 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15219 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15220 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015221 return CONVERT_WDI2VOS_STATUS(status) ;
15222}
Jeff Johnson295189b2012-06-20 16:38:30 -070015223/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015224 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015225 *
15226 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015227void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015228 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
15229 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015230{
15231 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015233 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015234/* WDA_VOS_ASSERT(NULL != pWdaParams); */
15235 if(NULL == pWdaParams)
15236 {
15237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015238 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015239 VOS_ASSERT(0) ;
15240 return ;
15241 }
15242
15243 vos_mem_free(pWdaParams->wdaMsgParam) ;
15244 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15245 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015246 //print a msg, nothing else to do
15247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015248 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015249 return ;
15250}
Jeff Johnson295189b2012-06-20 16:38:30 -070015251/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015252 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
15253 * Free memory.
15254 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
15255 */
15256void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15257{
15258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15259
15260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15261 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15262
15263 if(NULL == pWdaParams)
15264 {
15265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15266 "%s: Invalid pWdaParams pointer", __func__);
15267 VOS_ASSERT(0);
15268 return;
15269 }
15270
15271 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15272 {
15273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15274 vos_mem_free(pWdaParams->wdaMsgParam);
15275 vos_mem_free(pWdaParams);
15276 }
15277
15278 return;
15279}
15280/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015281 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
15282 * Request to WDI to clear Receive Filters
15283 */
15284VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
15285 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
15286{
Jeff Johnson43971f52012-07-17 12:26:56 -070015287 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015288 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
15289 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
15290 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015292 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015293 if(NULL == pwdiRcvFltPktClearReqParamsType)
15294 {
15295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015296 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015297 VOS_ASSERT(0);
15298 return VOS_STATUS_E_NOMEM;
15299 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015300 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15301 if(NULL == pWdaParams)
15302 {
15303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015304 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015305 VOS_ASSERT(0);
15306 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
15307 return VOS_STATUS_E_NOMEM;
15308 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015309 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
15310 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070015311 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
15312 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
15313 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
15314 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015315
Yue Ma7f44bbe2013-04-12 11:47:39 -070015316 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015317 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015318 /* Store Params pass it to WDI */
15319 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
15320 pWdaParams->pWdaContext = pWDA;
15321 /* Store param pointer as passed in by caller */
15322 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015323 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015324 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015325 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015326 if(IS_WDI_STATUS_FAILURE(status))
15327 {
15328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15329 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
15330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080015331 vos_mem_free(pWdaParams->wdaMsgParam);
15332 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015333 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015334 return CONVERT_WDI2VOS_STATUS(status) ;
15335}
15336#endif // WLAN_FEATURE_PACKET_FILTERING
15337
Jeff Johnson295189b2012-06-20 16:38:30 -070015338/*
15339 * FUNCTION: WDA_ProcessSetPowerParamsReq
15340 * Request to WDI to set power params
15341 */
15342VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
15343 tSirSetPowerParamsReq *pPowerParams)
15344{
Jeff Johnson43971f52012-07-17 12:26:56 -070015345 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015346 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
15347 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015348 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015350 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015351 if(NULL == pwdiSetPowerParamsReqInfo)
15352 {
15353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015354 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015355 VOS_ASSERT(0);
15356 return VOS_STATUS_E_NOMEM;
15357 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015358 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15359 if(NULL == pWdaParams)
15360 {
15361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015362 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015363 VOS_ASSERT(0);
15364 vos_mem_free(pwdiSetPowerParamsReqInfo);
15365 return VOS_STATUS_E_NOMEM;
15366 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015367
Jeff Johnson295189b2012-06-20 16:38:30 -070015368
15369 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
15370 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070015371 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
15372 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070015373 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
15374 pPowerParams->uListenInterval;
15375 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
15376 pPowerParams->uBcastMcastFilter;
15377 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
15378 pPowerParams->uEnableBET;
15379 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
15380 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070015381 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
15382 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015383 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
15384 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015385
Jeff Johnson295189b2012-06-20 16:38:30 -070015386 /* Store Params pass it to WDI */
15387 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
15388 pWdaParams->pWdaContext = pWDA;
15389 /* Store param pointer as passed in by caller */
15390 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015391 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015392 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015393 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015394 if(IS_WDI_STATUS_FAILURE(status))
15395 {
15396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15397 "Failure in Set power params REQ WDI API, free all the memory " );
15398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15399 vos_mem_free(pWdaParams->wdaMsgParam);
15400 pWdaParams->wdaWdiApiMsgParam = NULL;
15401 pWdaParams->wdaMsgParam = NULL;
15402 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015403 return CONVERT_WDI2VOS_STATUS(status) ;
15404}
15405
15406/*
15407 * FUNCTION: WDA_SetTmLevelRspCallback
15408 * Set TM Level response
15409 */
15410void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
15411{
15412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15413
15414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015415 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015416
15417 if(NULL == pWdaParams)
15418 {
15419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015420 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015421 VOS_ASSERT(0) ;
15422 return ;
15423 }
15424
15425 /* Dose not need to send notification to upper layer
15426 * Just free allocated resources */
15427 if( pWdaParams != NULL )
15428 {
15429 if( pWdaParams->wdaWdiApiMsgParam != NULL )
15430 {
15431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15432 }
15433 vos_mem_free(pWdaParams->wdaMsgParam) ;
15434 vos_mem_free(pWdaParams) ;
15435 }
15436}
15437
15438/*
15439 * FUNCTION: WDA_ProcessSetTmLevelReq
15440 * Set TM Level request
15441 */
15442VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
15443 tAniSetTmLevelReq *setTmLevelReq)
15444{
15445 WDI_Status status = WDI_STATUS_SUCCESS ;
15446 tWDA_ReqParams *pWdaParams ;
15447 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
15448 (WDI_SetTmLevelReqType *)vos_mem_malloc(
15449 sizeof(WDI_SetTmLevelReqType)) ;
15450 if(NULL == wdiSetTmLevelReq)
15451 {
15452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015453 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015454 VOS_ASSERT(0);
15455 return VOS_STATUS_E_NOMEM;
15456 }
15457
15458 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15459 if(NULL == pWdaParams)
15460 {
15461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015463 VOS_ASSERT(0);
15464 vos_mem_free(wdiSetTmLevelReq);
15465 return VOS_STATUS_E_NOMEM;
15466 }
15467
15468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015469 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015470
15471 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
15472 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
15473
15474 pWdaParams->pWdaContext = pWDA;
15475 pWdaParams->wdaMsgParam = setTmLevelReq;
15476 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
15477
15478 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
15479 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
15480
15481 if(IS_WDI_STATUS_FAILURE(status))
15482 {
15483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080015484 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070015485 vos_mem_free(pWdaParams->wdaMsgParam) ;
15486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15487 vos_mem_free(pWdaParams) ;
15488 }
15489
15490 return CONVERT_WDI2VOS_STATUS(status) ;
15491}
15492
15493VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
15494 tpTxControlParams pTxCtrlParam)
15495{
15496 VOS_STATUS wdaStatus;
15497
15498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015499 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015500 if( pTxCtrlParam == NULL )
15501 {
15502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015503 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015504 return VOS_STATUS_E_FAILURE;
15505 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015506 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
15507 {
15508 wdaStatus = WDA_SuspendDataTx(pWDA);
15509 }
15510 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
15511 {
15512 wdaStatus = WDA_ResumeDataTx(pWDA);
15513 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015514 return wdaStatus;
15515}
15516
15517 /* FUNCTION WDA_featureCapsExchange
15518 * WDA API to invoke capability exchange between host and FW.
15519 */
15520void WDA_featureCapsExchange(v_PVOID_t pVosContext)
15521{
15522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015523 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015524 WDI_featureCapsExchangeReq( NULL, pVosContext);
15525}
15526
Yathish9f22e662012-12-10 14:21:35 -080015527/* FUNCTION WDA_disableCapablityFeature
15528 * WDA API to diable Active mode offload in host.
15529 */
15530void WDA_disableCapablityFeature(tANI_U8 feature_index)
15531{
15532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15533 "%s:enter", __func__ );
15534 WDI_disableCapablityFeature(feature_index);
15535}
15536
Jeff Johnson295189b2012-06-20 16:38:30 -070015537 /* FUNCTION WDA_getHostWlanFeatCaps
15538 * Wrapper for WDI API, that will return if the feature (enum value).passed
15539 * to this API is supported or not in Host
15540 * return value
15541 * 0 - implies feature is NOT Supported
15542 * any non zero value - implies feature is SUPPORTED
15543 */
15544tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15545{
15546 return WDI_getHostWlanFeatCaps(featEnumValue);
15547}
15548
15549 /* FUNCTION WDA_getFwWlanFeatCaps
15550 * Wrapper for WDI API, that will return if the feature (enum value).passed
15551 * to this API is supported or not in FW
15552 * return value
15553 * 0 - implies feature is NOT Supported
15554 * any non zero value - implies feature is SUPPORTED
15555 */
15556tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15557{
15558 return WDI_getFwWlanFeatCaps(featEnumValue);
15559}
15560
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015561
Jeff Johnson295189b2012-06-20 16:38:30 -070015562/*
15563 * FUNCTION: WDA_shutdown
15564 * Shutdown WDA/WDI without handshaking with Riva.
15565 * Synchronous function.
15566 */
15567VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15568{
15569 WDI_Status wdiStatus;
15570 //tANI_U8 eventIdx = 0;
15571 VOS_STATUS status = VOS_STATUS_SUCCESS;
15572 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015573 if (NULL == pWDA)
15574 {
15575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015576 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015577 VOS_ASSERT(0);
15578 return VOS_STATUS_E_FAILURE;
15579 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015580 /* FTM mode stay START_STATE */
15581 if( (WDA_READY_STATE != pWDA->wdaState) &&
15582 (WDA_INIT_STATE != pWDA->wdaState) &&
15583 (WDA_START_STATE != pWDA->wdaState) )
15584 {
15585 VOS_ASSERT(0);
15586 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015587
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015588 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15589 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015590 {
15591 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015592 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015593 }
Leo Chang9d76f622013-08-23 16:34:52 -070015594 else
15595 {
15596 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15597 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015598
Jeff Johnson295189b2012-06-20 16:38:30 -070015599 /* call WDI shutdown */
15600 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015601 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15602 {
15603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15604 "error in WDA Stop" );
15605 status = VOS_STATUS_E_FAILURE;
15606 }
15607 /* WDI stop is synchrnous, shutdown is complete when it returns */
15608 pWDA->wdaState = WDA_STOP_STATE;
15609
Jeff Johnson295189b2012-06-20 16:38:30 -070015610 /* shutdown should perform the stop & close actions. */
15611 /* Destroy the event */
15612 status = vos_event_destroy(&pWDA->txFrameEvent);
15613 if(!VOS_IS_STATUS_SUCCESS(status))
15614 {
15615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015616 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015617 status = VOS_STATUS_E_FAILURE;
15618 }
15619 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15620 if(!VOS_IS_STATUS_SUCCESS(status))
15621 {
15622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015623 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015624 status = VOS_STATUS_E_FAILURE;
15625 }
15626 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15627 if(!VOS_IS_STATUS_SUCCESS(status))
15628 {
15629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015630 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015631 status = VOS_STATUS_E_FAILURE;
15632 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015633 /* free WDA context */
15634 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15635 if ( !VOS_IS_STATUS_SUCCESS(status) )
15636 {
15637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15638 "error in WDA close " );
15639 status = VOS_STATUS_E_FAILURE;
15640 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015641 return status;
15642}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015643
Jeff Johnsone7245742012-09-05 17:12:55 -070015644/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015645 * FUNCTION: WDA_setNeedShutdown
15646 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015647 */
15648
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015649void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015650{
15651 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015652 if(pWDA == NULL)
15653 {
15654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15655 "Could not get the WDA Context pointer" );
15656 return;
15657 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015658 pWDA->needShutdown = TRUE;
15659}
15660/*
15661 * FUNCTION: WDA_needShutdown
15662 * WDA needs a shutdown
15663 */
15664
15665v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15666{
15667 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015668 if(pWDA == NULL)
15669 {
15670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15671 "Could not get the WDA Context pointer" );
15672 return 0;
15673 }
15674 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015675}
15676
Mohit Khanna4a70d262012-09-11 16:30:12 -070015677#ifdef WLAN_FEATURE_11AC
15678/*
15679 * FUNCTION: WDA_SetBeaconFilterReqCallback
15680 *
15681 */
15682void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15683{
15684 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015686 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015687 if(NULL == pWdaParams)
15688 {
15689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015690 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015691 VOS_ASSERT(0) ;
15692 return ;
15693 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015694
Mohit Khanna4a70d262012-09-11 16:30:12 -070015695 vos_mem_free(pWdaParams->wdaMsgParam) ;
15696 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15697 vos_mem_free(pWdaParams) ;
15698 /*
15699 * No respone required for SetBeaconFilter req so just free the request
15700 * param here
15701 */
15702
15703 return ;
15704}
15705
15706VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15707 tUpdateVHTOpMode *pData)
15708{
15709 WDI_Status status = WDI_STATUS_SUCCESS ;
15710 tWDA_ReqParams *pWdaParams ;
15711 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15712 sizeof(WDI_UpdateVHTOpMode)) ;
15713 if(NULL == wdiTemp)
15714 {
15715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015716 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015717 VOS_ASSERT(0);
15718 return VOS_STATUS_E_NOMEM;
15719 }
15720 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15721 if(NULL == pWdaParams)
15722 {
15723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015724 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015725 VOS_ASSERT(0);
15726 vos_mem_free(wdiTemp);
15727 return VOS_STATUS_E_NOMEM;
15728 }
15729
15730 wdiTemp->opMode = pData->opMode;
15731 wdiTemp->staId = pData->staId;
15732
15733 pWdaParams->pWdaContext = pWDA;
15734 /* Store Req pointer, as this will be used for response */
15735 pWdaParams->wdaMsgParam = (void *)pData;
15736 /* store Params pass it to WDI */
15737 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15738
15739 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15740
15741 if(IS_WDI_STATUS_FAILURE(status))
15742 {
15743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15744 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15746 vos_mem_free(pWdaParams->wdaMsgParam);
15747 vos_mem_free(pWdaParams);
15748 }
15749 return CONVERT_WDI2VOS_STATUS(status) ;
15750}
15751#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015752
15753/*==========================================================================
15754 FUNCTION WDA_TransportChannelDebug
15755
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015756 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015757 Display Transport Channel debugging information
15758 User may request to display DXE channel snapshot
15759 Or if host driver detects any abnormal stcuk may display
15760
15761 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015762 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015763 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053015764 debugFlags : Enable stall detect features
15765 defined by WPAL_DeviceDebugFlags
15766 These features may effect
15767 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015768
15769 RETURN VALUE
15770 NONE
15771
15772===========================================================================*/
15773void WDA_TransportChannelDebug
15774(
schang6295e542013-03-12 15:31:23 -070015775 tpAniSirGlobal pMac,
15776 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053015777 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015778)
15779{
Mihir Shete40a55652014-03-02 14:14:47 +053015780 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015781 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015782}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015783
15784/*==========================================================================
15785 FUNCTION WDA_SetEnableSSR
15786
15787 DESCRIPTION
15788 API to enable/disable SSR on WDI timeout
15789
15790 PARAMETERS
15791 enableSSR : enable/disable SSR
15792
15793 RETURN VALUE
15794 NONE
15795
15796===========================================================================*/
15797void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15798{
15799 WDI_SetEnableSSR(enableSSR);
15800}
Leo Chang9056f462013-08-01 19:21:11 -070015801
15802#ifdef FEATURE_WLAN_LPHB
15803/*
15804 * FUNCTION: WDA_LPHBconfRspCallback
15805 *
15806 */
15807void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15808{
15809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15810
15811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15812 "<------ %s " ,__func__);
15813 if (NULL == pWdaParams)
15814 {
15815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15816 "%s: pWdaParams received NULL", __func__);
15817 VOS_ASSERT(0) ;
15818 return ;
15819 }
15820
15821 /* Do not need to send notification to upper layer
15822 * Just free allocated resources */
15823 if (pWdaParams != NULL)
15824 {
15825 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15826 {
15827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15828 }
15829 vos_mem_free(pWdaParams->wdaMsgParam) ;
15830 vos_mem_free(pWdaParams) ;
15831 }
15832
15833 return;
15834}
15835
15836/*
15837 * FUNCTION: WDA_ProcessLPHBConfReq
15838 *
15839 */
15840VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15841 tSirLPHBReq *pData)
15842{
15843 WDI_Status wdiStatus;
15844 tWDA_ReqParams *pWdaParams ;
15845
15846 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15847 "------> %s " , __func__);
15848
15849 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15850 if (NULL == pWdaParams)
15851 {
15852 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15853 "%s: VOS MEM Alloc Failure", __func__);
15854 VOS_ASSERT(0);
15855 vos_mem_free(pData);
15856 return VOS_STATUS_E_NOMEM;
15857 }
15858
15859 pWdaParams->pWdaContext = pWDA;
15860 pWdaParams->wdaMsgParam = (void *)pData;
15861 pWdaParams->wdaWdiApiMsgParam = NULL;
15862
15863 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15864 if (WDI_STATUS_PENDING == wdiStatus)
15865 {
15866 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15867 "Pending received for %s:%d ", __func__, __LINE__);
15868 }
15869 else if (WDI_STATUS_SUCCESS != wdiStatus)
15870 {
15871 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15872 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15873 vos_mem_free(pWdaParams->wdaMsgParam);
15874 vos_mem_free(pWdaParams);
15875 }
15876
15877 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15878}
15879#endif /* FEATURE_WLAN_LPHB */
15880
c_hpothu92367912014-05-01 15:18:17 +053015881void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
15882 void* pUserData)
15883{
15884 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
15885
15886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15887 "<------ %s " ,__func__);
15888 if (NULL == pBcnMissRateInfo)
15889 {
15890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15891 "%s: pWdaParams received NULL", __func__);
15892 VOS_ASSERT(0) ;
15893 return ;
15894 }
15895 if (pBcnMissRateInfo->callback)
15896 {
15897 pBcnMissRateInfo->callback(status, bcnMissRate,
15898 pBcnMissRateInfo->data);
15899 }
15900 vos_mem_free(pUserData);
15901
15902 return;
15903}
15904
15905v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
15906 tSirBcnMissRateReq *pData)
15907{
15908 WDI_Status wdiStatus;
15909 tSirBcnMissRateInfo *pBcnMissRateInfo;
15910
15911 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15912 "------> %s " , __func__);
15913
15914 pBcnMissRateInfo =
15915 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
15916 if (NULL == pBcnMissRateInfo)
15917 {
15918 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15919 "%s: VOS MEM Alloc Failure", __func__);
15920 VOS_ASSERT(0);
15921 vos_mem_free(pData);
15922 return;
15923 }
15924
15925 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
15926 pBcnMissRateInfo->data = pData->data;
15927
15928 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
15929 WDA_GetBcnMissRateCallback,
15930 pData->bssid);
15931 if (WDI_STATUS_PENDING == wdiStatus)
15932 {
15933 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15934 "Pending received for %s:%d ", __func__, __LINE__);
15935 }
15936 else if (WDI_STATUS_SUCCESS != wdiStatus)
15937 {
15938 if (pBcnMissRateInfo->callback)
15939 {
15940 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
15941 -1, pBcnMissRateInfo->data);
15942 }
15943 }
15944 vos_mem_free(pData);
15945}