]> Pileus Git - ~andy/linux/blob - drivers/staging/vt6655/bssdb.h
Merge branch 'upstream/wm8974' into for-2.6.33
[~andy/linux] / 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 //#if !defined(__DEVICE_H__)
34 //#include "device.h"
35 //#endif
36 #include <linux/skbuff.h>
37 #if !defined(__80211HDR_H__)
38 #include "80211hdr.h"
39 #endif
40 #if !defined(__80211MGR_H__)
41 #include "80211mgr.h"
42 #endif
43 #if !defined(__CARD_H__)
44 #include "card.h"
45 #endif
46
47
48
49 /*---------------------  Export Definitions -------------------------*/
50
51 #define MAX_NODE_NUM             64
52 #define MAX_BSS_NUM              42
53 #define LOST_BEACON_COUNT        10   // 10 sec, XP defined
54 #define MAX_PS_TX_BUF            32   // sta max power saving tx buf
55 #define ADHOC_LOST_BEACON_COUNT  30   // 30 sec, beacon lost for adhoc only
56 #define MAX_INACTIVE_COUNT       300  // 300 sec, inactive STA node refresh
57
58 #define USE_PROTECT_PERIOD       10   // 10 sec, Use protect mode check period
59 #define ERP_RECOVER_COUNT        30   // 30 sec, ERP support callback check
60 #define BSS_CLEAR_COUNT           1
61
62 #define RSSI_STAT_COUNT          10
63 #define MAX_CHECK_RSSI_COUNT     8
64
65 // STA dwflags
66 #define WLAN_STA_AUTH            BIT0
67 #define WLAN_STA_ASSOC           BIT1
68 #define WLAN_STA_PS              BIT2
69 #define WLAN_STA_TIM             BIT3
70 // permanent; do not remove entry on expiration
71 #define WLAN_STA_PERM            BIT4
72 // If 802.1X is used, this flag is
73 // controlling whether STA is authorized to
74 // send and receive non-IEEE 802.1X frames
75 #define WLAN_STA_AUTHORIZED      BIT5
76
77 #define MAX_RATE            12
78
79 #define MAX_WPA_IE_LEN      64
80
81
82 /*---------------------  Export Classes  ----------------------------*/
83
84 /*---------------------  Export Variables  --------------------------*/
85
86
87 /*---------------------  Export Types  ------------------------------*/
88
89 //
90 // IEEE 802.11 Structures and definitions
91 //
92
93 typedef enum _NDIS_802_11_NETWORK_TYPE
94 {
95     Ndis802_11FH,
96     Ndis802_11DS,
97     Ndis802_11OFDM5,
98     Ndis802_11OFDM24,
99     Ndis802_11NetworkTypeMax    // not a real type, defined as an upper bound
100 } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
101
102
103 typedef struct tagSERPObject {
104     BOOL    bERPExist;
105     BYTE    byERP;
106 } ERPObject, DEF* PERPObject;
107
108
109 typedef struct tagSRSNCapObject {
110     BOOL    bRSNCapExist;
111     WORD    wRSNCap;
112 } SRSNCapObject, DEF* PSRSNCapObject;
113
114 // BSS info(AP)
115 #pragma pack(1)
116 typedef struct tagKnownBSS {
117     // BSS info
118     BOOL            bActive;
119     BYTE            abyBSSID[WLAN_BSSID_LEN];
120     UINT            uChannel;
121     BYTE            abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
122     BYTE            abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
123     UINT            uRSSI;
124     BYTE            bySQ;
125     WORD            wBeaconInterval;
126     WORD            wCapInfo;
127     BYTE            abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
128     BYTE            byRxRate;
129 //    WORD            wATIMWindow;
130     BYTE            byRSSIStatCnt;
131     LONG            ldBmMAX;
132     LONG            ldBmAverage[RSSI_STAT_COUNT];
133      LONG            ldBmAverRange;
134     //For any BSSID selection improvment
135     BOOL            bSelected;
136
137     //++ WPA informations
138     BOOL            bWPAValid;
139     BYTE            byGKType;
140     BYTE            abyPKType[4];
141     WORD            wPKCount;
142     BYTE            abyAuthType[4];
143     WORD            wAuthCount;
144     BYTE            byDefaultK_as_PK;
145     BYTE            byReplayIdx;
146     //--
147
148     //++ WPA2 informations
149     BOOL            bWPA2Valid;
150     BYTE            byCSSGK;
151     WORD            wCSSPKCount;
152     BYTE            abyCSSPK[4];
153     WORD            wAKMSSAuthCount;
154     BYTE            abyAKMSSAuthType[4];
155
156     //++  wpactl
157     BYTE            byWPAIE[MAX_WPA_IE_LEN];
158     BYTE            byRSNIE[MAX_WPA_IE_LEN];
159     WORD            wWPALen;
160     WORD            wRSNLen;
161
162     // Clear count
163     UINT            uClearCount;
164 //    BYTE            abyIEs[WLAN_BEACON_FR_MAXLEN];
165     UINT            uIELength;
166     QWORD           qwBSSTimestamp;
167     QWORD           qwLocalTSF;     // local TSF timer
168
169 //    NDIS_802_11_NETWORK_TYPE    NetworkTypeInUse;
170     CARD_PHY_TYPE   eNetworkTypeInUse;
171
172     ERPObject       sERP;
173     SRSNCapObject   sRSNCapObj;
174     BYTE            abyIEs[1024];   // don't move this field !!
175
176 }__attribute__ ((__packed__))
177 KnownBSS , DEF* PKnownBSS;
178
179 //2006-1116-01,<Add> by NomadZhao
180 #pragma pack()
181
182 typedef enum tagNODE_STATE {
183     NODE_FREE,
184     NODE_AGED,
185     NODE_KNOWN,
186     NODE_AUTH,
187     NODE_ASSOC
188 } NODE_STATE, *PNODE_STATE;
189
190
191 // STA node info
192 typedef struct tagKnownNodeDB {
193     // STA info
194     BOOL            bActive;
195     BYTE            abyMACAddr[WLAN_ADDR_LEN];
196     BYTE            abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
197     BYTE            abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
198     WORD            wTxDataRate;
199     BOOL            bShortPreamble;
200     BOOL            bERPExist;
201     BOOL            bShortSlotTime;
202     UINT            uInActiveCount;
203     WORD            wMaxBasicRate;     //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp.
204     WORD            wMaxSuppRate;      //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon.
205     WORD            wSuppRate;
206     BYTE            byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode
207     BYTE            byTopCCKBasicRate; //Records the highest basic rate in CCK mode
208
209     // For AP mode
210     struct sk_buff_head sTxPSQueue;
211     WORD            wCapInfo;
212     WORD            wListenInterval;
213     WORD            wAID;
214     NODE_STATE      eNodeState;
215     BOOL            bPSEnable;
216     BOOL            bRxPSPoll;
217     BYTE            byAuthSequence;
218     ULONG           ulLastRxJiffer;
219     BYTE            bySuppRate;
220     DWORD           dwFlags;
221     WORD            wEnQueueCnt;
222
223     BOOL            bOnFly;
224     ULONGLONG       KeyRSC;
225     BYTE            byKeyIndex;
226     DWORD           dwKeyIndex;
227     BYTE            byCipherSuite;
228     DWORD           dwTSC47_16;
229     WORD            wTSC15_0;
230     UINT            uWepKeyLength;
231     BYTE            abyWepKey[WLAN_WEPMAX_KEYLEN];
232     //
233     // Auto rate fallback vars
234     BOOL            bIsInFallback;
235     UINT            uAverageRSSI;
236     UINT            uRateRecoveryTimeout;
237     UINT            uRatePollTimeout;
238     UINT            uTxFailures;
239     UINT            uTxAttempts;
240
241     UINT            uTxRetry;
242     UINT            uFailureRatio;
243     UINT            uRetryRatio;
244     UINT            uTxOk[MAX_RATE+1];
245     UINT            uTxFail[MAX_RATE+1];
246     UINT            uTimeCount;
247
248 } KnownNodeDB, DEF* PKnownNodeDB;
249
250
251 /*---------------------  Export Functions  --------------------------*/
252
253
254
255 PKnownBSS
256 BSSpSearchBSSList(
257     IN HANDLE hDeviceContext,
258     IN PBYTE pbyDesireBSSID,
259     IN PBYTE pbyDesireSSID,
260     IN CARD_PHY_TYPE ePhyType
261     );
262
263 PKnownBSS
264 BSSpAddrIsInBSSList(
265     IN HANDLE hDeviceContext,
266     IN PBYTE abyBSSID,
267     IN PWLAN_IE_SSID pSSID
268     );
269
270 VOID
271 BSSvClearBSSList(
272     IN HANDLE hDeviceContext,
273     IN BOOL bKeepCurrBSSID
274     );
275
276 BOOL
277 BSSbInsertToBSSList(
278     IN HANDLE hDeviceContext,
279     IN PBYTE abyBSSIDAddr,
280     IN QWORD qwTimestamp,
281     IN WORD wBeaconInterval,
282     IN WORD wCapInfo,
283     IN BYTE byCurrChannel,
284     IN PWLAN_IE_SSID pSSID,
285     IN PWLAN_IE_SUPP_RATES pSuppRates,
286     IN PWLAN_IE_SUPP_RATES pExtSuppRates,
287     IN PERPObject psERP,
288     IN PWLAN_IE_RSN pRSN,
289     IN PWLAN_IE_RSN_EXT pRSNWPA,
290     IN PWLAN_IE_COUNTRY pIE_Country,
291     IN PWLAN_IE_QUIET pIE_Quiet,
292     IN UINT uIELength,
293     IN PBYTE pbyIEs,
294     IN HANDLE pRxPacketContext
295     );
296
297
298 BOOL
299 BSSbUpdateToBSSList(
300     IN HANDLE hDeviceContext,
301     IN QWORD qwTimestamp,
302     IN WORD wBeaconInterval,
303     IN WORD wCapInfo,
304     IN BYTE byCurrChannel,
305     IN BOOL bChannelHit,
306     IN PWLAN_IE_SSID pSSID,
307     IN PWLAN_IE_SUPP_RATES pSuppRates,
308     IN PWLAN_IE_SUPP_RATES pExtSuppRates,
309     IN PERPObject psERP,
310     IN PWLAN_IE_RSN pRSN,
311     IN PWLAN_IE_RSN_EXT pRSNWPA,
312     IN PWLAN_IE_COUNTRY pIE_Country,
313     IN PWLAN_IE_QUIET pIE_Quiet,
314     IN PKnownBSS pBSSList,
315     IN UINT uIELength,
316     IN PBYTE pbyIEs,
317     IN HANDLE pRxPacketContext
318     );
319
320
321 BOOL
322 BSSDBbIsSTAInNodeDB(
323     IN HANDLE hDeviceContext,
324     IN PBYTE abyDstAddr,
325     OUT PUINT puNodeIndex
326     );
327
328 VOID
329 BSSvCreateOneNode(
330     IN HANDLE hDeviceContext,
331     OUT PUINT puNodeIndex
332     );
333
334 VOID
335 BSSvUpdateAPNode(
336     IN HANDLE hDeviceContext,
337     IN PWORD pwCapInfo,
338     IN PWLAN_IE_SUPP_RATES pItemRates,
339     IN PWLAN_IE_SUPP_RATES pExtSuppRates
340     );
341
342
343 VOID
344 BSSvSecondCallBack(
345     IN HANDLE hDeviceContext
346     );
347
348 VOID
349 BSSvUpdateNodeTxCounter(
350     IN HANDLE hDeviceContext,
351     IN BYTE        byTsr0,
352     IN BYTE        byTsr1,
353     IN PBYTE       pbyBuffer,
354     IN UINT        uFIFOHeaderSize
355     );
356
357 VOID
358 BSSvRemoveOneNode(
359     IN HANDLE hDeviceContext,
360     IN UINT uNodeIndex
361     );
362
363 VOID
364 BSSvAddMulticastNode(
365     IN HANDLE hDeviceContext
366     );
367
368
369 VOID
370 BSSvClearNodeDBTable(
371     IN HANDLE hDeviceContext,
372     IN UINT uStartIndex
373     );
374
375 VOID
376 BSSvClearAnyBSSJoinRecord(
377     IN HANDLE hDeviceContext
378     );
379
380 #endif //__BSSDB_H__