]> Pileus Git - ~andy/linux/blob - drivers/staging/vt6656/bssdb.h
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target...
[~andy/linux] / drivers / staging / vt6656 / 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 #include "mib.h"
38
39 /*---------------------  Export Definitions -------------------------*/
40
41 #define MAX_NODE_NUM             64
42 #define MAX_BSS_NUM              42
43 #define LOST_BEACON_COUNT        10   /* 10 sec, XP defined */
44 #define MAX_PS_TX_BUF            32   // sta max power saving tx buf
45 #define ADHOC_LOST_BEACON_COUNT  30   // 30 sec, beacon lost for adhoc only
46 #define MAX_INACTIVE_COUNT       300  // 300 sec, inactive STA node refresh
47
48 #define USE_PROTECT_PERIOD       10   // 10 sec, Use protect mode check period
49 #define ERP_RECOVER_COUNT        30   // 30 sec, ERP support callback check
50 #define BSS_CLEAR_COUNT           1
51
52 #define RSSI_STAT_COUNT          10
53 #define MAX_CHECK_RSSI_COUNT     8
54
55 // STA dwflags
56 #define WLAN_STA_AUTH            BIT0
57 #define WLAN_STA_ASSOC           BIT1
58 #define WLAN_STA_PS              BIT2
59 #define WLAN_STA_TIM             BIT3
60 // permanent; do not remove entry on expiration
61 #define WLAN_STA_PERM            BIT4
62 // If 802.1X is used, this flag is
63 // controlling whether STA is authorized to
64 // send and receive non-IEEE 802.1X frames
65 #define WLAN_STA_AUTHORIZED      BIT5
66
67 #define MAX_WPA_IE_LEN      64
68
69
70 /*---------------------  Export Classes  ----------------------------*/
71
72 /*---------------------  Export Variables  --------------------------*/
73
74
75 /*---------------------  Export Types  ------------------------------*/
76
77 //
78 // IEEE 802.11 Structures and definitions
79 //
80
81 typedef struct tagSERPObject {
82     bool    bERPExist;
83     BYTE    byERP;
84 } ERPObject, *PERPObject;
85
86
87 typedef struct tagSRSNCapObject {
88     bool    bRSNCapExist;
89     WORD    wRSNCap;
90 } SRSNCapObject, *PSRSNCapObject;
91
92 // BSS info(AP)
93 typedef struct tagKnownBSS {
94     // BSS info
95     bool            bActive;
96     BYTE            abyBSSID[WLAN_BSSID_LEN];
97     unsigned int            uChannel;
98     BYTE            abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
99     BYTE            abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
100     unsigned int            uRSSI;
101     BYTE            bySQ;
102     WORD            wBeaconInterval;
103     WORD            wCapInfo;
104     BYTE            abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
105     BYTE            byRxRate;
106
107 //    WORD            wATIMWindow;
108     BYTE            byRSSIStatCnt;
109     signed long            ldBmMAX;
110     signed long            ldBmAverage[RSSI_STAT_COUNT];
111     signed long            ldBmAverRange;
112     //For any BSSID selection improvment
113     bool            bSelected;
114
115     //++ WPA informations
116     bool            bWPAValid;
117     BYTE            byGKType;
118     BYTE            abyPKType[4];
119     WORD            wPKCount;
120     BYTE            abyAuthType[4];
121     WORD            wAuthCount;
122     BYTE            byDefaultK_as_PK;
123     BYTE            byReplayIdx;
124     //--
125
126     //++ WPA2 informations
127     bool            bWPA2Valid;
128     BYTE            byCSSGK;
129     WORD            wCSSPKCount;
130     BYTE            abyCSSPK[4];
131     WORD            wAKMSSAuthCount;
132     BYTE            abyAKMSSAuthType[4];
133
134     //++  wpactl
135     BYTE            byWPAIE[MAX_WPA_IE_LEN];
136     BYTE            byRSNIE[MAX_WPA_IE_LEN];
137     WORD            wWPALen;
138     WORD            wRSNLen;
139
140     // Clear count
141     unsigned int            uClearCount;
142 //    BYTE            abyIEs[WLAN_BEACON_FR_MAXLEN];
143     unsigned int            uIELength;
144         u64 qwBSSTimestamp;
145         u64 qwLocalTSF;/* local TSF timer */
146
147     CARD_PHY_TYPE   eNetworkTypeInUse;
148
149     ERPObject       sERP;
150     SRSNCapObject   sRSNCapObj;
151     BYTE            abyIEs[1024];   // don't move this field !!
152
153 } __attribute__ ((__packed__))
154 KnownBSS , *PKnownBSS;
155
156
157
158 typedef enum tagNODE_STATE {
159     NODE_FREE,
160     NODE_AGED,
161     NODE_KNOWN,
162     NODE_AUTH,
163     NODE_ASSOC
164 } NODE_STATE, *PNODE_STATE;
165
166
167 // STA node info
168 typedef struct tagKnownNodeDB {
169     // STA info
170     bool            bActive;
171     BYTE            abyMACAddr[WLAN_ADDR_LEN];
172     BYTE            abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
173     BYTE            abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
174     WORD            wTxDataRate;
175     bool            bShortPreamble;
176     bool            bERPExist;
177     bool            bShortSlotTime;
178     unsigned int            uInActiveCount;
179     WORD            wMaxBasicRate;     //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp.
180     WORD            wMaxSuppRate;      //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon.
181     WORD            wSuppRate;
182     BYTE            byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode
183     BYTE            byTopCCKBasicRate; //Records the highest basic rate in CCK mode
184
185     // For AP mode
186     struct sk_buff_head sTxPSQueue;
187     WORD            wCapInfo;
188     WORD            wListenInterval;
189     WORD            wAID;
190     NODE_STATE      eNodeState;
191     bool            bPSEnable;
192     bool            bRxPSPoll;
193     BYTE            byAuthSequence;
194     unsigned long           ulLastRxJiffer;
195     BYTE            bySuppRate;
196     DWORD           dwFlags;
197     WORD            wEnQueueCnt;
198
199     bool            bOnFly;
200     unsigned long long       KeyRSC;
201     BYTE            byKeyIndex;
202     DWORD           dwKeyIndex;
203     BYTE            byCipherSuite;
204     DWORD           dwTSC47_16;
205     WORD            wTSC15_0;
206     unsigned int            uWepKeyLength;
207     BYTE            abyWepKey[WLAN_WEPMAX_KEYLEN];
208     //
209     // Auto rate fallback vars
210     bool            bIsInFallback;
211     unsigned int            uAverageRSSI;
212     unsigned int            uRateRecoveryTimeout;
213     unsigned int            uRatePollTimeout;
214     unsigned int            uTxFailures;
215     unsigned int            uTxAttempts;
216
217     unsigned int            uTxRetry;
218     unsigned int            uFailureRatio;
219     unsigned int            uRetryRatio;
220     unsigned int            uTxOk[MAX_RATE+1];
221     unsigned int            uTxFail[MAX_RATE+1];
222     unsigned int            uTimeCount;
223
224 } KnownNodeDB, *PKnownNodeDB;
225
226 /*---------------------  Export Functions  --------------------------*/
227
228 PKnownBSS BSSpSearchBSSList(struct vnt_private *, u8 *pbyDesireBSSID,
229         u8 *pbyDesireSSID, CARD_PHY_TYPE ePhyType);
230
231 PKnownBSS BSSpAddrIsInBSSList(struct vnt_private *, u8 *abyBSSID,
232         PWLAN_IE_SSID pSSID);
233
234 void BSSvClearBSSList(struct vnt_private *, int bKeepCurrBSSID);
235
236 int BSSbInsertToBSSList(struct vnt_private *,
237                         u8 *abyBSSIDAddr,
238                         u64 qwTimestamp,
239                         u16 wBeaconInterval,
240                         u16 wCapInfo,
241                         u8 byCurrChannel,
242                         PWLAN_IE_SSID pSSID,
243                         PWLAN_IE_SUPP_RATES pSuppRates,
244                         PWLAN_IE_SUPP_RATES pExtSuppRates,
245                         PERPObject psERP,
246                         PWLAN_IE_RSN pRSN,
247                         PWLAN_IE_RSN_EXT pRSNWPA,
248                         PWLAN_IE_COUNTRY pIE_Country,
249                         PWLAN_IE_QUIET pIE_Quiet,
250                         u32 uIELength,
251                         u8 *pbyIEs,
252                         void *pRxPacketContext);
253
254 int BSSbUpdateToBSSList(struct vnt_private *,
255                         u64 qwTimestamp,
256                         u16 wBeaconInterval,
257                         u16 wCapInfo,
258                         u8 byCurrChannel,
259                         int bChannelHit,
260                         PWLAN_IE_SSID pSSID,
261                         PWLAN_IE_SUPP_RATES pSuppRates,
262                         PWLAN_IE_SUPP_RATES pExtSuppRates,
263                         PERPObject psERP,
264                         PWLAN_IE_RSN pRSN,
265                         PWLAN_IE_RSN_EXT pRSNWPA,
266                         PWLAN_IE_COUNTRY pIE_Country,
267                         PWLAN_IE_QUIET pIE_Quiet,
268                         PKnownBSS pBSSList,
269                         u32 uIELength,
270                         u8 *pbyIEs,
271                         void *pRxPacketContext);
272
273 int BSSbIsSTAInNodeDB(struct vnt_private *, PBYTE abyDstAddr,
274         u32 *puNodeIndex);
275
276 void BSSvCreateOneNode(struct vnt_private *, u32 *puNodeIndex);
277
278 void BSSvUpdateAPNode(struct vnt_private *, u16 *pwCapInfo,
279         PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pExtSuppRates);
280
281 void BSSvSecondCallBack(struct vnt_private *);
282
283 void BSSvUpdateNodeTxCounter(struct vnt_private *, PSStatCounter pStatistic,
284         u8 byTSR, u8 byPktNO);
285
286 void BSSvRemoveOneNode(struct vnt_private *, u32 uNodeIndex);
287
288 void BSSvAddMulticastNode(struct vnt_private *);
289
290 void BSSvClearNodeDBTable(struct vnt_private *, u32 uStartIndex);
291
292 void BSSvClearAnyBSSJoinRecord(struct vnt_private *);
293
294 #endif /* __BSSDB_H__ */