Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
wl_internal.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * Agere Systems Inc.
3  * Wireless device driver for Linux (wlags49).
4  *
5  * Copyright (c) 1998-2003 Agere Systems Inc.
6  * All rights reserved.
7  * http://www.agere.com
8  *
9  * Initially developed by TriplePoint, Inc.
10  * http://www.triplepoint.com
11  *
12  *------------------------------------------------------------------------------
13  *
14  * Header for definitions and macros internal to the drvier.
15  *
16  *------------------------------------------------------------------------------
17  *
18  * SOFTWARE LICENSE
19  *
20  * This software is provided subject to the following terms and conditions,
21  * which you should read carefully before using the software. Using this
22  * software indicates your acceptance of these terms and conditions. If you do
23  * not agree with these terms and conditions, do not use the software.
24  *
25  * Copyright © 2003 Agere Systems Inc.
26  * All rights reserved.
27  *
28  * Redistribution and use in source or binary forms, with or without
29  * modifications, are permitted provided that the following conditions are met:
30  *
31  * . Redistributions of source code must retain the above copyright notice, this
32  * list of conditions and the following Disclaimer as comments in the code as
33  * well as in the documentation and/or other materials provided with the
34  * distribution.
35  *
36  * . Redistributions in binary form must reproduce the above copyright notice,
37  * this list of conditions and the following Disclaimer in the documentation
38  * and/or other materials provided with the distribution.
39  *
40  * . Neither the name of Agere Systems Inc. nor the names of the contributors
41  * may be used to endorse or promote products derived from this software
42  * without specific prior written permission.
43  *
44  * Disclaimer
45  *
46  * THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES,
47  * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF
48  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY
49  * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN
50  * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY
51  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
52  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
53  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
54  * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT
55  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
56  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
57  * DAMAGE.
58  *
59  ******************************************************************************/
60 
61 #ifndef __WAVELAN2_H__
62 #define __WAVELAN2_H__
63 
64 
65 
66 
67 /*******************************************************************************
68  * include files
69  ******************************************************************************/
70 #ifdef BUS_PCMCIA
71 #include <pcmcia/cistpl.h>
72 #include <pcmcia/cisreg.h>
73 #include <pcmcia/ciscode.h>
74 #include <pcmcia/ds.h>
75 #endif // BUS_PCMCIA
76 
77 #include <linux/wireless.h>
78 #include <net/iw_handler.h>
79 
80 #include <linux/list.h>
81 
82 #include <linux/interrupt.h>
83 
84 
85 
86 
87 /*******************************************************************************
88  * constant definitions
89  ******************************************************************************/
90 #define p_u8 __u8
91 #define p_s8 __s8
92 #define p_u16 __u16
93 #define p_s16 __s16
94 #define p_u32 __u32
95 #define p_s32 __s32
96 #define p_char char
97 
98 #define MAX_KEY_LEN (2 + (13 * 2)) // 0x plus 13 hex digit pairs
99 #define MB_SIZE 1024
100 #define MAX_ENC_LEN 104
101 
102 #define MAX_SCAN_TIME_SEC 8
103 #define MAX_NAPS 32
104 
105 #define CFG_MB_INFO 0x0820 //Mail Box Info Block
106 
107 #define NUM_WDS_PORTS 6
108 
109 #define WVLAN_MAX_LOOKAHEAD (HCF_MAX_MSG+46) /* as per s0005MIC_4.doc */
110 
111 
112 /* Min/Max/Default Parameter Values */
113 #if 0 //;? (HCF_TYPE) & HCF_TYPE_AP
114 //;? why this difference depending on compile option, seems to me it should depend on runtime if anything
115 #define PARM_DEFAULT_SSID "LinuxAP"
116 #else
117 #define PARM_DEFAULT_SSID "ANY"
118 #endif // HCF_TYPE_AP
119 
120 #define PARM_MIN_NAME_LEN 1
121 #define PARM_MAX_NAME_LEN 32
122 
123 
124 /* The following definitions pertain to module and profile parameters */
125 // #define PARM_AP_MODE APMode
126 // #define PARM_NAME_AP_MODE TEXT("APMode")
127 // #define PARM_DEFAULT_AP_MODE FALSE
128 
129 #define PARM_AUTHENTICATION Authentication
130 #define PARM_NAME_AUTHENTICATION TEXT("Authentication")
131 #define PARM_MIN_AUTHENTICATION 1
132 #define PARM_MAX_AUTHENTICATION 2
133 #define PARM_DEFAULT_AUTHENTICATION 1
134 
135 #define PARM_AUTH_KEY_MGMT_SUITE AuthKeyMgmtSuite
136 #define PARM_NAME_AUTH_KEY_MGMT_SUITE TEXT("AuthKeyMgmtSuite")
137 #define PARM_MIN_AUTH_KEY_MGMT_SUITE 0
138 #define PARM_MAX_AUTH_KEY_MGMT_SUITE 4
139 #define PARM_DEFAULT_AUTH_KEY_MGMT_SUITE 0
140 
141 #define PARM_BRSC_2GHZ BRSC2GHz
142 #define PARM_NAME_BRSC_2GHZ TEXT("BRSC2GHz")
143 #define PARM_MIN_BRSC 0x0000
144 #define PARM_MAX_BRSC 0x0FFF
145 #define PARM_DEFAULT_BRSC_2GHZ 0x000F
146 
147 #define PARM_BRSC_5GHZ BRSC5GHz
148 #define PARM_NAME_BRSC_5GHZ TEXT("BRSC5GHz")
149 #define PARM_DEFAULT_BRSC_5GHZ 0x0150
150 
151 #define PARM_COEXISTENCE Coexistence
152 #define PARM_NAME_COEXISTENCE TEXT("Coexistence")
153 #define PARM_MIN_COEXISTENCE 0x0000
154 #define PARM_MAX_COEXISTENCE 0x0007
155 #define PARM_DEFAULT_COEXISTENCE 0x0000
156 
157 #define PARM_CONFIGURED Configured
158 #define PARM_NAME_CONFIGURED TEXT("Configured")
159 
160 #define PARM_CONNECTION_CONTROL ConnectionControl
161 #define PARM_NAME_CONNECTION_CONTROL TEXT("ConnectionControl")
162 #define PARM_MIN_CONNECTION_CONTROL 0
163 #define PARM_MAX_CONNECTION_CONTROL 3
164 #define PARM_DEFAULT_CONNECTION_CONTROL 2
165 
166 #define PARM_CREATE_IBSS CreateIBSS
167 #define PARM_NAME_CREATE_IBSS TEXT("CreateIBSS")
168 #define PARM_DEFAULT_CREATE_IBSS FALSE
169 #define PARM_DEFAULT_CREATE_IBSS_STR "N"
170 
171 #define PARM_DEBUG_FLAG DebugFlag
172 #define PARM_NAME_DEBUG_FLAG TEXT("DebugFlag")
173 #define PARM_MIN_DEBUG_FLAG 0
174 #define PARM_MAX_DEBUG_FLAG 0xFFFF
175 #define PARM_DEFAULT_DEBUG_FLAG 0xFFFF
176 
177 #define PARM_DESIRED_SSID DesiredSSID
178 #define PARM_NAME_DESIRED_SSID TEXT("DesiredSSID")
179 
180 #define PARM_DOWNLOAD_FIRMWARE DownloadFirmware
181 #define PARM_NAME_DOWNLOAD_FIRMWARE TEXT("DownloadFirmware")
182 
183 #define PARM_DRIVER_ENABLE DriverEnable
184 #define PARM_NAME_DRIVER_ENABLE TEXT("DriverEnable")
185 #define PARM_DEFAULT_DRIVER_ENABLE TRUE
186 
187 #define PARM_ENABLE_ENCRYPTION EnableEncryption
188 #define PARM_NAME_ENABLE_ENCRYPTION TEXT("EnableEncryption")
189 #define PARM_MIN_ENABLE_ENCRYPTION 0
190 #define PARM_MAX_ENABLE_ENCRYPTION 7
191 #define PARM_DEFAULT_ENABLE_ENCRYPTION 0
192 
193 #define PARM_ENCRYPTION Encryption
194 #define PARM_NAME_ENCRYPTION TEXT("Encryption")
195 
196 #define PARM_EXCLUDE_UNENCRYPTED ExcludeUnencrypted
197 #define PARM_NAME_EXCLUDE_UNENCRYPTED TEXT("ExcludeUnencrypted")
198 #define PARM_DEFAULT_EXCLUDE_UNENCRYPTED TRUE
199 #define PARM_DEFAULT_EXCLUDE_UNENCRYPTED_STR "N"
200 
201 #define PARM_INTRA_BSS_RELAY IntraBSSRelay
202 #define PARM_NAME_INTRA_BSS_RELAY TEXT("IntraBSSRelay")
203 #define PARM_DEFAULT_INTRA_BSS_RELAY TRUE
204 #define PARM_DEFAULT_INTRA_BSS_RELAY_STR "Y"
205 
206 #define PARM_KEY1 Key1
207 #define PARM_NAME_KEY1 TEXT("Key1")
208 #define PARM_KEY2 Key2
209 #define PARM_NAME_KEY2 TEXT("Key2")
210 #define PARM_KEY3 Key3
211 #define PARM_NAME_KEY3 TEXT("Key3")
212 #define PARM_KEY4 Key4
213 #define PARM_NAME_KEY4 TEXT("Key4")
214 
215 //;? #define PARM_KEY_FORMAT AsciiHex
216 //;? #define PARM_NAME_KEY_FORMAT TEXT("AsciiHex")
217 
218 #define PARM_LOAD_BALANCING LoadBalancing
219 #define PARM_NAME_LOAD_BALANCING TEXT("LoadBalancing")
220 #define PARM_DEFAULT_LOAD_BALANCING TRUE
221 #define PARM_DEFAULT_LOAD_BALANCING_STR "Y"
222 
223 #define PARM_MAX_DATA_LENGTH MaxDataLength
224 #define PARM_NAME_MAX_DATA_LENGTH TEXT("MaxDataLength")
225 
226 #define PARM_MAX_SLEEP MaxSleepDuration
227 #define PARM_NAME_MAX_SLEEP TEXT("MaxSleepDuration")
228 #define PARM_MIN_MAX_PM_SLEEP 1 //;?names nearly right?
229 #define PARM_MAX_MAX_PM_SLEEP 65535
230 #define PARM_DEFAULT_MAX_PM_SLEEP 100
231 
232 #define PARM_MEDIUM_DISTRIBUTION MediumDistribution
233 #define PARM_NAME_MEDIUM_DISTRIBUTION TEXT("MediumDistribution")
234 #define PARM_DEFAULT_MEDIUM_DISTRIBUTION TRUE
235 #define PARM_DEFAULT_MEDIUM_DISTRIBUTION_STR "Y"
236 
237 #define PARM_MICROWAVE_ROBUSTNESS MicroWaveRobustness
238 #define PARM_NAME_MICROWAVE_ROBUSTNESS TEXT("MicroWaveRobustness")
239 #define PARM_DEFAULT_MICROWAVE_ROBUSTNESS FALSE
240 #define PARM_DEFAULT_MICROWAVE_ROBUSTNESS_STR "N"
241 
242 #define PARM_MULTICAST_PM_BUFFERING MulticastPMBuffering
243 #define PARM_NAME_MULTICAST_PM_BUFFERING TEXT("MulticastPMBuffering")
244 #define PARM_DEFAULT_MULTICAST_PM_BUFFERING TRUE
245 #define PARM_DEFAULT_MULTICAST_PM_BUFFERING_STR "Y"
246 
247 #define PARM_MULTICAST_RATE MulticastRate
248 #define PARM_NAME_MULTICAST_RATE TEXT("MulticastRate")
249 #ifdef WARP
250 #define PARM_MIN_MULTICAST_RATE 0x0001
251 #define PARM_MAX_MULTICAST_RATE 0x0fff
252 #define PARM_DEFAULT_MULTICAST_RATE_2GHZ 0x0004
253 #define PARM_DEFAULT_MULTICAST_RATE_5GHZ 0x0010
254 #else
255 #define PARM_MIN_MULTICAST_RATE 0x0001
256 #define PARM_MAX_MULTICAST_RATE 0x0004
257 #define PARM_DEFAULT_MULTICAST_RATE_2GHZ 0x0002
258 #define PARM_DEFAULT_MULTICAST_RATE_5GHZ 0x0000
259 #endif // WARP
260 
261 #define PARM_MULTICAST_RX MulticastReceive
262 #define PARM_NAME_MULTICAST_RX TEXT("MulticastReceive")
263 #define PARM_DEFAULT_MULTICAST_RX TRUE
264 #define PARM_DEFAULT_MULTICAST_RX_STR "Y"
265 
266 #define PARM_NETWORK_ADDR NetworkAddress
267 #define PARM_NAME_NETWORK_ADDR TEXT("NetworkAddress")
268 #define PARM_DEFAULT_NETWORK_ADDR { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
269 
270 #define PARM_NETWORK_TYPE NetworkType
271 #define PARM_NAME_NETWORK_TYPE TEXT("NetworkType")
272 #define PARM_DEFAULT_NETWORK_TYPE 0
273 
274 #define PARM_OWN_ATIM_WINDOW OwnATIMWindow
275 #define PARM_NAME_OWN_ATIM_WINDOW TEXT("OwnATIMWindow")
276 #define PARM_MIN_OWN_ATIM_WINDOW 0
277 #define PARM_MAX_OWN_ATIM_WINDOW 100
278 #define PARM_DEFAULT_OWN_ATIM_WINDOW 0
279 
280 #define PARM_OWN_BEACON_INTERVAL OwnBeaconInterval
281 #define PARM_NAME_OWN_BEACON_INTERVAL TEXT("OwnBeaconInterval")
282 #define PARM_MIN_OWN_BEACON_INTERVAL 20
283 #define PARM_MAX_OWN_BEACON_INTERVAL 200
284 #define PARM_DEFAULT_OWN_BEACON_INTERVAL 100
285 
286 #define PARM_OWN_CHANNEL OwnChannel
287 #define PARM_NAME_OWN_CHANNEL TEXT("OwnChannel")
288 #define PARM_MIN_OWN_CHANNEL 1
289 #define PARM_MAX_OWN_CHANNEL 161
290 #define PARM_DEFAULT_OWN_CHANNEL 10
291 
292 #define PARM_OWN_DTIM_PERIOD OwnDTIMPeriod
293 #define PARM_NAME_OWN_DTIM_PERIOD TEXT("OwnDTIMPeriod")
294 #define PARM_MIN_OWN_DTIM_PERIOD 1
295 #define PARM_MAX_OWN_DTIM_PERIOD 65535
296 #define PARM_DEFAULT_OWN_DTIM_PERIOD 1
297 
298 #define PARM_OWN_NAME OwnName
299 #define PARM_NAME_OWN_NAME TEXT("OwnName")
300 #define PARM_DEFAULT_OWN_NAME "Linux"
301 
302 #define PARM_OWN_SSID OwnSSID
303 #define PARM_NAME_OWN_SSID TEXT("OwnSSID")
304 
305 #define PARM_PM_ENABLED PMEnabled
306 #define PARM_NAME_PM_ENABLED TEXT("PMEnabled")
307 #define PARM_MAX_PM_ENABLED 3
308 
309 #define PARM_PMEPS PMEPS
310 #define PARM_NAME_PMEPS TEXT("PMEPS")
311 
312 #define PARM_PM_HOLDOVER_DURATION PMHoldoverDuration
313 #define PARM_NAME_PM_HOLDOVER_DURATION TEXT("PMHoldoverDuration")
314 #define PARM_MIN_PM_HOLDOVER_DURATION 1
315 #define PARM_MAX_PM_HOLDOVER_DURATION 1000
316 #define PARM_DEFAULT_PM_HOLDOVER_DURATION 100
317 
318 #define PARM_PM_MODE PowerMode
319 #define PARM_NAME_PM_MODE TEXT("PowerMode")
320 
321 #define PARM_PORT_TYPE PortType
322 #define PARM_NAME_PORT_TYPE TEXT("PortType")
323 #define PARM_MIN_PORT_TYPE 1
324 #define PARM_MAX_PORT_TYPE 3
325 #define PARM_DEFAULT_PORT_TYPE 1
326 
327 #define PARM_PROMISCUOUS_MODE PromiscuousMode
328 #define PARM_NAME_PROMISCUOUS_MODE TEXT("PromiscuousMode")
329 #define PARM_DEFAULT_PROMISCUOUS_MODE FALSE
330 #define PARM_DEFAULT_PROMISCUOUS_MODE_STR "N"
331 
332 #define PARM_REJECT_ANY RejectANY
333 #define PARM_NAME_REJECT_ANY TEXT("RejectANY")
334 #define PARM_DEFAULT_REJECT_ANY FALSE
335 #define PARM_DEFAULT_REJECT_ANY_STR "N"
336 
337 #define PARM_RTS_THRESHOLD RTSThreshold
338 #define PARM_NAME_RTS_THRESHOLD TEXT("RTSThreshold")
339 #define PARM_MIN_RTS_THRESHOLD 0
340 #define PARM_MAX_RTS_THRESHOLD 2347
341 #define PARM_DEFAULT_RTS_THRESHOLD 2347
342 
343 #define PARM_RTS_THRESHOLD1 RTSThreshold1
344 #define PARM_NAME_RTS_THRESHOLD1 TEXT("RTSThreshold1")
345 #define PARM_RTS_THRESHOLD2 RTSThreshold2
346 #define PARM_NAME_RTS_THRESHOLD2 TEXT("RTSThreshold2")
347 #define PARM_RTS_THRESHOLD3 RTSThreshold3
348 #define PARM_NAME_RTS_THRESHOLD3 TEXT("RTSThreshold3")
349 #define PARM_RTS_THRESHOLD4 RTSThreshold4
350 #define PARM_NAME_RTS_THRESHOLD4 TEXT("RTSThreshold4")
351 #define PARM_RTS_THRESHOLD5 RTSThreshold5
352 #define PARM_NAME_RTS_THRESHOLD5 TEXT("RTSThreshold5")
353 #define PARM_RTS_THRESHOLD6 RTSThreshold6
354 #define PARM_NAME_RTS_THRESHOLD6 TEXT("RTSThreshold6")
355 
356 #define PARM_SRSC_2GHZ SRSC2GHz
357 #define PARM_NAME_SRSC_2GHZ TEXT("SRSC2GHz")
358 #define PARM_MIN_SRSC 0x0000
359 #define PARM_MAX_SRSC 0x0FFF
360 #define PARM_DEFAULT_SRSC_2GHZ 0x0FFF
361 
362 #define PARM_SRSC_5GHZ SRSC5GHz
363 #define PARM_NAME_SRSC_5GHZ TEXT("SRSC5GHz")
364 #define PARM_DEFAULT_SRSC_5GHZ 0x0FF0
365 
366 #define PARM_SYSTEM_SCALE SystemScale
367 #define PARM_NAME_SYSTEM_SCALE TEXT("SystemScale")
368 #define PARM_MIN_SYSTEM_SCALE 1
369 #define PARM_MAX_SYSTEM_SCALE 5
370 #define PARM_DEFAULT_SYSTEM_SCALE 1
371 
372 #define PARM_TX_KEY TxKey
373 #define PARM_NAME_TX_KEY TEXT("TxKey")
374 #define PARM_MIN_TX_KEY 1
375 #define PARM_MAX_TX_KEY 4
376 #define PARM_DEFAULT_TX_KEY 1
377 
378 #define PARM_TX_POW_LEVEL TxPowLevel
379 #define PARM_NAME_TX_POW_LEVEL TEXT("TxPowLevel")
380 #define PARM_MIN_TX_POW_LEVEL 1 // 20 dBm
381 #define PARM_MAX_TX_POW_LEVEL 6 // 8 dBm
382 #define PARM_DEFAULT_TX_POW_LEVEL 3 // 15 dBm
383 
384 #define PARM_TX_RATE TxRateControl
385 #define PARM_NAME_TX_RATE TEXT("TxRateControl")
386 #define PARM_MIN_TX_RATE 0x0001
387 #ifdef WARP
388 #define PARM_MAX_TX_RATE 0x0FFF
389 #define PARM_DEFAULT_TX_RATE_2GHZ 0x0FFF
390 #define PARM_DEFAULT_TX_RATE_5GHZ 0x0FF0
391 #else
392 #define PARM_MAX_TX_RATE 0x0007
393 #define PARM_DEFAULT_TX_RATE_2GHZ 0x0003
394 #define PARM_DEFAULT_TX_RATE_5GHZ 0x0000
395 #endif // WARP
396 
397 #define PARM_TX_RATE1 TxRateControl1
398 #define PARM_NAME_TX_RATE1 TEXT("TxRateControl1")
399 #define PARM_TX_RATE2 TxRateControl2
400 #define PARM_NAME_TX_RATE2 TEXT("TxRateControl2")
401 #define PARM_TX_RATE3 TxRateControl3
402 #define PARM_NAME_TX_RATE3 TEXT("TxRateControl3")
403 #define PARM_TX_RATE4 TxRateControl4
404 #define PARM_NAME_TX_RATE4 TEXT("TxRateControl4")
405 #define PARM_TX_RATE5 TxRateControl5
406 #define PARM_NAME_TX_RATE5 TEXT("TxRateControl5")
407 #define PARM_TX_RATE6 TxRateControl6
408 #define PARM_NAME_TX_RATE6 TEXT("TxRateControl6")
409 
410 #define PARM_VENDORDESCRIPTION VendorDescription
411 #define PARM_NAME_VENDORDESCRIPTION TEXT("VendorDescription")
412 
413 #define PARM_WDS_ADDRESS WDSAddress
414 #define PARM_NAME_WDS_ADDRESS TEXT("WDSAddress")
415 
416 #define PARM_WDS_ADDRESS1 WDSAddress1
417 #define PARM_NAME_WDS_ADDRESS1 TEXT("WDSAddress1")
418 #define PARM_WDS_ADDRESS2 WDSAddress2
419 #define PARM_NAME_WDS_ADDRESS2 TEXT("WDSAddress2")
420 #define PARM_WDS_ADDRESS3 WDSAddress3
421 #define PARM_NAME_WDS_ADDRESS3 TEXT("WDSAddress3")
422 #define PARM_WDS_ADDRESS4 WDSAddress4
423 #define PARM_NAME_WDS_ADDRESS4 TEXT("WDSAddress4")
424 #define PARM_WDS_ADDRESS5 WDSAddress5
425 #define PARM_NAME_WDS_ADDRESS5 TEXT("WDSAddress5")
426 #define PARM_WDS_ADDRESS6 WDSAddress6
427 #define PARM_NAME_WDS_ADDRESS6 TEXT("WDSAddress6")
428 
429 /*
430 #define PARM_LONG_RETRY_LIMIT LongRetryLimit
431 #define PARM_NAME_LONG_RETRY_LIMIT TEXT("LongRetryLimit")
432 #define PARM_MIN_LONG_RETRY_LIMIT 1
433 #define PARM_MAX_LONG_RETRY_LIMIT 15
434 #define PARM_DEFAULT_LONG_RETRY_LIMIT 3
435 
436 
437 #define PARM_PROBE_DATA_RATES ProbeDataRates
438 #define PARM_NAME_PROBE_DATA_RATES TEXT("ProbeDataRates")
439 #define PARM_MIN_PROBE_DATA_RATES 0x0000
440 #define PARM_MAX_PROBE_DATA_RATES 0x0FFF
441 #define PARM_DEFAULT_PROBE_DATA_RATES_2GHZ 0x0002
442 #define PARM_DEFAULT_PROBE_DATA_RATES_5GHZ 0x0010
443 
444 #define PARM_SHORT_RETRY_LIMIT ShortRetryLimit
445 #define PARM_NAME_SHORT_RETRY_LIMIT TEXT("ShortRetryLimit")
446 #define PARM_MIN_SHORT_RETRY_LIMIT 1
447 #define PARM_MAX_SHORT_RETRY_LIMIT 15
448 #define PARM_DEFAULT_SHORT_RETRY_LIMIT 7
449 
450 
451 */
452 
453 /*******************************************************************************
454  * state definitions
455  ******************************************************************************/
456 /* The following constants are used to track state the device */
457 #define WL_FRIMWARE_PRESENT 1 // Download if needed
458 #define WL_FRIMWARE_NOT_PRESENT 0 // Skip over download, assume its already there
459 #define WL_HANDLING_INT 1 // Actually call the HCF to switch interrupts on/off
460 #define WL_NOT_HANDLING_INT 0 // Not yet handling interrupts, do not switch on/off
461 
462 /*******************************************************************************
463  * macro definitions
464  ******************************************************************************/
465 /* The following macro ensures that no symbols are exported, minimizing the
466  chance of a symbol collision in the kernel */
467 // EXPORT_NO_SYMBOLS;
468 
469 #define NELEM(arr) (sizeof(arr) / sizeof(arr[0]))
470 
471 #define WVLAN_VALID_MAC_ADDRESS( x ) \
472 ((x[0]!=0xFF) && (x[1]!=0xFF) && (x[2]!=0xFF) && (x[3]!=0xFF) && (x[4]!=0xFF) && (x[5]!=0xFF))
473 
474 
475 
476 
477 /*******************************************************************************
478  * type definitions
479  ******************************************************************************/
480 #undef FALSE
481 #undef TRUE
482 
483 typedef enum
484 {
485  FALSE = 0,
486  TRUE = 1
487 }
488 bool_t;
489 
490 
491 typedef struct _ScanResult
492 {
493  //hcf_16 len;
494  //hcf_16 typ;
496  int num_aps;
498 }
499 ScanResult;
500 
501 
502 typedef struct _LINK_STATUS_STRCT
503 {
506  hcf_16 linkStatus; /* 1..5 */
507 }
509 
510 
511 typedef struct _ASSOC_STATUS_STRCT
512 {
515  hcf_16 assocStatus; /* 1..3 */
518 }
520 
521 
523 {
526  hcf_16 securityStatus; /* 1..3 */
529 }
531 
532 #define WVLAN_WMP_PDU_TYPE_LT_REQ 0x00
533 #define WVLAN_WMP_PDU_TYPE_LT_RSP 0x01
534 #define WVLAN_WMP_PDU_TYPE_APL_REQ 0x02
535 #define WVLAN_WMP_PDU_TYPE_APL_RSP 0x03
536 
537 typedef struct wvlan_eth_hdr
538 {
539  unsigned char dst[ETH_ALEN]; /* Destination address. */
540  unsigned char src[ETH_ALEN]; /* Source address. */
541  unsigned short len; /* Length of the PDU. */
542 }
544 
545 typedef struct wvlan_llc_snap
546 {
547  unsigned char dsap; /* DSAP (0xAA) */
548  unsigned char ssap; /* SSAP (0xAA) */
549  unsigned char ctrl; /* Control (0x03) */
550  unsigned char oui[3]; /* Organization Unique ID (00-60-1d). */
551  unsigned char specid[2]; /* Specific ID code (00-01). */
552 }
554 
555 
556 typedef struct wvlan_lt_hdr
557 {
558  unsigned char version; /* Version (0x00) */
559  unsigned char type; /* PDU type: 0-req/1-resp. */
560  unsigned short id; /* Identifier to associate resp to req. */
561 }
563 
564 
565 typedef struct wvlan_wmp_hdr
566 {
567  unsigned char version; /* Version */
568  unsigned char type; /* PDU type */
569 }
571 
572 
573 #define FILLER_SIZE 1554
574 #define TEST_PATTERN_SIZE 54
575 
576 
577 typedef struct wvlan_lt_req
578 {
579  unsigned char Filler[TEST_PATTERN_SIZE]; /* minimal length of 54 bytes */
580 }
582 
583 
584 typedef struct wvlan_lt_rsp
585 {
586  char name[32];
587  /* Measured Data */
588  unsigned char signal;
589  unsigned char noise;
590  unsigned char rxFlow;
591  unsigned char dataRate;
592  unsigned short protocol;
593  /* Capabilities */
594  unsigned char station;
595  unsigned char dataRateCap;
596  unsigned char powerMgmt[4];
597  unsigned char robustness[4];
598  unsigned char scaling;
599  unsigned char reserved[5];
600 }
602 
603 
604 typedef struct wvlan_rx_wmp_hdr
605 {
606  unsigned short status;
607  unsigned short reserved1[2];
608  unsigned char silence;
609  unsigned char signal;
610  unsigned char rate;
611  unsigned char rxFlow;
612  unsigned short reserved2[2];
613  unsigned short frameControl;
614  unsigned short duration;
615  unsigned short address1[3];
616  unsigned short address2[3];
617  unsigned short address3[3];
618  unsigned short sequenceControl;
619  unsigned short address4[3];
620 #ifndef HERMES25 //;?just to be on the safe side of inherited but not comprehended code #ifdef HERMES2
621  unsigned short seems_to_be_unused_reserved3[5]; //;?
622  unsigned short seems_to_be_unused_reserved4; //;?
623 #endif // HERMES25
624  unsigned short HeaderDataLen;
625 }
627 
628 
630 {
635 }
637 
638 
640 {
646 }
648 
649 
650 typedef struct _LINKTEST_RSP_STRCT
651 {
655 }
657 
658 
659 typedef struct wvlan_wmp_rsp_pdu
660 {
665 }
667 
668 
669 typedef struct _WMP_RSP_STRCT
670 {
674 }
676 
677 
678 typedef struct _PROBE_RESP
679 {
680  // first part: 802.11
684  //hcf_8 signal;
686  hcf_8 signal; // Moved signal here as signal/noise values were flipped
690 
691  // second part:
699 
700 #ifndef WARP
702 #endif // WARP
703 
705  // the information in the next 3 fields (DA/SA/LenType) is actually not filled in.
706  hcf_8 DA[6];
707  hcf_8 SA[6];
708 
709 #ifdef WARP
710  hcf_8 channel;
711  hcf_8 band;
712 #else
714 #endif // WARP
715 
719  hcf_8 rawData[200];
721 }
723 
724 
725 typedef struct _ProbeResult
726 {
728  int num_aps;
730 }
732 
733 /* Definitions used to parse capabilities out of the probe responses */
734 #define CAPABILITY_ESS 0x0001
735 #define CAPABILITY_IBSS 0x0002
736 #define CAPABILITY_PRIVACY 0x0010
737 
738 /* Definitions used to parse the Information Elements out of probe responses */
739 #define DS_INFO_ELEM 0x03
740 #define GENERIC_INFO_ELEM 0xdd
741 #define WPA_MAX_IE_LEN 40
742 #define WPA_SELECTOR_LEN 4
743 #define WPA_OUI_TYPE { 0x00, 0x50, 0xf2, 1 }
744 #define WPA_VERSION 1
745 #define WPA_AUTH_KEY_MGMT_UNSPEC_802_1X { 0x00, 0x50, 0xf2, 1 }
746 #define WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X { 0x00, 0x50, 0xf2, 2 }
747 #define WPA_CIPHER_SUITE_NONE { 0x00, 0x50, 0xf2, 0 }
748 #define WPA_CIPHER_SUITE_WEP40 { 0x00, 0x50, 0xf2, 1 }
749 #define WPA_CIPHER_SUITE_TKIP { 0x00, 0x50, 0xf2, 2 }
750 #define WPA_CIPHER_SUITE_WRAP { 0x00, 0x50, 0xf2, 3 }
751 #define WPA_CIPHER_SUITE_CCMP { 0x00, 0x50, 0xf2, 4 }
752 #define WPA_CIPHER_SUITE_WEP104 { 0x00, 0x50, 0xf2, 5 }
753 
754 typedef enum wvlan_drv_mode
755 {
756  WVLAN_DRV_MODE_NO_DOWNLOAD, /* this is the same as STA for Hermes 1 */
757  /* it is also only applicable for Hermes 1 */
761 }
763 
764 
765 typedef enum wvlan_port_state
766 {
770 }
772 
773 /*
774 typedef enum wvlan_connect_state
775 {
776  WVLAN_CONNECT_STATE_CONNECTED,
777  WVLAN_CONNECT_STATE_DISCONNECTED
778 }
779 WVLAN_CONNECT_STATE, *PWVLAN_CONNECT_STATE;
780 */
781 
782 typedef enum wvlan_pm_state
783 {
787 }
789 
790 
791 typedef struct wvlan_frame
792 {
793  struct sk_buff *skb; /* sk_buff for frame. */
794  hcf_16 port; /* MAC port for the frame. */
795  hcf_16 len; /* Length of the frame. */
796 }
798 
799 
800 typedef struct wvlan_lframe
801 {
802  struct list_head node; /* Node in the list */
803  WVLAN_FRAME frame; /* Frame. */
804 }
806 
807 
808 
809 #define DEFAULT_NUM_TX_FRAMES 48
810 #define TX_Q_LOW_WATER_MARK (DEFAULT_NUM_TX_FRAMES/3)
811 
812 #define WVLAN_MAX_TX_QUEUES 1
813 
814 
815 #ifdef USE_WDS
816 
817 typedef struct wvlan_wds_if
818 {
819  struct net_device *dev;
820  int is_registered;
821  int netif_queue_on;
822  struct net_device_stats stats;
823  hcf_16 rtsThreshold;
824  hcf_16 txRateCntl;
825  hcf_8 wdsAddress[ETH_ALEN];
826 } WVLAN_WDS_IF, *PWVLAN_WDS_IF;
827 
828 #endif // USE_WDS
829 
830 
831 
832 #define NUM_RX_DESC 5
833 #define NUM_TX_DESC 5
834 
835 typedef struct dma_strct
836 {
839  DESC_STRCT *rx_reclaim_desc, *tx_reclaim_desc; // Descriptors for host-reclaim purposes (see HCF)
840  int tx_rsc_ind; // DMA Tx resource indicator is maintained in the MSF, not in the HCF
841  int rx_rsc_ind; // Also added rx resource indicator so that cleanup can be performed if alloc fails
842  int status;
843 } DMA_STRCT;
844 
845 
846 /* Macros used in DMA support */
847 /* get bus address of {rx,tx}dma structure member, in little-endian byte order */
848 #define WL_DMA_BUS_ADDR_LE(str, i, mem) \
849  cpu_to_le32(str##_dma_addr[(i)] + ((hcf_8 *)&str[(i)]->mem - (hcf_8 *)str[(i)]))
850 
851 
853 {
854 
855 #ifdef BUS_PCMCIA
856  struct pcmcia_device *link;
857 #endif // BUS_PCMCIA
858 
859 
860  struct net_device *dev;
861 // struct net_device *dev_next;
865 
866 
867 #ifdef WIRELESS_EXT
868  struct iw_statistics wstats;
869 // int spy_number;
870 // u_char spy_address[IW_MAX_SPY][ETH_ALEN];
871 // struct iw_quality spy_stat[IW_MAX_SPY];
872  struct iw_spy_data spy_data;
873  struct iw_public_data wireless_data;
874 #endif // WIRELESS_EXT
875 
876 
878 //;? struct timer_list timer_oor;
879 //;? hcf_16 timer_oor_cnt;
880  u_long wlags49_type; //controls output in /proc/wlags49
888  CFG_IDENTITY_STRCT driverIdentity;
892 
895  hcf_16 maxPort; /* 0 for STA, 6 for AP */
896 
897  /* Elements used for async notification from hardware */
898  RID_LOG_STRCT RidList[10];
903 
905 
906  hcf_8 PortType; // 1 - 3 (1 [Normal] | 3 [AdHoc])
907  hcf_16 Channel; // 0 - 14 (0)
909  hcf_8 DistanceBetweenAPs; // 1 - 3 (1)
910  hcf_16 RTSThreshold; // 0 - 2347 (2347)
911  hcf_16 PMEnabled; // 0 - 2, 8001 - 8002 (0)
913  hcf_8 CreateIBSS; // 0 - 1 (0)
914  hcf_8 MulticastReceive; // 0 - 1 (1)
915  hcf_16 MaxSleepDuration; // 0 - 65535 (100)
919  hcf_8 EnableEncryption; // 0 - 1 (0)
920  char Key1[MAX_KEY_LEN+1];
921  char Key2[MAX_KEY_LEN+1];
922  char Key3[MAX_KEY_LEN+1];
923  char Key4[MAX_KEY_LEN+1];
924  hcf_8 TransmitKeyID; // 1 - 4 (1)
925  CFG_DEFAULT_KEYS_STRCT DefaultKeys;
928 
934 
935  hcf_16 authentication; // is this AP specific?
937  WVLAN_DRV_MODE DownloadFirmware; // 0 - 2 (0 [None] | 1 [STA] | 2 [AP])
938 
940 
942 
946  //hcf_16 shortRetryLimit;
947  //hcf_16 longRetryLimit;
951  //hcf_16 probeDataRates[2];
954 
963 
965 
969 
970  int use_dma;
972 #ifdef USE_RTS
973  int useRTS;
974 #endif // USE_RTS
975  hcf_8 DTIMPeriod; // 1 - 255 (1)
977  hcf_8 RejectAny; // 0 - 1 (0)
978  hcf_8 ExcludeUnencrypted; // 0 - 1 (1)
980 #ifdef USE_WDS
981  WVLAN_WDS_IF wds_port[NUM_WDS_PORTS];
982 #endif // USE_WDS
983 
984  /* Track whether the card is using WEP encryption or WPA
985  * so we know what to disable next time through.
986  * IW_ENCODE_ALG_NONE, IW_ENCODE_ALG_WEP, IW_ENCODE_ALG_TKIP
987  */
988  int wext_enc;
989 }; // wl_private
990 
991 #define wl_priv(dev) ((struct wl_private *) netdev_priv(dev))
992 
993 /********************************************************************/
994 /* Locking and synchronization functions */
995 /********************************************************************/
996 
997 /* These functions *must* be inline or they will break horribly on
998  * SPARC, due to its weird semantics for save/restore flags. extern
999  * inline should prevent the kernel from linking or module from
1000  * loading if they are not inlined. */
1001 static inline void wl_lock(struct wl_private *lp,
1002  unsigned long *flags)
1003 {
1004  spin_lock_irqsave(&lp->slock, *flags);
1005 }
1006 
1007 static inline void wl_unlock(struct wl_private *lp,
1008  unsigned long *flags)
1009 {
1010  spin_unlock_irqrestore(&lp->slock, *flags);
1011 }
1012 
1013 /********************************************************************/
1014 /* Interrupt enable disable functions */
1015 /********************************************************************/
1016 
1017 extern inline void wl_act_int_on(struct wl_private *lp)
1018 {
1019  /*
1020  * Only do something when the driver is handling
1021  * interrupts. Handling starts at wl_open and
1022  * ends at wl_close when not in RTS mode
1023  */
1024  if(lp->is_handling_int == WL_HANDLING_INT) {
1025  hcf_action( &lp->hcfCtx, HCF_ACT_INT_ON );
1026  }
1027 }
1028 
1029 extern inline void wl_act_int_off(struct wl_private *lp)
1030 {
1031  /*
1032  * Only do something when the driver is handling
1033  * interrupts. Handling starts at wl_open and
1034  * ends at wl_close when not in RTS mode
1035  */
1036  if(lp->is_handling_int == WL_HANDLING_INT) {
1037  hcf_action( &lp->hcfCtx, HCF_ACT_INT_OFF );
1038  }
1039 }
1040 
1041 #endif // __WAVELAN2_H__