linux/drivers/staging/vt6656/device.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
   3 * All rights reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License as published by
   7 * the Free Software Foundation; either version 2 of the License, or
   8 * (at your option) any later version.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License along
  16 * with this program; if not, write to the Free Software Foundation, Inc.,
  17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  18 *
  19 * File: device.h
  20 *
  21 * Purpose: MAC Data structure
  22 *
  23 * Author: Tevin Chen
  24 *
  25 * Date: Mar 17, 1997
  26 *
  27 */
  28
  29#ifndef __DEVICE_H__
  30#define __DEVICE_H__
  31
  32#include <linux/module.h>
  33#include <linux/types.h>
  34#include <linux/init.h>
  35#include <linux/mm.h>
  36#include <linux/errno.h>
  37#include <linux/ioport.h>
  38#include <linux/pci.h>
  39#include <linux/kernel.h>
  40#include <linux/netdevice.h>
  41#include <linux/etherdevice.h>
  42#include <linux/skbuff.h>
  43#include <linux/delay.h>
  44#include <linux/timer.h>
  45#include <linux/slab.h>
  46#include <linux/interrupt.h>
  47#include <linux/string.h>
  48#include <linux/wait.h>
  49#include <linux/if_arp.h>
  50#include <linux/sched.h>
  51#include <linux/if.h>
  52#include <linux/rtnetlink.h>//James
  53#include <linux/proc_fs.h>
  54#include <linux/inetdevice.h>
  55#include <linux/reboot.h>
  56#include <linux/usb.h>
  57#include <linux/signal.h>
  58#include <linux/firmware.h>
  59#include <asm/io.h>
  60#include <asm/uaccess.h>
  61#ifdef SIOCETHTOOL
  62#define DEVICE_ETHTOOL_IOCTL_SUPPORT
  63#include <linux/ethtool.h>
  64#else
  65#undef DEVICE_ETHTOOL_IOCTL_SUPPORT
  66#endif
  67/* Include Wireless Extension definition and check version - Jean II */
  68#include <linux/wireless.h>
  69#include <net/iw_handler.h>     // New driver API
  70
  71#ifndef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
  72#define WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
  73#endif
  74
  75//please copy below macro to driver_event.c for API
  76#define RT_INSMOD_EVENT_FLAG                             0x0101
  77#define RT_UPDEV_EVENT_FLAG                               0x0102
  78#define RT_DISCONNECTED_EVENT_FLAG               0x0103
  79#define RT_WPACONNECTED_EVENT_FLAG             0x0104
  80#define RT_DOWNDEV_EVENT_FLAG                        0x0105
  81#define RT_RMMOD_EVENT_FLAG                              0x0106
  82
  83//
  84// device specific
  85//
  86
  87#include "device_cfg.h"
  88#include "ttype.h"
  89#include "80211hdr.h"
  90#include "tether.h"
  91#include "wmgr.h"
  92#include "wcmd.h"
  93#include "mib.h"
  94#include "srom.h"
  95#include "rc4.h"
  96#include "desc.h"
  97#include "key.h"
  98#include "card.h"
  99
 100/*---------------------  Export Definitions -------------------------*/
 101#define VNT_USB_VENDOR_ID                     0x160a
 102#define VNT_USB_PRODUCT_ID                    0x3184
 103
 104#define MAC_MAX_CONTEXT_REG     (256+128)
 105
 106#define MAX_MULTICAST_ADDRESS_NUM       32
 107#define MULTICAST_ADDRESS_LIST_SIZE     (MAX_MULTICAST_ADDRESS_NUM * ETH_ALEN)
 108
 109//#define OP_MODE_INFRASTRUCTURE  0
 110//#define OP_MODE_ADHOC           1
 111//#define OP_MODE_AP              2
 112
 113#define DUPLICATE_RX_CACHE_LENGTH       5
 114
 115#define NUM_KEY_ENTRY                   11
 116
 117#define TX_WEP_NONE                     0
 118#define TX_WEP_OTF                      1
 119#define TX_WEP_SW                       2
 120#define TX_WEP_SWOTP                    3
 121#define TX_WEP_OTPSW                    4
 122#define TX_WEP_SW232                    5
 123
 124#define KEYSEL_WEP40                    0
 125#define KEYSEL_WEP104                   1
 126#define KEYSEL_TKIP                     2
 127#define KEYSEL_CCMP                     3
 128
 129#define AUTO_FB_NONE            0
 130#define AUTO_FB_0               1
 131#define AUTO_FB_1               2
 132
 133#define FB_RATE0                0
 134#define FB_RATE1                1
 135
 136// Antenna Mode
 137#define ANT_A                   0
 138#define ANT_B                   1
 139#define ANT_DIVERSITY           2
 140#define ANT_RXD_TXA             3
 141#define ANT_RXD_TXB             4
 142#define ANT_UNKNOWN             0xFF
 143#define ANT_TXA                 0
 144#define ANT_TXB                 1
 145#define ANT_RXA                 2
 146#define ANT_RXB                 3
 147
 148
 149#define MAXCHECKHANGCNT         4
 150
 151//Packet type
 152#define TX_PKT_UNI              0x00
 153#define TX_PKT_MULTI            0x01
 154#define TX_PKT_BROAD            0x02
 155
 156#define BB_VGA_LEVEL            4
 157#define BB_VGA_CHANGE_THRESHOLD 3
 158
 159#ifndef RUN_AT
 160#define RUN_AT(x)                       (jiffies+(x))
 161#endif
 162
 163// DMA related
 164#define RESERV_AC0DMA                   4
 165
 166#define PRIVATE_Message                 0
 167
 168/*---------------------  Export Types  ------------------------------*/
 169
 170#define DBG_PRT(l, p, args...) { if (l <= msglevel) printk(p, ##args); }
 171#define PRINT_K(p, args...) { if (PRIVATE_Message) printk(p, ##args); }
 172
 173typedef enum __device_msg_level {
 174        MSG_LEVEL_ERR = 0,            /* Errors causing abnormal operation */
 175        MSG_LEVEL_NOTICE = 1,         /* Errors needing user notification */
 176        MSG_LEVEL_INFO = 2,           /* Normal message. */
 177        MSG_LEVEL_VERBOSE = 3,        /* Will report all trival errors. */
 178        MSG_LEVEL_DEBUG = 4           /* Only for debug purpose. */
 179} DEVICE_MSG_LEVEL, *PDEVICE_MSG_LEVEL;
 180
 181typedef enum __device_init_type {
 182        DEVICE_INIT_COLD = 0,       /* cold init */
 183        DEVICE_INIT_RESET,          /* reset init or Dx to D0 power remain */
 184        DEVICE_INIT_DXPL            /* Dx to D0 power lost init */
 185} DEVICE_INIT_TYPE, *PDEVICE_INIT_TYPE;
 186
 187//USB
 188
 189//
 190// Enum of context types for SendPacket
 191//
 192typedef enum _CONTEXT_TYPE {
 193    CONTEXT_DATA_PACKET = 1,
 194    CONTEXT_MGMT_PACKET
 195} CONTEXT_TYPE;
 196
 197// RCB (Receive Control Block)
 198typedef struct _RCB
 199{
 200    void *Next;
 201    signed long                    Ref;
 202    void *pDevice;
 203    struct urb              *pUrb;
 204    SRxMgmtPacket           sMngPacket;
 205    struct sk_buff*         skb;
 206    BOOL                    bBoolInUse;
 207
 208} RCB, *PRCB;
 209
 210// used to track bulk out irps
 211typedef struct _USB_SEND_CONTEXT {
 212    void *pDevice;
 213    struct sk_buff *pPacket;
 214    struct urb      *pUrb;
 215    unsigned int            uBufLen;
 216    CONTEXT_TYPE    Type;
 217    SEthernetHeader sEthHeader;
 218    void *Next;
 219    BOOL            bBoolInUse;
 220    unsigned char           Data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS];
 221} USB_SEND_CONTEXT, *PUSB_SEND_CONTEXT;
 222
 223/* structure got from configuration file as user-desired default settings */
 224typedef struct _DEFAULT_CONFIG {
 225        signed int    ZoneType;
 226        signed int    eConfigMode;
 227        signed int    eAuthenMode;        /* open/wep/wpa */
 228        signed int    bShareKeyAlgorithm; /* open-open/{open,wep}-sharekey */
 229        signed int    keyidx;             /* wepkey index */
 230        signed int    eEncryptionStatus;
 231} DEFAULT_CONFIG, *PDEFAULT_CONFIG;
 232
 233//
 234// Structure to keep track of usb interrupt packets
 235//
 236typedef struct {
 237    unsigned int            uDataLen;
 238    PBYTE           pDataBuf;
 239//    struct urb      *pUrb;
 240    BOOL            bInUse;
 241} INT_BUFFER, *PINT_BUFFER;
 242
 243//0:11A 1:11B 2:11G
 244typedef enum _VIA_BB_TYPE
 245{
 246    BB_TYPE_11A = 0,
 247    BB_TYPE_11B,
 248    BB_TYPE_11G
 249} VIA_BB_TYPE, *PVIA_BB_TYPE;
 250
 251//0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate)
 252typedef enum _VIA_PKT_TYPE
 253{
 254    PK_TYPE_11A = 0,
 255    PK_TYPE_11B,
 256    PK_TYPE_11GB,
 257    PK_TYPE_11GA
 258} VIA_PKT_TYPE, *PVIA_PKT_TYPE;
 259
 260//++ NDIS related
 261
 262typedef enum __DEVICE_NDIS_STATUS {
 263    STATUS_SUCCESS = 0,
 264    STATUS_FAILURE,
 265    STATUS_RESOURCES,
 266    STATUS_PENDING,
 267} DEVICE_NDIS_STATUS, *PDEVICE_NDIS_STATUS;
 268
 269#define MAX_BSSIDINFO_4_PMKID   16
 270#define MAX_PMKIDLIST           5
 271//Flags for PMKID Candidate list structure
 272#define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED     0x01
 273
 274// PMKID Structures
 275typedef unsigned char   NDIS_802_11_PMKID_VALUE[16];
 276
 277
 278typedef enum _NDIS_802_11_WEP_STATUS
 279{
 280    Ndis802_11WEPEnabled,
 281    Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
 282    Ndis802_11WEPDisabled,
 283    Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
 284    Ndis802_11WEPKeyAbsent,
 285    Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
 286    Ndis802_11WEPNotSupported,
 287    Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
 288    Ndis802_11Encryption2Enabled,
 289    Ndis802_11Encryption2KeyAbsent,
 290    Ndis802_11Encryption3Enabled,
 291    Ndis802_11Encryption3KeyAbsent
 292} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
 293  NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
 294
 295
 296typedef enum _NDIS_802_11_STATUS_TYPE
 297{
 298    Ndis802_11StatusType_Authentication,
 299    Ndis802_11StatusType_MediaStreamMode,
 300    Ndis802_11StatusType_PMKID_CandidateList,
 301    Ndis802_11StatusTypeMax    // not a real type, defined as an upper bound
 302} NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE;
 303
 304//Added new types for PMKID Candidate lists.
 305typedef struct _PMKID_CANDIDATE {
 306    NDIS_802_11_MAC_ADDRESS BSSID;
 307    unsigned long Flags;
 308} PMKID_CANDIDATE, *PPMKID_CANDIDATE;
 309
 310
 311typedef struct _BSSID_INFO
 312{
 313    NDIS_802_11_MAC_ADDRESS BSSID;
 314    NDIS_802_11_PMKID_VALUE PMKID;
 315} BSSID_INFO, *PBSSID_INFO;
 316
 317typedef struct tagSPMKID {
 318    unsigned long Length;
 319    unsigned long BSSIDInfoCount;
 320    BSSID_INFO BSSIDInfo[MAX_BSSIDINFO_4_PMKID];
 321} SPMKID, *PSPMKID;
 322
 323typedef struct tagSPMKIDCandidateEvent {
 324    NDIS_802_11_STATUS_TYPE     StatusType;
 325        unsigned long Version;       /* Version of the structure */
 326        unsigned long NumCandidates; /* No. of pmkid candidates */
 327    PMKID_CANDIDATE CandidateList[MAX_PMKIDLIST];
 328} SPMKIDCandidateEvent, *PSPMKIDCandidateEvent;
 329
 330//--
 331
 332//++ 802.11h related
 333#define MAX_QUIET_COUNT     8
 334
 335typedef struct tagSQuietControl {
 336    BOOL        bEnable;
 337    DWORD       dwStartTime;
 338    BYTE        byPeriod;
 339    WORD        wDuration;
 340} SQuietControl, *PSQuietControl;
 341
 342//--
 343
 344
 345// The receive duplicate detection cache entry
 346typedef struct tagSCacheEntry{
 347    WORD        wFmSequence;
 348    BYTE        abyAddr2[ETH_ALEN];
 349    WORD        wFrameCtl;
 350} SCacheEntry, *PSCacheEntry;
 351
 352typedef struct tagSCache{
 353/* The receive cache is updated circularly.  The next entry to be written is
 354 * indexed by the "InPtr".
 355*/
 356        unsigned int uInPtr; /* Place to use next */
 357    SCacheEntry     asCacheEntry[DUPLICATE_RX_CACHE_LENGTH];
 358} SCache, *PSCache;
 359
 360#define CB_MAX_RX_FRAG                 64
 361// DeFragment Control Block, used for collecting fragments prior to reassembly
 362typedef struct tagSDeFragControlBlock
 363{
 364    WORD            wSequence;
 365    WORD            wFragNum;
 366    BYTE            abyAddr2[ETH_ALEN];
 367        unsigned int            uLifetime;
 368    struct sk_buff* skb;
 369    PBYTE           pbyRxBuffer;
 370    unsigned int            cbFrameLength;
 371    BOOL            bInUse;
 372} SDeFragControlBlock, *PSDeFragControlBlock;
 373
 374
 375
 376//flags for options
 377#define     DEVICE_FLAGS_UNPLUG          0x00000001UL
 378#define     DEVICE_FLAGS_PREAMBLE_TYPE   0x00000002UL
 379#define     DEVICE_FLAGS_OP_MODE         0x00000004UL
 380#define     DEVICE_FLAGS_PS_MODE         0x00000008UL
 381#define         DEVICE_FLAGS_80211h_MODE         0x00000010UL
 382
 383//flags for driver status
 384#define     DEVICE_FLAGS_OPENED          0x00010000UL
 385#define     DEVICE_FLAGS_WOL_ENABLED     0x00080000UL
 386//flags for capbilities
 387#define     DEVICE_FLAGS_TX_ALIGN        0x01000000UL
 388#define     DEVICE_FLAGS_HAVE_CAM        0x02000000UL
 389#define     DEVICE_FLAGS_FLOW_CTRL       0x04000000UL
 390
 391//flags for MII status
 392#define     DEVICE_LINK_FAIL             0x00000001UL
 393#define     DEVICE_SPEED_10              0x00000002UL
 394#define     DEVICE_SPEED_100             0x00000004UL
 395#define     DEVICE_SPEED_1000            0x00000008UL
 396#define     DEVICE_DUPLEX_FULL           0x00000010UL
 397#define     DEVICE_AUTONEG_ENABLE        0x00000020UL
 398#define     DEVICE_FORCED_BY_EEPROM      0x00000040UL
 399//for device_set_media_duplex
 400#define     DEVICE_LINK_CHANGE           0x00000001UL
 401
 402
 403typedef struct __device_opt {
 404    int         nRxDescs0;    //Number of RX descriptors0
 405    int         nTxDescs0;    //Number of TX descriptors 0, 1, 2, 3
 406    int         rts_thresh;   //rts threshold
 407    int         frag_thresh;
 408    int         OpMode;
 409    int         data_rate;
 410    int         channel_num;
 411    int         short_retry;
 412    int         long_retry;
 413    int         bbp_type;
 414    u32         flags;
 415} OPTIONS, *POPTIONS;
 416
 417
 418typedef struct __device_info {
 419
 420// netdev
 421        struct usb_device*          usb;
 422    struct net_device*          dev;
 423    struct net_device_stats     stats;
 424
 425    const struct firmware       *firmware;
 426
 427    OPTIONS                     sOpts;
 428
 429        struct tasklet_struct       CmdWorkItem;
 430        struct tasklet_struct       EventWorkItem;
 431        struct tasklet_struct       ReadWorkItem;
 432        struct tasklet_struct       RxMngWorkItem;
 433
 434    u32                         rx_buf_sz;
 435    int                         multicast_limit;
 436    BYTE                        byRxMode;
 437
 438    spinlock_t                  lock;
 439
 440    u32                         rx_bytes;
 441
 442    BYTE                        byRevId;
 443
 444    u32                         flags;
 445    unsigned long                       Flags;
 446
 447    SCache                      sDupRxCache;
 448
 449    SDeFragControlBlock         sRxDFCB[CB_MAX_RX_FRAG];
 450    unsigned int                        cbDFCB;
 451    unsigned int                        cbFreeDFCB;
 452    unsigned int                        uCurrentDFCBIdx;
 453
 454    // +++USB
 455
 456    struct urb                  *pControlURB;
 457    struct urb                  *pInterruptURB;
 458        struct usb_ctrlrequest      sUsbCtlRequest;
 459
 460    unsigned int                        int_interval;
 461    //
 462    // Variables to track resources for the BULK In Pipe
 463    //
 464    PRCB                        pRCBMem;
 465    PRCB                        apRCB[CB_MAX_RX_DESC];
 466    unsigned int                        cbRD;
 467    PRCB                        FirstRecvFreeList;
 468    PRCB                        LastRecvFreeList;
 469    unsigned int                        NumRecvFreeList;
 470    PRCB                        FirstRecvMngList;
 471    PRCB                        LastRecvMngList;
 472    unsigned int                        NumRecvMngList;
 473    BOOL                        bIsRxWorkItemQueued;
 474    BOOL                        bIsRxMngWorkItemQueued;
 475        unsigned long ulRcvRefCount; /* packets that have not returned back */
 476
 477    //
 478    //  Variables to track resources for the BULK Out Pipe
 479    //
 480
 481    PUSB_SEND_CONTEXT           apTD[CB_MAX_TX_DESC];
 482    unsigned int                        cbTD;
 483
 484    //
 485    //  Variables to track resources for the Interript In Pipe
 486    //
 487    INT_BUFFER                  intBuf;
 488    BOOL                        fKillEventPollingThread;
 489    BOOL                        bEventAvailable;
 490
 491
 492  //default config from file by user setting
 493    DEFAULT_CONFIG    config_file;
 494
 495
 496    //
 497    // Statistic for USB
 498    // protect with spinlock
 499    unsigned long                       ulBulkInPosted;
 500    unsigned long                       ulBulkInError;
 501    unsigned long                       ulBulkInContCRCError;
 502    unsigned long                       ulBulkInBytesRead;
 503
 504    unsigned long                       ulBulkOutPosted;
 505    unsigned long                       ulBulkOutError;
 506    unsigned long                       ulBulkOutContCRCError;
 507    unsigned long                       ulBulkOutBytesWrite;
 508
 509    unsigned long                       ulIntInPosted;
 510    unsigned long                       ulIntInError;
 511    unsigned long                       ulIntInContCRCError;
 512    unsigned long                       ulIntInBytesRead;
 513
 514
 515    // Version control
 516    WORD                        wFirmwareVersion;
 517    BYTE                        byLocalID;
 518    BYTE                        byRFType;
 519    BYTE                        byBBRxConf;
 520
 521
 522    BYTE                        byZoneType;
 523    BOOL                        bZoneRegExist;
 524
 525    BYTE                        byOriginalZonetype;
 526
 527    BOOL                        bLinkPass;          // link status: OK or fail
 528    BYTE                        abyCurrentNetAddr[ETH_ALEN];
 529    BYTE                        abyPermanentNetAddr[ETH_ALEN];
 530    // SW network address
 531        /* u8 abySoftwareNetAddr[ETH_ALEN]; */
 532    BOOL                        bExistSWNetAddr;
 533
 534    // Adapter statistics
 535    SStatCounter                scStatistic;
 536    // 802.11 counter
 537    SDot11Counters              s802_11Counter;
 538
 539    //
 540    // Maintain statistical debug info.
 541    //
 542    unsigned long                       packetsReceived;
 543    unsigned long                       packetsReceivedDropped;
 544    unsigned long                       packetsReceivedOverflow;
 545    unsigned long                       packetsSent;
 546    unsigned long                       packetsSentDropped;
 547    unsigned long                       SendContextsInUse;
 548    unsigned long                       RcvBuffersInUse;
 549
 550
 551    // 802.11 management
 552    SMgmtObject                 sMgmtObj;
 553
 554    QWORD                       qwCurrTSF;
 555    unsigned int                        cbBulkInMax;
 556    BOOL                        bPSRxBeacon;
 557
 558    // 802.11 MAC specific
 559    unsigned int                        uCurrRSSI;
 560    BYTE                        byCurrSQ;
 561
 562
 563    //Antenna Diversity
 564    BOOL                        bTxRxAntInv;
 565    DWORD                       dwRxAntennaSel;
 566    DWORD                       dwTxAntennaSel;
 567    BYTE                        byAntennaCount;
 568    BYTE                        byRxAntennaMode;
 569    BYTE                        byTxAntennaMode;
 570    BYTE                        byRadioCtl;
 571    BYTE                        bHWRadioOff;
 572
 573    //SQ3 functions for antenna diversity
 574    struct timer_list           TimerSQ3Tmax1;
 575    struct timer_list           TimerSQ3Tmax2;
 576    struct timer_list           TimerSQ3Tmax3;
 577
 578    BOOL                        bDiversityRegCtlON;
 579    BOOL                        bDiversityEnable;
 580    unsigned long                       ulDiversityNValue;
 581    unsigned long                       ulDiversityMValue;
 582    BYTE                        byTMax;
 583    BYTE                        byTMax2;
 584    BYTE                        byTMax3;
 585    unsigned long                       ulSQ3TH;
 586
 587    unsigned long                       uDiversityCnt;
 588    BYTE                        byAntennaState;
 589    unsigned long                       ulRatio_State0;
 590    unsigned long                       ulRatio_State1;
 591    unsigned long                       ulSQ3_State0;
 592    unsigned long                       ulSQ3_State1;
 593
 594    unsigned long                       aulSQ3Val[MAX_RATE];
 595    unsigned long                       aulPktNum[MAX_RATE];
 596
 597        /* IFS & Cw */
 598        unsigned int uSIFS;  /* Current SIFS */
 599        unsigned int uDIFS;  /* Current DIFS */
 600        unsigned int uEIFS;  /* Current EIFS */
 601        unsigned int uSlot;  /* Current SlotTime */
 602        unsigned int uCwMin; /* Current CwMin */
 603        unsigned int uCwMax; /* CwMax is fixed on 1023 */
 604
 605    // PHY parameter
 606    BYTE                        bySIFS;
 607    BYTE                        byDIFS;
 608    BYTE                        byEIFS;
 609    BYTE                        bySlot;
 610    BYTE                        byCWMaxMin;
 611
 612    // Rate
 613    VIA_BB_TYPE                 byBBType; //0: 11A, 1:11B, 2:11G
 614    VIA_PKT_TYPE                byPacketType; //0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate)
 615    WORD                        wBasicRate;
 616    BYTE                        byACKRate;
 617    BYTE                        byTopOFDMBasicRate;
 618    BYTE                        byTopCCKBasicRate;
 619
 620
 621    DWORD                       dwAotoRateTxOkCnt;
 622    DWORD                       dwAotoRateTxFailCnt;
 623    DWORD                       dwErrorRateThreshold[13];
 624    DWORD                       dwTPTable[MAX_RATE];
 625    BYTE                        abyEEPROM[EEP_MAX_CONTEXT_SIZE];  //DWORD alignment
 626
 627    BYTE                        byMinChannel;
 628    BYTE                        byMaxChannel;
 629    unsigned int                        uConnectionRate;
 630
 631    BYTE                        byPreambleType;
 632    BYTE                        byShortPreamble;
 633    // CARD_PHY_TYPE
 634    BYTE                        eConfigPHYMode;
 635
 636    // For RF Power table
 637    BYTE                        byCCKPwr;
 638    BYTE                        byOFDMPwrG;
 639    BYTE                        byOFDMPwrA;
 640    BYTE                        byCurPwr;
 641    BYTE                        abyCCKPwrTbl[14];
 642    BYTE                        abyOFDMPwrTbl[14];
 643    BYTE                        abyOFDMAPwrTbl[42];
 644
 645    WORD                        wCurrentRate;
 646    WORD                        wRTSThreshold;
 647    WORD                        wFragmentationThreshold;
 648    BYTE                        byShortRetryLimit;
 649    BYTE                        byLongRetryLimit;
 650    CARD_OP_MODE                eOPMode;
 651    BOOL                        bBSSIDFilter;
 652    WORD                        wMaxTransmitMSDULifetime;
 653    BYTE                        abyBSSID[ETH_ALEN];
 654    BYTE                        abyDesireBSSID[ETH_ALEN];
 655    WORD                        wCTSDuration;       // update while speed change
 656    WORD                        wACKDuration;       // update while speed change
 657    WORD                        wRTSTransmitLen;    // update while speed change
 658    BYTE                        byRTSServiceField;  // update while speed change
 659    BYTE                        byRTSSignalField;   // update while speed change
 660
 661    DWORD                       dwMaxReceiveLifetime;       // dot11MaxReceiveLifetime
 662
 663    BOOL                        bCCK;
 664    BOOL                        bEncryptionEnable;
 665    BOOL                        bLongHeader;
 666    BOOL                        bSoftwareGenCrcErr;
 667    BOOL                        bShortSlotTime;
 668    BOOL                        bProtectMode;
 669    BOOL                        bNonERPPresent;
 670    BOOL                        bBarkerPreambleMd;
 671
 672    BYTE                        byERPFlag;
 673    WORD                        wUseProtectCntDown;
 674
 675    BOOL                        bRadioControlOff;
 676    BOOL                        bRadioOff;
 677
 678    // Power save
 679    BOOL                        bEnablePSMode;
 680    WORD                        wListenInterval;
 681    BOOL                        bPWBitOn;
 682    WMAC_POWER_MODE             ePSMode;
 683    unsigned long                       ulPSModeWaitTx;
 684    BOOL                        bPSModeTxBurst;
 685
 686    // Beacon releated
 687    WORD                    wSeqCounter;
 688    BOOL                    bBeaconBufReady;
 689    BOOL                    bBeaconSent;
 690    BOOL                    bFixRate;
 691    BYTE                    byCurrentCh;
 692    unsigned int                    uScanTime;
 693
 694    CMD_STATE               eCommandState;
 695
 696    CMD_CODE                eCommand;
 697    BOOL                    bBeaconTx;
 698    BYTE                    byScanBBType;
 699
 700    BOOL                    bStopBeacon;
 701    BOOL                    bStopDataPkt;
 702    BOOL                    bStopTx0Pkt;
 703    unsigned int                    uAutoReConnectTime;
 704    unsigned int                    uIsroamingTime;
 705
 706    // 802.11 counter
 707
 708    CMD_ITEM                eCmdQueue[CMD_Q_SIZE];
 709    unsigned int                    uCmdDequeueIdx;
 710    unsigned int                    uCmdEnqueueIdx;
 711    unsigned int                    cbFreeCmdQueue;
 712    BOOL                    bCmdRunning;
 713    BOOL                    bCmdClear;
 714    BOOL                    bNeedRadioOFF;
 715
 716    BOOL                    bEnableRoaming;
 717    BOOL                    bIsRoaming;
 718    BOOL                    bFastRoaming;
 719    BYTE                    bSameBSSMaxNum;
 720    BYTE                    bSameBSSCurNum;
 721    BOOL                    bRoaming;
 722    BOOL                    b11hEable;
 723    unsigned long                   ulTxPower;
 724
 725    // Encryption
 726    NDIS_802_11_WEP_STATUS  eEncryptionStatus;
 727    BOOL                    bTransmitKey;
 728
 729//mike add :save old Encryption
 730    NDIS_802_11_WEP_STATUS  eOldEncryptionStatus;
 731
 732    SKeyManagement          sKey;
 733    DWORD                   dwIVCounter;
 734
 735
 736    RC4Ext                  SBox;
 737    BYTE                    abyPRNG[WLAN_WEPMAX_KEYLEN+3];
 738    BYTE                    byKeyIndex;
 739
 740    BOOL                    bAES;
 741    BYTE                    byCntMeasure;
 742
 743    unsigned int                    uKeyLength;
 744    BYTE                    abyKey[WLAN_WEP232_KEYLEN];
 745
 746    // for AP mode
 747    unsigned int                    uAssocCount;
 748    BOOL                    bMoreData;
 749
 750    // QoS
 751    BOOL                    bGrpAckPolicy;
 752
 753
 754    BYTE                    byAutoFBCtrl;
 755
 756    BOOL                    bTxMICFail;
 757    BOOL                    bRxMICFail;
 758
 759
 760    // For Update BaseBand VGA Gain Offset
 761    BOOL                    bUpdateBBVGA;
 762    unsigned int                    uBBVGADiffCount;
 763    BYTE                    byBBVGANew;
 764    BYTE                    byBBVGACurrent;
 765    BYTE                    abyBBVGA[BB_VGA_LEVEL];
 766    signed long                    ldBmThreshold[BB_VGA_LEVEL];
 767
 768    BYTE                    byBBPreEDRSSI;
 769    BYTE                    byBBPreEDIndex;
 770
 771
 772    BOOL                    bRadioCmd;
 773    DWORD                   dwDiagRefCount;
 774
 775    // For FOE Tuning
 776    BYTE                    byFOETuning;
 777
 778    // For Auto Power Tunning
 779
 780    BYTE                    byAutoPwrTunning;
 781
 782    // BaseBand Loopback Use
 783    BYTE                    byBBCR4d;
 784    BYTE                    byBBCRc9;
 785    BYTE                    byBBCR88;
 786    BYTE                    byBBCR09;
 787
 788    // command timer
 789    struct timer_list       sTimerCommand;
 790
 791     struct timer_list       sTimerTxData;
 792     unsigned long                       nTxDataTimeCout;
 793     BOOL  fTxDataInSleep;
 794     BOOL  IsTxDataTrigger;
 795
 796    BOOL  fWPA_Authened;           //is WPA/WPA-PSK or WPA2/WPA2-PSK authen??
 797    BYTE            byReAssocCount;   //mike add:re-association retry times!
 798    BYTE            byLinkWaitCount;
 799
 800    SEthernetHeader         sTxEthHeader;
 801    SEthernetHeader         sRxEthHeader;
 802    BYTE                    abyBroadcastAddr[ETH_ALEN];
 803    BYTE                    abySNAP_RFC1042[ETH_ALEN];
 804    BYTE                    abySNAP_Bridgetunnel[ETH_ALEN];
 805
 806    // Pre-Authentication & PMK cache
 807    SPMKID                  gsPMKID;
 808    SPMKIDCandidateEvent    gsPMKIDCandidate;
 809
 810
 811    // for 802.11h
 812    BOOL                    b11hEnable;
 813
 814    BOOL                    bChannelSwitch;
 815    BYTE                    byNewChannel;
 816    BYTE                    byChannelSwitchCount;
 817
 818    //WPA supplicant daemon
 819        struct net_device       *wpadev;
 820        BOOL                    bWPADEVUp;
 821    struct sk_buff          *skb;
 822    //--
 823
 824#ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
 825        BOOL                 bwextstep0;
 826        BOOL                 bwextstep1;
 827        BOOL                 bwextstep2;
 828        BOOL                 bwextstep3;
 829        BOOL                 bWPASuppWextEnabled;
 830#endif
 831
 832#ifdef HOSTAP
 833    // user space daemon: hostapd, is used for HOSTAP
 834        BOOL                    bEnableHostapd;
 835        BOOL                    bEnable8021x;
 836        BOOL                    bEnableHostWEP;
 837        struct net_device       *apdev;
 838        int (*tx_80211)(struct sk_buff *skb, struct net_device *dev);
 839#endif
 840    unsigned int                    uChannel;
 841
 842        struct iw_statistics    wstats;         // wireless stats
 843    BOOL                    bCommit;
 844
 845} DEVICE_INFO, *PSDevice;
 846
 847
 848
 849
 850#define EnqueueRCB(_Head, _Tail, _RCB)                  \
 851{                                                       \
 852    if (!_Head) {                                       \
 853        _Head = _RCB;                                   \
 854    }                                                   \
 855    else {                                              \
 856        _Tail->Next = _RCB;                             \
 857    }                                                   \
 858    _RCB->Next = NULL;                                  \
 859    _Tail = _RCB;                                       \
 860}
 861
 862#define DequeueRCB(Head, Tail)                          \
 863{                                                       \
 864    PRCB   RCB = Head;                                  \
 865    if (!RCB->Next) {                                   \
 866        Tail = NULL;                                    \
 867    }                                                   \
 868    Head = RCB->Next;                                   \
 869}
 870
 871
 872#define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) {   \
 873    if ((uVar) >= ((uModulo) - 1))                  \
 874        (uVar) = 0;                                 \
 875    else                                            \
 876        (uVar)++;                                   \
 877}
 878
 879
 880#define fMP_RESET_IN_PROGRESS               0x00000001
 881#define fMP_DISCONNECTED                    0x00000002
 882#define fMP_HALT_IN_PROGRESS                0x00000004
 883#define fMP_SURPRISE_REMOVED                0x00000008
 884#define fMP_RECV_LOOKASIDE                  0x00000010
 885#define fMP_INIT_IN_PROGRESS                0x00000020
 886#define fMP_SEND_SIDE_RESOURCE_ALLOCATED    0x00000040
 887#define fMP_RECV_SIDE_RESOURCE_ALLOCATED    0x00000080
 888#define fMP_POST_READS                      0x00000100
 889#define fMP_POST_WRITES                     0x00000200
 890#define fMP_CONTROL_READS                   0x00000400
 891#define fMP_CONTROL_WRITES                  0x00000800
 892
 893#define MP_SET_FLAG(_M, _F)             ((_M)->Flags |= (_F))
 894#define MP_CLEAR_FLAG(_M, _F)            ((_M)->Flags &= ~(_F))
 895#define MP_TEST_FLAGS(_M, _F)            (((_M)->Flags & (_F)) == (_F))
 896
 897#define MP_IS_READY(_M)        (((_M)->Flags & \
 898                                 (fMP_DISCONNECTED | fMP_RESET_IN_PROGRESS | fMP_HALT_IN_PROGRESS | fMP_INIT_IN_PROGRESS | fMP_SURPRISE_REMOVED)) == 0)
 899
 900/*---------------------  Export Functions  --------------------------*/
 901
 902/* BOOL device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb,
 903 *                       unsigned int uNodeIndex);
 904 */
 905BOOL device_alloc_frag_buf(PSDevice pDevice, PSDeFragControlBlock pDeF);
 906
 907#endif
 908