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 “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
59 ******************************************************************************/
61 #ifndef __WAVELAN2_H__
62 #define __WAVELAN2_H__
67 /*******************************************************************************
69 ******************************************************************************/
70 #include <linux/version.h>
72 #include <pcmcia/cistpl.h>
73 #include <pcmcia/cisreg.h>
74 #include <pcmcia/ciscode.h>
75 #include <pcmcia/ds.h>
78 #ifdef HAS_WIRELESS_EXTENSIONS
79 #include <linux/wireless.h>
81 #include <net/iw_handler.h>
82 #endif // WIRELESS_EXT > 13
84 #define RETURN_CURRENT_NETWORKNAME
86 #endif // HAS_WIRELESS_EXTENSIONS/
88 #include <linux/list.h>
90 #include <linux/interrupt.h>
95 /*******************************************************************************
96 * constant definitions
97 ******************************************************************************/
106 #define MAX_KEY_LEN (2 + (13 * 2)) // 0x plus 13 hex digit pairs
108 #define MAX_ENC_LEN 104
110 #define MAX_SCAN_TIME_SEC 8
113 #define CFG_MB_INFO 0x0820 //Mail Box Info Block
115 #define NUM_WDS_PORTS 6
117 #define WVLAN_MAX_LOOKAHEAD (HCF_MAX_MSG+46) /* as per s0005MIC_4.doc */
120 /* Min/Max/Default Parameter Values */
121 #if 0 //;? (HCF_TYPE) & HCF_TYPE_AP
122 //;? why this difference depending on compile option, seems to me it should depend on runtime if anything
123 #define PARM_DEFAULT_SSID "LinuxAP"
125 #define PARM_DEFAULT_SSID "ANY"
126 #endif // HCF_TYPE_AP
128 #define PARM_MIN_NAME_LEN 1
129 #define PARM_MAX_NAME_LEN 32
132 /* The following definitions pertain to module and profile parameters */
133 // #define PARM_AP_MODE APMode
134 // #define PARM_NAME_AP_MODE TEXT("APMode")
135 // #define PARM_DEFAULT_AP_MODE FALSE
137 #define PARM_AUTHENTICATION Authentication
138 #define PARM_NAME_AUTHENTICATION TEXT("Authentication")
139 #define PARM_MIN_AUTHENTICATION 1
140 #define PARM_MAX_AUTHENTICATION 2
141 #define PARM_DEFAULT_AUTHENTICATION 1
143 #define PARM_AUTH_KEY_MGMT_SUITE AuthKeyMgmtSuite
144 #define PARM_NAME_AUTH_KEY_MGMT_SUITE TEXT("AuthKeyMgmtSuite")
145 #define PARM_MIN_AUTH_KEY_MGMT_SUITE 0
146 #define PARM_MAX_AUTH_KEY_MGMT_SUITE 4
147 #define PARM_DEFAULT_AUTH_KEY_MGMT_SUITE 0
149 #define PARM_BRSC_2GHZ BRSC2GHz
150 #define PARM_NAME_BRSC_2GHZ TEXT("BRSC2GHz")
151 #define PARM_MIN_BRSC 0x0000
152 #define PARM_MAX_BRSC 0x0FFF
153 #define PARM_DEFAULT_BRSC_2GHZ 0x000F
155 #define PARM_BRSC_5GHZ BRSC5GHz
156 #define PARM_NAME_BRSC_5GHZ TEXT("BRSC5GHz")
157 #define PARM_DEFAULT_BRSC_5GHZ 0x0150
159 #define PARM_COEXISTENCE Coexistence
160 #define PARM_NAME_COEXISTENCE TEXT("Coexistence")
161 #define PARM_MIN_COEXISTENCE 0x0000
162 #define PARM_MAX_COEXISTENCE 0x0007
163 #define PARM_DEFAULT_COEXISTENCE 0x0000
165 #define PARM_CONFIGURED Configured
166 #define PARM_NAME_CONFIGURED TEXT("Configured")
168 #define PARM_CONNECTION_CONTROL ConnectionControl
169 #define PARM_NAME_CONNECTION_CONTROL TEXT("ConnectionControl")
170 #define PARM_MIN_CONNECTION_CONTROL 0
171 #define PARM_MAX_CONNECTION_CONTROL 3
172 #define PARM_DEFAULT_CONNECTION_CONTROL 2
174 #define PARM_CREATE_IBSS CreateIBSS
175 #define PARM_NAME_CREATE_IBSS TEXT("CreateIBSS")
176 #define PARM_DEFAULT_CREATE_IBSS FALSE
177 #define PARM_DEFAULT_CREATE_IBSS_STR "N"
179 #define PARM_DEBUG_FLAG DebugFlag
180 #define PARM_NAME_DEBUG_FLAG TEXT("DebugFlag")
181 #define PARM_MIN_DEBUG_FLAG 0
182 #define PARM_MAX_DEBUG_FLAG 0xFFFF
183 #define PARM_DEFAULT_DEBUG_FLAG 0xFFFF
185 #define PARM_DESIRED_SSID DesiredSSID
186 #define PARM_NAME_DESIRED_SSID TEXT("DesiredSSID")
188 #define PARM_DOWNLOAD_FIRMWARE DownloadFirmware
189 #define PARM_NAME_DOWNLOAD_FIRMWARE TEXT("DownloadFirmware")
191 #define PARM_DRIVER_ENABLE DriverEnable
192 #define PARM_NAME_DRIVER_ENABLE TEXT("DriverEnable")
193 #define PARM_DEFAULT_DRIVER_ENABLE TRUE
195 #define PARM_ENABLE_ENCRYPTION EnableEncryption
196 #define PARM_NAME_ENABLE_ENCRYPTION TEXT("EnableEncryption")
197 #define PARM_MIN_ENABLE_ENCRYPTION 0
198 #define PARM_MAX_ENABLE_ENCRYPTION 7
199 #define PARM_DEFAULT_ENABLE_ENCRYPTION 0
201 #define PARM_ENCRYPTION Encryption
202 #define PARM_NAME_ENCRYPTION TEXT("Encryption")
204 #define PARM_EXCLUDE_UNENCRYPTED ExcludeUnencrypted
205 #define PARM_NAME_EXCLUDE_UNENCRYPTED TEXT("ExcludeUnencrypted")
206 #define PARM_DEFAULT_EXCLUDE_UNENCRYPTED TRUE
207 #define PARM_DEFAULT_EXCLUDE_UNENCRYPTED_STR "N"
209 #define PARM_INTRA_BSS_RELAY IntraBSSRelay
210 #define PARM_NAME_INTRA_BSS_RELAY TEXT("IntraBSSRelay")
211 #define PARM_DEFAULT_INTRA_BSS_RELAY TRUE
212 #define PARM_DEFAULT_INTRA_BSS_RELAY_STR "Y"
214 #define PARM_KEY1 Key1
215 #define PARM_NAME_KEY1 TEXT("Key1")
216 #define PARM_KEY2 Key2
217 #define PARM_NAME_KEY2 TEXT("Key2")
218 #define PARM_KEY3 Key3
219 #define PARM_NAME_KEY3 TEXT("Key3")
220 #define PARM_KEY4 Key4
221 #define PARM_NAME_KEY4 TEXT("Key4")
223 //;? #define PARM_KEY_FORMAT AsciiHex
224 //;? #define PARM_NAME_KEY_FORMAT TEXT("AsciiHex")
226 #define PARM_LOAD_BALANCING LoadBalancing
227 #define PARM_NAME_LOAD_BALANCING TEXT("LoadBalancing")
228 #define PARM_DEFAULT_LOAD_BALANCING TRUE
229 #define PARM_DEFAULT_LOAD_BALANCING_STR "Y"
231 #define PARM_MAX_DATA_LENGTH MaxDataLength
232 #define PARM_NAME_MAX_DATA_LENGTH TEXT("MaxDataLength")
234 #define PARM_MAX_SLEEP MaxSleepDuration
235 #define PARM_NAME_MAX_SLEEP TEXT("MaxSleepDuration")
236 #define PARM_MIN_MAX_PM_SLEEP 1 //;?names nearly right?
237 #define PARM_MAX_MAX_PM_SLEEP 65535
238 #define PARM_DEFAULT_MAX_PM_SLEEP 100
240 #define PARM_MEDIUM_DISTRIBUTION MediumDistribution
241 #define PARM_NAME_MEDIUM_DISTRIBUTION TEXT("MediumDistribution")
242 #define PARM_DEFAULT_MEDIUM_DISTRIBUTION TRUE
243 #define PARM_DEFAULT_MEDIUM_DISTRIBUTION_STR "Y"
245 #define PARM_MICROWAVE_ROBUSTNESS MicroWaveRobustness
246 #define PARM_NAME_MICROWAVE_ROBUSTNESS TEXT("MicroWaveRobustness")
247 #define PARM_DEFAULT_MICROWAVE_ROBUSTNESS FALSE
248 #define PARM_DEFAULT_MICROWAVE_ROBUSTNESS_STR "N"
250 #define PARM_MULTICAST_PM_BUFFERING MulticastPMBuffering
251 #define PARM_NAME_MULTICAST_PM_BUFFERING TEXT("MulticastPMBuffering")
252 #define PARM_DEFAULT_MULTICAST_PM_BUFFERING TRUE
253 #define PARM_DEFAULT_MULTICAST_PM_BUFFERING_STR "Y"
255 #define PARM_MULTICAST_RATE MulticastRate
256 #define PARM_NAME_MULTICAST_RATE TEXT("MulticastRate")
258 #define PARM_MIN_MULTICAST_RATE 0x0001
259 #define PARM_MAX_MULTICAST_RATE 0x0fff
260 #define PARM_DEFAULT_MULTICAST_RATE_2GHZ 0x0004
261 #define PARM_DEFAULT_MULTICAST_RATE_5GHZ 0x0010
263 #define PARM_MIN_MULTICAST_RATE 0x0001
264 #define PARM_MAX_MULTICAST_RATE 0x0004
265 #define PARM_DEFAULT_MULTICAST_RATE_2GHZ 0x0002
266 #define PARM_DEFAULT_MULTICAST_RATE_5GHZ 0x0000
269 #define PARM_MULTICAST_RX MulticastReceive
270 #define PARM_NAME_MULTICAST_RX TEXT("MulticastReceive")
271 #define PARM_DEFAULT_MULTICAST_RX TRUE
272 #define PARM_DEFAULT_MULTICAST_RX_STR "Y"
274 #define PARM_NETWORK_ADDR NetworkAddress
275 #define PARM_NAME_NETWORK_ADDR TEXT("NetworkAddress")
276 #define PARM_DEFAULT_NETWORK_ADDR { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
278 #define PARM_NETWORK_TYPE NetworkType
279 #define PARM_NAME_NETWORK_TYPE TEXT("NetworkType")
280 #define PARM_DEFAULT_NETWORK_TYPE 0
282 #define PARM_OWN_ATIM_WINDOW OwnATIMWindow
283 #define PARM_NAME_OWN_ATIM_WINDOW TEXT("OwnATIMWindow")
284 #define PARM_MIN_OWN_ATIM_WINDOW 0
285 #define PARM_MAX_OWN_ATIM_WINDOW 100
286 #define PARM_DEFAULT_OWN_ATIM_WINDOW 0
288 #define PARM_OWN_BEACON_INTERVAL OwnBeaconInterval
289 #define PARM_NAME_OWN_BEACON_INTERVAL TEXT("OwnBeaconInterval")
290 #define PARM_MIN_OWN_BEACON_INTERVAL 20
291 #define PARM_MAX_OWN_BEACON_INTERVAL 200
292 #define PARM_DEFAULT_OWN_BEACON_INTERVAL 100
294 #define PARM_OWN_CHANNEL OwnChannel
295 #define PARM_NAME_OWN_CHANNEL TEXT("OwnChannel")
296 #define PARM_MIN_OWN_CHANNEL 1
297 #define PARM_MAX_OWN_CHANNEL 161
298 #define PARM_DEFAULT_OWN_CHANNEL 10
300 #define PARM_OWN_DTIM_PERIOD OwnDTIMPeriod
301 #define PARM_NAME_OWN_DTIM_PERIOD TEXT("OwnDTIMPeriod")
302 #define PARM_MIN_OWN_DTIM_PERIOD 1
303 #define PARM_MAX_OWN_DTIM_PERIOD 65535
304 #define PARM_DEFAULT_OWN_DTIM_PERIOD 1
306 #define PARM_OWN_NAME OwnName
307 #define PARM_NAME_OWN_NAME TEXT("OwnName")
308 #define PARM_DEFAULT_OWN_NAME "Linux"
310 #define PARM_OWN_SSID OwnSSID
311 #define PARM_NAME_OWN_SSID TEXT("OwnSSID")
313 #define PARM_PM_ENABLED PMEnabled
314 #define PARM_NAME_PM_ENABLED TEXT("PMEnabled")
315 #define PARM_MAX_PM_ENABLED 3
317 #define PARM_PMEPS PMEPS
318 #define PARM_NAME_PMEPS TEXT("PMEPS")
320 #define PARM_PM_HOLDOVER_DURATION PMHoldoverDuration
321 #define PARM_NAME_PM_HOLDOVER_DURATION TEXT("PMHoldoverDuration")
322 #define PARM_MIN_PM_HOLDOVER_DURATION 1
323 #define PARM_MAX_PM_HOLDOVER_DURATION 1000
324 #define PARM_DEFAULT_PM_HOLDOVER_DURATION 100
326 #define PARM_PM_MODE PowerMode
327 #define PARM_NAME_PM_MODE TEXT("PowerMode")
329 #define PARM_PORT_TYPE PortType
330 #define PARM_NAME_PORT_TYPE TEXT("PortType")
331 #define PARM_MIN_PORT_TYPE 1
332 #define PARM_MAX_PORT_TYPE 3
333 #define PARM_DEFAULT_PORT_TYPE 1
335 #define PARM_PROMISCUOUS_MODE PromiscuousMode
336 #define PARM_NAME_PROMISCUOUS_MODE TEXT("PromiscuousMode")
337 #define PARM_DEFAULT_PROMISCUOUS_MODE FALSE
338 #define PARM_DEFAULT_PROMISCUOUS_MODE_STR "N"
340 #define PARM_REJECT_ANY RejectANY
341 #define PARM_NAME_REJECT_ANY TEXT("RejectANY")
342 #define PARM_DEFAULT_REJECT_ANY FALSE
343 #define PARM_DEFAULT_REJECT_ANY_STR "N"
345 #define PARM_RTS_THRESHOLD RTSThreshold
346 #define PARM_NAME_RTS_THRESHOLD TEXT("RTSThreshold")
347 #define PARM_MIN_RTS_THRESHOLD 0
348 #define PARM_MAX_RTS_THRESHOLD 2347
349 #define PARM_DEFAULT_RTS_THRESHOLD 2347
351 #define PARM_RTS_THRESHOLD1 RTSThreshold1
352 #define PARM_NAME_RTS_THRESHOLD1 TEXT("RTSThreshold1")
353 #define PARM_RTS_THRESHOLD2 RTSThreshold2
354 #define PARM_NAME_RTS_THRESHOLD2 TEXT("RTSThreshold2")
355 #define PARM_RTS_THRESHOLD3 RTSThreshold3
356 #define PARM_NAME_RTS_THRESHOLD3 TEXT("RTSThreshold3")
357 #define PARM_RTS_THRESHOLD4 RTSThreshold4
358 #define PARM_NAME_RTS_THRESHOLD4 TEXT("RTSThreshold4")
359 #define PARM_RTS_THRESHOLD5 RTSThreshold5
360 #define PARM_NAME_RTS_THRESHOLD5 TEXT("RTSThreshold5")
361 #define PARM_RTS_THRESHOLD6 RTSThreshold6
362 #define PARM_NAME_RTS_THRESHOLD6 TEXT("RTSThreshold6")
364 #define PARM_SRSC_2GHZ SRSC2GHz
365 #define PARM_NAME_SRSC_2GHZ TEXT("SRSC2GHz")
366 #define PARM_MIN_SRSC 0x0000
367 #define PARM_MAX_SRSC 0x0FFF
368 #define PARM_DEFAULT_SRSC_2GHZ 0x0FFF
370 #define PARM_SRSC_5GHZ SRSC5GHz
371 #define PARM_NAME_SRSC_5GHZ TEXT("SRSC5GHz")
372 #define PARM_DEFAULT_SRSC_5GHZ 0x0FF0
374 #define PARM_SYSTEM_SCALE SystemScale
375 #define PARM_NAME_SYSTEM_SCALE TEXT("SystemScale")
376 #define PARM_MIN_SYSTEM_SCALE 1
377 #define PARM_MAX_SYSTEM_SCALE 5
378 #define PARM_DEFAULT_SYSTEM_SCALE 1
380 #define PARM_TX_KEY TxKey
381 #define PARM_NAME_TX_KEY TEXT("TxKey")
382 #define PARM_MIN_TX_KEY 1
383 #define PARM_MAX_TX_KEY 4
384 #define PARM_DEFAULT_TX_KEY 1
386 #define PARM_TX_POW_LEVEL TxPowLevel
387 #define PARM_NAME_TX_POW_LEVEL TEXT("TxPowLevel")
388 #define PARM_MIN_TX_POW_LEVEL 1 // 20 dBm
389 #define PARM_MAX_TX_POW_LEVEL 6 // 8 dBm
390 #define PARM_DEFAULT_TX_POW_LEVEL 3 // 15 dBm
392 #define PARM_TX_RATE TxRateControl
393 #define PARM_NAME_TX_RATE TEXT("TxRateControl")
394 #define PARM_MIN_TX_RATE 0x0001
396 #define PARM_MAX_TX_RATE 0x0FFF
397 #define PARM_DEFAULT_TX_RATE_2GHZ 0x0FFF
398 #define PARM_DEFAULT_TX_RATE_5GHZ 0x0FF0
400 #define PARM_MAX_TX_RATE 0x0007
401 #define PARM_DEFAULT_TX_RATE_2GHZ 0x0003
402 #define PARM_DEFAULT_TX_RATE_5GHZ 0x0000
405 #define PARM_TX_RATE1 TxRateControl1
406 #define PARM_NAME_TX_RATE1 TEXT("TxRateControl1")
407 #define PARM_TX_RATE2 TxRateControl2
408 #define PARM_NAME_TX_RATE2 TEXT("TxRateControl2")
409 #define PARM_TX_RATE3 TxRateControl3
410 #define PARM_NAME_TX_RATE3 TEXT("TxRateControl3")
411 #define PARM_TX_RATE4 TxRateControl4
412 #define PARM_NAME_TX_RATE4 TEXT("TxRateControl4")
413 #define PARM_TX_RATE5 TxRateControl5
414 #define PARM_NAME_TX_RATE5 TEXT("TxRateControl5")
415 #define PARM_TX_RATE6 TxRateControl6
416 #define PARM_NAME_TX_RATE6 TEXT("TxRateControl6")
418 #define PARM_VENDORDESCRIPTION VendorDescription
419 #define PARM_NAME_VENDORDESCRIPTION TEXT("VendorDescription")
421 #define PARM_WDS_ADDRESS WDSAddress
422 #define PARM_NAME_WDS_ADDRESS TEXT("WDSAddress")
424 #define PARM_WDS_ADDRESS1 WDSAddress1
425 #define PARM_NAME_WDS_ADDRESS1 TEXT("WDSAddress1")
426 #define PARM_WDS_ADDRESS2 WDSAddress2
427 #define PARM_NAME_WDS_ADDRESS2 TEXT("WDSAddress2")
428 #define PARM_WDS_ADDRESS3 WDSAddress3
429 #define PARM_NAME_WDS_ADDRESS3 TEXT("WDSAddress3")
430 #define PARM_WDS_ADDRESS4 WDSAddress4
431 #define PARM_NAME_WDS_ADDRESS4 TEXT("WDSAddress4")
432 #define PARM_WDS_ADDRESS5 WDSAddress5
433 #define PARM_NAME_WDS_ADDRESS5 TEXT("WDSAddress5")
434 #define PARM_WDS_ADDRESS6 WDSAddress6
435 #define PARM_NAME_WDS_ADDRESS6 TEXT("WDSAddress6")
438 #define PARM_LONG_RETRY_LIMIT LongRetryLimit
439 #define PARM_NAME_LONG_RETRY_LIMIT TEXT("LongRetryLimit")
440 #define PARM_MIN_LONG_RETRY_LIMIT 1
441 #define PARM_MAX_LONG_RETRY_LIMIT 15
442 #define PARM_DEFAULT_LONG_RETRY_LIMIT 3
445 #define PARM_PROBE_DATA_RATES ProbeDataRates
446 #define PARM_NAME_PROBE_DATA_RATES TEXT("ProbeDataRates")
447 #define PARM_MIN_PROBE_DATA_RATES 0x0000
448 #define PARM_MAX_PROBE_DATA_RATES 0x0FFF
449 #define PARM_DEFAULT_PROBE_DATA_RATES_2GHZ 0x0002
450 #define PARM_DEFAULT_PROBE_DATA_RATES_5GHZ 0x0010
452 #define PARM_SHORT_RETRY_LIMIT ShortRetryLimit
453 #define PARM_NAME_SHORT_RETRY_LIMIT TEXT("ShortRetryLimit")
454 #define PARM_MIN_SHORT_RETRY_LIMIT 1
455 #define PARM_MAX_SHORT_RETRY_LIMIT 15
456 #define PARM_DEFAULT_SHORT_RETRY_LIMIT 7
461 /*******************************************************************************
463 ******************************************************************************/
464 /* The following constants are used to track state the device */
465 #define WL_FRIMWARE_PRESENT 1 // Download if needed
466 #define WL_FRIMWARE_NOT_PRESENT 0 // Skip over download, assume its already there
467 #define WL_HANDLING_INT 1 // Actually call the HCF to switch interrupts on/off
468 #define WL_NOT_HANDLING_INT 0 // Not yet handling interrupts, do not switch on/off
470 /*******************************************************************************
472 ******************************************************************************/
473 /* The following macro ensures that no symbols are exported, minimizing the
474 chance of a symbol collision in the kernel */
475 // EXPORT_NO_SYMBOLS;
477 #define NELEM(arr) (sizeof(arr) / sizeof(arr[0]))
479 #define WVLAN_VALID_MAC_ADDRESS( x ) \
480 ((x[0]!=0xFF) && (x[1]!=0xFF) && (x[2]!=0xFF) && (x[3]!=0xFF) && (x[4]!=0xFF) && (x[5]!=0xFF))
485 /*******************************************************************************
487 ******************************************************************************/
499 typedef struct _ScanResult
505 SCAN_RS_STRCT APTable
[MAX_NAPS
];
510 typedef struct _LINK_STATUS_STRCT
514 hcf_16 linkStatus
; /* 1..5 */
519 typedef struct _ASSOC_STATUS_STRCT
523 hcf_16 assocStatus
; /* 1..3 */
524 hcf_8 staAddr
[ETH_ALEN
];
525 hcf_8 oldApAddr
[ETH_ALEN
];
530 typedef struct _SECURITY_STATUS_STRCT
534 hcf_16 securityStatus
; /* 1..3 */
535 hcf_8 staAddr
[ETH_ALEN
];
538 SECURITY_STATUS_STRCT
;
540 #define WVLAN_WMP_PDU_TYPE_LT_REQ 0x00
541 #define WVLAN_WMP_PDU_TYPE_LT_RSP 0x01
542 #define WVLAN_WMP_PDU_TYPE_APL_REQ 0x02
543 #define WVLAN_WMP_PDU_TYPE_APL_RSP 0x03
545 typedef struct wvlan_eth_hdr
547 unsigned char dst
[ETH_ALEN
]; /* Destination address. */
548 unsigned char src
[ETH_ALEN
]; /* Source address. */
549 unsigned short len
; /* Length of the PDU. */
551 WVLAN_ETH_HDR
, *PWVLAN_ETH_HDR
;
553 typedef struct wvlan_llc_snap
555 unsigned char dsap
; /* DSAP (0xAA) */
556 unsigned char ssap
; /* SSAP (0xAA) */
557 unsigned char ctrl
; /* Control (0x03) */
558 unsigned char oui
[3]; /* Organization Unique ID (00-60-1d). */
559 unsigned char specid
[2]; /* Specific ID code (00-01). */
561 WVLAN_LLC_SNAP
, *PWVLAN_LLC_SNAP
;
564 typedef struct wvlan_lt_hdr
566 unsigned char version
; /* Version (0x00) */
567 unsigned char type
; /* PDU type: 0-req/1-resp. */
568 unsigned short id
; /* Identifier to associate resp to req. */
570 WVLAN_LT_HDR
, *PWVLAN_LT_HDR
;
573 typedef struct wvlan_wmp_hdr
575 unsigned char version
; /* Version */
576 unsigned char type
; /* PDU type */
578 WVLAN_WMP_HDR
, *PWVLAN_WMP_HDR
;
581 #define FILLER_SIZE 1554
582 #define TEST_PATTERN_SIZE 54
585 typedef struct wvlan_lt_req
587 unsigned char Filler
[TEST_PATTERN_SIZE
]; /* minimal length of 54 bytes */
589 WVLAN_LT_REQ
, *PWVLAN_LT_REQ
;
592 typedef struct wvlan_lt_rsp
596 unsigned char signal
;
598 unsigned char rxFlow
;
599 unsigned char dataRate
;
600 unsigned short protocol
;
602 unsigned char station
;
603 unsigned char dataRateCap
;
604 unsigned char powerMgmt
[4];
605 unsigned char robustness
[4];
606 unsigned char scaling
;
607 unsigned char reserved
[5];
609 WVLAN_LT_RSP
, *PWVLAN_LT_RSP
;
612 typedef struct wvlan_rx_wmp_hdr
614 unsigned short status
;
615 unsigned short reserved1
[2];
616 unsigned char silence
;
617 unsigned char signal
;
619 unsigned char rxFlow
;
620 unsigned short reserved2
[2];
621 unsigned short frameControl
;
622 unsigned short duration
;
623 unsigned short address1
[3];
624 unsigned short address2
[3];
625 unsigned short address3
[3];
626 unsigned short sequenceControl
;
627 unsigned short address4
[3];
628 #ifndef HERMES25 //;?just to be on the safe side of inherited but not comprehended code #ifdef HERMES2
629 unsigned short seems_to_be_unused_reserved3
[5]; //;?
630 unsigned short seems_to_be_unused_reserved4
; //;?
632 unsigned short HeaderDataLen
;
634 WVLAN_RX_WMP_HDR
, *PWVLAN_RX_WMP_HDR
;
637 typedef struct wvlan_linktest_req_pdu
639 WVLAN_ETH_HDR ethHdr
;
640 WVLAN_LLC_SNAP llcSnap
;
644 WVLAN_LINKTEST_REQ_PDU
, *PWVLAN_LINKTEST_REQ_PDU
;
647 typedef struct wvlan_linktest_rsp_pdu
649 WVLAN_RX_WMP_HDR wmpRxHdr
;
650 WVLAN_ETH_HDR ethHdr
;
651 WVLAN_LLC_SNAP llcSnap
;
655 WVLAN_LINKTEST_RSP_PDU
, *PWVLAN_LINKTEST_RSP_PDU
;
658 typedef struct _LINKTEST_RSP_STRCT
662 WVLAN_LINKTEST_RSP_PDU ltRsp
;
667 typedef struct wvlan_wmp_rsp_pdu
669 WVLAN_RX_WMP_HDR wmpRxHdr
;
670 WVLAN_ETH_HDR ethHdr
;
671 WVLAN_LLC_SNAP llcSnap
;
672 WVLAN_WMP_HDR wmpHdr
;
674 WVLAN_WMP_RSP_PDU
, *PWVLAN_WMP_RSP_PDU
;
677 typedef struct _WMP_RSP_STRCT
681 WVLAN_WMP_RSP_PDU wmpRsp
;
686 typedef struct _PROBE_RESP
688 // first part: 802.11
694 hcf_8 signal
; // Moved signal here as signal/noise values were flipped
704 hcf_8 BSSID
[6]; //! this is correct, right ?
713 // the information in the next 3 fields (DA/SA/LenType) is actually not filled in.
725 hcf_16 beaconInterval
;
727 hcf_8 rawData
[200]; //! <<< think about this number !
730 PROBE_RESP
, *PPROBE_RESP
;
733 typedef struct _ProbeResult
737 PROBE_RESP ProbeTable
[MAX_NAPS
];
741 /* Definitions used to parse capabilities out of the probe responses */
742 #define CAPABILITY_ESS 0x0001
743 #define CAPABILITY_IBSS 0x0002
744 #define CAPABILITY_PRIVACY 0x0010
746 /* Definitions used to parse the Information Elements out of probe responses */
747 #define DS_INFO_ELEM 0x03
748 #define GENERIC_INFO_ELEM 0xdd
749 #define WPA_MAX_IE_LEN 40
750 #define WPA_SELECTOR_LEN 4
751 #define WPA_OUI_TYPE { 0x00, 0x50, 0xf2, 1 }
752 #define WPA_VERSION 1
753 #define WPA_AUTH_KEY_MGMT_UNSPEC_802_1X { 0x00, 0x50, 0xf2, 1 }
754 #define WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X { 0x00, 0x50, 0xf2, 2 }
755 #define WPA_CIPHER_SUITE_NONE { 0x00, 0x50, 0xf2, 0 }
756 #define WPA_CIPHER_SUITE_WEP40 { 0x00, 0x50, 0xf2, 1 }
757 #define WPA_CIPHER_SUITE_TKIP { 0x00, 0x50, 0xf2, 2 }
758 #define WPA_CIPHER_SUITE_WRAP { 0x00, 0x50, 0xf2, 3 }
759 #define WPA_CIPHER_SUITE_CCMP { 0x00, 0x50, 0xf2, 4 }
760 #define WPA_CIPHER_SUITE_WEP104 { 0x00, 0x50, 0xf2, 5 }
762 typedef enum wvlan_drv_mode
764 WVLAN_DRV_MODE_NO_DOWNLOAD
, /* this is the same as STA for Hermes 1 */
765 /* it is also only applicable for Hermes 1 */
770 WVLAN_DRV_MODE
, *PWVLAN_DRV_MODE
;
773 typedef enum wvlan_port_state
775 WVLAN_PORT_STATE_ENABLED
,
776 WVLAN_PORT_STATE_DISABLED
,
777 WVLAN_PORT_STATE_CONNECTED
779 WVLAN_PORT_STATE
, *PWVLAN_PORT_STATE
;
782 typedef enum wvlan_connect_state
784 WVLAN_CONNECT_STATE_CONNECTED,
785 WVLAN_CONNECT_STATE_DISCONNECTED
787 WVLAN_CONNECT_STATE, *PWVLAN_CONNECT_STATE;
790 typedef enum wvlan_pm_state
792 WVLAN_PM_STATE_DISABLED
,
793 WVLAN_PM_STATE_ENHANCED
,
794 WVLAN_PM_STATE_STANDARD
796 WVLAN_PM_STATE
, *PWVLAN_PM_STATE
;
799 typedef struct wvlan_frame
801 struct sk_buff
*skb
; /* sk_buff for frame. */
802 hcf_16 port
; /* MAC port for the frame. */
803 hcf_16 len
; /* Length of the frame. */
805 WVLAN_FRAME
, *PWVLAN_FRAME
;
808 typedef struct wvlan_lframe
810 struct list_head node
; /* Node in the list */
811 WVLAN_FRAME frame
; /* Frame. */
813 WVLAN_LFRAME
, *PWVLAN_LFRAME
;
817 #define DEFAULT_NUM_TX_FRAMES 48
818 #define TX_Q_LOW_WATER_MARK (DEFAULT_NUM_TX_FRAMES/3)
820 #define WVLAN_MAX_TX_QUEUES 1
825 typedef struct wvlan_wds_if
827 struct net_device
*dev
;
830 struct net_device_stats stats
;
833 hcf_8 wdsAddress
[ETH_ALEN
];
834 } WVLAN_WDS_IF
, *PWVLAN_WDS_IF
;
840 #define NUM_RX_DESC 5
841 #define NUM_TX_DESC 5
843 typedef struct dma_strct
845 DESC_STRCT
*tx_packet
[NUM_TX_DESC
];
846 DESC_STRCT
*rx_packet
[NUM_RX_DESC
];
847 DESC_STRCT
*rx_reclaim_desc
, *tx_reclaim_desc
; // Descriptors for host-reclaim purposes (see HCF)
848 int tx_rsc_ind
; // DMA Tx resource indicator is maintained in the MSF, not in the HCF
849 int rx_rsc_ind
; // Also added rx rsource indicator so that cleanup can be performed if alloc fails
854 /* Macros used in DMA support */
855 /* get bus address of {rx,tx}dma structure member, in little-endian byte order */
856 #define WL_DMA_BUS_ADDR_LE(str, i, mem) \
857 cpu_to_le32(str##_dma_addr[(i)] + ((hcf_8 *)&str[(i)]->mem - (hcf_8 *)str[(i)]))
864 struct pcmcia_device
*link
;
868 struct net_device
*dev
;
869 // struct net_device *dev_next;
871 struct tasklet_struct task
;
872 struct net_device_stats stats
;
876 struct iw_statistics wstats
;
878 // u_char spy_address[IW_MAX_SPY][ETH_ALEN];
879 // struct iw_quality spy_stat[IW_MAX_SPY];
880 struct iw_spy_data spy_data
;
881 struct iw_public_data wireless_data
;
882 #endif // WIRELESS_EXT
886 //;? struct timer_list timer_oor;
887 //;? hcf_16 timer_oor_cnt;
888 u_long wlags49_type
; //controls output in /proc/wlags49
893 int firmware_present
;
895 CFG_DRV_INFO_STRCT driverInfo
;
896 CFG_IDENTITY_STRCT driverIdentity
;
897 CFG_FW_IDENTITY_STRCT StationIdentity
;
898 CFG_PRI_IDENTITY_STRCT PrimaryIdentity
;
899 CFG_PRI_IDENTITY_STRCT NICIdentity
;
903 hcf_16 maxPort
; /* 0 for STA, 6 for AP */
905 /* Elements used for async notification from hardware */
906 RID_LOG_STRCT RidList
[10];
908 PROBE_RESP ProbeResp
;
909 ASSOC_STATUS_STRCT assoc_stat
;
910 SECURITY_STATUS_STRCT sec_stat
;
912 u_char lookAheadBuf
[WVLAN_MAX_LOOKAHEAD
];
914 hcf_8 PortType
; // 1 - 3 (1 [Normal] | 3 [AdHoc])
915 hcf_16 Channel
; // 0 - 14 (0)
916 hcf_16 TxRateControl
[2];
917 hcf_8 DistanceBetweenAPs
; // 1 - 3 (1)
918 hcf_16 RTSThreshold
; // 0 - 2347 (2347)
919 hcf_16 PMEnabled
; // 0 - 2, 8001 - 8002 (0)
920 hcf_8 MicrowaveRobustness
;// 0 - 1 (0)
921 hcf_8 CreateIBSS
; // 0 - 1 (0)
922 hcf_8 MulticastReceive
; // 0 - 1 (1)
923 hcf_16 MaxSleepDuration
; // 0 - 65535 (100)
924 hcf_8 MACAddress
[ETH_ALEN
];
925 char NetworkName
[HCF_MAX_NAME_LEN
+1];
926 char StationName
[HCF_MAX_NAME_LEN
+1];
927 hcf_8 EnableEncryption
; // 0 - 1 (0)
928 char Key1
[MAX_KEY_LEN
+1];
929 char Key2
[MAX_KEY_LEN
+1];
930 char Key3
[MAX_KEY_LEN
+1];
931 char Key4
[MAX_KEY_LEN
+1];
932 hcf_8 TransmitKeyID
; // 1 - 4 (1)
933 CFG_DEFAULT_KEYS_STRCT DefaultKeys
;
934 u_char mailbox
[MB_SIZE
];
935 char szEncryption
[MAX_ENC_LEN
];
940 hcf_16 holdoverDuration
;
941 hcf_16 MulticastRate
[2];
943 hcf_16 authentication
; // is this AP specific?
944 hcf_16 promiscuousMode
;
945 WVLAN_DRV_MODE DownloadFirmware
; // 0 - 2 (0 [None] | 1 [STA] | 2 [AP])
947 char fw_image_filename
[MAX_LINE_SIZE
+1];
949 hcf_16 AuthKeyMgmtSuite
;
951 hcf_16 loadBalancing
;
952 hcf_16 mediumDistribution
;
954 //hcf_16 shortRetryLimit;
955 //hcf_16 longRetryLimit;
958 hcf_16 connectionControl
;
959 //hcf_16 probeDataRates[2];
960 hcf_16 ownBeaconInterval
;
964 WVLAN_LFRAME txList
[DEFAULT_NUM_TX_FRAMES
];
965 struct list_head txFree
;
966 struct list_head txQ
[WVLAN_MAX_TX_QUEUES
];
972 WVLAN_PORT_STATE portState
;
974 ScanResult scan_results
;
975 ProbeResult probe_results
;
983 hcf_8 DTIMPeriod
; // 1 - 255 (1)
984 hcf_16 multicastPMBuffering
;
985 hcf_8 RejectAny
; // 0 - 1 (0)
986 hcf_8 ExcludeUnencrypted
; // 0 - 1 (1)
987 hcf_16 intraBSSRelay
;
989 WVLAN_WDS_IF wds_port
[NUM_WDS_PORTS
];
993 #ifdef HAVE_NETDEV_PRIV
994 #define wl_priv(dev) ((struct wl_private *) netdev_priv(dev))
996 extern inline struct wl_private
*wl_priv(struct net_device
*dev
)
1002 /********************************************************************/
1003 /* Locking and synchronization functions */
1004 /********************************************************************/
1006 /* These functions *must* be inline or they will break horribly on
1007 * SPARC, due to its weird semantics for save/restore flags. extern
1008 * inline should prevent the kernel from linking or module from
1009 * loading if they are not inlined. */
1010 static inline void wl_lock(struct wl_private
*lp
,
1011 unsigned long *flags
)
1013 spin_lock_irqsave(&lp
->slock
, *flags
);
1016 static inline void wl_unlock(struct wl_private
*lp
,
1017 unsigned long *flags
)
1019 spin_unlock_irqrestore(&lp
->slock
, *flags
);
1022 /********************************************************************/
1023 /* Interrupt enable disable functions */
1024 /********************************************************************/
1026 extern inline void wl_act_int_on(struct wl_private
*lp
)
1029 * Only do something when the driver is handling
1030 * interrupts. Handling starts at wl_open and
1031 * ends at wl_close when not in RTS mode
1033 if(lp
->is_handling_int
== WL_HANDLING_INT
) {
1034 hcf_action( &lp
->hcfCtx
, HCF_ACT_INT_ON
);
1038 extern inline void wl_act_int_off(struct wl_private
*lp
)
1041 * Only do something when the driver is handling
1042 * interrupts. Handling starts at wl_open and
1043 * ends at wl_close when not in RTS mode
1045 if(lp
->is_handling_int
== WL_HANDLING_INT
) {
1046 hcf_action( &lp
->hcfCtx
, HCF_ACT_INT_OFF
);
1050 #endif // __WAVELAN2_H__