]>
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 | |
d9d1ccb5 | 85 | #define timer_expire(timer, next_tick) mod_timer(&timer, RUN_AT(next_tick)) |
92b96797 | 86 | |
cc856e61 | 87 | typedef void (*TimerFunction)(unsigned long); |
92b96797 FB |
88 | |
89 | ||
90 | //+++ NDIS related | |
91 | ||
cc856e61 | 92 | typedef unsigned char NDIS_802_11_MAC_ADDRESS[ETH_ALEN]; |
92b96797 FB |
93 | typedef struct _NDIS_802_11_AI_REQFI |
94 | { | |
cc856e61 AM |
95 | unsigned short Capabilities; |
96 | unsigned short ListenInterval; | |
92b96797 FB |
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 | { | |
cc856e61 AM |
102 | unsigned short Capabilities; |
103 | unsigned short StatusCode; | |
104 | unsigned short AssociationId; | |
92b96797 FB |
105 | } NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; |
106 | ||
107 | typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION | |
108 | { | |
cc856e61 AM |
109 | unsigned long Length; |
110 | unsigned short AvailableRequestFixedIEs; | |
92b96797 | 111 | NDIS_802_11_AI_REQFI RequestFixedIEs; |
cc856e61 AM |
112 | unsigned long RequestIELength; |
113 | unsigned long OffsetRequestIEs; | |
114 | unsigned short AvailableResponseFixedIEs; | |
92b96797 | 115 | NDIS_802_11_AI_RESFI ResponseFixedIEs; |
cc856e61 AM |
116 | unsigned long ResponseIELength; |
117 | unsigned long OffsetResponseIEs; | |
92b96797 FB |
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 | |
cc856e61 | 126 | unsigned long RequestIELength; |
92b96797 | 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 | ||
25985edc | 221 | // Tx Management Packet descriptor |
92b96797 FB |
222 | typedef struct tagSTxMgmtPacket { |
223 | ||
224 | PUWLAN_80211HDR p80211Header; | |
cc856e61 AM |
225 | unsigned int cbMPDULen; |
226 | unsigned int cbPayloadLen; | |
92b96797 | 227 | |
193a823c | 228 | } STxMgmtPacket, *PSTxMgmtPacket; |
92b96797 FB |
229 | |
230 | ||
25985edc | 231 | // Rx Management Packet descriptor |
92b96797 FB |
232 | typedef struct tagSRxMgmtPacket { |
233 | ||
234 | PUWLAN_80211HDR p80211Header; | |
235 | QWORD qwLocalTSF; | |
cc856e61 AM |
236 | unsigned int cbMPDULen; |
237 | unsigned int cbPayloadLen; | |
238 | unsigned int uRSSI; | |
92b96797 FB |
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 | |
92b96797 | 262 | WMAC_BSS_STATE eLastState; // MAC last BSS state |
92b96797 FB |
263 | |
264 | PKnownBSS pCurrBSS; | |
265 | BYTE byCSSGK; | |
266 | BYTE byCSSPK; | |
267 | ||
268 | // BYTE abyNewSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; | |
269 | // BYTE abyNewExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; | |
270 | BOOL bCurrBSSIDFilterOn; | |
271 | ||
272 | // Current state vars | |
cc856e61 | 273 | unsigned int uCurrChannel; |
92b96797 FB |
274 | BYTE abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; |
275 | BYTE abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; | |
276 | BYTE abyCurrSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; | |
277 | BYTE abyCurrBSSID[WLAN_BSSID_LEN]; | |
278 | WORD wCurrCapInfo; | |
279 | WORD wCurrAID; | |
cc856e61 | 280 | unsigned int uRSSITrigger; |
92b96797 FB |
281 | WORD wCurrATIMWindow; |
282 | WORD wCurrBeaconPeriod; | |
283 | BOOL bIsDS; | |
284 | BYTE byERPContext; | |
285 | ||
286 | CMD_STATE eCommandState; | |
cc856e61 | 287 | unsigned int uScanChannel; |
92b96797 FB |
288 | |
289 | // Desire joinning BSS vars | |
290 | BYTE abyDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; | |
291 | BYTE abyDesireBSSID[WLAN_BSSID_LEN]; | |
292 | ||
293 | //restore BSS info for Ad-Hoc mode | |
92b96797 | 294 | BYTE abyAdHocSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; |
92b96797 FB |
295 | |
296 | // Adhoc or AP configuration vars | |
297 | WORD wIBSSBeaconPeriod; | |
298 | WORD wIBSSATIMWindow; | |
cc856e61 | 299 | unsigned int uIBSSChannel; |
92b96797 FB |
300 | BYTE abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; |
301 | BYTE byAPBBType; | |
302 | BYTE abyWPAIE[MAX_WPA_IE_LEN]; | |
303 | WORD wWPAIELen; | |
304 | ||
cc856e61 | 305 | unsigned int uAssocCount; |
92b96797 FB |
306 | BOOL bMoreData; |
307 | ||
308 | // Scan state vars | |
309 | WMAC_SCAN_STATE eScanState; | |
310 | WMAC_SCAN_TYPE eScanType; | |
cc856e61 AM |
311 | unsigned int uScanStartCh; |
312 | unsigned int uScanEndCh; | |
92b96797 | 313 | WORD wScanSteps; |
cc856e61 | 314 | unsigned int uScanBSSType; |
92b96797 FB |
315 | // Desire scannig vars |
316 | BYTE abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; | |
317 | BYTE abyScanBSSID[WLAN_BSSID_LEN]; | |
318 | ||
319 | // Privacy | |
320 | WMAC_AUTHENTICATION_MODE eAuthenMode; | |
321 | BOOL bShareKeyAlgorithm; | |
322 | BYTE abyChallenge[WLAN_CHALLENGE_LEN]; | |
323 | BOOL bPrivacyInvoked; | |
324 | ||
325 | // Received beacon state vars | |
326 | BOOL bInTIM; | |
327 | BOOL bMulticastTIM; | |
328 | BYTE byDTIMCount; | |
329 | BYTE byDTIMPeriod; | |
330 | ||
331 | // Power saving state vars | |
332 | WMAC_POWER_MODE ePSMode; | |
333 | WORD wListenInterval; | |
334 | WORD wCountToWakeUp; | |
335 | BOOL bInTIMWake; | |
336 | PBYTE pbyPSPacketPool; | |
337 | BYTE byPSPacketPool[sizeof(STxMgmtPacket) + WLAN_NULLDATA_FR_MAXLEN]; | |
338 | BOOL bRxBeaconInTBTTWake; | |
339 | BYTE abyPSTxMap[MAX_NODE_NUM + 1]; | |
340 | ||
0d743951 | 341 | // management command related |
cc856e61 AM |
342 | unsigned int uCmdBusy; |
343 | unsigned int uCmdHostAPBusy; | |
92b96797 | 344 | |
0d743951 | 345 | // management packet pool |
92b96797 FB |
346 | PBYTE pbyMgmtPacketPool; |
347 | BYTE byMgmtPacketPool[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; | |
348 | ||
349 | ||
350 | // One second callback timer | |
351 | struct timer_list sTimerSecondCallback; | |
352 | ||
353 | // Temporarily Rx Mgmt Packet Descriptor | |
354 | SRxMgmtPacket sRxPacket; | |
355 | ||
356 | // link list of known bss's (scan results) | |
357 | KnownBSS sBSSList[MAX_BSS_NUM]; | |
465711b3 | 358 | /* link list of same bss's */ |
92b96797 FB |
359 | KnownBSS pSameBSS[6] ; |
360 | BOOL Cisco_cckm ; | |
361 | BYTE Roam_dbm; | |
362 | ||
363 | // table list of known node | |
364 | // sNodeDBList[0] is reserved for AP under Infra mode | |
365 | // sNodeDBList[0] is reserved for Multicast under adhoc/AP mode | |
366 | KnownNodeDB sNodeDBTable[MAX_NODE_NUM + 1]; | |
367 | ||
368 | ||
369 | ||
370 | // WPA2 PMKID Cache | |
371 | SPMKIDCache gsPMKIDCache; | |
372 | BOOL bRoaming; | |
373 | ||
374 | // rate fall back vars | |
375 | ||
376 | ||
377 | ||
378 | // associate info | |
379 | SAssocInfo sAssocInfo; | |
380 | ||
381 | ||
382 | // for 802.11h | |
383 | BOOL b11hEnable; | |
384 | BOOL bSwitchChannel; | |
385 | BYTE byNewChannel; | |
386 | PWLAN_IE_MEASURE_REP pCurrMeasureEIDRep; | |
cc856e61 | 387 | unsigned int uLengthOfRepEIDs; |
92b96797 FB |
388 | BYTE abyCurrentMSRReq[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; |
389 | BYTE abyCurrentMSRRep[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; | |
390 | BYTE abyIECountry[WLAN_A3FR_MAXLEN]; | |
391 | BYTE abyIBSSDFSOwner[6]; | |
392 | BYTE byIBSSDFSRecovery; | |
393 | ||
394 | struct sk_buff skb; | |
395 | ||
193a823c | 396 | } SMgmtObject, *PSMgmtObject; |
92b96797 | 397 | |
92b96797 FB |
398 | /*--------------------- Export Macros ------------------------------*/ |
399 | ||
92b96797 FB |
400 | /*--------------------- Export Functions --------------------------*/ |
401 | ||
0cbd8d98 | 402 | void vMgrObjectInit(void *hDeviceContext); |
92b96797 | 403 | |
0cbd8d98 AM |
404 | void vMgrAssocBeginSta(void *hDeviceContext, |
405 | PSMgmtObject pMgmt, | |
406 | PCMD_STATUS pStatus); | |
92b96797 | 407 | |
0cbd8d98 AM |
408 | void vMgrReAssocBeginSta(void *hDeviceContext, |
409 | PSMgmtObject pMgmt, | |
410 | PCMD_STATUS pStatus); | |
92b96797 | 411 | |
0cbd8d98 AM |
412 | void vMgrDisassocBeginSta(void *hDeviceContext, |
413 | PSMgmtObject pMgmt, | |
414 | PBYTE abyDestAddress, | |
415 | WORD wReason, | |
416 | PCMD_STATUS pStatus); | |
92b96797 | 417 | |
0cbd8d98 AM |
418 | void vMgrAuthenBeginSta(void *hDeviceContext, |
419 | PSMgmtObject pMgmt, | |
420 | PCMD_STATUS pStatus); | |
92b96797 | 421 | |
0cbd8d98 AM |
422 | void vMgrCreateOwnIBSS(void *hDeviceContext, |
423 | PCMD_STATUS pStatus); | |
92b96797 | 424 | |
0cbd8d98 AM |
425 | void vMgrJoinBSSBegin(void *hDeviceContext, |
426 | PCMD_STATUS pStatus); | |
92b96797 | 427 | |
0cbd8d98 AM |
428 | void vMgrRxManagePacket(void *hDeviceContext, |
429 | PSMgmtObject pMgmt, | |
430 | PSRxMgmtPacket pRxPacket); | |
92b96797 FB |
431 | |
432 | /* | |
8611a29a | 433 | void |
92b96797 | 434 | vMgrScanBegin( |
0cbd8d98 | 435 | void *hDeviceContext, |
6f8c13c7 | 436 | PCMD_STATUS pStatus |
92b96797 FB |
437 | ); |
438 | */ | |
439 | ||
0cbd8d98 AM |
440 | void vMgrDeAuthenBeginSta(void *hDeviceContext, |
441 | PSMgmtObject pMgmt, | |
442 | PBYTE abyDestAddress, | |
443 | WORD wReason, | |
444 | PCMD_STATUS pStatus); | |
92b96797 | 445 | |
0cbd8d98 AM |
446 | BOOL bMgrPrepareBeaconToSend(void *hDeviceContext, |
447 | PSMgmtObject pMgmt); | |
92b96797 | 448 | |
0cbd8d98 AM |
449 | BOOL bAdd_PMKID_Candidate(void *hDeviceContext, |
450 | PBYTE pbyBSSID, | |
451 | PSRSNCapObject psRSNCapObj); | |
92b96797 | 452 | |
0cbd8d98 | 453 | void vFlush_PMKID_Candidate(void *hDeviceContext); |
92b96797 | 454 | |
e7b07d1d | 455 | #endif /* __WMGR_H__ */ |