Commit | Line | Data |
---|---|---|
92b96797 FB |
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 | ||
92b96797 FB |
34 | #ifndef __WMGR_H__ |
35 | #define __WMGR_H__ | |
36 | ||
92b96797 | 37 | #include "ttype.h" |
92b96797 | 38 | #include "80211mgr.h" |
92b96797 | 39 | #include "80211hdr.h" |
92b96797 | 40 | #include "wcmd.h" |
92b96797 | 41 | #include "bssdb.h" |
92b96797 | 42 | #include "wpa2.h" |
92b96797 | 43 | #include "card.h" |
92b96797 FB |
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)(ULONG); | |
88 | ||
89 | ||
90 | //+++ NDIS related | |
91 | ||
92 | typedef UCHAR NDIS_802_11_MAC_ADDRESS[6]; | |
93 | typedef struct _NDIS_802_11_AI_REQFI | |
94 | { | |
95 | USHORT Capabilities; | |
96 | USHORT 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 | USHORT Capabilities; | |
103 | USHORT StatusCode; | |
104 | USHORT AssociationId; | |
105 | } NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; | |
106 | ||
107 | typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION | |
108 | { | |
109 | ULONG Length; | |
110 | USHORT AvailableRequestFixedIEs; | |
111 | NDIS_802_11_AI_REQFI RequestFixedIEs; | |
112 | ULONG RequestIELength; | |
113 | ULONG OffsetRequestIEs; | |
114 | USHORT AvailableResponseFixedIEs; | |
115 | NDIS_802_11_AI_RESFI ResponseFixedIEs; | |
116 | ULONG ResponseIELength; | |
117 | ULONG 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 | BYTE abyIEs[WLAN_BEACON_FR_MAXLEN+WLAN_BEACON_FR_MAXLEN]; | |
125 | // store ReqIEs set by OID_802_11_ASSOCIATION_INFORMATION | |
126 | ULONG RequestIELength; | |
127 | BYTE abyReqIEs[WLAN_BEACON_FR_MAXLEN]; | |
193a823c | 128 | } SAssocInfo, *PSAssocInfo; |
92b96797 FB |
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 Managment Packet descriptor | |
222 | typedef struct tagSTxMgmtPacket { | |
223 | ||
224 | PUWLAN_80211HDR p80211Header; | |
225 | UINT cbMPDULen; | |
226 | UINT cbPayloadLen; | |
227 | ||
193a823c | 228 | } STxMgmtPacket, *PSTxMgmtPacket; |
92b96797 FB |
229 | |
230 | ||
231 | // Rx Managment Packet descriptor | |
232 | typedef struct tagSRxMgmtPacket { | |
233 | ||
234 | PUWLAN_80211HDR p80211Header; | |
235 | QWORD qwLocalTSF; | |
236 | UINT cbMPDULen; | |
237 | UINT cbPayloadLen; | |
238 | UINT uRSSI; | |
239 | BYTE bySQ; | |
240 | BYTE byRxRate; | |
241 | BYTE byRxChannel; | |
242 | ||
193a823c | 243 | } SRxMgmtPacket, *PSRxMgmtPacket; |
92b96797 FB |
244 | |
245 | ||
246 | ||
247 | typedef struct tagSMgmtObject | |
248 | { | |
8611a29a | 249 | void *pAdapter; |
92b96797 FB |
250 | // MAC address |
251 | BYTE abyMACAddr[WLAN_ADDR_LEN]; | |
252 | ||
253 | // Configuration Mode | |
254 | WMAC_CONFIG_MODE eConfigMode; // MAC pre-configed mode | |
255 | ||
256 | CARD_PHY_TYPE eCurrentPHYMode; | |
257 | ||
258 | ||
259 | // Operation state variables | |
260 | WMAC_CURRENT_MODE eCurrMode; // MAC current connection mode | |
261 | WMAC_BSS_STATE eCurrState; // MAC current BSS state | |
262 | #ifdef SndEvt_ToAPI | |
263 | WMAC_BSS_STATE eLastState; // MAC last BSS state | |
264 | #endif | |
265 | ||
266 | PKnownBSS pCurrBSS; | |
267 | BYTE byCSSGK; | |
268 | BYTE byCSSPK; | |
269 | ||
270 | // BYTE abyNewSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; | |
271 | // BYTE abyNewExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; | |
272 | BOOL bCurrBSSIDFilterOn; | |
273 | ||
274 | // Current state vars | |
275 | UINT uCurrChannel; | |
276 | BYTE abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; | |
277 | BYTE abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; | |
278 | BYTE abyCurrSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; | |
279 | BYTE abyCurrBSSID[WLAN_BSSID_LEN]; | |
280 | WORD wCurrCapInfo; | |
281 | WORD wCurrAID; | |
282 | UINT uRSSITrigger; | |
283 | WORD wCurrATIMWindow; | |
284 | WORD wCurrBeaconPeriod; | |
285 | BOOL bIsDS; | |
286 | BYTE byERPContext; | |
287 | ||
288 | CMD_STATE eCommandState; | |
289 | UINT uScanChannel; | |
290 | ||
291 | // Desire joinning BSS vars | |
292 | BYTE abyDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; | |
293 | BYTE abyDesireBSSID[WLAN_BSSID_LEN]; | |
294 | ||
295 | //restore BSS info for Ad-Hoc mode | |
296 | //20080131-05,<Add> by Mike Liu | |
297 | #ifdef Adhoc_STA | |
298 | BYTE abyAdHocSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; | |
299 | #endif | |
300 | ||
301 | // Adhoc or AP configuration vars | |
302 | WORD wIBSSBeaconPeriod; | |
303 | WORD wIBSSATIMWindow; | |
304 | UINT uIBSSChannel; | |
305 | BYTE abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; | |
306 | BYTE byAPBBType; | |
307 | BYTE abyWPAIE[MAX_WPA_IE_LEN]; | |
308 | WORD wWPAIELen; | |
309 | ||
310 | UINT uAssocCount; | |
311 | BOOL bMoreData; | |
312 | ||
313 | // Scan state vars | |
314 | WMAC_SCAN_STATE eScanState; | |
315 | WMAC_SCAN_TYPE eScanType; | |
316 | UINT uScanStartCh; | |
317 | UINT uScanEndCh; | |
318 | WORD wScanSteps; | |
319 | UINT uScanBSSType; | |
320 | // Desire scannig vars | |
321 | BYTE abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; | |
322 | BYTE abyScanBSSID[WLAN_BSSID_LEN]; | |
323 | ||
324 | // Privacy | |
325 | WMAC_AUTHENTICATION_MODE eAuthenMode; | |
326 | BOOL bShareKeyAlgorithm; | |
327 | BYTE abyChallenge[WLAN_CHALLENGE_LEN]; | |
328 | BOOL bPrivacyInvoked; | |
329 | ||
330 | // Received beacon state vars | |
331 | BOOL bInTIM; | |
332 | BOOL bMulticastTIM; | |
333 | BYTE byDTIMCount; | |
334 | BYTE byDTIMPeriod; | |
335 | ||
336 | // Power saving state vars | |
337 | WMAC_POWER_MODE ePSMode; | |
338 | WORD wListenInterval; | |
339 | WORD wCountToWakeUp; | |
340 | BOOL bInTIMWake; | |
341 | PBYTE pbyPSPacketPool; | |
342 | BYTE byPSPacketPool[sizeof(STxMgmtPacket) + WLAN_NULLDATA_FR_MAXLEN]; | |
343 | BOOL bRxBeaconInTBTTWake; | |
344 | BYTE abyPSTxMap[MAX_NODE_NUM + 1]; | |
345 | ||
346 | // managment command related | |
347 | UINT uCmdBusy; | |
348 | UINT uCmdHostAPBusy; | |
349 | ||
350 | // managment packet pool | |
351 | PBYTE pbyMgmtPacketPool; | |
352 | BYTE byMgmtPacketPool[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; | |
353 | ||
354 | ||
355 | // One second callback timer | |
356 | struct timer_list sTimerSecondCallback; | |
357 | ||
358 | // Temporarily Rx Mgmt Packet Descriptor | |
359 | SRxMgmtPacket sRxPacket; | |
360 | ||
361 | // link list of known bss's (scan results) | |
362 | KnownBSS sBSSList[MAX_BSS_NUM]; | |
363 | //link list of same bss's //DavidWang | |
364 | KnownBSS pSameBSS[6] ; | |
365 | BOOL Cisco_cckm ; | |
366 | BYTE Roam_dbm; | |
367 | ||
368 | // table list of known node | |
369 | // sNodeDBList[0] is reserved for AP under Infra mode | |
370 | // sNodeDBList[0] is reserved for Multicast under adhoc/AP mode | |
371 | KnownNodeDB sNodeDBTable[MAX_NODE_NUM + 1]; | |
372 | ||
373 | ||
374 | ||
375 | // WPA2 PMKID Cache | |
376 | SPMKIDCache gsPMKIDCache; | |
377 | BOOL bRoaming; | |
378 | ||
379 | // rate fall back vars | |
380 | ||
381 | ||
382 | ||
383 | // associate info | |
384 | SAssocInfo sAssocInfo; | |
385 | ||
386 | ||
387 | // for 802.11h | |
388 | BOOL b11hEnable; | |
389 | BOOL bSwitchChannel; | |
390 | BYTE byNewChannel; | |
391 | PWLAN_IE_MEASURE_REP pCurrMeasureEIDRep; | |
392 | UINT uLengthOfRepEIDs; | |
393 | BYTE abyCurrentMSRReq[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; | |
394 | BYTE abyCurrentMSRRep[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; | |
395 | BYTE abyIECountry[WLAN_A3FR_MAXLEN]; | |
396 | BYTE abyIBSSDFSOwner[6]; | |
397 | BYTE byIBSSDFSRecovery; | |
398 | ||
399 | struct sk_buff skb; | |
400 | ||
193a823c | 401 | } SMgmtObject, *PSMgmtObject; |
92b96797 FB |
402 | |
403 | ||
404 | /*--------------------- Export Macros ------------------------------*/ | |
405 | ||
406 | ||
407 | /*--------------------- Export Functions --------------------------*/ | |
408 | ||
409 | ||
410 | void | |
411 | vMgrObjectInit( | |
592ccfeb | 412 | HANDLE hDeviceContext |
92b96797 FB |
413 | ); |
414 | ||
415 | ||
416 | void | |
417 | vMgrAssocBeginSta( | |
592ccfeb AM |
418 | HANDLE hDeviceContext, |
419 | PSMgmtObject pMgmt, | |
92b96797 FB |
420 | OUT PCMD_STATUS pStatus |
421 | ); | |
422 | ||
8611a29a | 423 | void |
92b96797 | 424 | vMgrReAssocBeginSta( |
592ccfeb AM |
425 | HANDLE hDeviceContext, |
426 | PSMgmtObject pMgmt, | |
92b96797 FB |
427 | OUT PCMD_STATUS pStatus |
428 | ); | |
429 | ||
8611a29a | 430 | void |
92b96797 | 431 | vMgrDisassocBeginSta( |
592ccfeb AM |
432 | HANDLE hDeviceContext, |
433 | PSMgmtObject pMgmt, | |
434 | PBYTE abyDestAddress, | |
435 | WORD wReason, | |
92b96797 FB |
436 | OUT PCMD_STATUS pStatus |
437 | ); | |
438 | ||
8611a29a | 439 | void |
92b96797 | 440 | vMgrAuthenBeginSta( |
592ccfeb AM |
441 | HANDLE hDeviceContext, |
442 | PSMgmtObject pMgmt, | |
92b96797 FB |
443 | OUT PCMD_STATUS pStatus |
444 | ); | |
445 | ||
8611a29a | 446 | void |
92b96797 | 447 | vMgrCreateOwnIBSS( |
592ccfeb | 448 | HANDLE hDeviceContext, |
92b96797 FB |
449 | OUT PCMD_STATUS pStatus |
450 | ); | |
451 | ||
8611a29a | 452 | void |
92b96797 | 453 | vMgrJoinBSSBegin( |
592ccfeb | 454 | HANDLE hDeviceContext, |
92b96797 FB |
455 | OUT PCMD_STATUS pStatus |
456 | ); | |
457 | ||
8611a29a | 458 | void |
92b96797 | 459 | vMgrRxManagePacket( |
592ccfeb AM |
460 | HANDLE hDeviceContext, |
461 | PSMgmtObject pMgmt, | |
462 | PSRxMgmtPacket pRxPacket | |
92b96797 FB |
463 | ); |
464 | ||
465 | /* | |
8611a29a | 466 | void |
92b96797 | 467 | vMgrScanBegin( |
592ccfeb | 468 | HANDLE hDeviceContext, |
92b96797 FB |
469 | OUT PCMD_STATUS pStatus |
470 | ); | |
471 | */ | |
472 | ||
8611a29a | 473 | void |
92b96797 | 474 | vMgrDeAuthenBeginSta( |
592ccfeb AM |
475 | HANDLE hDeviceContext, |
476 | PSMgmtObject pMgmt, | |
477 | PBYTE abyDestAddress, | |
478 | WORD wReason, | |
92b96797 FB |
479 | OUT PCMD_STATUS pStatus |
480 | ); | |
481 | ||
482 | BOOL | |
483 | bMgrPrepareBeaconToSend( | |
592ccfeb AM |
484 | HANDLE hDeviceContext, |
485 | PSMgmtObject pMgmt | |
92b96797 FB |
486 | ); |
487 | ||
488 | ||
489 | BOOL | |
490 | bAdd_PMKID_Candidate ( | |
592ccfeb AM |
491 | HANDLE hDeviceContext, |
492 | PBYTE pbyBSSID, | |
493 | PSRSNCapObject psRSNCapObj | |
92b96797 FB |
494 | ); |
495 | ||
8611a29a | 496 | void |
92b96797 | 497 | vFlush_PMKID_Candidate ( |
592ccfeb | 498 | HANDLE hDeviceContext |
92b96797 FB |
499 | ); |
500 | ||
501 | #endif // __WMGR_H__ |