• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/staging/wlags49_h2/
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 defintions 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#include <linux/version.h>
71#ifdef BUS_PCMCIA
72#include <pcmcia/cs.h>
73#include <pcmcia/cistpl.h>
74#include <pcmcia/cisreg.h>
75#include <pcmcia/ciscode.h>
76#include <pcmcia/ds.h>
77#endif  // BUS_PCMCIA
78
79#ifdef HAS_WIRELESS_EXTENSIONS
80#include <linux/wireless.h>
81#if WIRELESS_EXT > 13
82#include <net/iw_handler.h>
83#endif // WIRELESS_EXT > 13
84#define USE_DBM
85#define RETURN_CURRENT_NETWORKNAME
86#define USE_FREQUENCY
87#endif // HAS_WIRELESS_EXTENSIONS/
88
89#include <linux/list.h>
90
91#include <linux/interrupt.h>
92
93
94
95
96/*******************************************************************************
97 *  constant definitions
98 ******************************************************************************/
99#define p_u8    __u8
100#define p_s8    __s8
101#define p_u16   __u16
102#define p_s16   __s16
103#define p_u32   __u32
104#define p_s32   __s32
105#define p_char  char
106
107#define MAX_KEY_LEN         (2 + (13 * 2)) // 0x plus 13 hex digit pairs
108#define MB_SIZE             1024
109#define MAX_ENC_LEN         104
110
111#define MAX_SCAN_TIME_SEC   8
112#define MAX_NAPS            32
113
114#define CFG_MB_INFO         0x0820		//Mail Box Info Block
115
116#define NUM_WDS_PORTS       6
117
118#define WVLAN_MAX_LOOKAHEAD (HCF_MAX_MSG+46) /* as per s0005MIC_4.doc */
119
120
121/* Min/Max/Default Parameter Values */
122#define PARM_DEFAULT_SSID                       "ANY"
123
124#define PARM_MIN_NAME_LEN                       1
125#define PARM_MAX_NAME_LEN                       32
126
127
128/* The following definitions pertain to module and profile parameters */
129// #define PARM_AP_MODE                            APMode
130// #define PARM_NAME_AP_MODE						TEXT("APMode")
131// #define PARM_DEFAULT_AP_MODE					FALSE
132
133#define PARM_AUTHENTICATION                     Authentication
134#define PARM_NAME_AUTHENTICATION				TEXT("Authentication")
135#define PARM_MIN_AUTHENTICATION                 1
136#define PARM_MAX_AUTHENTICATION                 2
137#define PARM_DEFAULT_AUTHENTICATION             1
138
139#define PARM_AUTH_KEY_MGMT_SUITE                AuthKeyMgmtSuite
140#define PARM_NAME_AUTH_KEY_MGMT_SUITE           TEXT("AuthKeyMgmtSuite")
141#define PARM_MIN_AUTH_KEY_MGMT_SUITE            0
142#define PARM_MAX_AUTH_KEY_MGMT_SUITE            4
143#define PARM_DEFAULT_AUTH_KEY_MGMT_SUITE        0
144
145#define PARM_BRSC_2GHZ                          BRSC2GHz
146#define PARM_NAME_BRSC_2GHZ                     TEXT("BRSC2GHz")
147#define PARM_MIN_BRSC                           0x0000
148#define PARM_MAX_BRSC                           0x0FFF
149#define PARM_DEFAULT_BRSC_2GHZ                  0x000F
150
151#define PARM_BRSC_5GHZ                          BRSC5GHz
152#define PARM_NAME_BRSC_5GHZ                     TEXT("BRSC5GHz")
153#define PARM_DEFAULT_BRSC_5GHZ                  0x0150
154
155#define PARM_COEXISTENCE                        Coexistence
156#define PARM_NAME_COEXISTENCE                   TEXT("Coexistence")
157#define PARM_MIN_COEXISTENCE                    0x0000
158#define PARM_MAX_COEXISTENCE                    0x0007
159#define PARM_DEFAULT_COEXISTENCE                0x0000
160
161#define PARM_CONFIGURED                         Configured
162#define PARM_NAME_CONFIGURED					TEXT("Configured")
163
164#define PARM_CONNECTION_CONTROL                 ConnectionControl
165#define PARM_NAME_CONNECTION_CONTROL            TEXT("ConnectionControl")
166#define PARM_MIN_CONNECTION_CONTROL             0
167#define PARM_MAX_CONNECTION_CONTROL             3
168#define PARM_DEFAULT_CONNECTION_CONTROL         2
169
170#define PARM_CREATE_IBSS                        CreateIBSS
171#define PARM_NAME_CREATE_IBSS                   TEXT("CreateIBSS")
172#define PARM_DEFAULT_CREATE_IBSS                FALSE
173#define PARM_DEFAULT_CREATE_IBSS_STR            "N"
174
175#define PARM_DEBUG_FLAG             	    	DebugFlag
176#define PARM_NAME_DEBUG_FLAG            		TEXT("DebugFlag")
177#define PARM_MIN_DEBUG_FLAG             		0
178#define PARM_MAX_DEBUG_FLAG             		0xFFFF
179#define PARM_DEFAULT_DEBUG_FLAG         		0xFFFF
180
181#define PARM_DESIRED_SSID                       DesiredSSID
182#define PARM_NAME_DESIRED_SSID                  TEXT("DesiredSSID")
183
184#define PARM_DOWNLOAD_FIRMWARE                  DownloadFirmware
185#define PARM_NAME_DOWNLOAD_FIRMWARE             TEXT("DownloadFirmware")
186
187#define PARM_DRIVER_ENABLE                      DriverEnable
188#define PARM_NAME_DRIVER_ENABLE					TEXT("DriverEnable")
189#define PARM_DEFAULT_DRIVER_ENABLE				TRUE
190
191#define PARM_ENABLE_ENCRYPTION                  EnableEncryption
192#define PARM_NAME_ENABLE_ENCRYPTION             TEXT("EnableEncryption")
193#define PARM_MIN_ENABLE_ENCRYPTION              0
194#define PARM_MAX_ENABLE_ENCRYPTION              7
195#define PARM_DEFAULT_ENABLE_ENCRYPTION          0
196
197#define PARM_ENCRYPTION                         Encryption
198#define PARM_NAME_ENCRYPTION                    TEXT("Encryption")
199
200#define PARM_EXCLUDE_UNENCRYPTED                ExcludeUnencrypted
201#define PARM_NAME_EXCLUDE_UNENCRYPTED           TEXT("ExcludeUnencrypted")
202#define PARM_DEFAULT_EXCLUDE_UNENCRYPTED        TRUE
203#define PARM_DEFAULT_EXCLUDE_UNENCRYPTED_STR    "N"
204
205#define PARM_INTRA_BSS_RELAY                    IntraBSSRelay
206#define PARM_NAME_INTRA_BSS_RELAY               TEXT("IntraBSSRelay")
207#define PARM_DEFAULT_INTRA_BSS_RELAY            TRUE
208#define PARM_DEFAULT_INTRA_BSS_RELAY_STR        "Y"
209
210#define PARM_KEY1                               Key1
211#define PARM_NAME_KEY1                          TEXT("Key1")
212#define PARM_KEY2                               Key2
213#define PARM_NAME_KEY2                          TEXT("Key2")
214#define PARM_KEY3                               Key3
215#define PARM_NAME_KEY3                          TEXT("Key3")
216#define PARM_KEY4                               Key4
217#define PARM_NAME_KEY4                          TEXT("Key4")
218
219//;? #define PARM_KEY_FORMAT                         AsciiHex
220//;? #define PARM_NAME_KEY_FORMAT                    TEXT("AsciiHex")
221
222#define PARM_LOAD_BALANCING                     LoadBalancing
223#define PARM_NAME_LOAD_BALANCING                TEXT("LoadBalancing")
224#define PARM_DEFAULT_LOAD_BALANCING             TRUE
225#define PARM_DEFAULT_LOAD_BALANCING_STR         "Y"
226
227#define PARM_MAX_DATA_LENGTH                    MaxDataLength
228#define PARM_NAME_MAX_DATA_LENGTH				TEXT("MaxDataLength")
229
230#define PARM_MAX_SLEEP                          MaxSleepDuration
231#define PARM_NAME_MAX_SLEEP                     TEXT("MaxSleepDuration")
232#define PARM_MIN_MAX_PM_SLEEP                   1								//;?names nearly right?
233#define PARM_MAX_MAX_PM_SLEEP                   65535
234#define PARM_DEFAULT_MAX_PM_SLEEP               100
235
236#define PARM_MEDIUM_DISTRIBUTION                MediumDistribution
237#define PARM_NAME_MEDIUM_DISTRIBUTION           TEXT("MediumDistribution")
238#define PARM_DEFAULT_MEDIUM_DISTRIBUTION        TRUE
239#define PARM_DEFAULT_MEDIUM_DISTRIBUTION_STR    "Y"
240
241#define PARM_MICROWAVE_ROBUSTNESS               MicroWaveRobustness
242#define PARM_NAME_MICROWAVE_ROBUSTNESS          TEXT("MicroWaveRobustness")
243#define PARM_DEFAULT_MICROWAVE_ROBUSTNESS       FALSE
244#define PARM_DEFAULT_MICROWAVE_ROBUSTNESS_STR   "N"
245
246#define PARM_MULTICAST_PM_BUFFERING             MulticastPMBuffering
247#define PARM_NAME_MULTICAST_PM_BUFFERING	    TEXT("MulticastPMBuffering")
248#define PARM_DEFAULT_MULTICAST_PM_BUFFERING     TRUE
249#define PARM_DEFAULT_MULTICAST_PM_BUFFERING_STR "Y"
250
251#define PARM_MULTICAST_RATE                     MulticastRate
252#define PARM_NAME_MULTICAST_RATE                TEXT("MulticastRate")
253#ifdef WARP
254#define PARM_MIN_MULTICAST_RATE                 0x0001
255#define PARM_MAX_MULTICAST_RATE                 0x0fff
256#define PARM_DEFAULT_MULTICAST_RATE_2GHZ        0x0004
257#define PARM_DEFAULT_MULTICAST_RATE_5GHZ        0x0010
258#else
259#define PARM_MIN_MULTICAST_RATE                 0x0001
260#define PARM_MAX_MULTICAST_RATE                 0x0004
261#define PARM_DEFAULT_MULTICAST_RATE_2GHZ        0x0002
262#define PARM_DEFAULT_MULTICAST_RATE_5GHZ        0x0000
263#endif  // WARP
264
265#define PARM_MULTICAST_RX                       MulticastReceive
266#define PARM_NAME_MULTICAST_RX                  TEXT("MulticastReceive")
267#define PARM_DEFAULT_MULTICAST_RX               TRUE
268#define PARM_DEFAULT_MULTICAST_RX_STR           "Y"
269
270#define PARM_NETWORK_ADDR                       NetworkAddress
271#define PARM_NAME_NETWORK_ADDR                  TEXT("NetworkAddress")
272#define PARM_DEFAULT_NETWORK_ADDR               { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
273
274#define PARM_NETWORK_TYPE                       NetworkType
275#define PARM_NAME_NETWORK_TYPE					TEXT("NetworkType")
276#define PARM_DEFAULT_NETWORK_TYPE   			0
277
278#define PARM_OWN_ATIM_WINDOW                    OwnATIMWindow
279#define PARM_NAME_OWN_ATIM_WINDOW				TEXT("OwnATIMWindow")
280#define PARM_MIN_OWN_ATIM_WINDOW                0
281#define PARM_MAX_OWN_ATIM_WINDOW                100
282#define PARM_DEFAULT_OWN_ATIM_WINDOW            0
283
284#define PARM_OWN_BEACON_INTERVAL                OwnBeaconInterval
285#define PARM_NAME_OWN_BEACON_INTERVAL           TEXT("OwnBeaconInterval")
286#define PARM_MIN_OWN_BEACON_INTERVAL            20
287#define PARM_MAX_OWN_BEACON_INTERVAL            200
288#define PARM_DEFAULT_OWN_BEACON_INTERVAL        100
289
290#define PARM_OWN_CHANNEL                        OwnChannel
291#define PARM_NAME_OWN_CHANNEL                   TEXT("OwnChannel")
292#define PARM_MIN_OWN_CHANNEL                    1
293#define PARM_MAX_OWN_CHANNEL                    161
294#define PARM_DEFAULT_OWN_CHANNEL                10
295
296#define PARM_OWN_DTIM_PERIOD                    OwnDTIMPeriod
297#define PARM_NAME_OWN_DTIM_PERIOD	            TEXT("OwnDTIMPeriod")
298#define PARM_MIN_OWN_DTIM_PERIOD                1
299#define PARM_MAX_OWN_DTIM_PERIOD                65535
300#define PARM_DEFAULT_OWN_DTIM_PERIOD            1
301
302#define PARM_OWN_NAME                           OwnName
303#define PARM_NAME_OWN_NAME                      TEXT("OwnName")
304#define PARM_DEFAULT_OWN_NAME                   "Linux"
305
306#define PARM_OWN_SSID                           OwnSSID
307#define PARM_NAME_OWN_SSID                      TEXT("OwnSSID")
308
309#define PARM_PM_ENABLED                         PMEnabled
310#define PARM_NAME_PM_ENABLED                    TEXT("PMEnabled")
311#define PARM_MAX_PM_ENABLED						3
312
313#define PARM_PMEPS                              PMEPS
314#define PARM_NAME_PMEPS                         TEXT("PMEPS")
315
316#define PARM_PM_HOLDOVER_DURATION               PMHoldoverDuration
317#define PARM_NAME_PM_HOLDOVER_DURATION          TEXT("PMHoldoverDuration")
318#define PARM_MIN_PM_HOLDOVER_DURATION           1
319#define PARM_MAX_PM_HOLDOVER_DURATION           1000
320#define PARM_DEFAULT_PM_HOLDOVER_DURATION       100
321
322#define PARM_PM_MODE                            PowerMode
323#define PARM_NAME_PM_MODE                       TEXT("PowerMode")
324
325#define PARM_PORT_TYPE                          PortType
326#define PARM_NAME_PORT_TYPE                     TEXT("PortType")
327#define PARM_MIN_PORT_TYPE                      1
328#define PARM_MAX_PORT_TYPE                      3
329#define PARM_DEFAULT_PORT_TYPE                  1
330
331#define PARM_PROMISCUOUS_MODE                   PromiscuousMode
332#define PARM_NAME_PROMISCUOUS_MODE              TEXT("PromiscuousMode")
333#define PARM_DEFAULT_PROMISCUOUS_MODE           FALSE
334#define PARM_DEFAULT_PROMISCUOUS_MODE_STR       "N"
335
336#define PARM_REJECT_ANY                         RejectANY
337#define PARM_NAME_REJECT_ANY				    TEXT("RejectANY")
338#define PARM_DEFAULT_REJECT_ANY                 FALSE
339#define PARM_DEFAULT_REJECT_ANY_STR             "N"
340
341#define PARM_RTS_THRESHOLD                      RTSThreshold
342#define PARM_NAME_RTS_THRESHOLD                 TEXT("RTSThreshold")
343#define PARM_MIN_RTS_THRESHOLD                  0
344#define PARM_MAX_RTS_THRESHOLD                  2347
345#define PARM_DEFAULT_RTS_THRESHOLD              2347
346
347#define PARM_RTS_THRESHOLD1                     RTSThreshold1
348#define PARM_NAME_RTS_THRESHOLD1                TEXT("RTSThreshold1")
349#define PARM_RTS_THRESHOLD2                     RTSThreshold2
350#define PARM_NAME_RTS_THRESHOLD2                TEXT("RTSThreshold2")
351#define PARM_RTS_THRESHOLD3                     RTSThreshold3
352#define PARM_NAME_RTS_THRESHOLD3                TEXT("RTSThreshold3")
353#define PARM_RTS_THRESHOLD4                     RTSThreshold4
354#define PARM_NAME_RTS_THRESHOLD4                TEXT("RTSThreshold4")
355#define PARM_RTS_THRESHOLD5                     RTSThreshold5
356#define PARM_NAME_RTS_THRESHOLD5                TEXT("RTSThreshold5")
357#define PARM_RTS_THRESHOLD6                     RTSThreshold6
358#define PARM_NAME_RTS_THRESHOLD6                TEXT("RTSThreshold6")
359
360#define PARM_SRSC_2GHZ                          SRSC2GHz
361#define PARM_NAME_SRSC_2GHZ                     TEXT("SRSC2GHz")
362#define PARM_MIN_SRSC                           0x0000
363#define PARM_MAX_SRSC                           0x0FFF
364#define PARM_DEFAULT_SRSC_2GHZ                  0x0FFF
365
366#define PARM_SRSC_5GHZ                          SRSC5GHz
367#define PARM_NAME_SRSC_5GHZ                     TEXT("SRSC5GHz")
368#define PARM_DEFAULT_SRSC_5GHZ                  0x0FF0
369
370#define PARM_SYSTEM_SCALE                       SystemScale
371#define PARM_NAME_SYSTEM_SCALE                  TEXT("SystemScale")
372#define PARM_MIN_SYSTEM_SCALE                   1
373#define PARM_MAX_SYSTEM_SCALE                   5
374#define PARM_DEFAULT_SYSTEM_SCALE               1
375
376#define PARM_TX_KEY                             TxKey
377#define PARM_NAME_TX_KEY                        TEXT("TxKey")
378#define PARM_MIN_TX_KEY                         1
379#define PARM_MAX_TX_KEY                         4
380#define PARM_DEFAULT_TX_KEY                     1
381
382#define PARM_TX_POW_LEVEL                       TxPowLevel
383#define PARM_NAME_TX_POW_LEVEL                  TEXT("TxPowLevel")
384#define PARM_MIN_TX_POW_LEVEL                   1   // 20 dBm
385#define PARM_MAX_TX_POW_LEVEL                   6   //  8 dBm
386#define PARM_DEFAULT_TX_POW_LEVEL               3   // 15 dBm
387
388#define PARM_TX_RATE                            TxRateControl
389#define PARM_NAME_TX_RATE                       TEXT("TxRateControl")
390#define PARM_MIN_TX_RATE                        0x0001
391#ifdef WARP
392#define PARM_MAX_TX_RATE                        0x0FFF
393#define PARM_DEFAULT_TX_RATE_2GHZ               0x0FFF
394#define PARM_DEFAULT_TX_RATE_5GHZ               0x0FF0
395#else
396#define PARM_MAX_TX_RATE                        0x0007
397#define PARM_DEFAULT_TX_RATE_2GHZ               0x0003
398#define PARM_DEFAULT_TX_RATE_5GHZ               0x0000
399#endif  // WARP
400
401#define PARM_TX_RATE1                           TxRateControl1
402#define PARM_NAME_TX_RATE1                      TEXT("TxRateControl1")
403#define PARM_TX_RATE2                           TxRateControl2
404#define PARM_NAME_TX_RATE2                      TEXT("TxRateControl2")
405#define PARM_TX_RATE3                           TxRateControl3
406#define PARM_NAME_TX_RATE3                      TEXT("TxRateControl3")
407#define PARM_TX_RATE4                           TxRateControl4
408#define PARM_NAME_TX_RATE4                      TEXT("TxRateControl4")
409#define PARM_TX_RATE5                           TxRateControl5
410#define PARM_NAME_TX_RATE5                      TEXT("TxRateControl5")
411#define PARM_TX_RATE6                           TxRateControl6
412#define PARM_NAME_TX_RATE6                      TEXT("TxRateControl6")
413
414#define PARM_VENDORDESCRIPTION                  VendorDescription
415#define PARM_NAME_VENDORDESCRIPTION				TEXT("VendorDescription")
416
417#define PARM_WDS_ADDRESS                        WDSAddress
418#define PARM_NAME_WDS_ADDRESS					TEXT("WDSAddress")
419
420#define PARM_WDS_ADDRESS1                       WDSAddress1
421#define PARM_NAME_WDS_ADDRESS1					TEXT("WDSAddress1")
422#define PARM_WDS_ADDRESS2                       WDSAddress2
423#define PARM_NAME_WDS_ADDRESS2					TEXT("WDSAddress2")
424#define PARM_WDS_ADDRESS3                       WDSAddress3
425#define PARM_NAME_WDS_ADDRESS3					TEXT("WDSAddress3")
426#define PARM_WDS_ADDRESS4                       WDSAddress4
427#define PARM_NAME_WDS_ADDRESS4					TEXT("WDSAddress4")
428#define PARM_WDS_ADDRESS5                       WDSAddress5
429#define PARM_NAME_WDS_ADDRESS5					TEXT("WDSAddress5")
430#define PARM_WDS_ADDRESS6                       WDSAddress6
431#define PARM_NAME_WDS_ADDRESS6					TEXT("WDSAddress6")
432
433/*
434#define PARM_LONG_RETRY_LIMIT                   LongRetryLimit
435#define PARM_NAME_LONG_RETRY_LIMIT              TEXT("LongRetryLimit")
436#define PARM_MIN_LONG_RETRY_LIMIT               1
437#define PARM_MAX_LONG_RETRY_LIMIT               15
438#define PARM_DEFAULT_LONG_RETRY_LIMIT           3
439
440
441#define PARM_PROBE_DATA_RATES                   ProbeDataRates
442#define PARM_NAME_PROBE_DATA_RATES              TEXT("ProbeDataRates")
443#define PARM_MIN_PROBE_DATA_RATES               0x0000
444#define PARM_MAX_PROBE_DATA_RATES               0x0FFF
445#define PARM_DEFAULT_PROBE_DATA_RATES_2GHZ      0x0002
446#define PARM_DEFAULT_PROBE_DATA_RATES_5GHZ      0x0010
447
448#define PARM_SHORT_RETRY_LIMIT                  ShortRetryLimit
449#define PARM_NAME_SHORT_RETRY_LIMIT             TEXT("ShortRetryLimit")
450#define PARM_MIN_SHORT_RETRY_LIMIT              1
451#define PARM_MAX_SHORT_RETRY_LIMIT              15
452#define PARM_DEFAULT_SHORT_RETRY_LIMIT          7
453
454
455*/
456
457/*******************************************************************************
458 *  state definitions
459 ******************************************************************************/
460/* The following constants are used to track state the device */
461#define WL_FRIMWARE_PRESENT     1 // Download if needed
462#define WL_FRIMWARE_NOT_PRESENT	0 // Skip over download, assume its already there
463#define WL_HANDLING_INT         1 // Actually call the HCF to switch interrupts on/off
464#define WL_NOT_HANDLING_INT     0 // Not yet handling interrupts, do not switch on/off
465
466/*******************************************************************************
467 *  macro definitions
468 ******************************************************************************/
469/* The following macro ensures that no symbols are exported, minimizing the
470   chance of a symbol collision in the kernel */
471// EXPORT_NO_SYMBOLS;
472
473#define NELEM(arr) (sizeof(arr) / sizeof(arr[0]))
474
475#define WVLAN_VALID_MAC_ADDRESS( x ) \
476((x[0]!=0xFF) && (x[1]!=0xFF) && (x[2]!=0xFF) && (x[3]!=0xFF) && (x[4]!=0xFF) && (x[5]!=0xFF))
477
478
479
480
481/*******************************************************************************
482 * type definitions
483 ******************************************************************************/
484#undef FALSE
485#undef TRUE
486
487typedef enum
488{
489	FALSE = 0,
490	TRUE  = 1
491}
492bool_t;
493
494
495typedef struct _ScanResult
496{
497	//hcf_16        len;
498	//hcf_16        typ;
499	int             scan_complete;
500	int             num_aps;
501	SCAN_RS_STRCT   APTable [MAX_NAPS];
502}
503ScanResult;
504
505
506typedef struct _LINK_STATUS_STRCT
507{
508	hcf_16  len;
509	hcf_16  typ;
510	hcf_16  linkStatus;     /* 1..5 */
511}
512LINK_STATUS_STRCT;
513
514
515typedef struct _ASSOC_STATUS_STRCT
516{
517	hcf_16  len;
518	hcf_16  typ;
519	hcf_16  assocStatus;            /* 1..3 */
520	hcf_8   staAddr[ETH_ALEN];
521	hcf_8   oldApAddr[ETH_ALEN];
522}
523ASSOC_STATUS_STRCT;
524
525
526typedef struct _SECURITY_STATUS_STRCT
527{
528	hcf_16  len;
529	hcf_16  typ;
530	hcf_16  securityStatus;     /* 1..3 */
531	hcf_8   staAddr[ETH_ALEN];
532	hcf_16  reason;
533}
534SECURITY_STATUS_STRCT;
535
536#define WVLAN_WMP_PDU_TYPE_LT_REQ       0x00
537#define WVLAN_WMP_PDU_TYPE_LT_RSP       0x01
538#define WVLAN_WMP_PDU_TYPE_APL_REQ      0x02
539#define WVLAN_WMP_PDU_TYPE_APL_RSP      0x03
540
541typedef struct wvlan_eth_hdr
542{
543	unsigned char   dst[ETH_ALEN];           /* Destination address. */
544	unsigned char   src[ETH_ALEN];           /* Source address. */
545	unsigned short  len;                    /* Length of the PDU. */
546}
547WVLAN_ETH_HDR, *PWVLAN_ETH_HDR;
548
549typedef struct wvlan_llc_snap
550{
551	unsigned char   dsap;                   /* DSAP (0xAA) */
552	unsigned char   ssap;                   /* SSAP (0xAA) */
553	unsigned char   ctrl;                   /* Control (0x03) */
554	unsigned char   oui[3];                 /* Organization Unique ID (00-60-1d). */
555	unsigned char   specid[2];              /* Specific ID code (00-01). */
556}
557WVLAN_LLC_SNAP, *PWVLAN_LLC_SNAP;
558
559
560typedef struct wvlan_lt_hdr
561{
562	unsigned char   version;                /* Version (0x00) */
563	unsigned char   type;                   /* PDU type: 0-req/1-resp. */
564	unsigned short  id;                     /* Identifier to associate resp to req. */
565}
566WVLAN_LT_HDR, *PWVLAN_LT_HDR;
567
568
569typedef struct wvlan_wmp_hdr
570{
571	unsigned char   version;                /* Version  */
572	unsigned char   type;                   /* PDU type */
573}
574WVLAN_WMP_HDR, *PWVLAN_WMP_HDR;
575
576
577#define FILLER_SIZE             1554
578#define TEST_PATTERN_SIZE       54
579
580
581typedef struct wvlan_lt_req
582{
583	unsigned char   Filler[TEST_PATTERN_SIZE];   /* minimal length of 54 bytes */
584}
585WVLAN_LT_REQ, *PWVLAN_LT_REQ;
586
587
588typedef struct wvlan_lt_rsp
589{
590	char           name[32];
591	/* Measured Data */
592	unsigned char  signal;
593	unsigned char  noise;
594	unsigned char  rxFlow;
595	unsigned char  dataRate;
596	unsigned short protocol;
597	/* Capabilities */
598	unsigned char  station;
599	unsigned char  dataRateCap;
600	unsigned char  powerMgmt[4];
601	unsigned char  robustness[4];
602	unsigned char  scaling;
603	unsigned char  reserved[5];
604}
605WVLAN_LT_RSP, *PWVLAN_LT_RSP;
606
607
608typedef struct wvlan_rx_wmp_hdr
609{
610	unsigned short status;
611	unsigned short reserved1[2];
612	unsigned char  silence;
613	unsigned char  signal;
614	unsigned char  rate;
615	unsigned char  rxFlow;
616	unsigned short reserved2[2];
617	unsigned short frameControl;
618	unsigned short duration;
619	unsigned short address1[3];
620	unsigned short address2[3];
621	unsigned short address3[3];
622	unsigned short sequenceControl;
623	unsigned short address4[3];
624#ifndef HERMES25	//;?just to be on the safe side of inherited but not comprehended code #ifdef HERMES2
625	unsigned short seems_to_be_unused_reserved3[5];  //;?
626	unsigned short seems_to_be_unused_reserved4;	 //;?
627#endif // HERMES25
628	unsigned short HeaderDataLen;
629}
630WVLAN_RX_WMP_HDR, *PWVLAN_RX_WMP_HDR;
631
632
633typedef struct wvlan_linktest_req_pdu
634{
635	WVLAN_ETH_HDR     ethHdr;
636	WVLAN_LLC_SNAP    llcSnap;
637	WVLAN_LT_HDR      ltHdr;
638	WVLAN_LT_REQ      ltReq;
639}
640WVLAN_LINKTEST_REQ_PDU, *PWVLAN_LINKTEST_REQ_PDU;
641
642
643typedef struct wvlan_linktest_rsp_pdu
644{
645	WVLAN_RX_WMP_HDR  wmpRxHdr;
646	WVLAN_ETH_HDR     ethHdr;
647	WVLAN_LLC_SNAP    llcSnap;
648	WVLAN_LT_HDR      ltHdr;
649	WVLAN_LT_RSP      ltRsp;
650}
651WVLAN_LINKTEST_RSP_PDU, *PWVLAN_LINKTEST_RSP_PDU;
652
653
654typedef struct _LINKTEST_RSP_STRCT
655{
656	hcf_16                   len;
657	hcf_16                   typ;
658	WVLAN_LINKTEST_RSP_PDU   ltRsp;
659}
660LINKTEST_RSP_STRCT;
661
662
663typedef struct wvlan_wmp_rsp_pdu
664{
665	WVLAN_RX_WMP_HDR  wmpRxHdr;
666	WVLAN_ETH_HDR     ethHdr;
667	WVLAN_LLC_SNAP    llcSnap;
668	WVLAN_WMP_HDR     wmpHdr;
669}
670WVLAN_WMP_RSP_PDU, *PWVLAN_WMP_RSP_PDU;
671
672
673typedef struct _WMP_RSP_STRCT
674{
675	hcf_16              len;
676	hcf_16              typ;
677	WVLAN_WMP_RSP_PDU   wmpRsp;
678}
679WMP_RSP_STRCT;
680
681
682typedef struct _PROBE_RESP
683{
684	// first part: 802.11
685	hcf_16	length;
686	hcf_16	infoType;
687	hcf_16	reserved0;
688	//hcf_8	signal;
689	hcf_8	silence;
690	hcf_8	signal;     // Moved signal here as signal/noise values were flipped
691	hcf_8	rxFlow;
692	hcf_8	rate;
693	hcf_16	reserved1[2];
694
695	// second part:
696	hcf_16	frameControl;
697	hcf_16	durID;
698	hcf_8	address1[6];
699	hcf_8	address2[6];
700	hcf_8	BSSID[6];					//! this is correct, right ?
701	hcf_16	sequence;
702	hcf_8	address4[6];
703
704#ifndef WARP
705	hcf_8	reserved2[12];
706#endif // WARP
707
708	hcf_16	dataLength;
709										// the information in the next 3 fields (DA/SA/LenType) is actually not filled in.
710	hcf_8	DA[6];
711	hcf_8	SA[6];
712
713#ifdef WARP
714	hcf_8   channel;
715	hcf_8   band;
716#else
717	hcf_16	lenType;
718#endif  // WARP
719
720	hcf_8	timeStamp[8];
721	hcf_16	beaconInterval;
722	hcf_16	capability;
723	hcf_8	rawData[200];				//! <<< think about this number !
724	hcf_16	flags;
725}
726PROBE_RESP, *PPROBE_RESP;
727
728
729typedef struct _ProbeResult
730{
731	int         scan_complete;
732	int         num_aps;
733	PROBE_RESP  ProbeTable[MAX_NAPS];
734}
735ProbeResult;
736
737/* Definitions used to parse capabilities out of the probe responses */
738#define CAPABILITY_ESS      0x0001
739#define CAPABILITY_IBSS     0x0002
740#define CAPABILITY_PRIVACY  0x0010
741
742/* Definitions used to parse the Information Elements out of probe responses */
743#define DS_INFO_ELEM                        0x03
744#define GENERIC_INFO_ELEM                   0xdd
745#define WPA_MAX_IE_LEN                      40
746#define WPA_SELECTOR_LEN                    4
747#define WPA_OUI_TYPE                        { 0x00, 0x50, 0xf2, 1 }
748#define WPA_VERSION                         1
749#define WPA_AUTH_KEY_MGMT_UNSPEC_802_1X     { 0x00, 0x50, 0xf2, 1 }
750#define WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X   { 0x00, 0x50, 0xf2, 2 }
751#define WPA_CIPHER_SUITE_NONE               { 0x00, 0x50, 0xf2, 0 }
752#define WPA_CIPHER_SUITE_WEP40              { 0x00, 0x50, 0xf2, 1 }
753#define WPA_CIPHER_SUITE_TKIP               { 0x00, 0x50, 0xf2, 2 }
754#define WPA_CIPHER_SUITE_WRAP               { 0x00, 0x50, 0xf2, 3 }
755#define WPA_CIPHER_SUITE_CCMP               { 0x00, 0x50, 0xf2, 4 }
756#define WPA_CIPHER_SUITE_WEP104             { 0x00, 0x50, 0xf2, 5 }
757
758typedef enum wvlan_drv_mode
759{
760	WVLAN_DRV_MODE_NO_DOWNLOAD,     /* this is the same as STA for Hermes 1    */
761				                    /* it is also only applicable for Hermes 1 */
762	WVLAN_DRV_MODE_STA,
763	WVLAN_DRV_MODE_AP,
764	WVLAN_DRV_MODE_MAX
765}
766WVLAN_DRV_MODE, *PWVLAN_DRV_MODE;
767
768
769typedef enum wvlan_port_state
770{
771	WVLAN_PORT_STATE_ENABLED,
772	WVLAN_PORT_STATE_DISABLED,
773	WVLAN_PORT_STATE_CONNECTED
774}
775WVLAN_PORT_STATE, *PWVLAN_PORT_STATE;
776
777/*
778typedef enum wvlan_connect_state
779{
780	WVLAN_CONNECT_STATE_CONNECTED,
781	WVLAN_CONNECT_STATE_DISCONNECTED
782}
783WVLAN_CONNECT_STATE, *PWVLAN_CONNECT_STATE;
784*/
785
786typedef enum wvlan_pm_state
787{
788	WVLAN_PM_STATE_DISABLED,
789	WVLAN_PM_STATE_ENHANCED,
790	WVLAN_PM_STATE_STANDARD
791}
792WVLAN_PM_STATE, *PWVLAN_PM_STATE;
793
794
795typedef struct wvlan_frame
796{
797	struct sk_buff  *skb;       /* sk_buff for frame. */
798	hcf_16          port;       /* MAC port for the frame. */
799	hcf_16          len;        /* Length of the frame. */
800}
801WVLAN_FRAME, *PWVLAN_FRAME;
802
803
804typedef struct wvlan_lframe
805{
806	struct list_head    node;   /* Node in the list */
807	WVLAN_FRAME	        frame;  /* Frame. */
808}
809WVLAN_LFRAME, *PWVLAN_LFRAME;
810
811
812
813#define DEFAULT_NUM_TX_FRAMES           48
814#define TX_Q_LOW_WATER_MARK             (DEFAULT_NUM_TX_FRAMES/3)
815
816#define WVLAN_MAX_TX_QUEUES             1
817
818
819#ifdef USE_WDS
820
821typedef struct wvlan_wds_if
822{
823	struct net_device           *dev;
824	int                         is_registered;
825	int                         netif_queue_on;
826	struct net_device_stats     stats;
827	hcf_16                      rtsThreshold;
828	hcf_16                      txRateCntl;
829	hcf_8                       wdsAddress[ETH_ALEN];
830} WVLAN_WDS_IF, *PWVLAN_WDS_IF;
831
832#endif  // USE_WDS
833
834
835
836#define NUM_RX_DESC 5
837#define NUM_TX_DESC 5
838
839typedef struct dma_strct
840{
841	DESC_STRCT  *tx_packet[NUM_TX_DESC];
842	DESC_STRCT  *rx_packet[NUM_RX_DESC];
843	DESC_STRCT  *rx_reclaim_desc, *tx_reclaim_desc; // Descriptors for host-reclaim purposes (see HCF)
844	int         tx_rsc_ind; // DMA Tx resource indicator is maintained in the MSF, not in the HCF
845	int         rx_rsc_ind; // Also added rx rsource indicator so that cleanup can be performed if alloc fails
846	int         status;
847} DMA_STRCT;
848
849
850/* Macros used in DMA support */
851/* get bus address of {rx,tx}dma structure member, in little-endian byte order */
852#define WL_DMA_BUS_ADDR_LE(str, i, mem) \
853	cpu_to_le32(str##_dma_addr[(i)] + ((hcf_8 *)&str[(i)]->mem - (hcf_8 *)str[(i)]))
854
855
856struct wl_private
857{
858
859#ifdef BUS_PCMCIA
860	struct pcmcia_device	    *link;
861#endif // BUS_PCMCIA
862
863
864	struct net_device           *dev;
865//	struct net_device           *dev_next;
866	spinlock_t                  slock;
867	struct tasklet_struct       task;
868	struct net_device_stats     stats;
869
870
871#ifdef WIRELESS_EXT
872	struct iw_statistics        wstats;
873//	int                         spy_number;
874//	u_char                      spy_address[IW_MAX_SPY][ETH_ALEN];
875//	struct iw_quality           spy_stat[IW_MAX_SPY];
876	struct iw_spy_data          spy_data;
877	struct iw_public_data	wireless_data;
878#endif // WIRELESS_EXT
879
880
881	IFB_STRCT                   hcfCtx;
882//;? struct timer_list			timer_oor;
883//;? hcf_16						timer_oor_cnt;
884	u_long						wlags49_type;		//controls output in /proc/wlags49
885	u_long                      flags;
886	hcf_16						DebugFlag;
887	int                         is_registered;
888	int                         is_handling_int;
889	int                         firmware_present;
890	char                        sysfsCreated;
891	CFG_DRV_INFO_STRCT          driverInfo;
892	CFG_IDENTITY_STRCT          driverIdentity;
893	CFG_FW_IDENTITY_STRCT       StationIdentity;
894	CFG_PRI_IDENTITY_STRCT      PrimaryIdentity;
895	CFG_PRI_IDENTITY_STRCT      NICIdentity;
896
897	ltv_t                       ltvRecord;
898	u_long                      txBytes;
899	hcf_16                      maxPort;        /* 0 for STA, 6 for AP */
900
901	/* Elements used for async notification from hardware */
902	RID_LOG_STRCT				RidList[10];
903	ltv_t                       updatedRecord;
904	PROBE_RESP				    ProbeResp;
905	ASSOC_STATUS_STRCT          assoc_stat;
906	SECURITY_STATUS_STRCT       sec_stat;
907
908	u_char                      lookAheadBuf[WVLAN_MAX_LOOKAHEAD];
909
910	hcf_8                       PortType;           // 1 - 3 (1 [Normal] | 3 [AdHoc])
911	hcf_16                      Channel;            // 0 - 14 (0)
912	hcf_16                      TxRateControl[2];
913	hcf_8                       DistanceBetweenAPs; // 1 - 3 (1)
914	hcf_16                      RTSThreshold;       // 0 - 2347 (2347)
915	hcf_16                      PMEnabled;          // 0 - 2, 8001 - 8002 (0)
916	hcf_8                       MicrowaveRobustness;// 0 - 1 (0)
917	hcf_8                       CreateIBSS;         // 0 - 1 (0)
918	hcf_8                       MulticastReceive;   // 0 - 1 (1)
919	hcf_16                      MaxSleepDuration;   // 0 - 65535 (100)
920	hcf_8                       MACAddress[ETH_ALEN];
921	char                        NetworkName[HCF_MAX_NAME_LEN+1];
922	char                        StationName[HCF_MAX_NAME_LEN+1];
923	hcf_8                       EnableEncryption;   // 0 - 1 (0)
924	char                        Key1[MAX_KEY_LEN+1];
925	char                        Key2[MAX_KEY_LEN+1];
926	char                        Key3[MAX_KEY_LEN+1];
927	char                        Key4[MAX_KEY_LEN+1];
928	hcf_8                       TransmitKeyID;      // 1 - 4 (1)
929	CFG_DEFAULT_KEYS_STRCT	    DefaultKeys;
930	u_char                      mailbox[MB_SIZE];
931	char                        szEncryption[MAX_ENC_LEN];
932
933	hcf_16                      driverEnable;
934	hcf_16                      wolasEnable;
935	hcf_16                      atimWindow;
936	hcf_16                      holdoverDuration;
937	hcf_16                      MulticastRate[2];
938
939	hcf_16                      authentication; // is this AP specific?
940	hcf_16                      promiscuousMode;
941	WVLAN_DRV_MODE              DownloadFirmware;   // 0 - 2 (0 [None] | 1 [STA] | 2 [AP])
942
943	char						fw_image_filename[MAX_LINE_SIZE+1];
944
945	hcf_16                      AuthKeyMgmtSuite;
946
947	hcf_16                      loadBalancing;
948	hcf_16                      mediumDistribution;
949	hcf_16                      txPowLevel;
950	//hcf_16                      shortRetryLimit;
951	//hcf_16                      longRetryLimit;
952	hcf_16                      srsc[2];
953	hcf_16                      brsc[2];
954	hcf_16                      connectionControl;
955	//hcf_16                      probeDataRates[2];
956	hcf_16                      ownBeaconInterval;
957	hcf_16                      coexistence;
958
959	WVLAN_FRAME                 txF;
960	WVLAN_LFRAME                txList[DEFAULT_NUM_TX_FRAMES];
961	struct list_head            txFree;
962	struct list_head            txQ[WVLAN_MAX_TX_QUEUES];
963	int                         netif_queue_on;
964	int                         txQ_count;
965	DESC_STRCT                  desc_rx;
966	DESC_STRCT                  desc_tx;
967
968	WVLAN_PORT_STATE            portState;
969
970	ScanResult                  scan_results;
971	ProbeResult                 probe_results;
972	int                         probe_num_aps;
973
974	int                         use_dma;
975	DMA_STRCT                   dma;
976#ifdef USE_RTS
977	int                         useRTS;
978#endif  // USE_RTS
979	hcf_8                       DTIMPeriod;         // 1 - 255 (1)
980	hcf_16                      multicastPMBuffering;
981	hcf_8                       RejectAny;          // 0 - 1 (0)
982	hcf_8                       ExcludeUnencrypted; // 0 - 1 (1)
983	hcf_16                      intraBSSRelay;
984#ifdef USE_WDS
985	WVLAN_WDS_IF                wds_port[NUM_WDS_PORTS];
986#endif // USE_WDS
987}; // wl_private
988
989#ifdef HAVE_NETDEV_PRIV
990#define wl_priv(dev) ((struct wl_private *) netdev_priv(dev))
991#else
992extern inline struct wl_private *wl_priv(struct net_device *dev)
993{
994    return dev->priv;
995}
996#endif
997
998/********************************************************************/
999/* Locking and synchronization functions                            */
1000/********************************************************************/
1001
1002/* These functions *must* be inline or they will break horribly on
1003 * SPARC, due to its weird semantics for save/restore flags. extern
1004 * inline should prevent the kernel from linking or module from
1005 * loading if they are not inlined. */
1006static inline void wl_lock(struct wl_private *lp,
1007	                       unsigned long *flags)
1008{
1009	spin_lock_irqsave(&lp->slock, *flags);
1010}
1011
1012static inline void wl_unlock(struct wl_private *lp,
1013	                          unsigned long *flags)
1014{
1015	spin_unlock_irqrestore(&lp->slock, *flags);
1016}
1017
1018/********************************************************************/
1019/* Interrupt enable disable functions                               */
1020/********************************************************************/
1021
1022extern inline void wl_act_int_on(struct wl_private *lp)
1023{
1024	/*
1025	 * Only do something when the driver is handling
1026	 * interrupts. Handling starts at wl_open and
1027	 * ends at wl_close when not in RTS mode
1028	 */
1029	if(lp->is_handling_int == WL_HANDLING_INT) {
1030		hcf_action( &lp->hcfCtx, HCF_ACT_INT_ON );
1031	}
1032}
1033
1034extern inline void wl_act_int_off(struct wl_private *lp)
1035{
1036	/*
1037	 * Only do something when the driver is handling
1038	 * interrupts. Handling starts at wl_open and
1039	 * ends at wl_close when not in RTS mode
1040	 */
1041	if(lp->is_handling_int == WL_HANDLING_INT) {
1042		hcf_action( &lp->hcfCtx, HCF_ACT_INT_OFF );
1043	}
1044}
1045
1046#endif  // __WAVELAN2_H__
1047