1 /*******************************************************************************
3 * Wireless device driver for Linux (wlags49).
5 * Copyright (c) 1998-2003 Agere Systems Inc.
9 * Initially developed by TriplePoint, Inc.
10 * http://www.triplepoint.com
12 *------------------------------------------------------------------------------
14 * Header for defintions and macros internal to the drvier.
16 *------------------------------------------------------------------------------
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.
25 * Copyright © 2003 Agere Systems Inc.
26 * All rights reserved.
28 * Redistribution and use in source or binary forms, with or without
29 * modifications, are permitted provided that the following conditions are met:
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
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.
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.
46 * THIS SOFTWARE IS PROVIDED
\93AS IS
\94 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
59 ******************************************************************************/
64 /*******************************************************************************
65 * VERSION CONTROL INFORMATION
66 *******************************************************************************
69 * $Date: 2004/08/03 11:39:39 $
71 * $Source: /usr/local/cvs/wl_lkm/include/wireless/wl_internal.h,v $
73 ******************************************************************************/
78 #ifndef __WAVELAN2_H__
79 #define __WAVELAN2_H__
84 /*******************************************************************************
86 ******************************************************************************/
87 #include <linux/version.h>
89 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
90 #include <pcmcia/version.h>
92 #include <pcmcia/cs_types.h>
93 #include <pcmcia/cs.h>
94 #include <pcmcia/cistpl.h>
95 #include <pcmcia/cisreg.h>
96 #include <pcmcia/ciscode.h>
97 #include <pcmcia/ds.h>
100 #ifdef HAS_WIRELESS_EXTENSIONS
101 #include <linux/wireless.h>
102 #if WIRELESS_EXT > 13
103 #include <net/iw_handler.h>
104 #endif // WIRELESS_EXT > 13
106 #define RETURN_CURRENT_NETWORKNAME
107 #define USE_FREQUENCY
108 #endif // HAS_WIRELESS_EXTENSIONS/
110 #include <linux/list.h>
112 #include <linux/interrupt.h>
117 /*******************************************************************************
118 * constant definitions
119 ******************************************************************************/
128 #define MAX_KEY_LEN (2 + (13 * 2)) // 0x plus 13 hex digit pairs
130 #define MAX_ENC_LEN 104
132 #define MAX_SCAN_TIME_SEC 8
135 #define CFG_MB_INFO 0x0820 //Mail Box Info Block
137 #define NUM_WDS_PORTS 6
139 #define WVLAN_MAX_LOOKAHEAD (HCF_MAX_MSG+46) /* as per s0005MIC_4.doc */
142 /* Min/Max/Default Parameter Values */
143 #if 0 //;? (HCF_TYPE) & HCF_TYPE_AP
144 //;? why this difference depending on compile option, seems to me it should depend on runtime if anything
145 #define PARM_DEFAULT_SSID "LinuxAP"
147 #define PARM_DEFAULT_SSID "ANY"
148 #endif // HCF_TYPE_AP
150 #define PARM_MIN_NAME_LEN 1
151 #define PARM_MAX_NAME_LEN 32
154 /* The following definitions pertain to module and profile parameters */
155 // #define PARM_AP_MODE APMode
156 // #define PARM_NAME_AP_MODE TEXT("APMode")
157 // #define PARM_DEFAULT_AP_MODE FALSE
159 #define PARM_AUTHENTICATION Authentication
160 #define PARM_NAME_AUTHENTICATION TEXT("Authentication")
161 #define PARM_MIN_AUTHENTICATION 1
162 #define PARM_MAX_AUTHENTICATION 2
163 #define PARM_DEFAULT_AUTHENTICATION 1
165 #define PARM_AUTH_KEY_MGMT_SUITE AuthKeyMgmtSuite
166 #define PARM_NAME_AUTH_KEY_MGMT_SUITE TEXT("AuthKeyMgmtSuite")
167 #define PARM_MIN_AUTH_KEY_MGMT_SUITE 0
168 #define PARM_MAX_AUTH_KEY_MGMT_SUITE 4
169 #define PARM_DEFAULT_AUTH_KEY_MGMT_SUITE 0
171 #define PARM_BRSC_2GHZ BRSC2GHz
172 #define PARM_NAME_BRSC_2GHZ TEXT("BRSC2GHz")
173 #define PARM_MIN_BRSC 0x0000
174 #define PARM_MAX_BRSC 0x0FFF
175 #define PARM_DEFAULT_BRSC_2GHZ 0x000F
177 #define PARM_BRSC_5GHZ BRSC5GHz
178 #define PARM_NAME_BRSC_5GHZ TEXT("BRSC5GHz")
179 #define PARM_DEFAULT_BRSC_5GHZ 0x0150
181 #define PARM_COEXISTENCE Coexistence
182 #define PARM_NAME_COEXISTENCE TEXT("Coexistence")
183 #define PARM_MIN_COEXISTENCE 0x0000
184 #define PARM_MAX_COEXISTENCE 0x0007
185 #define PARM_DEFAULT_COEXISTENCE 0x0000
187 #define PARM_CONFIGURED Configured
188 #define PARM_NAME_CONFIGURED TEXT("Configured")
190 #define PARM_CONNECTION_CONTROL ConnectionControl
191 #define PARM_NAME_CONNECTION_CONTROL TEXT("ConnectionControl")
192 #define PARM_MIN_CONNECTION_CONTROL 0
193 #define PARM_MAX_CONNECTION_CONTROL 3
194 #define PARM_DEFAULT_CONNECTION_CONTROL 2
196 #define PARM_CREATE_IBSS CreateIBSS
197 #define PARM_NAME_CREATE_IBSS TEXT("CreateIBSS")
198 #define PARM_DEFAULT_CREATE_IBSS FALSE
199 #define PARM_DEFAULT_CREATE_IBSS_STR "N"
201 #define PARM_DEBUG_FLAG DebugFlag
202 #define PARM_NAME_DEBUG_FLAG TEXT("DebugFlag")
203 #define PARM_MIN_DEBUG_FLAG 0
204 #define PARM_MAX_DEBUG_FLAG 0xFFFF
205 #define PARM_DEFAULT_DEBUG_FLAG 0xFFFF
207 #define PARM_DESIRED_SSID DesiredSSID
208 #define PARM_NAME_DESIRED_SSID TEXT("DesiredSSID")
210 #define PARM_DOWNLOAD_FIRMWARE DownloadFirmware
211 #define PARM_NAME_DOWNLOAD_FIRMWARE TEXT("DownloadFirmware")
213 #define PARM_DRIVER_ENABLE DriverEnable
214 #define PARM_NAME_DRIVER_ENABLE TEXT("DriverEnable")
215 #define PARM_DEFAULT_DRIVER_ENABLE TRUE
217 #define PARM_ENABLE_ENCRYPTION EnableEncryption
218 #define PARM_NAME_ENABLE_ENCRYPTION TEXT("EnableEncryption")
219 #define PARM_MIN_ENABLE_ENCRYPTION 0
220 #define PARM_MAX_ENABLE_ENCRYPTION 7
221 #define PARM_DEFAULT_ENABLE_ENCRYPTION 0
223 #define PARM_ENCRYPTION Encryption
224 #define PARM_NAME_ENCRYPTION TEXT("Encryption")
226 #define PARM_EXCLUDE_UNENCRYPTED ExcludeUnencrypted
227 #define PARM_NAME_EXCLUDE_UNENCRYPTED TEXT("ExcludeUnencrypted")
228 #define PARM_DEFAULT_EXCLUDE_UNENCRYPTED TRUE
229 #define PARM_DEFAULT_EXCLUDE_UNENCRYPTED_STR "N"
231 #define PARM_INTRA_BSS_RELAY IntraBSSRelay
232 #define PARM_NAME_INTRA_BSS_RELAY TEXT("IntraBSSRelay")
233 #define PARM_DEFAULT_INTRA_BSS_RELAY TRUE
234 #define PARM_DEFAULT_INTRA_BSS_RELAY_STR "Y"
236 #define PARM_KEY1 Key1
237 #define PARM_NAME_KEY1 TEXT("Key1")
238 #define PARM_KEY2 Key2
239 #define PARM_NAME_KEY2 TEXT("Key2")
240 #define PARM_KEY3 Key3
241 #define PARM_NAME_KEY3 TEXT("Key3")
242 #define PARM_KEY4 Key4
243 #define PARM_NAME_KEY4 TEXT("Key4")
245 //;? #define PARM_KEY_FORMAT AsciiHex
246 //;? #define PARM_NAME_KEY_FORMAT TEXT("AsciiHex")
248 #define PARM_LOAD_BALANCING LoadBalancing
249 #define PARM_NAME_LOAD_BALANCING TEXT("LoadBalancing")
250 #define PARM_DEFAULT_LOAD_BALANCING TRUE
251 #define PARM_DEFAULT_LOAD_BALANCING_STR "Y"
253 #define PARM_MAX_DATA_LENGTH MaxDataLength
254 #define PARM_NAME_MAX_DATA_LENGTH TEXT("MaxDataLength")
256 #define PARM_MAX_SLEEP MaxSleepDuration
257 #define PARM_NAME_MAX_SLEEP TEXT("MaxSleepDuration")
258 #define PARM_MIN_MAX_PM_SLEEP 1 //;?names nearly right?
259 #define PARM_MAX_MAX_PM_SLEEP 65535
260 #define PARM_DEFAULT_MAX_PM_SLEEP 100
262 #define PARM_MEDIUM_DISTRIBUTION MediumDistribution
263 #define PARM_NAME_MEDIUM_DISTRIBUTION TEXT("MediumDistribution")
264 #define PARM_DEFAULT_MEDIUM_DISTRIBUTION TRUE
265 #define PARM_DEFAULT_MEDIUM_DISTRIBUTION_STR "Y"
267 #define PARM_MICROWAVE_ROBUSTNESS MicroWaveRobustness
268 #define PARM_NAME_MICROWAVE_ROBUSTNESS TEXT("MicroWaveRobustness")
269 #define PARM_DEFAULT_MICROWAVE_ROBUSTNESS FALSE
270 #define PARM_DEFAULT_MICROWAVE_ROBUSTNESS_STR "N"
272 #define PARM_MULTICAST_PM_BUFFERING MulticastPMBuffering
273 #define PARM_NAME_MULTICAST_PM_BUFFERING TEXT("MulticastPMBuffering")
274 #define PARM_DEFAULT_MULTICAST_PM_BUFFERING TRUE
275 #define PARM_DEFAULT_MULTICAST_PM_BUFFERING_STR "Y"
277 #define PARM_MULTICAST_RATE MulticastRate
278 #define PARM_NAME_MULTICAST_RATE TEXT("MulticastRate")
280 #define PARM_MIN_MULTICAST_RATE 0x0001
281 #define PARM_MAX_MULTICAST_RATE 0x0fff
282 #define PARM_DEFAULT_MULTICAST_RATE_2GHZ 0x0004
283 #define PARM_DEFAULT_MULTICAST_RATE_5GHZ 0x0010
285 #define PARM_MIN_MULTICAST_RATE 0x0001
286 #define PARM_MAX_MULTICAST_RATE 0x0004
287 #define PARM_DEFAULT_MULTICAST_RATE_2GHZ 0x0002
288 #define PARM_DEFAULT_MULTICAST_RATE_5GHZ 0x0000
291 #define PARM_MULTICAST_RX MulticastReceive
292 #define PARM_NAME_MULTICAST_RX TEXT("MulticastReceive")
293 #define PARM_DEFAULT_MULTICAST_RX TRUE
294 #define PARM_DEFAULT_MULTICAST_RX_STR "Y"
296 #define PARM_NETWORK_ADDR NetworkAddress
297 #define PARM_NAME_NETWORK_ADDR TEXT("NetworkAddress")
298 #define PARM_DEFAULT_NETWORK_ADDR { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
300 #define PARM_NETWORK_TYPE NetworkType
301 #define PARM_NAME_NETWORK_TYPE TEXT("NetworkType")
302 #define PARM_DEFAULT_NETWORK_TYPE 0
304 #define PARM_OWN_ATIM_WINDOW OwnATIMWindow
305 #define PARM_NAME_OWN_ATIM_WINDOW TEXT("OwnATIMWindow")
306 #define PARM_MIN_OWN_ATIM_WINDOW 0
307 #define PARM_MAX_OWN_ATIM_WINDOW 100
308 #define PARM_DEFAULT_OWN_ATIM_WINDOW 0
310 #define PARM_OWN_BEACON_INTERVAL OwnBeaconInterval
311 #define PARM_NAME_OWN_BEACON_INTERVAL TEXT("OwnBeaconInterval")
312 #define PARM_MIN_OWN_BEACON_INTERVAL 20
313 #define PARM_MAX_OWN_BEACON_INTERVAL 200
314 #define PARM_DEFAULT_OWN_BEACON_INTERVAL 100
316 #define PARM_OWN_CHANNEL OwnChannel
317 #define PARM_NAME_OWN_CHANNEL TEXT("OwnChannel")
318 #define PARM_MIN_OWN_CHANNEL 1
319 #define PARM_MAX_OWN_CHANNEL 161
320 #define PARM_DEFAULT_OWN_CHANNEL 10
322 #define PARM_OWN_DTIM_PERIOD OwnDTIMPeriod
323 #define PARM_NAME_OWN_DTIM_PERIOD TEXT("OwnDTIMPeriod")
324 #define PARM_MIN_OWN_DTIM_PERIOD 1
325 #define PARM_MAX_OWN_DTIM_PERIOD 65535
326 #define PARM_DEFAULT_OWN_DTIM_PERIOD 1
328 #define PARM_OWN_NAME OwnName
329 #define PARM_NAME_OWN_NAME TEXT("OwnName")
330 #define PARM_DEFAULT_OWN_NAME "Linux"
332 #define PARM_OWN_SSID OwnSSID
333 #define PARM_NAME_OWN_SSID TEXT("OwnSSID")
335 #define PARM_PM_ENABLED PMEnabled
336 #define PARM_NAME_PM_ENABLED TEXT("PMEnabled")
337 #define PARM_MAX_PM_ENABLED 3
339 #define PARM_PMEPS PMEPS
340 #define PARM_NAME_PMEPS TEXT("PMEPS")
342 #define PARM_PM_HOLDOVER_DURATION PMHoldoverDuration
343 #define PARM_NAME_PM_HOLDOVER_DURATION TEXT("PMHoldoverDuration")
344 #define PARM_MIN_PM_HOLDOVER_DURATION 1
345 #define PARM_MAX_PM_HOLDOVER_DURATION 1000
346 #define PARM_DEFAULT_PM_HOLDOVER_DURATION 100
348 #define PARM_PM_MODE PowerMode
349 #define PARM_NAME_PM_MODE TEXT("PowerMode")
351 #define PARM_PORT_TYPE PortType
352 #define PARM_NAME_PORT_TYPE TEXT("PortType")
353 #define PARM_MIN_PORT_TYPE 1
354 #define PARM_MAX_PORT_TYPE 3
355 #define PARM_DEFAULT_PORT_TYPE 1
357 #define PARM_PROMISCUOUS_MODE PromiscuousMode
358 #define PARM_NAME_PROMISCUOUS_MODE TEXT("PromiscuousMode")
359 #define PARM_DEFAULT_PROMISCUOUS_MODE FALSE
360 #define PARM_DEFAULT_PROMISCUOUS_MODE_STR "N"
362 #define PARM_REJECT_ANY RejectANY
363 #define PARM_NAME_REJECT_ANY TEXT("RejectANY")
364 #define PARM_DEFAULT_REJECT_ANY FALSE
365 #define PARM_DEFAULT_REJECT_ANY_STR "N"
367 #define PARM_RTS_THRESHOLD RTSThreshold
368 #define PARM_NAME_RTS_THRESHOLD TEXT("RTSThreshold")
369 #define PARM_MIN_RTS_THRESHOLD 0
370 #define PARM_MAX_RTS_THRESHOLD 2347
371 #define PARM_DEFAULT_RTS_THRESHOLD 2347
373 #define PARM_RTS_THRESHOLD1 RTSThreshold1
374 #define PARM_NAME_RTS_THRESHOLD1 TEXT("RTSThreshold1")
375 #define PARM_RTS_THRESHOLD2 RTSThreshold2
376 #define PARM_NAME_RTS_THRESHOLD2 TEXT("RTSThreshold2")
377 #define PARM_RTS_THRESHOLD3 RTSThreshold3
378 #define PARM_NAME_RTS_THRESHOLD3 TEXT("RTSThreshold3")
379 #define PARM_RTS_THRESHOLD4 RTSThreshold4
380 #define PARM_NAME_RTS_THRESHOLD4 TEXT("RTSThreshold4")
381 #define PARM_RTS_THRESHOLD5 RTSThreshold5
382 #define PARM_NAME_RTS_THRESHOLD5 TEXT("RTSThreshold5")
383 #define PARM_RTS_THRESHOLD6 RTSThreshold6
384 #define PARM_NAME_RTS_THRESHOLD6 TEXT("RTSThreshold6")
386 #define PARM_SRSC_2GHZ SRSC2GHz
387 #define PARM_NAME_SRSC_2GHZ TEXT("SRSC2GHz")
388 #define PARM_MIN_SRSC 0x0000
389 #define PARM_MAX_SRSC 0x0FFF
390 #define PARM_DEFAULT_SRSC_2GHZ 0x0FFF
392 #define PARM_SRSC_5GHZ SRSC5GHz
393 #define PARM_NAME_SRSC_5GHZ TEXT("SRSC5GHz")
394 #define PARM_DEFAULT_SRSC_5GHZ 0x0FF0
396 #define PARM_SYSTEM_SCALE SystemScale
397 #define PARM_NAME_SYSTEM_SCALE TEXT("SystemScale")
398 #define PARM_MIN_SYSTEM_SCALE 1
399 #define PARM_MAX_SYSTEM_SCALE 5
400 #define PARM_DEFAULT_SYSTEM_SCALE 1
402 #define PARM_TX_KEY TxKey
403 #define PARM_NAME_TX_KEY TEXT("TxKey")
404 #define PARM_MIN_TX_KEY 1
405 #define PARM_MAX_TX_KEY 4
406 #define PARM_DEFAULT_TX_KEY 1
408 #define PARM_TX_POW_LEVEL TxPowLevel
409 #define PARM_NAME_TX_POW_LEVEL TEXT("TxPowLevel")
410 #define PARM_MIN_TX_POW_LEVEL 1 // 20 dBm
411 #define PARM_MAX_TX_POW_LEVEL 6 // 8 dBm
412 #define PARM_DEFAULT_TX_POW_LEVEL 3 // 15 dBm
414 #define PARM_TX_RATE TxRateControl
415 #define PARM_NAME_TX_RATE TEXT("TxRateControl")
416 #define PARM_MIN_TX_RATE 0x0001
418 #define PARM_MAX_TX_RATE 0x0FFF
419 #define PARM_DEFAULT_TX_RATE_2GHZ 0x0FFF
420 #define PARM_DEFAULT_TX_RATE_5GHZ 0x0FF0
422 #define PARM_MAX_TX_RATE 0x0007
423 #define PARM_DEFAULT_TX_RATE_2GHZ 0x0003
424 #define PARM_DEFAULT_TX_RATE_5GHZ 0x0000
427 #define PARM_TX_RATE1 TxRateControl1
428 #define PARM_NAME_TX_RATE1 TEXT("TxRateControl1")
429 #define PARM_TX_RATE2 TxRateControl2
430 #define PARM_NAME_TX_RATE2 TEXT("TxRateControl2")
431 #define PARM_TX_RATE3 TxRateControl3
432 #define PARM_NAME_TX_RATE3 TEXT("TxRateControl3")
433 #define PARM_TX_RATE4 TxRateControl4
434 #define PARM_NAME_TX_RATE4 TEXT("TxRateControl4")
435 #define PARM_TX_RATE5 TxRateControl5
436 #define PARM_NAME_TX_RATE5 TEXT("TxRateControl5")
437 #define PARM_TX_RATE6 TxRateControl6
438 #define PARM_NAME_TX_RATE6 TEXT("TxRateControl6")
440 #define PARM_VENDORDESCRIPTION VendorDescription
441 #define PARM_NAME_VENDORDESCRIPTION TEXT("VendorDescription")
443 #define PARM_WDS_ADDRESS WDSAddress
444 #define PARM_NAME_WDS_ADDRESS TEXT("WDSAddress")
446 #define PARM_WDS_ADDRESS1 WDSAddress1
447 #define PARM_NAME_WDS_ADDRESS1 TEXT("WDSAddress1")
448 #define PARM_WDS_ADDRESS2 WDSAddress2
449 #define PARM_NAME_WDS_ADDRESS2 TEXT("WDSAddress2")
450 #define PARM_WDS_ADDRESS3 WDSAddress3
451 #define PARM_NAME_WDS_ADDRESS3 TEXT("WDSAddress3")
452 #define PARM_WDS_ADDRESS4 WDSAddress4
453 #define PARM_NAME_WDS_ADDRESS4 TEXT("WDSAddress4")
454 #define PARM_WDS_ADDRESS5 WDSAddress5
455 #define PARM_NAME_WDS_ADDRESS5 TEXT("WDSAddress5")
456 #define PARM_WDS_ADDRESS6 WDSAddress6
457 #define PARM_NAME_WDS_ADDRESS6 TEXT("WDSAddress6")
460 #define PARM_LONG_RETRY_LIMIT LongRetryLimit
461 #define PARM_NAME_LONG_RETRY_LIMIT TEXT("LongRetryLimit")
462 #define PARM_MIN_LONG_RETRY_LIMIT 1
463 #define PARM_MAX_LONG_RETRY_LIMIT 15
464 #define PARM_DEFAULT_LONG_RETRY_LIMIT 3
467 #define PARM_PROBE_DATA_RATES ProbeDataRates
468 #define PARM_NAME_PROBE_DATA_RATES TEXT("ProbeDataRates")
469 #define PARM_MIN_PROBE_DATA_RATES 0x0000
470 #define PARM_MAX_PROBE_DATA_RATES 0x0FFF
471 #define PARM_DEFAULT_PROBE_DATA_RATES_2GHZ 0x0002
472 #define PARM_DEFAULT_PROBE_DATA_RATES_5GHZ 0x0010
474 #define PARM_SHORT_RETRY_LIMIT ShortRetryLimit
475 #define PARM_NAME_SHORT_RETRY_LIMIT TEXT("ShortRetryLimit")
476 #define PARM_MIN_SHORT_RETRY_LIMIT 1
477 #define PARM_MAX_SHORT_RETRY_LIMIT 15
478 #define PARM_DEFAULT_SHORT_RETRY_LIMIT 7
483 /*******************************************************************************
485 ******************************************************************************/
486 /* The following constants are used to track state the device */
487 #define WL_FRIMWARE_PRESENT 1 // Download if needed
488 #define WL_FRIMWARE_NOT_PRESENT 0 // Skip over download, assume its already there
489 #define WL_HANDLING_INT 1 // Actually call the HCF to switch interrupts on/off
490 #define WL_NOT_HANDLING_INT 0 // Not yet handling interrupts, do not switch on/off
492 /*******************************************************************************
494 ******************************************************************************/
495 /* The following macro ensures that no symbols are exported, minimizing the
496 chance of a symbol collision in the kernel */
497 // EXPORT_NO_SYMBOLS;
499 #define NELEM(arr) (sizeof(arr) / sizeof(arr[0]))
501 #define WVLAN_VALID_MAC_ADDRESS( x ) \
502 ((x[0]!=0xFF) && (x[1]!=0xFF) && (x[2]!=0xFF) && (x[3]!=0xFF) && (x[4]!=0xFF) && (x[5]!=0xFF))
507 /*******************************************************************************
509 ******************************************************************************/
521 typedef struct _ScanResult
527 SCAN_RS_STRCT APTable [MAX_NAPS];
532 typedef struct _LINK_STATUS_STRCT
536 hcf_16 linkStatus; /* 1..5 */
541 typedef struct _ASSOC_STATUS_STRCT
545 hcf_16 assocStatus; /* 1..3 */
546 hcf_8 staAddr[ETH_ALEN];
547 hcf_8 oldApAddr[ETH_ALEN];
552 typedef struct _SECURITY_STATUS_STRCT
556 hcf_16 securityStatus; /* 1..3 */
557 hcf_8 staAddr[ETH_ALEN];
560 SECURITY_STATUS_STRCT;
562 #define WVLAN_WMP_PDU_TYPE_LT_REQ 0x00
563 #define WVLAN_WMP_PDU_TYPE_LT_RSP 0x01
564 #define WVLAN_WMP_PDU_TYPE_APL_REQ 0x02
565 #define WVLAN_WMP_PDU_TYPE_APL_RSP 0x03
567 typedef struct wvlan_eth_hdr
569 unsigned char dst[ETH_ALEN]; /* Destination address. */
570 unsigned char src[ETH_ALEN]; /* Source address. */
571 unsigned short len; /* Length of the PDU. */
573 WVLAN_ETH_HDR, *PWVLAN_ETH_HDR;
575 typedef struct wvlan_llc_snap
577 unsigned char dsap; /* DSAP (0xAA) */
578 unsigned char ssap; /* SSAP (0xAA) */
579 unsigned char ctrl; /* Control (0x03) */
580 unsigned char oui[3]; /* Organization Unique ID (00-60-1d). */
581 unsigned char specid[2]; /* Specific ID code (00-01). */
583 WVLAN_LLC_SNAP, *PWVLAN_LLC_SNAP;
586 typedef struct wvlan_lt_hdr
588 unsigned char version; /* Version (0x00) */
589 unsigned char type; /* PDU type: 0-req/1-resp. */
590 unsigned short id; /* Identifier to associate resp to req. */
592 WVLAN_LT_HDR, *PWVLAN_LT_HDR;
595 typedef struct wvlan_wmp_hdr
597 unsigned char version; /* Version */
598 unsigned char type; /* PDU type */
600 WVLAN_WMP_HDR, *PWVLAN_WMP_HDR;
603 #define FILLER_SIZE 1554
604 #define TEST_PATTERN_SIZE 54
607 typedef struct wvlan_lt_req
609 unsigned char Filler[TEST_PATTERN_SIZE]; /* minimal length of 54 bytes */
611 WVLAN_LT_REQ, *PWVLAN_LT_REQ;
614 typedef struct wvlan_lt_rsp
618 unsigned char signal;
620 unsigned char rxFlow;
621 unsigned char dataRate;
622 unsigned short protocol;
624 unsigned char station;
625 unsigned char dataRateCap;
626 unsigned char powerMgmt[4];
627 unsigned char robustness[4];
628 unsigned char scaling;
629 unsigned char reserved[5];
631 WVLAN_LT_RSP, *PWVLAN_LT_RSP;
634 typedef struct wvlan_rx_wmp_hdr
636 unsigned short status;
637 unsigned short reserved1[2];
638 unsigned char silence;
639 unsigned char signal;
641 unsigned char rxFlow;
642 unsigned short reserved2[2];
643 unsigned short frameControl;
644 unsigned short duration;
645 unsigned short address1[3];
646 unsigned short address2[3];
647 unsigned short address3[3];
648 unsigned short sequenceControl;
649 unsigned short address4[3];
650 #ifndef HERMES25 //;?just to be on the safe side of inherited but not comprehended code #ifdef HERMES2
651 unsigned short seems_to_be_unused_reserved3[5]; //;?
652 unsigned short seems_to_be_unused_reserved4; //;?
654 unsigned short HeaderDataLen;
656 WVLAN_RX_WMP_HDR, *PWVLAN_RX_WMP_HDR;
659 typedef struct wvlan_linktest_req_pdu
661 WVLAN_ETH_HDR ethHdr;
662 WVLAN_LLC_SNAP llcSnap;
666 WVLAN_LINKTEST_REQ_PDU, *PWVLAN_LINKTEST_REQ_PDU;
669 typedef struct wvlan_linktest_rsp_pdu
671 WVLAN_RX_WMP_HDR wmpRxHdr;
672 WVLAN_ETH_HDR ethHdr;
673 WVLAN_LLC_SNAP llcSnap;
677 WVLAN_LINKTEST_RSP_PDU, *PWVLAN_LINKTEST_RSP_PDU;
680 typedef struct _LINKTEST_RSP_STRCT
684 WVLAN_LINKTEST_RSP_PDU ltRsp;
689 typedef struct wvlan_wmp_rsp_pdu
691 WVLAN_RX_WMP_HDR wmpRxHdr;
692 WVLAN_ETH_HDR ethHdr;
693 WVLAN_LLC_SNAP llcSnap;
694 WVLAN_WMP_HDR wmpHdr;
696 WVLAN_WMP_RSP_PDU, *PWVLAN_WMP_RSP_PDU;
699 typedef struct _WMP_RSP_STRCT
703 WVLAN_WMP_RSP_PDU wmpRsp;
708 typedef struct _PROBE_RESP
710 // first part: 802.11
716 hcf_8 signal; // Moved signal here as signal/noise values were flipped
726 hcf_8 BSSID[6]; //! this is correct, right ?
735 // the information in the next 3 fields (DA/SA/LenType) is actually not filled in.
747 hcf_16 beaconInterval;
749 hcf_8 rawData[200]; //! <<< think about this number !
752 PROBE_RESP, *PPROBE_RESP;
755 typedef struct _ProbeResult
759 PROBE_RESP ProbeTable[MAX_NAPS];
763 /* Definitions used to parse capabilities out of the probe responses */
764 #define CAPABILITY_ESS 0x0001
765 #define CAPABILITY_IBSS 0x0002
766 #define CAPABILITY_PRIVACY 0x0010
768 /* Definitions used to parse the Information Elements out of probe responses */
769 #define DS_INFO_ELEM 0x03
770 #define GENERIC_INFO_ELEM 0xdd
771 #define WPA_MAX_IE_LEN 40
772 #define WPA_SELECTOR_LEN 4
773 #define WPA_OUI_TYPE { 0x00, 0x50, 0xf2, 1 }
774 #define WPA_VERSION 1
775 #define WPA_AUTH_KEY_MGMT_UNSPEC_802_1X { 0x00, 0x50, 0xf2, 1 }
776 #define WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X { 0x00, 0x50, 0xf2, 2 }
777 #define WPA_CIPHER_SUITE_NONE { 0x00, 0x50, 0xf2, 0 }
778 #define WPA_CIPHER_SUITE_WEP40 { 0x00, 0x50, 0xf2, 1 }
779 #define WPA_CIPHER_SUITE_TKIP { 0x00, 0x50, 0xf2, 2 }
780 #define WPA_CIPHER_SUITE_WRAP { 0x00, 0x50, 0xf2, 3 }
781 #define WPA_CIPHER_SUITE_CCMP { 0x00, 0x50, 0xf2, 4 }
782 #define WPA_CIPHER_SUITE_WEP104 { 0x00, 0x50, 0xf2, 5 }
784 typedef enum wvlan_drv_mode
786 WVLAN_DRV_MODE_NO_DOWNLOAD, /* this is the same as STA for Hermes 1 */
787 /* it is also only applicable for Hermes 1 */
792 WVLAN_DRV_MODE, *PWVLAN_DRV_MODE;
795 typedef enum wvlan_port_state
797 WVLAN_PORT_STATE_ENABLED,
798 WVLAN_PORT_STATE_DISABLED,
799 WVLAN_PORT_STATE_CONNECTED
801 WVLAN_PORT_STATE, *PWVLAN_PORT_STATE;
804 typedef enum wvlan_connect_state
806 WVLAN_CONNECT_STATE_CONNECTED,
807 WVLAN_CONNECT_STATE_DISCONNECTED
809 WVLAN_CONNECT_STATE, *PWVLAN_CONNECT_STATE;
812 typedef enum wvlan_pm_state
814 WVLAN_PM_STATE_DISABLED,
815 WVLAN_PM_STATE_ENHANCED,
816 WVLAN_PM_STATE_STANDARD
818 WVLAN_PM_STATE, *PWVLAN_PM_STATE;
821 typedef struct wvlan_frame
823 struct sk_buff *skb; /* sk_buff for frame. */
824 hcf_16 port; /* MAC port for the frame. */
825 hcf_16 len; /* Length of the frame. */
827 WVLAN_FRAME, *PWVLAN_FRAME;
830 typedef struct wvlan_lframe
832 struct list_head node; /* Node in the list */
833 WVLAN_FRAME frame; /* Frame. */
835 WVLAN_LFRAME, *PWVLAN_LFRAME;
839 #define DEFAULT_NUM_TX_FRAMES 48
840 #define TX_Q_LOW_WATER_MARK (DEFAULT_NUM_TX_FRAMES/3)
842 #define WVLAN_MAX_TX_QUEUES 1
847 typedef struct wvlan_wds_if
849 struct net_device *dev;
852 struct net_device_stats stats;
855 hcf_8 wdsAddress[ETH_ALEN];
856 } WVLAN_WDS_IF, *PWVLAN_WDS_IF;
862 #define NUM_RX_DESC 5
863 #define NUM_TX_DESC 5
865 typedef struct dma_strct
867 DESC_STRCT *tx_packet[NUM_TX_DESC];
868 DESC_STRCT *rx_packet[NUM_RX_DESC];
869 DESC_STRCT *rx_reclaim_desc, *tx_reclaim_desc; // Descriptors for host-reclaim purposes (see HCF)
870 int tx_rsc_ind; // DMA Tx resource indicator is maintained in the MSF, not in the HCF
871 int rx_rsc_ind; // Also added rx rsource indicator so that cleanup can be performed if alloc fails
876 /* Macros used in DMA support */
877 /* get bus address of {rx,tx}dma structure member, in little-endian byte order */
878 #define WL_DMA_BUS_ADDR_LE(str, i, mem) \
879 cpu_to_le32(str##_dma_addr[(i)] + ((hcf_8 *)&str[(i)]->mem - (hcf_8 *)str[(i)]))
887 struct pcmcia_device *link;
891 struct net_device *dev;
892 // struct net_device *dev_next;
894 struct tasklet_struct task;
895 struct net_device_stats stats;
899 struct iw_statistics wstats;
901 // u_char spy_address[IW_MAX_SPY][ETH_ALEN];
902 // struct iw_quality spy_stat[IW_MAX_SPY];
903 struct iw_spy_data spy_data;
904 struct iw_public_data wireless_data;
905 #endif // WIRELESS_EXT
909 //;? struct timer_list timer_oor;
910 //;? hcf_16 timer_oor_cnt;
911 u_long wlags49_type; //controls output in /proc/wlags49
916 int firmware_present;
918 CFG_DRV_INFO_STRCT driverInfo;
919 CFG_IDENTITY_STRCT driverIdentity;
920 CFG_FW_IDENTITY_STRCT StationIdentity;
921 CFG_PRI_IDENTITY_STRCT PrimaryIdentity;
922 CFG_PRI_IDENTITY_STRCT NICIdentity;
926 hcf_16 maxPort; /* 0 for STA, 6 for AP */
928 /* Elements used for async notification from hardware */
929 RID_LOG_STRCT RidList[10];
931 PROBE_RESP ProbeResp;
932 ASSOC_STATUS_STRCT assoc_stat;
933 SECURITY_STATUS_STRCT sec_stat;
935 u_char lookAheadBuf[WVLAN_MAX_LOOKAHEAD];
937 hcf_8 PortType; // 1 - 3 (1 [Normal] | 3 [AdHoc])
938 hcf_16 Channel; // 0 - 14 (0)
939 hcf_16 TxRateControl[2];
940 hcf_8 DistanceBetweenAPs; // 1 - 3 (1)
941 hcf_16 RTSThreshold; // 0 - 2347 (2347)
942 hcf_16 PMEnabled; // 0 - 2, 8001 - 8002 (0)
943 hcf_8 MicrowaveRobustness;// 0 - 1 (0)
944 hcf_8 CreateIBSS; // 0 - 1 (0)
945 hcf_8 MulticastReceive; // 0 - 1 (1)
946 hcf_16 MaxSleepDuration; // 0 - 65535 (100)
947 hcf_8 MACAddress[ETH_ALEN];
948 char NetworkName[HCF_MAX_NAME_LEN+1];
949 char StationName[HCF_MAX_NAME_LEN+1];
950 hcf_8 EnableEncryption; // 0 - 1 (0)
951 char Key1[MAX_KEY_LEN+1];
952 char Key2[MAX_KEY_LEN+1];
953 char Key3[MAX_KEY_LEN+1];
954 char Key4[MAX_KEY_LEN+1];
955 hcf_8 TransmitKeyID; // 1 - 4 (1)
956 CFG_DEFAULT_KEYS_STRCT DefaultKeys;
957 u_char mailbox[MB_SIZE];
958 char szEncryption[MAX_ENC_LEN];
963 hcf_16 holdoverDuration;
964 hcf_16 MulticastRate[2];
966 hcf_16 authentication; // is this AP specific?
967 hcf_16 promiscuousMode;
968 WVLAN_DRV_MODE DownloadFirmware; // 0 - 2 (0 [None] | 1 [STA] | 2 [AP])
970 char fw_image_filename[MAX_LINE_SIZE+1];
972 hcf_16 AuthKeyMgmtSuite;
974 hcf_16 loadBalancing;
975 hcf_16 mediumDistribution;
977 //hcf_16 shortRetryLimit;
978 //hcf_16 longRetryLimit;
981 hcf_16 connectionControl;
982 //hcf_16 probeDataRates[2];
983 hcf_16 ownBeaconInterval;
987 WVLAN_LFRAME txList[DEFAULT_NUM_TX_FRAMES];
988 struct list_head txFree;
989 struct list_head txQ[WVLAN_MAX_TX_QUEUES];
995 WVLAN_PORT_STATE portState;
997 ScanResult scan_results;
998 ProbeResult probe_results;
1006 hcf_8 DTIMPeriod; // 1 - 255 (1)
1007 hcf_16 multicastPMBuffering;
1008 hcf_8 RejectAny; // 0 - 1 (0)
1009 hcf_8 ExcludeUnencrypted; // 0 - 1 (1)
1010 hcf_16 intraBSSRelay;
1012 WVLAN_WDS_IF wds_port[NUM_WDS_PORTS];
1016 #ifdef HAVE_NETDEV_PRIV
1017 #define wl_priv(dev) ((struct wl_private *) netdev_priv(dev))
1019 extern inline struct wl_private *wl_priv(struct net_device *dev)
1025 /********************************************************************/
1026 /* Locking and synchronization functions */
1027 /********************************************************************/
1029 /* These functions *must* be inline or they will break horribly on
1030 * SPARC, due to its weird semantics for save/restore flags. extern
1031 * inline should prevent the kernel from linking or module from
1032 * loading if they are not inlined. */
1033 extern inline void wl_lock(struct wl_private *lp,
1034 unsigned long *flags)
1036 spin_lock_irqsave(&lp->slock, *flags);
1039 extern inline void wl_unlock(struct wl_private *lp,
1040 unsigned long *flags)
1042 spin_unlock_irqrestore(&lp->slock, *flags);
1045 /********************************************************************/
1046 /* Interrupt enable disable functions */
1047 /********************************************************************/
1049 extern inline void wl_act_int_on(struct wl_private *lp)
1052 * Only do something when the driver is handling
1053 * interrupts. Handling starts at wl_open and
1054 * ends at wl_close when not in RTS mode
1056 if(lp->is_handling_int == WL_HANDLING_INT) {
1057 hcf_action( &lp->hcfCtx, HCF_ACT_INT_ON );
1061 extern inline void wl_act_int_off(struct wl_private *lp)
1064 * Only do something when the driver is handling
1065 * interrupts. Handling starts at wl_open and
1066 * ends at wl_close when not in RTS mode
1068 if(lp->is_handling_int == WL_HANDLING_INT) {
1069 hcf_action( &lp->hcfCtx, HCF_ACT_INT_OFF );
1073 #endif // __WAVELAN2_H__