Merge branch 'ib-mfd-iio-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/lee...
[firefly-linux-kernel-4.4.55.git] / drivers / staging / vt6655 / bssdb.h
1 /*
2  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  *
20  * File: bssdb.h
21  *
22  * Purpose: Handles the Basic Service Set & Node Database functions
23  *
24  * Author: Lyndon Chen
25  *
26  * Date: July 16, 2002
27  *
28  */
29
30 #ifndef __BSSDB_H__
31 #define __BSSDB_H__
32
33 #include <linux/skbuff.h>
34 #include "80211hdr.h"
35 #include "80211mgr.h"
36 #include "card.h"
37
38 #define MAX_NODE_NUM             64
39 #define MAX_BSS_NUM              42
40 #define LOST_BEACON_COUNT        10   // 10 sec, XP defined
41 #define MAX_PS_TX_BUF            32   // sta max power saving tx buf
42 #define ADHOC_LOST_BEACON_COUNT  30   // 30 sec, beacon lost for adhoc only
43 #define MAX_INACTIVE_COUNT       300  // 300 sec, inactive STA node refresh
44
45 #define USE_PROTECT_PERIOD       10   // 10 sec, Use protect mode check period
46 #define ERP_RECOVER_COUNT        30   // 30 sec, ERP support callback check
47 #define BSS_CLEAR_COUNT           1
48
49 #define RSSI_STAT_COUNT          10
50 #define MAX_CHECK_RSSI_COUNT     8
51
52 // STA dwflags
53 #define WLAN_STA_AUTH            BIT0
54 #define WLAN_STA_ASSOC           BIT1
55 #define WLAN_STA_PS              BIT2
56 #define WLAN_STA_TIM             BIT3
57 // permanent; do not remove entry on expiration
58 #define WLAN_STA_PERM            BIT4
59 // If 802.1X is used, this flag is
60 // controlling whether STA is authorized to
61 // send and receive non-IEEE 802.1X frames
62 #define WLAN_STA_AUTHORIZED      BIT5
63
64 #define MAX_RATE            12
65
66 #define MAX_WPA_IE_LEN      64
67
68 //
69 // IEEE 802.11 Structures and definitions
70 //
71
72 typedef enum _NDIS_802_11_NETWORK_TYPE {
73         Ndis802_11FH,
74         Ndis802_11DS,
75         Ndis802_11OFDM5,
76         Ndis802_11OFDM24,
77         Ndis802_11NetworkTypeMax    // not a real type, defined as an upper bound
78 } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
79
80 typedef struct tagSERPObject {
81         bool bERPExist;
82         unsigned char byERP;
83 } ERPObject, *PERPObject;
84
85 typedef struct tagSRSNCapObject {
86         bool bRSNCapExist;
87         unsigned short wRSNCap;
88 } SRSNCapObject, *PSRSNCapObject;
89
90 // BSS info(AP)
91 #pragma pack(1)
92 typedef struct tagKnownBSS {
93         bool bActive;
94         unsigned char abyBSSID[WLAN_BSSID_LEN];
95         unsigned int    uChannel;
96         unsigned char abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
97         unsigned char abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
98         unsigned int    uRSSI;
99         unsigned char bySQ;
100         unsigned short wBeaconInterval;
101         unsigned short wCapInfo;
102         unsigned char abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
103         unsigned char byRxRate;
104
105         unsigned char byRSSIStatCnt;
106         long            ldBmMAX;
107         long            ldBmAverage[RSSI_STAT_COUNT];
108         long            ldBmAverRange;
109         bool bSelected;
110
111         bool bWPAValid;
112         unsigned char byGKType;
113         unsigned char abyPKType[4];
114         unsigned short wPKCount;
115         unsigned char abyAuthType[4];
116         unsigned short wAuthCount;
117         unsigned char byDefaultK_as_PK;
118         unsigned char byReplayIdx;
119
120         bool bWPA2Valid;
121         unsigned char byCSSGK;
122         unsigned short wCSSPKCount;
123         unsigned char abyCSSPK[4];
124         unsigned short wAKMSSAuthCount;
125         unsigned char abyAKMSSAuthType[4];
126
127         unsigned char byWPAIE[MAX_WPA_IE_LEN];
128         unsigned char byRSNIE[MAX_WPA_IE_LEN];
129         unsigned short wWPALen;
130         unsigned short wRSNLen;
131
132         unsigned int    uClearCount;
133         unsigned int    uIELength;
134         u64 qwBSSTimestamp;
135         u64 qwLocalTSF;
136
137         CARD_PHY_TYPE   eNetworkTypeInUse;
138
139         ERPObject       sERP;
140         SRSNCapObject   sRSNCapObj;
141         unsigned char abyIEs[1024];
142 } __attribute__ ((__packed__))
143 KnownBSS , *PKnownBSS;
144
145 #pragma pack()
146
147 typedef enum tagNODE_STATE {
148         NODE_FREE,
149         NODE_AGED,
150         NODE_KNOWN,
151         NODE_AUTH,
152         NODE_ASSOC
153 } NODE_STATE, *PNODE_STATE;
154
155 // STA node info
156 typedef struct tagKnownNodeDB {
157         bool bActive;
158         unsigned char abyMACAddr[WLAN_ADDR_LEN];
159         unsigned char abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
160         unsigned char abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
161         unsigned short wTxDataRate;
162         bool bShortPreamble;
163         bool bERPExist;
164         bool bShortSlotTime;
165         unsigned int    uInActiveCount;
166         unsigned short wMaxBasicRate;     //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp.
167         unsigned short wMaxSuppRate;      //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon.
168         unsigned short wSuppRate;
169         unsigned char byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode
170         unsigned char byTopCCKBasicRate; //Records the highest basic rate in CCK mode
171
172         // For AP mode
173         struct sk_buff_head sTxPSQueue;
174         unsigned short wCapInfo;
175         unsigned short wListenInterval;
176         unsigned short wAID;
177         NODE_STATE      eNodeState;
178         bool bPSEnable;
179         bool bRxPSPoll;
180         unsigned char byAuthSequence;
181         unsigned long ulLastRxJiffer;
182         unsigned char bySuppRate;
183         unsigned long dwFlags;
184         unsigned short wEnQueueCnt;
185
186         bool bOnFly;
187         unsigned long long       KeyRSC;
188         unsigned char byKeyIndex;
189         unsigned long dwKeyIndex;
190         unsigned char byCipherSuite;
191         unsigned long dwTSC47_16;
192         unsigned short wTSC15_0;
193         unsigned int    uWepKeyLength;
194         unsigned char abyWepKey[WLAN_WEPMAX_KEYLEN];
195         // Auto rate fallback vars
196         bool bIsInFallback;
197         unsigned int    uAverageRSSI;
198         unsigned int    uRateRecoveryTimeout;
199         unsigned int    uRatePollTimeout;
200         unsigned int    uTxFailures;
201         unsigned int    uTxAttempts;
202
203         unsigned int    uTxRetry;
204         unsigned int    uFailureRatio;
205         unsigned int    uRetryRatio;
206         unsigned int    uTxOk[MAX_RATE+1];
207         unsigned int    uTxFail[MAX_RATE+1];
208         unsigned int    uTimeCount;
209 } KnownNodeDB, *PKnownNodeDB;
210
211 PKnownBSS
212 BSSpSearchBSSList(
213         void *hDeviceContext,
214         unsigned char *pbyDesireBSSID,
215         unsigned char *pbyDesireSSID,
216         CARD_PHY_TYPE ePhyType
217 );
218
219 PKnownBSS
220 BSSpAddrIsInBSSList(
221         void *hDeviceContext,
222         unsigned char *abyBSSID,
223         PWLAN_IE_SSID pSSID
224 );
225
226 void
227 BSSvClearBSSList(
228         void *hDeviceContext,
229         bool bKeepCurrBSSID
230 );
231
232 bool
233 BSSbInsertToBSSList(
234         void *hDeviceContext,
235         unsigned char *abyBSSIDAddr,
236         __le64 qwTimestamp,
237         unsigned short wBeaconInterval,
238         unsigned short wCapInfo,
239         unsigned char byCurrChannel,
240         PWLAN_IE_SSID pSSID,
241         PWLAN_IE_SUPP_RATES pSuppRates,
242         PWLAN_IE_SUPP_RATES pExtSuppRates,
243         PERPObject psERP,
244         PWLAN_IE_RSN pRSN,
245         PWLAN_IE_RSN_EXT pRSNWPA,
246         PWLAN_IE_COUNTRY pIE_Country,
247         PWLAN_IE_QUIET pIE_Quiet,
248         unsigned int uIELength,
249         unsigned char *pbyIEs,
250         void *pRxPacketContext
251 );
252
253 bool
254 BSSbUpdateToBSSList(
255         void *hDeviceContext,
256         __le64 qwTimestamp,
257         unsigned short wBeaconInterval,
258         unsigned short wCapInfo,
259         unsigned char byCurrChannel,
260         bool bChannelHit,
261         PWLAN_IE_SSID pSSID,
262         PWLAN_IE_SUPP_RATES pSuppRates,
263         PWLAN_IE_SUPP_RATES pExtSuppRates,
264         PERPObject psERP,
265         PWLAN_IE_RSN pRSN,
266         PWLAN_IE_RSN_EXT pRSNWPA,
267         PWLAN_IE_COUNTRY pIE_Country,
268         PWLAN_IE_QUIET pIE_Quiet,
269         PKnownBSS pBSSList,
270         unsigned int uIELength,
271         unsigned char *pbyIEs,
272         void *pRxPacketContext
273 );
274
275 bool
276 BSSDBbIsSTAInNodeDB(void *hDeviceContext, unsigned char *abyDstAddr,
277                     unsigned int *puNodeIndex);
278
279 void
280 BSSvCreateOneNode(void *hDeviceContext, unsigned int *puNodeIndex);
281
282 void
283 BSSvUpdateAPNode(
284         void *hDeviceContext,
285         unsigned short *pwCapInfo,
286         PWLAN_IE_SUPP_RATES pItemRates,
287         PWLAN_IE_SUPP_RATES pExtSuppRates
288 );
289
290 void
291 BSSvSecondCallBack(
292         void *hDeviceContext
293 );
294
295 void
296 BSSvUpdateNodeTxCounter(
297         void *hDeviceContext,
298         unsigned char byTsr0,
299         unsigned char byTsr1,
300         unsigned char *pbyBuffer,
301         unsigned int uFIFOHeaderSize
302 );
303
304 void
305 BSSvRemoveOneNode(
306         void *hDeviceContext,
307         unsigned int uNodeIndex
308 );
309
310 void
311 BSSvAddMulticastNode(
312         void *hDeviceContext
313 );
314
315 void
316 BSSvClearNodeDBTable(
317         void *hDeviceContext,
318         unsigned int uStartIndex
319 );
320
321 void
322 BSSvClearAnyBSSJoinRecord(
323         void *hDeviceContext
324 );
325
326 #endif //__BSSDB_H__