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