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