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