blob: b5f535bb1687945f4ca6ec54960b04cddd11a1da [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
2 * Copyright (c) 2012, Code Aurora Forum. 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
22/** ------------------------------------------------------------------------- *
23 ------------------------------------------------------------------------- *
24
25
26 \file csrNeighborRoam.h
27
28 Exports and types for the neighbor roaming algorithm which is sepcifically
29 designed for Android.
30
31 Copyright (C) 2006 Airgo Networks, Incorporated
32
33========================================================================== */
34#ifndef CSR_NEIGHBOR_ROAM_H
35#define CSR_NEIGHBOR_ROAM_H
36
37#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
38
39/* Enumeration of various states in neighbor roam algorithm */
40typedef enum
41{
42 eCSR_NEIGHBOR_ROAM_STATE_CLOSED,
43 eCSR_NEIGHBOR_ROAM_STATE_INIT,
44 eCSR_NEIGHBOR_ROAM_STATE_CONNECTED,
45 eCSR_NEIGHBOR_ROAM_STATE_CFG_CHAN_LIST_SCAN,
46 eCSR_NEIGHBOR_ROAM_STATE_REASSOCIATING,
47#ifdef WLAN_FEATURE_VOWIFI_11R
48 eCSR_NEIGHBOR_ROAM_STATE_REPORT_QUERY,
49 eCSR_NEIGHBOR_ROAM_STATE_REPORT_SCAN,
50 eCSR_NEIGHBOR_ROAM_STATE_PREAUTHENTICATING,
51 eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE,
52#endif /* WLAN_FEATURE_VOWIFI_11R */
53 eNEIGHBOR_STATE_MAX
54} eCsrNeighborRoamState;
55
56/* Parameters that are obtained from CFG */
57typedef struct sCsrNeighborRoamCfgParams
58{
59 tANI_U8 maxNeighborRetries;
60 tANI_U32 neighborScanPeriod;
61 tCsrChannelInfo channelInfo;
62 tANI_U8 neighborLookupThreshold;
63 tANI_U8 neighborReassocThreshold;
64 tANI_U32 minChannelScanTime;
65 tANI_U32 maxChannelScanTime;
66 tANI_U16 neighborResultsRefreshPeriod;
67} tCsrNeighborRoamCfgParams, *tpCsrNeighborRoamCfgParams;
68
69#define CSR_NEIGHBOR_ROAM_INVALID_CHANNEL_INDEX 255
70typedef struct sCsrNeighborRoamChannelInfo
71{
72 tANI_BOOLEAN IAPPNeighborListReceived; // Flag to mark reception of IAPP Neighbor list
73 tANI_BOOLEAN chanListScanInProgress;
74 tANI_U8 currentChanIndex; //Current channel index that is being scanned
75 tCsrChannelInfo currentChannelListInfo; //Max number of channels in channel list and the list of channels
76} tCsrNeighborRoamChannelInfo, *tpCsrNeighborRoamChannelInfo;
77
78typedef struct sCsrNeighborRoamBSSInfo
79{
80 tListElem List;
81 tANI_U8 apPreferenceVal;
82// tCsrScanResultInfo *scanResultInfo;
83 tpSirBssDescription pBssDescription;
84} tCsrNeighborRoamBSSInfo, *tpCsrNeighborRoamBSSInfo;
85
86#ifdef WLAN_FEATURE_VOWIFI_11R
87#define CSR_NEIGHBOR_ROAM_REPORT_QUERY_TIMEOUT 1000 //in milliseconds
88#define CSR_NEIGHBOR_ROAM_PREAUTH_RSP_WAIT_MULTIPLIER 5 //in milliseconds
89#define MAX_NUM_PREAUTH_FAIL_LIST_ADDRESS 10 //Max number of MAC addresses with which the pre-auth was failed
90#define MAX_BSS_IN_NEIGHBOR_RPT 4
91#define CSR_NEIGHBOR_ROAM_MAX_NUM_PREAUTH_RETRIES 3
92
93/* Black listed APs. List of MAC Addresses with which the Preauthentication was failed. */
94typedef struct sCsrPreauthFailListInfo
95{
96 tANI_U8 numMACAddress;
97 tSirMacAddr macAddress[MAX_NUM_PREAUTH_FAIL_LIST_ADDRESS];
98} tCsrPreauthFailListInfo, *tpCsrPreauthFailListInfo;
99
100typedef struct sCsrNeighborReportBssInfo
101{
102 tANI_U8 channelNum;
103 tANI_U8 neighborScore;
104 tSirMacAddr neighborBssId;
105} tCsrNeighborReportBssInfo, *tpCsrNeighborReportBssInfo;
106
107typedef struct sCsr11rAssocNeighborInfo
108{
109 tANI_BOOLEAN preauthRspPending;
110 tANI_BOOLEAN neighborRptPending;
111 tANI_U8 currentNeighborRptRetryNum;
112 tPalTimerHandle preAuthRspWaitTimer; //This timer is used for preauth response
113 tCsrTimerInfo preAuthRspWaitTimerInfo;
114 tCsrPreauthFailListInfo preAuthFailList;
115 tANI_U32 neighborReportTimeout;
116 tANI_U32 PEPreauthRespTimeout;
117 tANI_U8 numPreAuthRetries;
118 tDblLinkList preAuthDoneList; /* Linked list which consists or preauthenticated nodes */
119 tANI_U8 numBssFromNeighborReport;
120 tCsrNeighborReportBssInfo neighboReportBssInfo[MAX_BSS_IN_NEIGHBOR_RPT]; //Contains info needed during REPORT_SCAN State
121} tCsr11rAssocNeighborInfo, *tpCsr11rAssocNeighborInfo;
122#endif /* WLAN_FEATURE_VOWIFI_11R */
123
124/* Below macros are used to increase the registered neighbor Lookup threshold with TL when
125 * we dont see any AP during back ground scanning. The values are incremented from neighborLookupThreshold
126 * from CFG, incremented by 5,10,15...50(LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX *
127 * NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT) */
128#define NEIGHBOR_LOOKUP_THRESHOLD_INCREMENT_CONSTANT 5
129#define LOOKUP_THRESHOLD_INCREMENT_MULTIPLIER_MAX 4
130
131/* Complete control information for neighbor roam algorithm */
132typedef struct sCsrNeighborRoamControlInfo
133{
134 eCsrNeighborRoamState neighborRoamState;
135 eCsrNeighborRoamState prevNeighborRoamState;
136 tCsrNeighborRoamCfgParams cfgParams;
137 tCsrBssid currAPbssid; // current assoc AP
138 tANI_U8 currAPoperationChannel; // current assoc AP
139 tPalTimerHandle neighborScanTimer;
140 tPalTimerHandle neighborResultsRefreshTimer;
141 tCsrTimerInfo neighborScanTimerInfo;
142 tCsrNeighborRoamChannelInfo roamChannelInfo;
143 tANI_U8 currentNeighborLookupThreshold;
144 tANI_U8 currentLookupIncrementMultiplier;
145 tANI_BOOLEAN scanRspPending;
146 tANI_TIMESTAMP scanRequestTimeStamp;
147 tDblLinkList roamableAPList; // List of current FT candidates
148 tANI_U32 csrSessionId;
149 tCsrRoamProfile csrNeighborRoamProfile;
150#ifdef WLAN_FEATURE_VOWIFI_11R
151 tANI_BOOLEAN is11rAssoc;
152 tCsr11rAssocNeighborInfo FTRoamInfo;
153#endif /* WLAN_FEATURE_VOWIFI_11R */
154#ifdef FEATURE_WLAN_CCX
155 tANI_BOOLEAN isCCXAssoc;
156 tANI_BOOLEAN isVOAdmitted;
157 tANI_U32 MinQBssLoadRequired;
158#endif
159} tCsrNeighborRoamControlInfo, *tpCsrNeighborRoamControlInfo;
160
161
162/* All the necessary Function declarations are here */
163eHalStatus csrNeighborRoamIndicateConnect(tpAniSirGlobal pMac,tANI_U8 sessionId, VOS_STATUS status);
164eHalStatus csrNeighborRoamIndicateDisconnect(tpAniSirGlobal pMac,tANI_U8 sessionId);
165tANI_BOOLEAN csrNeighborRoamIsHandoffInProgress(tpAniSirGlobal pMac);
166void csrNeighborRoamRequestHandoff(tpAniSirGlobal pMac);
167eHalStatus csrNeighborRoamInit(tpAniSirGlobal pMac);
168void csrNeighborRoamClose(tpAniSirGlobal pMac);
169void csrNeighborRoamPurgePreauthFailedList(tpAniSirGlobal pMac);
170VOS_STATUS csrNeighborRoamTransitToCFGChanScan(tpAniSirGlobal pMac);
171VOS_STATUS csrNeighborRoamTransitionToPreauthDone(tpAniSirGlobal pMac);
172eHalStatus csrNeighborRoamPrepareScanProfileFilter(tpAniSirGlobal pMac, tCsrScanResultFilter *pScanFilter);
173void csrNeighborRoamGetHandoffAPInfo(tpAniSirGlobal pMac, tpCsrNeighborRoamBSSInfo pHandoffNode);
174void csrNeighborRoamPreauthRspHandler(tpAniSirGlobal pMac, VOS_STATUS vosStatus);
175#ifdef WLAN_FEATURE_VOWIFI_11R
176tANI_BOOLEAN csrNeighborRoamIs11rAssoc(tpAniSirGlobal pMac);
177#endif
178VOS_STATUS csrNeighborRoamCreateChanListFromNeighborReport(tpAniSirGlobal pMac);
179void csrNeighborRoamTranistionPreauthDoneToDisconnected(tpAniSirGlobal pMac);
180tANI_BOOLEAN csrNeighborRoamStatePreauthDone(tpAniSirGlobal pMac);
181
182
183
184#endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */
185
186#endif /* CSR_NEIGHBOR_ROAM_H */