Merge branch 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux...
[cascardo/linux.git] / drivers / staging / vt6655 / wmgr.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: wmgr.h
21  *
22  * Purpose:
23  *
24  * Author: lyndon chen
25  *
26  * Date: Jan 2, 2003
27  *
28  * Functions:
29  *
30  * Revision History:
31  *
32  */
33
34 #ifndef __WMGR_H__
35 #define __WMGR_H__
36
37 #include "ttype.h"
38 #include "80211mgr.h"
39 #include "80211hdr.h"
40 #include "wcmd.h"
41 #include "bssdb.h"
42 #include "wpa2.h"
43 #include "vntwifi.h"
44 #include "card.h"
45
46 /*---------------------  Export Definitions -------------------------*/
47
48 // Scan time
49 #define PROBE_DELAY                  100  // (us)
50 #define SWITCH_CHANNEL_DELAY         200 // (us)
51 #define WLAN_SCAN_MINITIME           25   // (ms)
52 #define WLAN_SCAN_MAXTIME            100  // (ms)
53 #define TRIVIAL_SYNC_DIFFERENCE      0    // (us)
54 #define DEFAULT_IBSS_BI              100  // (ms)
55
56 #define WCMD_ACTIVE_SCAN_TIME   50 //(ms)
57 #define WCMD_PASSIVE_SCAN_TIME  100 //(ms)
58
59 #define DEFAULT_MSDU_LIFETIME           512  // ms
60 #define DEFAULT_MSDU_LIFETIME_RES_64us  8000 // 64us
61
62 #define DEFAULT_MGN_LIFETIME            8    // ms
63 #define DEFAULT_MGN_LIFETIME_RES_64us   125  // 64us
64
65 #define MAKE_BEACON_RESERVED            10  //(us)
66
67 #define TIM_MULTICAST_MASK           0x01
68 #define TIM_BITMAPOFFSET_MASK        0xFE
69 #define DEFAULT_DTIM_PERIOD             1
70
71 #define AP_LONG_RETRY_LIMIT             4
72
73 #define DEFAULT_IBSS_CHANNEL            6  //2.4G
74
75 /*---------------------  Export Classes  ----------------------------*/
76
77 /*---------------------  Export Variables  --------------------------*/
78
79 /*---------------------  Export Types  ------------------------------*/
80 #define timer_expire(timer, next_tick)   mod_timer(&timer, RUN_AT(next_tick))
81 typedef void (*TimerFunction)(unsigned long);
82
83 //+++ NDIS related
84
85 typedef unsigned char NDIS_802_11_MAC_ADDRESS[6];
86 typedef struct _NDIS_802_11_AI_REQFI
87 {
88         unsigned short Capabilities;
89         unsigned short ListenInterval;
90         NDIS_802_11_MAC_ADDRESS  CurrentAPAddress;
91 } NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI;
92
93 typedef struct _NDIS_802_11_AI_RESFI
94 {
95         unsigned short Capabilities;
96         unsigned short StatusCode;
97         unsigned short AssociationId;
98 } NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI;
99
100 typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION
101 {
102         unsigned long Length;
103         unsigned short          AvailableRequestFixedIEs;
104         NDIS_802_11_AI_REQFI    RequestFixedIEs;
105         unsigned long RequestIELength;
106         unsigned long OffsetRequestIEs;
107         unsigned short          AvailableResponseFixedIEs;
108         NDIS_802_11_AI_RESFI    ResponseFixedIEs;
109         unsigned long ResponseIELength;
110         unsigned long OffsetResponseIEs;
111 } NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
112
113 typedef struct tagSAssocInfo {
114         NDIS_802_11_ASSOCIATION_INFORMATION     AssocInfo;
115         unsigned char abyIEs[WLAN_BEACON_FR_MAXLEN+WLAN_BEACON_FR_MAXLEN];
116         // store ReqIEs set by OID_802_11_ASSOCIATION_INFORMATION
117         unsigned long RequestIELength;
118         unsigned char abyReqIEs[WLAN_BEACON_FR_MAXLEN];
119 } SAssocInfo, *PSAssocInfo;
120 //---
121
122 typedef enum tagWMAC_SCAN_TYPE {
123         WMAC_SCAN_ACTIVE,
124         WMAC_SCAN_PASSIVE,
125         WMAC_SCAN_HYBRID
126 } WMAC_SCAN_TYPE, *PWMAC_SCAN_TYPE;
127
128 typedef enum tagWMAC_SCAN_STATE {
129         WMAC_NO_SCANNING,
130         WMAC_IS_SCANNING,
131         WMAC_IS_PROBEPENDING
132 } WMAC_SCAN_STATE, *PWMAC_SCAN_STATE;
133
134 // Notes:
135 // Basic Service Set state explained as following:
136 // WMAC_STATE_IDLE          : no BSS is selected (Adhoc or Infra)
137 // WMAC_STATE_STARTED       : no BSS is selected, start own IBSS (Adhoc only)
138 // WMAC_STATE_JOINTED       : BSS is selected and synchronized (Adhoc or Infra)
139 // WMAC_STATE_AUTHPENDING   : Authentication pending (Infra)
140 // WMAC_STATE_AUTH          : Authenticated (Infra)
141 // WMAC_STATE_ASSOCPENDING  : Association pending (Infra)
142 // WMAC_STATE_ASSOC         : Associated (Infra)
143
144 typedef enum tagWMAC_BSS_STATE {
145         WMAC_STATE_IDLE,
146         WMAC_STATE_STARTED,
147         WMAC_STATE_JOINTED,
148         WMAC_STATE_AUTHPENDING,
149         WMAC_STATE_AUTH,
150         WMAC_STATE_ASSOCPENDING,
151         WMAC_STATE_ASSOC
152 } WMAC_BSS_STATE, *PWMAC_BSS_STATE;
153
154 // WMAC selected running mode
155 typedef enum tagWMAC_CURRENT_MODE {
156         WMAC_MODE_STANDBY,
157         WMAC_MODE_ESS_STA,
158         WMAC_MODE_IBSS_STA,
159         WMAC_MODE_ESS_AP
160 } WMAC_CURRENT_MODE, *PWMAC_CURRENT_MODE;
161
162 /*
163   typedef enum tagWMAC_POWER_MODE {
164   WMAC_POWER_CAM,
165   WMAC_POWER_FAST,
166   WMAC_POWER_MAX
167
168   } WMAC_POWER_MODE, *PWMAC_POWER_MODE;
169 */
170
171 // Tx Management Packet descriptor
172 typedef struct tagSTxMgmtPacket {
173         PUWLAN_80211HDR     p80211Header;
174         unsigned int cbMPDULen;
175         unsigned int cbPayloadLen;
176 } STxMgmtPacket, *PSTxMgmtPacket;
177
178 // Rx Management Packet descriptor
179 typedef struct tagSRxMgmtPacket {
180         PUWLAN_80211HDR     p80211Header;
181         QWORD               qwLocalTSF;
182         unsigned int cbMPDULen;
183         unsigned int cbPayloadLen;
184         unsigned int uRSSI;
185         unsigned char bySQ;
186         unsigned char byRxRate;
187         unsigned char byRxChannel;
188 } SRxMgmtPacket, *PSRxMgmtPacket;
189
190 typedef struct tagSMgmtObject
191 {
192         void *pAdapter;
193         // MAC address
194         unsigned char abyMACAddr[WLAN_ADDR_LEN];
195
196         // Configuration Mode
197         WMAC_CONFIG_MODE        eConfigMode; // MAC pre-configed mode
198         CARD_PHY_TYPE           eCurrentPHYMode;
199         CARD_PHY_TYPE           eConfigPHYMode;
200
201         // Operation state variables
202         WMAC_CURRENT_MODE       eCurrMode;   // MAC current connection mode
203         WMAC_BSS_STATE          eCurrState;  // MAC current BSS state
204
205         PKnownBSS               pCurrBSS;
206         unsigned char byCSSGK;
207         unsigned char byCSSPK;
208
209         // Current state vars
210         unsigned int    uCurrChannel;
211         unsigned char abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
212         unsigned char abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
213         unsigned char abyCurrSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
214         unsigned char abyCurrBSSID[WLAN_BSSID_LEN];
215         unsigned short wCurrCapInfo;
216         unsigned short wCurrAID;
217         unsigned short wCurrATIMWindow;
218         unsigned short wCurrBeaconPeriod;
219         bool bIsDS;
220         unsigned char byERPContext;
221
222         CMD_STATE               eCommandState;
223         unsigned int    uScanChannel;
224
225         // Desire joining BSS vars
226         unsigned char abyDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
227         unsigned char abyDesireBSSID[WLAN_BSSID_LEN];
228
229         // Adhoc or AP configuration vars
230         unsigned short wIBSSBeaconPeriod;
231         unsigned short wIBSSATIMWindow;
232         unsigned int    uIBSSChannel;
233         unsigned char abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
234         unsigned char byAPBBType;
235         unsigned char abyWPAIE[MAX_WPA_IE_LEN];
236         unsigned short wWPAIELen;
237
238         unsigned int    uAssocCount;
239         bool bMoreData;
240
241         // Scan state vars
242         WMAC_SCAN_STATE         eScanState;
243         WMAC_SCAN_TYPE          eScanType;
244         unsigned int    uScanStartCh;
245         unsigned int    uScanEndCh;
246         unsigned short wScanSteps;
247         unsigned int    uScanBSSType;
248         // Desire scanning vars
249         unsigned char abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
250         unsigned char abyScanBSSID[WLAN_BSSID_LEN];
251
252         // Privacy
253         WMAC_AUTHENTICATION_MODE eAuthenMode;
254         WMAC_ENCRYPTION_MODE    eEncryptionMode;
255         bool bShareKeyAlgorithm;
256         unsigned char abyChallenge[WLAN_CHALLENGE_LEN];
257         bool bPrivacyInvoked;
258
259         // Received beacon state vars
260         bool bInTIM;
261         bool bMulticastTIM;
262         unsigned char byDTIMCount;
263         unsigned char byDTIMPeriod;
264
265         // Power saving state vars
266         WMAC_POWER_MODE         ePSMode;
267         unsigned short wListenInterval;
268         unsigned short wCountToWakeUp;
269         bool bInTIMWake;
270         unsigned char *pbyPSPacketPool;
271         unsigned char byPSPacketPool[sizeof(STxMgmtPacket) + WLAN_NULLDATA_FR_MAXLEN];
272         bool bRxBeaconInTBTTWake;
273         unsigned char abyPSTxMap[MAX_NODE_NUM + 1];
274
275         // management command related
276         unsigned int    uCmdBusy;
277         unsigned int    uCmdHostAPBusy;
278
279         // management packet pool
280         unsigned char *pbyMgmtPacketPool;
281         unsigned char byMgmtPacketPool[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
282
283         // One second callback timer
284         struct timer_list           sTimerSecondCallback;
285
286         // Temporarily Rx Mgmt Packet Descriptor
287         SRxMgmtPacket           sRxPacket;
288
289         // link list of known bss's (scan results)
290         KnownBSS                sBSSList[MAX_BSS_NUM];
291
292         // table list of known node
293         // sNodeDBList[0] is reserved for AP under Infra mode
294         // sNodeDBList[0] is reserved for Multicast under adhoc/AP mode
295         KnownNodeDB             sNodeDBTable[MAX_NODE_NUM + 1];
296
297         // WPA2 PMKID Cache
298         SPMKIDCache             gsPMKIDCache;
299         bool bRoaming;
300
301         // rate fall back vars
302
303         // associate info
304         SAssocInfo              sAssocInfo;
305
306         // for 802.11h
307         bool b11hEnable;
308         bool bSwitchChannel;
309         unsigned char byNewChannel;
310         PWLAN_IE_MEASURE_REP    pCurrMeasureEIDRep;
311         unsigned int    uLengthOfRepEIDs;
312         unsigned char abyCurrentMSRReq[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
313         unsigned char abyCurrentMSRRep[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
314         unsigned char abyIECountry[WLAN_A3FR_MAXLEN];
315         unsigned char abyIBSSDFSOwner[6];
316         unsigned char byIBSSDFSRecovery;
317
318         struct sk_buff  skb;
319 } SMgmtObject, *PSMgmtObject;
320
321 /*---------------------  Export Macros ------------------------------*/
322
323 /*---------------------  Export Functions  --------------------------*/
324
325 void
326 vMgrObjectInit(
327         void *hDeviceContext
328 );
329
330 void
331 vMgrTimerInit(
332         void *hDeviceContext
333 );
334
335 void
336 vMgrObjectReset(
337         void *hDeviceContext
338 );
339
340 void
341 vMgrAssocBeginSta(
342         void *hDeviceContext,
343         PSMgmtObject pMgmt,
344         PCMD_STATUS pStatus
345 );
346
347 void
348 vMgrReAssocBeginSta(
349         void *hDeviceContext,
350         PSMgmtObject pMgmt,
351         PCMD_STATUS pStatus
352 );
353
354 void
355 vMgrDisassocBeginSta(
356         void *hDeviceContext,
357         PSMgmtObject pMgmt,
358         unsigned char *abyDestAddress,
359         unsigned short wReason,
360         PCMD_STATUS pStatus
361 );
362
363 void
364 vMgrAuthenBeginSta(
365         void *hDeviceContext,
366         PSMgmtObject pMgmt,
367         PCMD_STATUS pStatus
368 );
369
370 void
371 vMgrCreateOwnIBSS(
372         void *hDeviceContext,
373         PCMD_STATUS pStatus
374 );
375
376 void
377 vMgrJoinBSSBegin(
378         void *hDeviceContext,
379         PCMD_STATUS pStatus
380 );
381
382 void
383 vMgrRxManagePacket(
384         void *hDeviceContext,
385         PSMgmtObject pMgmt,
386         PSRxMgmtPacket pRxPacket
387 );
388
389 /*
390   void
391   vMgrScanBegin(
392   void *hDeviceContext,
393   PCMD_STATUS pStatus
394 );
395 */
396
397 void
398 vMgrDeAuthenBeginSta(
399         void *hDeviceContext,
400         PSMgmtObject  pMgmt,
401         unsigned char *abyDestAddress,
402         unsigned short wReason,
403         PCMD_STATUS pStatus
404 );
405
406 bool
407 bMgrPrepareBeaconToSend(
408         void *hDeviceContext,
409         PSMgmtObject pMgmt
410 );
411
412 bool
413 bAdd_PMKID_Candidate(
414         void *hDeviceContext,
415         unsigned char *pbyBSSID,
416         PSRSNCapObject psRSNCapObj
417 );
418
419 void
420 vFlush_PMKID_Candidate(
421         void *hDeviceContext
422 );
423
424 #endif // __WMGR_H__