blob: e196de0e9a23771ba1036615cf3333116123365c [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
58
59/* Enumeration of various states in neighbor roam algorithm */
60typedef enum
61{
62 eCSR_NEIGHBOR_ROAM_STATE_CLOSED,
63 eCSR_NEIGHBOR_ROAM_STATE_INIT,
64 eCSR_NEIGHBOR_ROAM_STATE_CONNECTED,
65 eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN,
66 eCSR_NEIGHBOR_ROAM_STATE_REASSOCIATING,
67#ifdef WLAN_FEATURE_VOWIFI_11R
68 eCSR_NEIGHBOR_ROAM_STATE_REPORT_QUERY,
69 eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN,
70 eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING,
71 eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE,
72#endif /* WLAN_FEATURE_VOWIFI_11R */
73 eNEIGHBOR_STATE_MAX
74} eCsrNeighborRoamState;
75
76/* Parameters that are obtained from CFG */
77typedef struct sCsrNeighborRoamCfgParams
78{
79 tANI_U8 maxNeighborRetries;
80 tANI_U32 neighborScanPeriod;
81 tCsrChannelInfo channelInfo;
82 tANI_U8 neighborLookupThreshold;
83 tANI_U8 neighborReassocThreshold;
84 tANI_U32 minChannelScanTime;
85 tANI_U32 maxChannelScanTime;
86 tANI_U16 neighborResultsRefreshPeriod;
Srinivas Girigowdade697412013-02-14 16:31:48 -080087#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
88 tCsrCountryChannelInfo countryChannelInfo;
89#endif
90 tANI_U16 emptyScanRefreshPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070091} tCsrNeighborRoamCfgParams, *tpCsrNeighborRoamCfgParams;
92
93#define CSR_NEIGHBOR_ROAM_INVALID_CHANNEL_INDEX 255
94typedef struct sCsrNeighborRoamChannelInfo
95{
96 tANI_BOOLEAN IAPPNeighborListReceived; // Flag to mark reception of IAPP Neighbor list
97 tANI_BOOLEAN chanListScanInProgress;
98 tANI_U8 currentChanIndex; //Current channel index that is being scanned
99 tCsrChannelInfo currentChannelListInfo; //Max number of channels in channel list and the list of channels
100} tCsrNeighborRoamChannelInfo, *tpCsrNeighborRoamChannelInfo;
101
102typedef struct sCsrNeighborRoamBSSInfo
103{
104 tListElem List;
105 tANI_U8 apPreferenceVal;
106// tCsrScanResultInfo *scanResultInfo;
107 tpSirBssDescription pBssDescription;
108} tCsrNeighborRoamBSSInfo, *tpCsrNeighborRoamBSSInfo;
109
110#ifdef WLAN_FEATURE_VOWIFI_11R
111#define CSR_NEIGHBOR_ROAM_REPORT_QUERY_TIMEOUT 1000 //in milliseconds
Madan Mohan Koyyalamudiee87bfc2012-09-18 17:21:00 -0700112#define CSR_NEIGHBOR_ROAM_PREAUTH_RSP_WAIT_MULTIPLIER 10 //in milliseconds
Jeff Johnson295189b2012-06-20 16:38:30 -0700113#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 -0700114#define MAX_BSS_IN_NEIGHBOR_RPT 15
Jeff Johnson295189b2012-06-20 16:38:30 -0700115#define CSR_NEIGHBOR_ROAM_MAX_NUM_PREAUTH_RETRIES 3
116
117/* Black listed APs. List of MAC Addresses with which the Preauthentication was failed. */
118typedef struct sCsrPreauthFailListInfo
119{
120 tANI_U8 numMACAddress;
121 tSirMacAddr macAddress[MAX_NUM_PREAUTH_FAIL_LIST_ADDRESS];
122} tCsrPreauthFailListInfo, *tpCsrPreauthFailListInfo;
123
124typedef struct sCsrNeighborReportBssInfo
125{
126 tANI_U8 channelNum;
127 tANI_U8 neighborScore;
128 tSirMacAddr neighborBssId;
129} tCsrNeighborReportBssInfo, *tpCsrNeighborReportBssInfo;
130
131typedef struct sCsr11rAssocNeighborInfo
132{
133 tANI_BOOLEAN preauthRspPending;
134 tANI_BOOLEAN neighborRptPending;
135 tANI_U8 currentNeighborRptRetryNum;
Jeff Johnson295189b2012-06-20 16:38:30 -0700136 tCsrPreauthFailListInfo preAuthFailList;
137 tANI_U32 neighborReportTimeout;
138 tANI_U32 PEPreauthRespTimeout;
139 tANI_U8 numPreAuthRetries;
140 tDblLinkList preAuthDoneList; /* Linked list which consists or preauthenticated nodes */
141 tANI_U8 numBssFromNeighborReport;
142 tCsrNeighborReportBssInfo neighboReportBssInfo[MAX_BSS_IN_NEIGHBOR_RPT]; //Contains info needed during REPORT_SCAN State
143} tCsr11rAssocNeighborInfo, *tpCsr11rAssocNeighborInfo;
144#endif /* WLAN_FEATURE_VOWIFI_11R */
145
146/* Below macros are used to increase the registered neighbor Lookup threshold with TL when
147 * we dont see any AP during back ground scanning. The values are incremented from neighborLookupThreshold
148 * from CFG, incremented by 5,10,15...50(LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX *
149 * NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT) */
150#define NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT 5
151#define LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX 4
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800152/*
153 * Set lookup UP threshold 5 dB higher than the configured
154 * lookup DOWN threshold to minimize thrashing between
155 * DOWN and UP events.
Madan Mohan Koyyalamudi04039a12012-10-21 12:24:56 -0700156 */
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800157#define NEIGHBOR_ROAM_LOOKUP_UP_THRESHOLD \
158 (pNeighborRoamInfo->cfgParams.neighborLookupThreshold-5)
159#ifdef FEATURE_WLAN_LFR
160typedef enum
161{
162 eFirstEmptyScan=1,
163 eSecondEmptyScan,
164 eThirdEmptyScan,
165 eFourthEmptyScan,
166 eFifthEmptyScan,
Srinivas Girigowdade697412013-02-14 16:31:48 -0800167 eMaxEmptyScan=eFifthEmptyScan,
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800168} eNeighborRoamEmptyScanCount;
Srinivas Girigowdade697412013-02-14 16:31:48 -0800169
170typedef enum
171{
172 DEFAULT_SCAN=0,
173 SPLIT_SCAN_OCCUPIED_LIST=1,
174} eNeighborRoamScanMode;
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800175#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700176
177/* Complete control information for neighbor roam algorithm */
178typedef struct sCsrNeighborRoamControlInfo
179{
180 eCsrNeighborRoamState neighborRoamState;
181 eCsrNeighborRoamState prevNeighborRoamState;
182 tCsrNeighborRoamCfgParams cfgParams;
183 tCsrBssid currAPbssid; // current assoc AP
184 tANI_U8 currAPoperationChannel; // current assoc AP
185 tPalTimerHandle neighborScanTimer;
186 tPalTimerHandle neighborResultsRefreshTimer;
Srinivas Girigowdade697412013-02-14 16:31:48 -0800187 tPalTimerHandle emptyScanRefreshTimer;
Jeff Johnson295189b2012-06-20 16:38:30 -0700188 tCsrTimerInfo neighborScanTimerInfo;
189 tCsrNeighborRoamChannelInfo roamChannelInfo;
190 tANI_U8 currentNeighborLookupThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -0700191 tANI_BOOLEAN scanRspPending;
192 tANI_TIMESTAMP scanRequestTimeStamp;
193 tDblLinkList roamableAPList; // List of current FT candidates
194 tANI_U32 csrSessionId;
195 tCsrRoamProfile csrNeighborRoamProfile;
196#ifdef WLAN_FEATURE_VOWIFI_11R
197 tANI_BOOLEAN is11rAssoc;
198 tCsr11rAssocNeighborInfo FTRoamInfo;
199#endif /* WLAN_FEATURE_VOWIFI_11R */
200#ifdef FEATURE_WLAN_CCX
201 tANI_BOOLEAN isCCXAssoc;
202 tANI_BOOLEAN isVOAdmitted;
203 tANI_U32 MinQBssLoadRequired;
204#endif
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800205#ifdef FEATURE_WLAN_LFR
206 tANI_U8 uEmptyScanCount; /* Consecutive number of times scan
207 yielded no results. */
208 tCsrRoamConnectedProfile prevConnProfile; /* Previous connected profile. If the
209 new profile does not match previous
210 we re-initialize occupied channel list */
Srikant Kuppa866893f2012-12-27 17:28:14 -0800211 tANI_S8 lookupDOWNRssi;
Srinivas Girigowdade697412013-02-14 16:31:48 -0800212 tANI_U8 uScanMode;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700213 tANI_U8 uOsRequestedHandoff; /* upper layer requested
214 a reassoc */
Srinivas Girigowda830bbd02013-06-13 19:44:16 -0700215#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700216 tCsrHandoffRequest handoffReqInfo; /* handoff related info came
217 with upper layer's req for
218 reassoc */
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800219#endif
Srinivas Girigowda830bbd02013-06-13 19:44:16 -0700220#endif
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 );
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
266#define REASON_CCX_INI_CFG_CHANGED 6
267#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
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700278eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reason);
279eHalStatus csrNeighborRoamCandidateFoundIndHdlr(tpAniSirGlobal pMac, void* pMsg);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -0700280eHalStatus csrNeighborRoamHandoffReqHdlr(tpAniSirGlobal pMac, void* pMsg);
281eHalStatus csrNeighborRoamProceedWithHandoffReq(tpAniSirGlobal pMac);
282eHalStatus csrNeighborRoamSssidScanDone(tpAniSirGlobal pMac, eHalStatus status);
Varun Reddy Yeturue3af4282013-06-07 00:56:52 -0700283eHalStatus csrNeighborRoamStartLfrScan(tpAniSirGlobal pMac);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700284#endif
285
Srinivas Girigowdabbd16eb2013-03-21 12:34:46 -0700286
Jeff Johnson295189b2012-06-20 16:38:30 -0700287#endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */
288
289#endif /* CSR_NEIGHBOR_ROAM_H */