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