blob: 5df4eee3d3ddc42992950bc03e19444b0031a36e [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Deepthi Gowri2f435132016-05-18 19:30:17 +05302 * Copyright (c) 2011-2014, 2016 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/** ------------------------------------------------------------------------- *
29 ------------------------------------------------------------------------- *
30
31
32 \file csrNeighborRoam.h
33
34 Exports and types for the neighbor roaming algorithm which is sepcifically
35 designed for Android.
Jeff Johnson295189b2012-06-20 16:38:30 -070036
37========================================================================== */
38#ifndef CSR_NEIGHBOR_ROAM_H
39#define CSR_NEIGHBOR_ROAM_H
40
41#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
Madan Mohan Koyyalamudi48101412013-09-11 23:09:37 +053042#include "sme_Api.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070043
44/* Enumeration of various states in neighbor roam algorithm */
45typedef enum
46{
47 eCSR_NEIGHBOR_ROAM_STATE_CLOSED,
48 eCSR_NEIGHBOR_ROAM_STATE_INIT,
49 eCSR_NEIGHBOR_ROAM_STATE_CONNECTED,
50 eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN,
51 eCSR_NEIGHBOR_ROAM_STATE_REASSOCIATING,
52#ifdef WLAN_FEATURE_VOWIFI_11R
53 eCSR_NEIGHBOR_ROAM_STATE_REPORT_QUERY,
54 eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN,
55 eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING,
56 eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE,
57#endif /* WLAN_FEATURE_VOWIFI_11R */
58 eNEIGHBOR_STATE_MAX
59} eCsrNeighborRoamState;
60
61/* Parameters that are obtained from CFG */
62typedef struct sCsrNeighborRoamCfgParams
63{
64 tANI_U8 maxNeighborRetries;
65 tANI_U32 neighborScanPeriod;
66 tCsrChannelInfo channelInfo;
67 tANI_U8 neighborLookupThreshold;
68 tANI_U8 neighborReassocThreshold;
69 tANI_U32 minChannelScanTime;
70 tANI_U32 maxChannelScanTime;
71 tANI_U16 neighborResultsRefreshPeriod;
Srinivas Girigowdade697412013-02-14 16:31:48 -080072 tANI_U16 emptyScanRefreshPeriod;
Mukul Sharma20aa6582014-08-07 21:36:12 +053073 tANI_U8 neighborInitialForcedRoamTo5GhEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070074} tCsrNeighborRoamCfgParams, *tpCsrNeighborRoamCfgParams;
75
76#define CSR_NEIGHBOR_ROAM_INVALID_CHANNEL_INDEX 255
77typedef struct sCsrNeighborRoamChannelInfo
78{
79 tANI_BOOLEAN IAPPNeighborListReceived; // Flag to mark reception of IAPP Neighbor list
80 tANI_BOOLEAN chanListScanInProgress;
81 tANI_U8 currentChanIndex; //Current channel index that is being scanned
82 tCsrChannelInfo currentChannelListInfo; //Max number of channels in channel list and the list of channels
83} tCsrNeighborRoamChannelInfo, *tpCsrNeighborRoamChannelInfo;
84
85typedef struct sCsrNeighborRoamBSSInfo
86{
87 tListElem List;
88 tANI_U8 apPreferenceVal;
89// tCsrScanResultInfo *scanResultInfo;
90 tpSirBssDescription pBssDescription;
91} tCsrNeighborRoamBSSInfo, *tpCsrNeighborRoamBSSInfo;
92
93#ifdef WLAN_FEATURE_VOWIFI_11R
94#define CSR_NEIGHBOR_ROAM_REPORT_QUERY_TIMEOUT 1000 //in milliseconds
Madan Mohan Koyyalamudiee87bfc2012-09-18 17:21:00 -070095#define CSR_NEIGHBOR_ROAM_PREAUTH_RSP_WAIT_MULTIPLIER 10 //in milliseconds
Jeff Johnson295189b2012-06-20 16:38:30 -070096#define MAX_NUM_PREAUTH_FAIL_LIST_ADDRESS 10 //Max number of MAC addresses with which the pre-auth was failed
Jeff Johnson04dd8a82012-06-29 20:41:40 -070097#define MAX_BSS_IN_NEIGHBOR_RPT 15
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CSR_NEIGHBOR_ROAM_MAX_NUM_PREAUTH_RETRIES 3
Mukul Sharma20aa6582014-08-07 21:36:12 +053099#define INITIAL_FORCED_ROAM_TO_5G_TIMER_PERIOD 5000 //in msecs
Jeff Johnson295189b2012-06-20 16:38:30 -0700100
101/* Black listed APs. List of MAC Addresses with which the Preauthentication was failed. */
102typedef struct sCsrPreauthFailListInfo
103{
104 tANI_U8 numMACAddress;
105 tSirMacAddr macAddress[MAX_NUM_PREAUTH_FAIL_LIST_ADDRESS];
106} tCsrPreauthFailListInfo, *tpCsrPreauthFailListInfo;
107
108typedef struct sCsrNeighborReportBssInfo
109{
110 tANI_U8 channelNum;
111 tANI_U8 neighborScore;
112 tSirMacAddr neighborBssId;
113} tCsrNeighborReportBssInfo, *tpCsrNeighborReportBssInfo;
114
115typedef struct sCsr11rAssocNeighborInfo
116{
117 tANI_BOOLEAN preauthRspPending;
118 tANI_BOOLEAN neighborRptPending;
119 tANI_U8 currentNeighborRptRetryNum;
Jeff Johnson295189b2012-06-20 16:38:30 -0700120 tCsrPreauthFailListInfo preAuthFailList;
121 tANI_U32 neighborReportTimeout;
122 tANI_U32 PEPreauthRespTimeout;
123 tANI_U8 numPreAuthRetries;
124 tDblLinkList preAuthDoneList; /* Linked list which consists or preauthenticated nodes */
125 tANI_U8 numBssFromNeighborReport;
126 tCsrNeighborReportBssInfo neighboReportBssInfo[MAX_BSS_IN_NEIGHBOR_RPT]; //Contains info needed during REPORT_SCAN State
127} tCsr11rAssocNeighborInfo, *tpCsr11rAssocNeighborInfo;
128#endif /* WLAN_FEATURE_VOWIFI_11R */
129
130/* Below macros are used to increase the registered neighbor Lookup threshold with TL when
131 * we dont see any AP during back ground scanning. The values are incremented from neighborLookupThreshold
132 * from CFG, incremented by 5,10,15...50(LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX *
133 * NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT) */
134#define NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT 5
135#define LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX 4
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800136/*
137 * Set lookup UP threshold 5 dB higher than the configured
138 * lookup DOWN threshold to minimize thrashing between
139 * DOWN and UP events.
Madan Mohan Koyyalamudi04039a12012-10-21 12:24:56 -0700140 */
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800141#define NEIGHBOR_ROAM_LOOKUP_UP_THRESHOLD \
142 (pNeighborRoamInfo->cfgParams.neighborLookupThreshold-5)
143#ifdef FEATURE_WLAN_LFR
144typedef enum
145{
146 eFirstEmptyScan=1,
147 eSecondEmptyScan,
148 eThirdEmptyScan,
149 eFourthEmptyScan,
150 eFifthEmptyScan,
Srinivas Girigowdade697412013-02-14 16:31:48 -0800151 eMaxEmptyScan=eFifthEmptyScan,
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800152} eNeighborRoamEmptyScanCount;
Srinivas Girigowdade697412013-02-14 16:31:48 -0800153
154typedef enum
155{
156 DEFAULT_SCAN=0,
157 SPLIT_SCAN_OCCUPIED_LIST=1,
158} eNeighborRoamScanMode;
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800159#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700160
161/* Complete control information for neighbor roam algorithm */
162typedef struct sCsrNeighborRoamControlInfo
163{
164 eCsrNeighborRoamState neighborRoamState;
165 eCsrNeighborRoamState prevNeighborRoamState;
166 tCsrNeighborRoamCfgParams cfgParams;
167 tCsrBssid currAPbssid; // current assoc AP
168 tANI_U8 currAPoperationChannel; // current assoc AP
Madan Mohan Koyyalamudia48c6812013-07-11 12:01:37 +0530169 vos_timer_t neighborScanTimer;
170 vos_timer_t neighborResultsRefreshTimer;
171 vos_timer_t emptyScanRefreshTimer;
Jeff Johnson295189b2012-06-20 16:38:30 -0700172 tCsrNeighborRoamChannelInfo roamChannelInfo;
173 tANI_U8 currentNeighborLookupThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -0700174 tANI_BOOLEAN scanRspPending;
Deepthi Gowri2f435132016-05-18 19:30:17 +0530175 v_TIME_t scanRequestTimeStamp;
Jeff Johnson295189b2012-06-20 16:38:30 -0700176 tDblLinkList roamableAPList; // List of current FT candidates
177 tANI_U32 csrSessionId;
178 tCsrRoamProfile csrNeighborRoamProfile;
179#ifdef WLAN_FEATURE_VOWIFI_11R
180 tANI_BOOLEAN is11rAssoc;
181 tCsr11rAssocNeighborInfo FTRoamInfo;
182#endif /* WLAN_FEATURE_VOWIFI_11R */
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800183#ifdef FEATURE_WLAN_ESE
184 tANI_BOOLEAN isESEAssoc;
Jeff Johnson295189b2012-06-20 16:38:30 -0700185 tANI_BOOLEAN isVOAdmitted;
186 tANI_U32 MinQBssLoadRequired;
187#endif
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800188#ifdef FEATURE_WLAN_LFR
189 tANI_U8 uEmptyScanCount; /* Consecutive number of times scan
190 yielded no results. */
191 tCsrRoamConnectedProfile prevConnProfile; /* Previous connected profile. If the
192 new profile does not match previous
193 we re-initialize occupied channel list */
Srikant Kuppa866893f2012-12-27 17:28:14 -0800194 tANI_S8 lookupDOWNRssi;
Srinivas Girigowdade697412013-02-14 16:31:48 -0800195 tANI_U8 uScanMode;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700196 tANI_U8 uOsRequestedHandoff; /* upper layer requested
197 a reassoc */
Srinivas Girigowda830bbd02013-06-13 19:44:16 -0700198#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700199 tCsrHandoffRequest handoffReqInfo; /* handoff related info came
200 with upper layer's req for
201 reassoc */
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800202#endif
Srinivas Girigowda830bbd02013-06-13 19:44:16 -0700203#endif
Madan Mohan Koyyalamudi48101412013-09-11 23:09:37 +0530204 tSmeFastRoamTrigger cfgRoamEn;
205 tSirMacAddr cfgRoambssId;
Mukul Sharma20aa6582014-08-07 21:36:12 +0530206 vos_timer_t forcedInitialRoamTo5GHTimer;
207 tANI_U8 isForcedInitialRoamTo5GH;
Mukul Sharmad68cda62015-03-20 21:25:41 +0530208 tANI_U8 lastSentCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -0700209} tCsrNeighborRoamControlInfo, *tpCsrNeighborRoamControlInfo;
210
211
212/* All the necessary Function declarations are here */
213eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac,tANI_U8 sessionId, VOS_STATUS status);
214eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac,tANI_U8 sessionId);
215tANI_BOOLEAN csrNeighborRoamIsHandoffInProgress(tpAniSirGlobal pMac);
216void csrNeighborRoamRequestHandoff(tpAniSirGlobal pMac);
217eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac);
218void csrNeighborRoamClose(tpAniSirGlobal pMac);
219void csrNeighborRoamPurgePreauthFailedList(tpAniSirGlobal pMac);
220VOS_STATUS csrNeighborRoamTransitToCFGChanScan(tpAniSirGlobal pMac);
221VOS_STATUS csrNeighborRoamTransitionToPreauthDone(tpAniSirGlobal pMac);
222eHalStatus csrNeighborRoamPrepareScanProfileFilter(tpAniSirGlobal pMac, tCsrScanResultFilter *pScanFilter);
c_hpothub8bdd362014-10-29 20:49:02 +0530223tANI_BOOLEAN csrNeighborRoamGetHandoffAPInfo(tpAniSirGlobal pMac, tpCsrNeighborRoamBSSInfo pHandoffNode);
Srikant Kuppaa3ed0a32013-02-20 07:24:43 -0800224eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus limStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700225#ifdef WLAN_FEATURE_VOWIFI_11R
226tANI_BOOLEAN csrNeighborRoamIs11rAssoc(tpAniSirGlobal pMac);
227#endif
228VOS_STATUS csrNeighborRoamCreateChanListFromNeighborReport(tpAniSirGlobal pMac);
229void csrNeighborRoamTranistionPreauthDoneToDisconnected(tpAniSirGlobal pMac);
230tANI_BOOLEAN csrNeighborRoamStatePreauthDone(tpAniSirGlobal pMac);
Srikant Kuppafef66a72013-01-30 17:32:44 -0800231tANI_BOOLEAN csrNeighborRoamScanRspPending(tHalHandle hHal);
Srinivas Girigowdaa553c462013-03-07 19:42:52 -0800232tANI_BOOLEAN csrNeighborMiddleOfRoaming(tHalHandle hHal);
Srinivas Girigowdade697412013-02-14 16:31:48 -0800233VOS_STATUS csrNeighborRoamSetLookupRssiThreshold(tpAniSirGlobal pMac, v_U8_t neighborLookupRssiThreshold);
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700234VOS_STATUS csrNeighborRoamUpdateFastRoamingEnabled(tpAniSirGlobal pMac, const v_BOOL_t fastRoamEnabled);
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800235VOS_STATUS csrNeighborRoamUpdateEseModeEnabled(tpAniSirGlobal pMac, const v_BOOL_t eseMode);
Mukul Sharma20aa6582014-08-07 21:36:12 +0530236VOS_STATUS csrNeighborRoamChannelsFilterByBand(
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700237 tpAniSirGlobal pMac,
238 tANI_U8* pInputChannelList,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700239 tANI_U8 inputNumOfChannels,
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700240 tANI_U8* pOutputChannelList,
Mukul Sharma20aa6582014-08-07 21:36:12 +0530241 tANI_U8* pMergedOutputNumOfChannels,
242 tSirRFBand band
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700243 );
Madan Mohan Koyyalamudi48101412013-09-11 23:09:37 +0530244VOS_STATUS csrNeighborRoamReassocIndCallback(v_PVOID_t pAdapter,
245 v_U8_t trafficStatus,
246 v_PVOID_t pUserCtxt,
247 v_S7_t avgRssi);
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700248VOS_STATUS csrNeighborRoamMergeChannelLists(tpAniSirGlobal pMac,
249 tANI_U8 *pInputChannelList,
250 tANI_U8 inputNumOfChannels,
251 tANI_U8 *pOutputChannelList,
252 tANI_U8 outputNumOfChannels,
253 tANI_U8 *pMergedOutputNumOfChannels);
254
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700255#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
256#define ROAM_SCAN_OFFLOAD_START 1
257#define ROAM_SCAN_OFFLOAD_STOP 2
258#define ROAM_SCAN_OFFLOAD_RESTART 3
259#define ROAM_SCAN_OFFLOAD_UPDATE_CFG 4
260
261#define REASON_CONNECT 1
262#define REASON_CHANNEL_LIST_CHANGED 2
263#define REASON_LOOKUP_THRESH_CHANGED 3
264#define REASON_DISCONNECTED 4
265#define REASON_RSSI_DIFF_CHANGED 5
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800266#define REASON_ESE_INI_CFG_CHANGED 6
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700267#define REASON_NEIGHBOR_SCAN_REFRESH_PERIOD_CHANGED 7
268#define REASON_VALID_CHANNEL_LIST_CHANGED 8
269#define REASON_FLUSH_CHANNEL_LIST 9
270#define REASON_EMPTY_SCAN_REF_PERIOD_CHANGED 10
271#define REASON_PREAUTH_FAILED_FOR_ALL 11
272#define REASON_NO_CAND_FOUND_OR_NOT_ROAMING_NOW 12
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700273#define REASON_NPROBES_CHANGED 13
274#define REASON_HOME_AWAY_TIME_CHANGED 14
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700275#define REASON_OS_REQUESTED_ROAMING_NOW 15
Varun Reddy Yeturuce114f72013-06-05 14:09:58 -0700276#define REASON_SCAN_CH_TIME_CHANGED 16
277#define REASON_SCAN_HOME_TIME_CHANGED 17
Mukul Sharma20aa6582014-08-07 21:36:12 +0530278#define REASON_INITIAL_FORCED_ROAM_TO_5G 18
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700279eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reason);
280eHalStatus csrNeighborRoamCandidateFoundIndHdlr(tpAniSirGlobal pMac, void* pMsg);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700281eHalStatus csrNeighborRoamHandoffReqHdlr(tpAniSirGlobal pMac, void* pMsg);
282eHalStatus csrNeighborRoamProceedWithHandoffReq(tpAniSirGlobal pMac);
283eHalStatus csrNeighborRoamSssidScanDone(tpAniSirGlobal pMac, eHalStatus status);
Mukul Sharma20aa6582014-08-07 21:36:12 +0530284eHalStatus csrNeighborRoamStartLfrScan(tpAniSirGlobal pMac, tANI_U8 OffloadCmdStopReason);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700285#endif
286
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800287#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700288VOS_STATUS csrSetCCKMIe(tpAniSirGlobal pMac, const tANI_U8 sessionId,
289 const tANI_U8 *pCckmIe,
290 const tANI_U8 ccKmIeLen);
291VOS_STATUS csrRoamReadTSF(tpAniSirGlobal pMac, tANI_U8 *pTimestamp);
292
293
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800294#endif /*FEATURE_WLAN_ESE && FEATURE_WLAN_ESE_UPLOAD */
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700295
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700296
Jeff Johnson295189b2012-06-20 16:38:30 -0700297#endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */
298
299#endif /* CSR_NEIGHBOR_ROAM_H */