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