blob: 3d46c51fb9bd86dad30b23e3dfb98e9ac91a9f42 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, 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/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/** ------------------------------------------------------------------------- *
43 ------------------------------------------------------------------------- *
44
45
46 \file csrNeighborRoam.h
47
48 Exports and types for the neighbor roaming algorithm which is sepcifically
49 designed for Android.
50
51 Copyright (C) 2006 Airgo Networks, Incorporated
52
53========================================================================== */
54#ifndef CSR_NEIGHBOR_ROAM_H
55#define CSR_NEIGHBOR_ROAM_H
56
57#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
Madan Mohan Koyyalamudi48101412013-09-11 23:09:37 +053058#include "sme_Api.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070059
60/* Enumeration of various states in neighbor roam algorithm */
61typedef enum
62{
63 eCSR_NEIGHBOR_ROAM_STATE_CLOSED,
64 eCSR_NEIGHBOR_ROAM_STATE_INIT,
65 eCSR_NEIGHBOR_ROAM_STATE_CONNECTED,
66 eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN,
67 eCSR_NEIGHBOR_ROAM_STATE_REASSOCIATING,
68#ifdef WLAN_FEATURE_VOWIFI_11R
69 eCSR_NEIGHBOR_ROAM_STATE_REPORT_QUERY,
70 eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN,
71 eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING,
72 eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE,
73#endif /* WLAN_FEATURE_VOWIFI_11R */
74 eNEIGHBOR_STATE_MAX
75} eCsrNeighborRoamState;
76
77/* Parameters that are obtained from CFG */
78typedef struct sCsrNeighborRoamCfgParams
79{
80 tANI_U8 maxNeighborRetries;
81 tANI_U32 neighborScanPeriod;
82 tCsrChannelInfo channelInfo;
83 tANI_U8 neighborLookupThreshold;
84 tANI_U8 neighborReassocThreshold;
85 tANI_U32 minChannelScanTime;
86 tANI_U32 maxChannelScanTime;
87 tANI_U16 neighborResultsRefreshPeriod;
Srinivas Girigowdade697412013-02-14 16:31:48 -080088 tANI_U16 emptyScanRefreshPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070089} tCsrNeighborRoamCfgParams, *tpCsrNeighborRoamCfgParams;
90
91#define CSR_NEIGHBOR_ROAM_INVALID_CHANNEL_INDEX 255
92typedef struct sCsrNeighborRoamChannelInfo
93{
94 tANI_BOOLEAN IAPPNeighborListReceived; // Flag to mark reception of IAPP Neighbor list
95 tANI_BOOLEAN chanListScanInProgress;
96 tANI_U8 currentChanIndex; //Current channel index that is being scanned
97 tCsrChannelInfo currentChannelListInfo; //Max number of channels in channel list and the list of channels
98} tCsrNeighborRoamChannelInfo, *tpCsrNeighborRoamChannelInfo;
99
100typedef struct sCsrNeighborRoamBSSInfo
101{
102 tListElem List;
103 tANI_U8 apPreferenceVal;
104// tCsrScanResultInfo *scanResultInfo;
105 tpSirBssDescription pBssDescription;
106} tCsrNeighborRoamBSSInfo, *tpCsrNeighborRoamBSSInfo;
107
108#ifdef WLAN_FEATURE_VOWIFI_11R
109#define CSR_NEIGHBOR_ROAM_REPORT_QUERY_TIMEOUT 1000 //in milliseconds
Madan Mohan Koyyalamudiee87bfc2012-09-18 17:21:00 -0700110#define CSR_NEIGHBOR_ROAM_PREAUTH_RSP_WAIT_MULTIPLIER 10 //in milliseconds
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#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 -0700112#define MAX_BSS_IN_NEIGHBOR_RPT 15
Jeff Johnson295189b2012-06-20 16:38:30 -0700113#define CSR_NEIGHBOR_ROAM_MAX_NUM_PREAUTH_RETRIES 3
114
115/* Black listed APs. List of MAC Addresses with which the Preauthentication was failed. */
116typedef struct sCsrPreauthFailListInfo
117{
118 tANI_U8 numMACAddress;
119 tSirMacAddr macAddress[MAX_NUM_PREAUTH_FAIL_LIST_ADDRESS];
120} tCsrPreauthFailListInfo, *tpCsrPreauthFailListInfo;
121
122typedef struct sCsrNeighborReportBssInfo
123{
124 tANI_U8 channelNum;
125 tANI_U8 neighborScore;
126 tSirMacAddr neighborBssId;
127} tCsrNeighborReportBssInfo, *tpCsrNeighborReportBssInfo;
128
129typedef struct sCsr11rAssocNeighborInfo
130{
131 tANI_BOOLEAN preauthRspPending;
132 tANI_BOOLEAN neighborRptPending;
133 tANI_U8 currentNeighborRptRetryNum;
Jeff Johnson295189b2012-06-20 16:38:30 -0700134 tCsrPreauthFailListInfo preAuthFailList;
135 tANI_U32 neighborReportTimeout;
136 tANI_U32 PEPreauthRespTimeout;
137 tANI_U8 numPreAuthRetries;
138 tDblLinkList preAuthDoneList; /* Linked list which consists or preauthenticated nodes */
139 tANI_U8 numBssFromNeighborReport;
140 tCsrNeighborReportBssInfo neighboReportBssInfo[MAX_BSS_IN_NEIGHBOR_RPT]; //Contains info needed during REPORT_SCAN State
141} tCsr11rAssocNeighborInfo, *tpCsr11rAssocNeighborInfo;
142#endif /* WLAN_FEATURE_VOWIFI_11R */
143
144/* Below macros are used to increase the registered neighbor Lookup threshold with TL when
145 * we dont see any AP during back ground scanning. The values are incremented from neighborLookupThreshold
146 * from CFG, incremented by 5,10,15...50(LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX *
147 * NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT) */
148#define NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT 5
149#define LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX 4
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800150/*
151 * Set lookup UP threshold 5 dB higher than the configured
152 * lookup DOWN threshold to minimize thrashing between
153 * DOWN and UP events.
Madan Mohan Koyyalamudi04039a12012-10-21 12:24:56 -0700154 */
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800155#define NEIGHBOR_ROAM_LOOKUP_UP_THRESHOLD \
156 (pNeighborRoamInfo->cfgParams.neighborLookupThreshold-5)
157#ifdef FEATURE_WLAN_LFR
158typedef enum
159{
160 eFirstEmptyScan=1,
161 eSecondEmptyScan,
162 eThirdEmptyScan,
163 eFourthEmptyScan,
164 eFifthEmptyScan,
Srinivas Girigowdade697412013-02-14 16:31:48 -0800165 eMaxEmptyScan=eFifthEmptyScan,
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800166} eNeighborRoamEmptyScanCount;
Srinivas Girigowdade697412013-02-14 16:31:48 -0800167
168typedef enum
169{
170 DEFAULT_SCAN=0,
171 SPLIT_SCAN_OCCUPIED_LIST=1,
172} eNeighborRoamScanMode;
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800173#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700174
175/* Complete control information for neighbor roam algorithm */
176typedef struct sCsrNeighborRoamControlInfo
177{
178 eCsrNeighborRoamState neighborRoamState;
179 eCsrNeighborRoamState prevNeighborRoamState;
180 tCsrNeighborRoamCfgParams cfgParams;
181 tCsrBssid currAPbssid; // current assoc AP
182 tANI_U8 currAPoperationChannel; // current assoc AP
Madan Mohan Koyyalamudia48c6812013-07-11 12:01:37 +0530183 vos_timer_t neighborScanTimer;
184 vos_timer_t neighborResultsRefreshTimer;
185 vos_timer_t emptyScanRefreshTimer;
Jeff Johnson295189b2012-06-20 16:38:30 -0700186 tCsrTimerInfo neighborScanTimerInfo;
187 tCsrNeighborRoamChannelInfo roamChannelInfo;
188 tANI_U8 currentNeighborLookupThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -0700189 tANI_BOOLEAN scanRspPending;
190 tANI_TIMESTAMP scanRequestTimeStamp;
191 tDblLinkList roamableAPList; // List of current FT candidates
192 tANI_U32 csrSessionId;
193 tCsrRoamProfile csrNeighborRoamProfile;
194#ifdef WLAN_FEATURE_VOWIFI_11R
195 tANI_BOOLEAN is11rAssoc;
196 tCsr11rAssocNeighborInfo FTRoamInfo;
197#endif /* WLAN_FEATURE_VOWIFI_11R */
198#ifdef FEATURE_WLAN_CCX
199 tANI_BOOLEAN isCCXAssoc;
200 tANI_BOOLEAN isVOAdmitted;
201 tANI_U32 MinQBssLoadRequired;
202#endif
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800203#ifdef FEATURE_WLAN_LFR
204 tANI_U8 uEmptyScanCount; /* Consecutive number of times scan
205 yielded no results. */
206 tCsrRoamConnectedProfile prevConnProfile; /* Previous connected profile. If the
207 new profile does not match previous
208 we re-initialize occupied channel list */
Srikant Kuppa866893f2012-12-27 17:28:14 -0800209 tANI_S8 lookupDOWNRssi;
Srinivas Girigowdade697412013-02-14 16:31:48 -0800210 tANI_U8 uScanMode;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700211 tANI_U8 uOsRequestedHandoff; /* upper layer requested
212 a reassoc */
Srinivas Girigowda830bbd02013-06-13 19:44:16 -0700213#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700214 tCsrHandoffRequest handoffReqInfo; /* handoff related info came
215 with upper layer's req for
216 reassoc */
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800217#endif
Srinivas Girigowda830bbd02013-06-13 19:44:16 -0700218#endif
Madan Mohan Koyyalamudi48101412013-09-11 23:09:37 +0530219 tSmeFastRoamTrigger cfgRoamEn;
220 tSirMacAddr cfgRoambssId;
Jeff Johnson295189b2012-06-20 16:38:30 -0700221} tCsrNeighborRoamControlInfo, *tpCsrNeighborRoamControlInfo;
222
223
224/* All the necessary Function declarations are here */
225eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac,tANI_U8 sessionId, VOS_STATUS status);
226eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac,tANI_U8 sessionId);
227tANI_BOOLEAN csrNeighborRoamIsHandoffInProgress(tpAniSirGlobal pMac);
228void csrNeighborRoamRequestHandoff(tpAniSirGlobal pMac);
229eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac);
230void csrNeighborRoamClose(tpAniSirGlobal pMac);
231void csrNeighborRoamPurgePreauthFailedList(tpAniSirGlobal pMac);
232VOS_STATUS csrNeighborRoamTransitToCFGChanScan(tpAniSirGlobal pMac);
233VOS_STATUS csrNeighborRoamTransitionToPreauthDone(tpAniSirGlobal pMac);
234eHalStatus csrNeighborRoamPrepareScanProfileFilter(tpAniSirGlobal pMac, tCsrScanResultFilter *pScanFilter);
235void csrNeighborRoamGetHandoffAPInfo(tpAniSirGlobal pMac, tpCsrNeighborRoamBSSInfo pHandoffNode);
Srikant Kuppaa3ed0a32013-02-20 07:24:43 -0800236eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus limStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700237#ifdef WLAN_FEATURE_VOWIFI_11R
238tANI_BOOLEAN csrNeighborRoamIs11rAssoc(tpAniSirGlobal pMac);
239#endif
240VOS_STATUS csrNeighborRoamCreateChanListFromNeighborReport(tpAniSirGlobal pMac);
241void csrNeighborRoamTranistionPreauthDoneToDisconnected(tpAniSirGlobal pMac);
242tANI_BOOLEAN csrNeighborRoamStatePreauthDone(tpAniSirGlobal pMac);
Srikant Kuppafef66a72013-01-30 17:32:44 -0800243tANI_BOOLEAN csrNeighborRoamScanRspPending(tHalHandle hHal);
Srinivas Girigowdaa553c462013-03-07 19:42:52 -0800244tANI_BOOLEAN csrNeighborMiddleOfRoaming(tHalHandle hHal);
Srinivas Girigowdade697412013-02-14 16:31:48 -0800245VOS_STATUS csrNeighborRoamSetLookupRssiThreshold(tpAniSirGlobal pMac, v_U8_t neighborLookupRssiThreshold);
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700246VOS_STATUS csrNeighborRoamUpdateFastRoamingEnabled(tpAniSirGlobal pMac, const v_BOOL_t fastRoamEnabled);
247VOS_STATUS csrNeighborRoamUpdateCcxModeEnabled(tpAniSirGlobal pMac, const v_BOOL_t ccxMode);
248VOS_STATUS csrNeighborRoamChannelsFilterByCurrentBand(
249 tpAniSirGlobal pMac,
250 tANI_U8* pInputChannelList,
251 int inputNumOfChannels,
252 tANI_U8* pOutputChannelList,
253 int* pMergedOutputNumOfChannels
254 );
Madan Mohan Koyyalamudi48101412013-09-11 23:09:37 +0530255VOS_STATUS csrNeighborRoamReassocIndCallback(v_PVOID_t pAdapter,
256 v_U8_t trafficStatus,
257 v_PVOID_t pUserCtxt,
258 v_S7_t avgRssi);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700259#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
260#define ROAM_SCAN_OFFLOAD_START 1
261#define ROAM_SCAN_OFFLOAD_STOP 2
262#define ROAM_SCAN_OFFLOAD_RESTART 3
263#define ROAM_SCAN_OFFLOAD_UPDATE_CFG 4
264
265#define REASON_CONNECT 1
266#define REASON_CHANNEL_LIST_CHANGED 2
267#define REASON_LOOKUP_THRESH_CHANGED 3
268#define REASON_DISCONNECTED 4
269#define REASON_RSSI_DIFF_CHANGED 5
270#define REASON_CCX_INI_CFG_CHANGED 6
271#define REASON_NEIGHBOR_SCAN_REFRESH_PERIOD_CHANGED 7
272#define REASON_VALID_CHANNEL_LIST_CHANGED 8
273#define REASON_FLUSH_CHANNEL_LIST 9
274#define REASON_EMPTY_SCAN_REF_PERIOD_CHANGED 10
275#define REASON_PREAUTH_FAILED_FOR_ALL 11
276#define REASON_NO_CAND_FOUND_OR_NOT_ROAMING_NOW 12
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700277#define REASON_NPROBES_CHANGED 13
278#define REASON_HOME_AWAY_TIME_CHANGED 14
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700279#define REASON_OS_REQUESTED_ROAMING_NOW 15
Varun Reddy Yeturuce114f72013-06-05 14:09:58 -0700280#define REASON_SCAN_CH_TIME_CHANGED 16
281#define REASON_SCAN_HOME_TIME_CHANGED 17
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700282eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reason);
283eHalStatus csrNeighborRoamCandidateFoundIndHdlr(tpAniSirGlobal pMac, void* pMsg);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700284eHalStatus csrNeighborRoamHandoffReqHdlr(tpAniSirGlobal pMac, void* pMsg);
285eHalStatus csrNeighborRoamProceedWithHandoffReq(tpAniSirGlobal pMac);
286eHalStatus csrNeighborRoamSssidScanDone(tpAniSirGlobal pMac, eHalStatus status);
Varun Reddy Yeturue3af4282013-06-07 00:56:52 -0700287eHalStatus csrNeighborRoamStartLfrScan(tpAniSirGlobal pMac);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700288#endif
289
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700290
Jeff Johnson295189b2012-06-20 16:38:30 -0700291#endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */
292
293#endif /* CSR_NEIGHBOR_ROAM_H */