blob: 98e4fb053919e0862b7af91124313c337eb2900f [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/** ------------------------------------------------------------------------- *
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;
74 tANI_U8 neighborInitialForcedRoamTo5GhRssiDiff;
Jeff Johnson295189b2012-06-20 16:38:30 -070075} tCsrNeighborRoamCfgParams, *tpCsrNeighborRoamCfgParams;
76
77#define CSR_NEIGHBOR_ROAM_INVALID_CHANNEL_INDEX 255
78typedef struct sCsrNeighborRoamChannelInfo
79{
80 tANI_BOOLEAN IAPPNeighborListReceived; // Flag to mark reception of IAPP Neighbor list
81 tANI_BOOLEAN chanListScanInProgress;
82 tANI_U8 currentChanIndex; //Current channel index that is being scanned
83 tCsrChannelInfo currentChannelListInfo; //Max number of channels in channel list and the list of channels
84} tCsrNeighborRoamChannelInfo, *tpCsrNeighborRoamChannelInfo;
85
86typedef struct sCsrNeighborRoamBSSInfo
87{
88 tListElem List;
89 tANI_U8 apPreferenceVal;
90// tCsrScanResultInfo *scanResultInfo;
91 tpSirBssDescription pBssDescription;
92} tCsrNeighborRoamBSSInfo, *tpCsrNeighborRoamBSSInfo;
93
94#ifdef WLAN_FEATURE_VOWIFI_11R
95#define CSR_NEIGHBOR_ROAM_REPORT_QUERY_TIMEOUT 1000 //in milliseconds
Madan Mohan Koyyalamudiee87bfc2012-09-18 17:21:00 -070096#define CSR_NEIGHBOR_ROAM_PREAUTH_RSP_WAIT_MULTIPLIER 10 //in milliseconds
Jeff Johnson295189b2012-06-20 16:38:30 -070097#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 -070098#define MAX_BSS_IN_NEIGHBOR_RPT 15
Jeff Johnson295189b2012-06-20 16:38:30 -070099#define CSR_NEIGHBOR_ROAM_MAX_NUM_PREAUTH_RETRIES 3
Mukul Sharma20aa6582014-08-07 21:36:12 +0530100#define INITIAL_FORCED_ROAM_TO_5G_TIMER_PERIOD 5000 //in msecs
Jeff Johnson295189b2012-06-20 16:38:30 -0700101
102/* Black listed APs. List of MAC Addresses with which the Preauthentication was failed. */
103typedef struct sCsrPreauthFailListInfo
104{
105 tANI_U8 numMACAddress;
106 tSirMacAddr macAddress[MAX_NUM_PREAUTH_FAIL_LIST_ADDRESS];
107} tCsrPreauthFailListInfo, *tpCsrPreauthFailListInfo;
108
109typedef struct sCsrNeighborReportBssInfo
110{
111 tANI_U8 channelNum;
112 tANI_U8 neighborScore;
113 tSirMacAddr neighborBssId;
114} tCsrNeighborReportBssInfo, *tpCsrNeighborReportBssInfo;
115
116typedef struct sCsr11rAssocNeighborInfo
117{
118 tANI_BOOLEAN preauthRspPending;
119 tANI_BOOLEAN neighborRptPending;
120 tANI_U8 currentNeighborRptRetryNum;
Jeff Johnson295189b2012-06-20 16:38:30 -0700121 tCsrPreauthFailListInfo preAuthFailList;
122 tANI_U32 neighborReportTimeout;
123 tANI_U32 PEPreauthRespTimeout;
124 tANI_U8 numPreAuthRetries;
125 tDblLinkList preAuthDoneList; /* Linked list which consists or preauthenticated nodes */
126 tANI_U8 numBssFromNeighborReport;
127 tCsrNeighborReportBssInfo neighboReportBssInfo[MAX_BSS_IN_NEIGHBOR_RPT]; //Contains info needed during REPORT_SCAN State
128} tCsr11rAssocNeighborInfo, *tpCsr11rAssocNeighborInfo;
129#endif /* WLAN_FEATURE_VOWIFI_11R */
130
131/* Below macros are used to increase the registered neighbor Lookup threshold with TL when
132 * we dont see any AP during back ground scanning. The values are incremented from neighborLookupThreshold
133 * from CFG, incremented by 5,10,15...50(LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX *
134 * NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT) */
135#define NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT 5
136#define LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX 4
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800137/*
138 * Set lookup UP threshold 5 dB higher than the configured
139 * lookup DOWN threshold to minimize thrashing between
140 * DOWN and UP events.
Madan Mohan Koyyalamudi04039a12012-10-21 12:24:56 -0700141 */
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800142#define NEIGHBOR_ROAM_LOOKUP_UP_THRESHOLD \
143 (pNeighborRoamInfo->cfgParams.neighborLookupThreshold-5)
144#ifdef FEATURE_WLAN_LFR
145typedef enum
146{
147 eFirstEmptyScan=1,
148 eSecondEmptyScan,
149 eThirdEmptyScan,
150 eFourthEmptyScan,
151 eFifthEmptyScan,
Srinivas Girigowdade697412013-02-14 16:31:48 -0800152 eMaxEmptyScan=eFifthEmptyScan,
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800153} eNeighborRoamEmptyScanCount;
Srinivas Girigowdade697412013-02-14 16:31:48 -0800154
155typedef enum
156{
157 DEFAULT_SCAN=0,
158 SPLIT_SCAN_OCCUPIED_LIST=1,
159} eNeighborRoamScanMode;
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800160#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700161
162/* Complete control information for neighbor roam algorithm */
163typedef struct sCsrNeighborRoamControlInfo
164{
165 eCsrNeighborRoamState neighborRoamState;
166 eCsrNeighborRoamState prevNeighborRoamState;
167 tCsrNeighborRoamCfgParams cfgParams;
168 tCsrBssid currAPbssid; // current assoc AP
169 tANI_U8 currAPoperationChannel; // current assoc AP
Madan Mohan Koyyalamudia48c6812013-07-11 12:01:37 +0530170 vos_timer_t neighborScanTimer;
171 vos_timer_t neighborResultsRefreshTimer;
172 vos_timer_t emptyScanRefreshTimer;
Jeff Johnson295189b2012-06-20 16:38:30 -0700173 tCsrTimerInfo neighborScanTimerInfo;
174 tCsrNeighborRoamChannelInfo roamChannelInfo;
175 tANI_U8 currentNeighborLookupThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -0700176 tANI_BOOLEAN scanRspPending;
177 tANI_TIMESTAMP scanRequestTimeStamp;
178 tDblLinkList roamableAPList; // List of current FT candidates
179 tANI_U32 csrSessionId;
180 tCsrRoamProfile csrNeighborRoamProfile;
181#ifdef WLAN_FEATURE_VOWIFI_11R
182 tANI_BOOLEAN is11rAssoc;
183 tCsr11rAssocNeighborInfo FTRoamInfo;
184#endif /* WLAN_FEATURE_VOWIFI_11R */
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800185#ifdef FEATURE_WLAN_ESE
186 tANI_BOOLEAN isESEAssoc;
Jeff Johnson295189b2012-06-20 16:38:30 -0700187 tANI_BOOLEAN isVOAdmitted;
188 tANI_U32 MinQBssLoadRequired;
189#endif
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800190#ifdef FEATURE_WLAN_LFR
191 tANI_U8 uEmptyScanCount; /* Consecutive number of times scan
192 yielded no results. */
193 tCsrRoamConnectedProfile prevConnProfile; /* Previous connected profile. If the
194 new profile does not match previous
195 we re-initialize occupied channel list */
Srikant Kuppa866893f2012-12-27 17:28:14 -0800196 tANI_S8 lookupDOWNRssi;
Srinivas Girigowdade697412013-02-14 16:31:48 -0800197 tANI_U8 uScanMode;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700198 tANI_U8 uOsRequestedHandoff; /* upper layer requested
199 a reassoc */
Srinivas Girigowda830bbd02013-06-13 19:44:16 -0700200#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700201 tCsrHandoffRequest handoffReqInfo; /* handoff related info came
202 with upper layer's req for
203 reassoc */
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800204#endif
Srinivas Girigowda830bbd02013-06-13 19:44:16 -0700205#endif
Madan Mohan Koyyalamudi48101412013-09-11 23:09:37 +0530206 tSmeFastRoamTrigger cfgRoamEn;
207 tSirMacAddr cfgRoambssId;
Mukul Sharma20aa6582014-08-07 21:36:12 +0530208 vos_timer_t forcedInitialRoamTo5GHTimer;
209 tANI_U8 isForcedInitialRoamTo5GH;
Jeff Johnson295189b2012-06-20 16:38:30 -0700210} tCsrNeighborRoamControlInfo, *tpCsrNeighborRoamControlInfo;
211
212
213/* All the necessary Function declarations are here */
214eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac,tANI_U8 sessionId, VOS_STATUS status);
215eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac,tANI_U8 sessionId);
216tANI_BOOLEAN csrNeighborRoamIsHandoffInProgress(tpAniSirGlobal pMac);
217void csrNeighborRoamRequestHandoff(tpAniSirGlobal pMac);
218eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac);
219void csrNeighborRoamClose(tpAniSirGlobal pMac);
220void csrNeighborRoamPurgePreauthFailedList(tpAniSirGlobal pMac);
221VOS_STATUS csrNeighborRoamTransitToCFGChanScan(tpAniSirGlobal pMac);
222VOS_STATUS csrNeighborRoamTransitionToPreauthDone(tpAniSirGlobal pMac);
223eHalStatus csrNeighborRoamPrepareScanProfileFilter(tpAniSirGlobal pMac, tCsrScanResultFilter *pScanFilter);
224void csrNeighborRoamGetHandoffAPInfo(tpAniSirGlobal pMac, tpCsrNeighborRoamBSSInfo pHandoffNode);
Srikant Kuppaa3ed0a32013-02-20 07:24:43 -0800225eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus limStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700226#ifdef WLAN_FEATURE_VOWIFI_11R
227tANI_BOOLEAN csrNeighborRoamIs11rAssoc(tpAniSirGlobal pMac);
228#endif
229VOS_STATUS csrNeighborRoamCreateChanListFromNeighborReport(tpAniSirGlobal pMac);
230void csrNeighborRoamTranistionPreauthDoneToDisconnected(tpAniSirGlobal pMac);
231tANI_BOOLEAN csrNeighborRoamStatePreauthDone(tpAniSirGlobal pMac);
Srikant Kuppafef66a72013-01-30 17:32:44 -0800232tANI_BOOLEAN csrNeighborRoamScanRspPending(tHalHandle hHal);
Srinivas Girigowdaa553c462013-03-07 19:42:52 -0800233tANI_BOOLEAN csrNeighborMiddleOfRoaming(tHalHandle hHal);
Srinivas Girigowdade697412013-02-14 16:31:48 -0800234VOS_STATUS csrNeighborRoamSetLookupRssiThreshold(tpAniSirGlobal pMac, v_U8_t neighborLookupRssiThreshold);
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700235VOS_STATUS csrNeighborRoamUpdateFastRoamingEnabled(tpAniSirGlobal pMac, const v_BOOL_t fastRoamEnabled);
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800236VOS_STATUS csrNeighborRoamUpdateEseModeEnabled(tpAniSirGlobal pMac, const v_BOOL_t eseMode);
Mukul Sharma20aa6582014-08-07 21:36:12 +0530237VOS_STATUS csrNeighborRoamChannelsFilterByBand(
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700238 tpAniSirGlobal pMac,
239 tANI_U8* pInputChannelList,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700240 tANI_U8 inputNumOfChannels,
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700241 tANI_U8* pOutputChannelList,
Mukul Sharma20aa6582014-08-07 21:36:12 +0530242 tANI_U8* pMergedOutputNumOfChannels,
243 tSirRFBand band
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700244 );
Madan Mohan Koyyalamudi48101412013-09-11 23:09:37 +0530245VOS_STATUS csrNeighborRoamReassocIndCallback(v_PVOID_t pAdapter,
246 v_U8_t trafficStatus,
247 v_PVOID_t pUserCtxt,
248 v_S7_t avgRssi);
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700249VOS_STATUS csrNeighborRoamMergeChannelLists(tpAniSirGlobal pMac,
250 tANI_U8 *pInputChannelList,
251 tANI_U8 inputNumOfChannels,
252 tANI_U8 *pOutputChannelList,
253 tANI_U8 outputNumOfChannels,
254 tANI_U8 *pMergedOutputNumOfChannels);
255
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700256#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
257#define ROAM_SCAN_OFFLOAD_START 1
258#define ROAM_SCAN_OFFLOAD_STOP 2
259#define ROAM_SCAN_OFFLOAD_RESTART 3
260#define ROAM_SCAN_OFFLOAD_UPDATE_CFG 4
261
262#define REASON_CONNECT 1
263#define REASON_CHANNEL_LIST_CHANGED 2
264#define REASON_LOOKUP_THRESH_CHANGED 3
265#define REASON_DISCONNECTED 4
266#define REASON_RSSI_DIFF_CHANGED 5
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800267#define REASON_ESE_INI_CFG_CHANGED 6
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700268#define REASON_NEIGHBOR_SCAN_REFRESH_PERIOD_CHANGED 7
269#define REASON_VALID_CHANNEL_LIST_CHANGED 8
270#define REASON_FLUSH_CHANNEL_LIST 9
271#define REASON_EMPTY_SCAN_REF_PERIOD_CHANGED 10
272#define REASON_PREAUTH_FAILED_FOR_ALL 11
273#define REASON_NO_CAND_FOUND_OR_NOT_ROAMING_NOW 12
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700274#define REASON_NPROBES_CHANGED 13
275#define REASON_HOME_AWAY_TIME_CHANGED 14
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700276#define REASON_OS_REQUESTED_ROAMING_NOW 15
Varun Reddy Yeturuce114f72013-06-05 14:09:58 -0700277#define REASON_SCAN_CH_TIME_CHANGED 16
278#define REASON_SCAN_HOME_TIME_CHANGED 17
Mukul Sharma20aa6582014-08-07 21:36:12 +0530279#define REASON_INITIAL_FORCED_ROAM_TO_5G 18
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700280eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reason);
281eHalStatus csrNeighborRoamCandidateFoundIndHdlr(tpAniSirGlobal pMac, void* pMsg);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700282eHalStatus csrNeighborRoamHandoffReqHdlr(tpAniSirGlobal pMac, void* pMsg);
283eHalStatus csrNeighborRoamProceedWithHandoffReq(tpAniSirGlobal pMac);
284eHalStatus csrNeighborRoamSssidScanDone(tpAniSirGlobal pMac, eHalStatus status);
Mukul Sharma20aa6582014-08-07 21:36:12 +0530285eHalStatus csrNeighborRoamStartLfrScan(tpAniSirGlobal pMac, tANI_U8 OffloadCmdStopReason);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700286#endif
287
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800288#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700289VOS_STATUS csrSetCCKMIe(tpAniSirGlobal pMac, const tANI_U8 sessionId,
290 const tANI_U8 *pCckmIe,
291 const tANI_U8 ccKmIeLen);
292VOS_STATUS csrRoamReadTSF(tpAniSirGlobal pMac, tANI_U8 *pTimestamp);
293
294
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -0800295#endif /*FEATURE_WLAN_ESE && FEATURE_WLAN_ESE_UPLOAD */
Srinivas Girigowda5cecb202013-10-08 09:13:25 -0700296
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700297
Jeff Johnson295189b2012-06-20 16:38:30 -0700298#endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */
299
300#endif /* CSR_NEIGHBOR_ROAM_H */