blob: 1c3ff4d50c6d9198e5c344c497e9521e9a01606a [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;
87} tCsrNeighborRoamCfgParams, *tpCsrNeighborRoamCfgParams;
88
89#define CSR_NEIGHBOR_ROAM_INVALID_CHANNEL_INDEX 255
90typedef struct sCsrNeighborRoamChannelInfo
91{
92 tANI_BOOLEAN IAPPNeighborListReceived; // Flag to mark reception of IAPP Neighbor list
93 tANI_BOOLEAN chanListScanInProgress;
94 tANI_U8 currentChanIndex; //Current channel index that is being scanned
95 tCsrChannelInfo currentChannelListInfo; //Max number of channels in channel list and the list of channels
96} tCsrNeighborRoamChannelInfo, *tpCsrNeighborRoamChannelInfo;
97
98typedef struct sCsrNeighborRoamBSSInfo
99{
100 tListElem List;
101 tANI_U8 apPreferenceVal;
102// tCsrScanResultInfo *scanResultInfo;
103 tpSirBssDescription pBssDescription;
104} tCsrNeighborRoamBSSInfo, *tpCsrNeighborRoamBSSInfo;
105
106#ifdef WLAN_FEATURE_VOWIFI_11R
107#define CSR_NEIGHBOR_ROAM_REPORT_QUERY_TIMEOUT 1000 //in milliseconds
Madan Mohan Koyyalamudiee87bfc2012-09-18 17:21:00 -0700108#define CSR_NEIGHBOR_ROAM_PREAUTH_RSP_WAIT_MULTIPLIER 10 //in milliseconds
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#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 -0700110#define MAX_BSS_IN_NEIGHBOR_RPT 15
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#define CSR_NEIGHBOR_ROAM_MAX_NUM_PREAUTH_RETRIES 3
112
113/* Black listed APs. List of MAC Addresses with which the Preauthentication was failed. */
114typedef struct sCsrPreauthFailListInfo
115{
116 tANI_U8 numMACAddress;
117 tSirMacAddr macAddress[MAX_NUM_PREAUTH_FAIL_LIST_ADDRESS];
118} tCsrPreauthFailListInfo, *tpCsrPreauthFailListInfo;
119
120typedef struct sCsrNeighborReportBssInfo
121{
122 tANI_U8 channelNum;
123 tANI_U8 neighborScore;
124 tSirMacAddr neighborBssId;
125} tCsrNeighborReportBssInfo, *tpCsrNeighborReportBssInfo;
126
127typedef struct sCsr11rAssocNeighborInfo
128{
129 tANI_BOOLEAN preauthRspPending;
130 tANI_BOOLEAN neighborRptPending;
131 tANI_U8 currentNeighborRptRetryNum;
Jeff Johnson295189b2012-06-20 16:38:30 -0700132 tCsrPreauthFailListInfo preAuthFailList;
133 tANI_U32 neighborReportTimeout;
134 tANI_U32 PEPreauthRespTimeout;
135 tANI_U8 numPreAuthRetries;
136 tDblLinkList preAuthDoneList; /* Linked list which consists or preauthenticated nodes */
137 tANI_U8 numBssFromNeighborReport;
138 tCsrNeighborReportBssInfo neighboReportBssInfo[MAX_BSS_IN_NEIGHBOR_RPT]; //Contains info needed during REPORT_SCAN State
139} tCsr11rAssocNeighborInfo, *tpCsr11rAssocNeighborInfo;
140#endif /* WLAN_FEATURE_VOWIFI_11R */
141
142/* Below macros are used to increase the registered neighbor Lookup threshold with TL when
143 * we dont see any AP during back ground scanning. The values are incremented from neighborLookupThreshold
144 * from CFG, incremented by 5,10,15...50(LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX *
145 * NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT) */
146#define NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT 5
147#define LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX 4
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800148/*
149 * Set lookup UP threshold 5 dB higher than the configured
150 * lookup DOWN threshold to minimize thrashing between
151 * DOWN and UP events.
Madan Mohan Koyyalamudi04039a12012-10-21 12:24:56 -0700152 */
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800153#define NEIGHBOR_ROAM_LOOKUP_UP_THRESHOLD \
154 (pNeighborRoamInfo->cfgParams.neighborLookupThreshold-5)
155#ifdef FEATURE_WLAN_LFR
156typedef enum
157{
158 eFirstEmptyScan=1,
159 eSecondEmptyScan,
160 eThirdEmptyScan,
161 eFourthEmptyScan,
162 eFifthEmptyScan,
163} eNeighborRoamEmptyScanCount;
164#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700165
166/* Complete control information for neighbor roam algorithm */
167typedef struct sCsrNeighborRoamControlInfo
168{
169 eCsrNeighborRoamState neighborRoamState;
170 eCsrNeighborRoamState prevNeighborRoamState;
171 tCsrNeighborRoamCfgParams cfgParams;
172 tCsrBssid currAPbssid; // current assoc AP
173 tANI_U8 currAPoperationChannel; // current assoc AP
174 tPalTimerHandle neighborScanTimer;
175 tPalTimerHandle neighborResultsRefreshTimer;
176 tCsrTimerInfo neighborScanTimerInfo;
177 tCsrNeighborRoamChannelInfo roamChannelInfo;
178 tANI_U8 currentNeighborLookupThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -0700179 tANI_BOOLEAN scanRspPending;
180 tANI_TIMESTAMP scanRequestTimeStamp;
181 tDblLinkList roamableAPList; // List of current FT candidates
182 tANI_U32 csrSessionId;
183 tCsrRoamProfile csrNeighborRoamProfile;
184#ifdef WLAN_FEATURE_VOWIFI_11R
185 tANI_BOOLEAN is11rAssoc;
186 tCsr11rAssocNeighborInfo FTRoamInfo;
187#endif /* WLAN_FEATURE_VOWIFI_11R */
188#ifdef FEATURE_WLAN_CCX
189 tANI_BOOLEAN isCCXAssoc;
190 tANI_BOOLEAN isVOAdmitted;
191 tANI_U32 MinQBssLoadRequired;
192#endif
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800193#ifdef FEATURE_WLAN_LFR
194 tANI_U8 uEmptyScanCount; /* Consecutive number of times scan
195 yielded no results. */
196 tCsrRoamConnectedProfile prevConnProfile; /* Previous connected profile. If the
197 new profile does not match previous
198 we re-initialize occupied channel list */
Srikant Kuppa866893f2012-12-27 17:28:14 -0800199 tANI_S8 lookupDOWNRssi;
Madan Mohan Koyyalamudidd3c9662012-11-09 17:39:30 -0800200#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700201} tCsrNeighborRoamControlInfo, *tpCsrNeighborRoamControlInfo;
202
203
204/* All the necessary Function declarations are here */
205eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac,tANI_U8 sessionId, VOS_STATUS status);
206eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac,tANI_U8 sessionId);
207tANI_BOOLEAN csrNeighborRoamIsHandoffInProgress(tpAniSirGlobal pMac);
208void csrNeighborRoamRequestHandoff(tpAniSirGlobal pMac);
209eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac);
210void csrNeighborRoamClose(tpAniSirGlobal pMac);
211void csrNeighborRoamPurgePreauthFailedList(tpAniSirGlobal pMac);
212VOS_STATUS csrNeighborRoamTransitToCFGChanScan(tpAniSirGlobal pMac);
213VOS_STATUS csrNeighborRoamTransitionToPreauthDone(tpAniSirGlobal pMac);
214eHalStatus csrNeighborRoamPrepareScanProfileFilter(tpAniSirGlobal pMac, tCsrScanResultFilter *pScanFilter);
215void csrNeighborRoamGetHandoffAPInfo(tpAniSirGlobal pMac, tpCsrNeighborRoamBSSInfo pHandoffNode);
Srikant Kuppaa3ed0a32013-02-20 07:24:43 -0800216eHalStatus csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, tSirRetStatus limStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -0700217#ifdef WLAN_FEATURE_VOWIFI_11R
218tANI_BOOLEAN csrNeighborRoamIs11rAssoc(tpAniSirGlobal pMac);
219#endif
220VOS_STATUS csrNeighborRoamCreateChanListFromNeighborReport(tpAniSirGlobal pMac);
221void csrNeighborRoamTranistionPreauthDoneToDisconnected(tpAniSirGlobal pMac);
222tANI_BOOLEAN csrNeighborRoamStatePreauthDone(tpAniSirGlobal pMac);
Srikant Kuppafef66a72013-01-30 17:32:44 -0800223tANI_BOOLEAN csrNeighborRoamScanRspPending(tHalHandle hHal);
Varun Reddy Yeturuf68abd62013-02-11 14:05:06 -0800224v_U8_t *csrNeighborRoamStateToString(v_U8_t state);
Jeff Johnson295189b2012-06-20 16:38:30 -0700225
226
227#endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */
228
229#endif /* CSR_NEIGHBOR_ROAM_H */