blob: 91eee330863814a709bef1af8aa7306d77ab289c [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08002 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
Kiet Lam0fb93dd2014-02-19 00:32:59 -08003 *
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.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080020 */
Kiet Lam0fb93dd2014-02-19 00:32:59 -080021
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
Jeff Johnson295189b2012-06-20 16:38:30 -070028#if !defined( __SMEINSIDE_H )
29#define __SMEINSIDE_H
30
31
32/**=========================================================================
33
34 \file smeInside.h
35
36 \brief prototype for SME structures and APIs used insside SME
37
38 Copyright 2008 (c) Qualcomm, Incorporated. All Rights Reserved.
39
40 Qualcomm Confidential and Proprietary.
41
42 ========================================================================*/
43
44/* $Header$ */
45
46/*--------------------------------------------------------------------------
47 Include Files
48 ------------------------------------------------------------------------*/
49#include "vos_status.h"
50#include "vos_lock.h"
51#include "vos_trace.h"
52#include "vos_memory.h"
53#include "vos_types.h"
54#include "sirApi.h"
55#include "csrInternal.h"
56#include "sme_QosApi.h"
57#include "smeQosInternal.h"
58
59
Jeff Johnsone7245742012-09-05 17:12:55 -070060#ifdef FEATURE_OEM_DATA_SUPPORT
61#include "oemDataInternal.h"
62#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070063
64#if defined WLAN_FEATURE_VOWIFI
65#include "sme_RrmApi.h"
66#endif
67
68
69/*--------------------------------------------------------------------------
70 Type declarations
71 ------------------------------------------------------------------------*/
72
Gopichand Nakkala976e3252013-01-03 15:45:56 -080073#define SME_TOTAL_COMMAND 30
Jeff Johnson295189b2012-06-20 16:38:30 -070074
75
76typedef struct sGenericPmcCmd
77{
78 tANI_U32 size; //sizeof the data in the union, if any
79 tRequestFullPowerReason fullPowerReason;
80 tANI_BOOLEAN fReleaseWhenDone; //if TRUE, the command shall not put back to the queue, free te memory instead.
81 union
82 {
83 tExitBmpsInfo exitBmpsInfo;
84 tSirSmeWowlEnterParams enterWowlInfo;
85 }u;
86} tGenericPmcCmd;
87
88
89typedef struct sGenericQosCmd
90{
91 sme_QosWmmTspecInfo tspecInfo;
92 sme_QosEdcaAcType ac;
93 v_U8_t tspec_mask;
94} tGenericQosCmd;
95
Jeff Johnson295189b2012-06-20 16:38:30 -070096typedef struct sRemainChlCmd
97{
98 tANI_U8 chn;
99 tANI_U8 phyMode;
100 tANI_U32 duration;
Gopichand Nakkala924e4552013-05-08 19:18:14 +0530101 tANI_U8 isP2PProbeReqAllowed;
Jeff Johnson295189b2012-06-20 16:38:30 -0700102 void* callback;
103 void* callbackCtx;
104}tRemainChlCmd;
105
106typedef struct sNoACmd
107{
108 tP2pPsConfig NoA;
109} tNoACmd;
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800110#ifdef FEATURE_WLAN_TDLS
111typedef struct TdlsSendMgmtInfo
112{
113 tSirMacAddr peerMac;
114 tANI_U8 frameType;
115 tANI_U8 dialog;
116 tANI_U16 statusCode;
Hoonki Leea34dd892013-02-05 22:56:02 -0800117 tANI_U8 responder;
Pradeep Reddy POTTETIca171f82014-03-21 14:17:35 +0530118 tANI_U32 peerCapability;
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800119 tANI_U8 *buf;
120 tANI_U8 len;
121} tTdlsSendMgmtCmdInfo;
122
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +0530123typedef struct TdlsLinkEstablishInfo
124{
125 tSirMacAddr peerMac;
126 tANI_U8 uapsdQueues;
127 tANI_U8 maxSp;
128 tANI_U8 isBufSta;
Naresh Jayaramdff88f92014-02-12 21:44:29 +0530129 tANI_U8 isOffChannelSupported;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +0530130 tANI_U8 isResponder;
Naresh Jayaramdff88f92014-02-12 21:44:29 +0530131 tANI_U8 supportedChannelsLen;
132 tANI_U8 supportedChannels[SIR_MAC_MAX_SUPP_CHANNELS];
133 tANI_U8 supportedOperClassesLen;
134 tANI_U8 supportedOperClasses[SIR_MAC_MAX_SUPP_OPER_CLASSES];
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +0530135} tTdlsLinkEstablishCmdInfo;
136
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800137typedef struct TdlsAddStaInfo
138{
Gopichand Nakkala681989c2013-03-06 22:27:48 -0800139 eTdlsAddOper tdlsAddOper;
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800140 tSirMacAddr peerMac;
Gopichand Nakkala681989c2013-03-06 22:27:48 -0800141 tANI_U16 capability;
142 tANI_U8 extnCapability[SIR_MAC_MAX_EXTN_CAP];
143 tANI_U8 supportedRatesLen;
144 tANI_U8 supportedRates[SIR_MAC_MAX_SUPP_RATES];
Hoonki Lee66b75f32013-04-16 18:30:07 -0700145 tANI_U8 htcap_present;
Gopichand Nakkala681989c2013-03-06 22:27:48 -0800146 tSirHTCap HTCap;
Hoonki Lee66b75f32013-04-16 18:30:07 -0700147 tANI_U8 vhtcap_present;
Gopichand Nakkala681989c2013-03-06 22:27:48 -0800148 tSirVHTCap VHTCap;
149 tANI_U8 uapsdQueues;
150 tANI_U8 maxSp;
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800151} tTdlsAddStaCmdInfo;
152
153typedef struct TdlsDelStaInfo
154{
155 tSirMacAddr peerMac;
156} tTdlsDelStaCmdInfo;
Atul Mittalc0f739f2014-07-31 13:47:47 +0530157
158// tdlsoffchan
159typedef struct TdlsChanSwitchInfo
160{
161 tSirMacAddr peerMac;
162 tANI_U8 tdlsOffCh;
163 tANI_U8 tdlsOffChBwOffset;
164 tANI_U8 tdlsSwMode;
165} tTdlsChanSwitchCmdInfo;
166
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800167#ifdef FEATURE_WLAN_TDLS_INTERNAL
168typedef struct TdlsDisReqCmdinfo
169{
170 tSirMacAddr peerMac;
171 tANI_U8 tdlsDisType;
172} tTdlsDisReqCmdinfo;
173
174typedef struct tdlsLinkSetupReqCmdinfo
175{
176 tSirMacAddr peerMac;
177} tTdlsLinkSetupReqCmdinfo;
178
179typedef struct tdlsLinkTeardownCmdinfo
180{
181 tSirMacAddr peerMac;
182} tTdlsLinkTeardownCmdinfo;
183#endif
184/*
185 * TDLS cmd info, CMD from SME to PE.
186 */
187typedef struct s_tdls_cmd
188{
189 tANI_U32 size;
190 union
191 {
192#ifdef FEATURE_WLAN_TDLS_INTERNAL
193 tTdlsDisReqCmdinfo tdlsDisReqCmdInfo ;
194 tTdlsLinkSetupReqCmdinfo tdlsLinkSetupReqCmdInfo ;
195 tTdlsLinkTeardownCmdinfo tdlsLinkTeardownCmdInfo ;
196 //tEnterPeerUAPSDInfo enterUapsdInfo ;
197 //tExitPeerUAPSDinfo exitUapsdInfo ;
198#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +0530199 tTdlsLinkEstablishCmdInfo tdlsLinkEstablishCmdInfo;
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800200 tTdlsSendMgmtCmdInfo tdlsSendMgmtCmdInfo;
201 tTdlsAddStaCmdInfo tdlsAddStaCmdInfo;
202 tTdlsDelStaCmdInfo tdlsDelStaCmdInfo;
Atul Mittalc0f739f2014-07-31 13:47:47 +0530203 tTdlsChanSwitchCmdInfo tdlsChanSwitchCmdInfo; //tdlsoffchan
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800204 }u;
205} tTdlsCmd;
206#endif /* FEATURE_WLAN_TDLS */
Jeff Johnson295189b2012-06-20 16:38:30 -0700207
208typedef struct tagSmeCmd
209{
210 tListElem Link;
211 eSmeCommandType command;
212 tANI_U32 sessionId;
213 union
214 {
215 tScanCmd scanCmd;
216 tRoamCmd roamCmd;
217 tWmStatusChangeCmd wmStatusChangeCmd;
218 tSetKeyCmd setKeyCmd;
219 tRemoveKeyCmd removeKeyCmd;
220 tGenericPmcCmd pmcCmd;
221 tGenericQosCmd qosCmd;
Jeff Johnsone7245742012-09-05 17:12:55 -0700222#ifdef FEATURE_OEM_DATA_SUPPORT
223 tOemDataCmd oemDataCmd;
224#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700225 tRemainChlCmd remainChlCmd;
226 tNoACmd NoACmd;
Jeff Johnson295189b2012-06-20 16:38:30 -0700227 tAddStaForSessionCmd addStaSessionCmd;
228 tDelStaForSessionCmd delStaSessionCmd;
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800229#ifdef FEATURE_WLAN_TDLS
230 tTdlsCmd tdlsCmd;
231#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700232 }u;
233}tSmeCmd;
234
235
236
237/*--------------------------------------------------------------------------
238 Internal to SME
239 ------------------------------------------------------------------------*/
240
241//To get a command buffer
242//Return: NULL if there no more command buffer left
243tSmeCmd *smeGetCommandBuffer( tpAniSirGlobal pMac );
244void smePushCommand( tpAniSirGlobal pMac, tSmeCmd *pCmd, tANI_BOOLEAN fHighPriority );
245void smeProcessPendingQueue( tpAniSirGlobal pMac );
246void smeReleaseCommand(tpAniSirGlobal pMac, tSmeCmd *pCmd);
Madan Mohan Koyyalamudi21255992013-08-01 18:00:25 +0530247void purgeSmeSessionCmdList(tpAniSirGlobal pMac, tANI_U32 sessionId,
248 tDblLinkList *pList);
Jeff Johnson295189b2012-06-20 16:38:30 -0700249tANI_BOOLEAN smeCommandPending(tpAniSirGlobal pMac);
250tANI_BOOLEAN pmcProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand );
251//this function is used to abort a command where the normal processing of the command
252//is terminated without going through the normal path. it is here to take care of callbacks for
253//the command, if applicable.
254void pmcAbortCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand, tANI_BOOLEAN fStopping );
255tANI_BOOLEAN qosProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand );
256
257eHalStatus csrProcessScanCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand );
258eHalStatus csrRoamProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand );
259void csrRoamProcessWmStatusChangeCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand );
260void csrReinitRoamCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand);
261void csrReinitWmStatusChangeCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand);
262void csrReinitSetKeyCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand);
263void csrReinitRemoveKeyCmd(tpAniSirGlobal pMac, tSmeCmd *pCommand);
264eHalStatus csrRoamProcessSetKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand );
265eHalStatus csrRoamProcessRemoveKeyCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand );
266void csrReleaseCommandSetKey(tpAniSirGlobal pMac, tSmeCmd *pCommand);
267void csrReleaseCommandRemoveKey(tpAniSirGlobal pMac, tSmeCmd *pCommand);
268//eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessionId, tCsrRoamSetKey *pSetKey, tANI_U32 roamId );
269eHalStatus csrRoamIssueRemoveKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessionId,
270 tCsrRoamRemoveKey *pRemoveKey, tANI_U32 roamId );
271eHalStatus csrIsFullPowerNeeded( tpAniSirGlobal pMac, tSmeCmd *pCommand, tRequestFullPowerReason *pReason,
272 tANI_BOOLEAN *pfNeedPower);
273void csrAbortCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand, tANI_BOOLEAN fStopping );
274
275eHalStatus sme_AcquireGlobalLock( tSmeStruct *psSme);
276eHalStatus sme_ReleaseGlobalLock( tSmeStruct *psSme);
277
Jeff Johnsone7245742012-09-05 17:12:55 -0700278#ifdef FEATURE_OEM_DATA_SUPPORT
279eHalStatus oemData_ProcessOemDataReqCommand(tpAniSirGlobal pMac, tSmeCmd *pCommand);
280#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700281
282eHalStatus csrProcessAddStaSessionCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand );
283eHalStatus csrProcessAddStaSessionRsp( tpAniSirGlobal pMac, tANI_U8 *pMsg);
284eHalStatus csrProcessDelStaSessionCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand );
285eHalStatus csrProcessDelStaSessionRsp( tpAniSirGlobal pMac, tANI_U8 *pMsg);
286
287#ifdef WLAN_NS_OFFLOAD
288/* ---------------------------------------------------------------------------
289 \fn pmcSetNSOffload
290 \brief Set the host offload feature.
291 \param hHal - The handle returned by macOpen.
292 \param pRequest - Pointer to the offload request.
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -0700293 \param sessionId . Session index of the session
Jeff Johnson295189b2012-06-20 16:38:30 -0700294 \return eHalStatus
295 eHAL_STATUS_FAILURE Cannot set the offload.
296 eHAL_STATUS_SUCCESS Request accepted.
297 ---------------------------------------------------------------------------*/
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -0700298eHalStatus pmcSetNSOffload (tHalHandle hHal, tpSirHostOffloadReq pRequest, tANI_U8 sessionId);
Jeff Johnson295189b2012-06-20 16:38:30 -0700299#endif //WLAN_NS_OFFLOAD
300
301#ifdef FEATURE_WLAN_SCAN_PNO
302eHalStatus pmcSetPreferredNetworkList(tHalHandle hHal, tpSirPNOScanReq pRequest, tANI_U8 sessionId, preferredNetworkFoundIndCallback callbackRoutine, void *callbackContext);
303eHalStatus pmcUpdateScanParams(tHalHandle hHal, tCsrConfig *pRequest, tCsrChannel *pChannelList, tANI_U8 b11dResolved);
304eHalStatus pmcSetRssiFilter(tHalHandle hHal, v_U8_t rssiThreshold);
305#endif // FEATURE_WLAN_SCAN_PNO
Tushnim Bhattacharyya3a37def2013-02-24 11:11:15 -0800306eHalStatus pmcSetPowerParams(tHalHandle hHal, tSirSetPowerParamsReq* pwParams, tANI_BOOLEAN forced);
Jeff Johnson295189b2012-06-20 16:38:30 -0700307
308tANI_BOOLEAN csrRoamGetConcurrencyConnectStatusForBmps(tpAniSirGlobal pMac);
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800309#ifdef FEATURE_WLAN_TDLS
310eHalStatus csrTdlsSendMgmtReq(tHalHandle hHal, tANI_U8 sessionId, tCsrTdlsSendMgmt *tdlsSendMgmt);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +0530311VOS_STATUS csrTdlsSendLinkEstablishParams(tHalHandle hHal,
312 tANI_U8 sessionId,
313 tSirMacAddr peerMac,
314 tCsrTdlsLinkEstablishParams *tdlsLinkEstablishParams);
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800315eHalStatus csrTdlsAddPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
Gopichand Nakkala681989c2013-03-06 22:27:48 -0800316eHalStatus csrTdlsChangePeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac, tCsrStaParams *pstaParams);
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800317eHalStatus csrTdlsDelPeerSta(tHalHandle hHal, tANI_U8 sessionId, tSirMacAddr peerMac);
318eHalStatus csrTdlsProcessCmd(tpAniSirGlobal pMac,tSmeCmd *pCommand );
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +0530319eHalStatus csrTdlsProcessLinkEstablish( tpAniSirGlobal pMac, tSmeCmd *cmd );
Atul Mittalc0f739f2014-07-31 13:47:47 +0530320eHalStatus csrTdlsProcessChanSwitchReq(tpAniSirGlobal pMac, tSmeCmd *cmd ); //tdlsoffchan
321eHalStatus tdlsMsgProcessor(tpAniSirGlobal pMac,v_U16_t msg_type, void *pMsgBuf);
322VOS_STATUS csrTdlsSendChanSwitchReq(tHalHandle hHal,
323 tANI_U8 sessionId,
324 tSirMacAddr peerMac,
325 tANI_S32 tdlsOffCh,
326 tANI_S32 tdlsOffChBwOffset,
327 tANI_U8 tdlsSwMode);
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800328#ifdef FEATURE_WLAN_TDLS_INTERNAL
329eHalStatus csrTdlsDiscoveryReq(tHalHandle hHal, tANI_U8 sessionId,
330 tCsrTdlsDisRequest *tdlsDisReq);
331eHalStatus csrTdlsSetupReq(tHalHandle hHal, tANI_U8 sessionId,
332 tCsrTdlsSetupRequest *tdlsSetupReq);
333eHalStatus csrTdlsTeardownReq(tHalHandle hHal, tANI_U8 sessionId,
334 tCsrTdlsTeardownRequest *teardown);
335#endif
Mohit Khanna698ba2a2012-12-04 15:08:18 -0800336#endif /* FEATURE_WLAN_TDLS */
337
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800338#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR)
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700339eHalStatus csrFlushCfgBgScanRoamChannelList(tpAniSirGlobal pMac);
Srinivas Girigowda100eb322013-03-15 16:48:20 -0700340eHalStatus csrCreateBgScanRoamChannelList(tpAniSirGlobal pMac,
341 const tANI_U8 *pChannelList,
342 const tANI_U8 numChannels);
Srinivas Girigowdade697412013-02-14 16:31:48 -0800343eHalStatus csrUpdateBgScanConfigIniChannelList(tpAniSirGlobal pMac, eCsrBand eBand);
Srinivas Girigowdade697412013-02-14 16:31:48 -0800344#endif
345
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800346#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700347eHalStatus csrCreateRoamScanChannelList(tpAniSirGlobal pMac,
348 tANI_U8 *pChannelList,
349 tANI_U8 numChannels,
350 const eCsrBand eBand);
351#endif
Kalikinkar Dharaa4988972013-10-28 13:39:54 -0700352void activeListCmdTimeoutHandle(void *userData);
Srinivas Girigowdade697412013-02-14 16:31:48 -0800353
Kanchanapally, Vidyullatha2ed7bde2014-12-29 12:18:36 +0530354void csrGetStaticUapsdMask(tpAniSirGlobal pMac, tANI_U8 *staticUapsdMask);
355
Jeff Johnson295189b2012-06-20 16:38:30 -0700356#endif //#if !defined( __SMEINSIDE_H )