device.h revision 115cac2e7a8d06aa347bf233b4cb94828eb0509a
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) */
169struct 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 */
180struct 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 */
193typedef 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 */
205typedef 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 */
213typedef 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) */
221typedef 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
231typedef 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 */
244typedef unsigned char   NDIS_802_11_PMKID_VALUE[16];
245
246typedef 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
263typedef 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 */
272typedef struct _PMKID_CANDIDATE {
273    NDIS_802_11_MAC_ADDRESS BSSID;
274    unsigned long Flags;
275} PMKID_CANDIDATE, *PPMKID_CANDIDATE;
276
277typedef struct _BSSID_INFO
278{
279    NDIS_802_11_MAC_ADDRESS BSSID;
280    NDIS_802_11_PMKID_VALUE PMKID;
281} BSSID_INFO, *PBSSID_INFO;
282
283typedef struct tagSPMKID {
284    unsigned long Length;
285    unsigned long BSSIDInfoCount;
286    BSSID_INFO BSSIDInfo[MAX_BSSIDINFO_4_PMKID];
287} SPMKID, *PSPMKID;
288
289typedef 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
299typedef 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 */
307typedef struct tagSCacheEntry{
308    u16        wFmSequence;
309    u8        abyAddr2[ETH_ALEN];
310    u16        wFrameCtl;
311} SCacheEntry, *PSCacheEntry;
312
313typedef 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 */
325typedef 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
363typedef 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
377struct 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 tasklet_struct ReadWorkItem;
388	struct tasklet_struct RxMngWorkItem;
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 wRTSThreshold;
583	u16 wFragmentationThreshold;
584	u8 byShortRetryLimit;
585	u8 byLongRetryLimit;
586	CARD_OP_MODE eOPMode;
587	int bBSSIDFilter;
588	u16 wMaxTransmitMSDULifetime;
589	u8 abyBSSID[ETH_ALEN];
590	u8 abyDesireBSSID[ETH_ALEN];
591
592	u32 dwMaxReceiveLifetime;  /* dot11MaxReceiveLifetime */
593
594	int bCCK;
595	int bEncryptionEnable;
596	int bLongHeader;
597	int bShortSlotTime;
598	int bProtectMode;
599	int bNonERPPresent;
600	int bBarkerPreambleMd;
601
602	u8 byERPFlag;
603	u16 wUseProtectCntDown;
604
605	int bRadioControlOff;
606	int bRadioOff;
607
608	/* Power save */
609	int bEnablePSMode;
610	u16 wListenInterval;
611	int bPWBitOn;
612	WMAC_POWER_MODE ePSMode;
613	unsigned long ulPSModeWaitTx;
614	int bPSModeTxBurst;
615
616	/* Beacon releated */
617	u16 wSeqCounter;
618	int bBeaconBufReady;
619	int bBeaconSent;
620	int bFixRate;
621	u8 byCurrentCh;
622	u32 uScanTime;
623
624	CMD_STATE eCommandState;
625
626	CMD_CODE eCommand;
627	int bBeaconTx;
628	u8 byScanBBType;
629
630	int bStopBeacon;
631	int bStopDataPkt;
632	int bStopTx0Pkt;
633	u32 uAutoReConnectTime;
634	u32 uIsroamingTime;
635
636	/* 802.11 counter */
637
638	CMD_ITEM eCmdQueue[CMD_Q_SIZE];
639	u32 uCmdDequeueIdx;
640	u32 uCmdEnqueueIdx;
641	u32 cbFreeCmdQueue;
642	int bCmdRunning;
643	int bCmdClear;
644	int bNeedRadioOFF;
645
646	int bEnableRoaming;
647	int bIsRoaming;
648	int bFastRoaming;
649	u8 bSameBSSMaxNum;
650	u8 bSameBSSCurNum;
651	int bRoaming;
652	int b11hEable;
653	unsigned long ulTxPower;
654
655	/* Encryption */
656	NDIS_802_11_WEP_STATUS eEncryptionStatus;
657	int  bTransmitKey;
658	NDIS_802_11_WEP_STATUS eOldEncryptionStatus;
659	SKeyManagement sKey;
660	u32 dwIVCounter;
661
662	RC4Ext SBox;
663	u8 abyPRNG[WLAN_WEPMAX_KEYLEN+3];
664	u8 byKeyIndex;
665
666	int bAES;
667
668	u32 uKeyLength;
669	u8 abyKey[WLAN_WEP232_KEYLEN];
670
671	/* for AP mode */
672	u32 uAssocCount;
673	int bMoreData;
674
675	/* QoS */
676	int bGrpAckPolicy;
677
678	u8 byAutoFBCtrl;
679
680	int bTxMICFail;
681	int bRxMICFail;
682
683	/* For Update BaseBand VGA Gain Offset */
684	int bUpdateBBVGA;
685	u32 uBBVGADiffCount;
686	u8 byBBVGANew;
687	u8 byBBVGACurrent;
688	u8 abyBBVGA[BB_VGA_LEVEL];
689	signed long ldBmThreshold[BB_VGA_LEVEL];
690
691	u8 byBBPreEDRSSI;
692	u8 byBBPreEDIndex;
693
694	int bRadioCmd;
695	u32 dwDiagRefCount;
696
697	/* For FOE Tuning */
698	u8  byFOETuning;
699
700	/* For Auto Power Tunning */
701	u8  byAutoPwrTunning;
702
703	/* BaseBand Loopback Use */
704	u8 byBBCR4d;
705	u8 byBBCRc9;
706	u8 byBBCR88;
707	u8 byBBCR09;
708
709	/* command timer */
710	struct timer_list sTimerCommand;
711
712	struct timer_list sTimerTxData;
713	unsigned long nTxDataTimeCout;
714	int fTxDataInSleep;
715	int IsTxDataTrigger;
716
717	int fWPA_Authened; /*is WPA/WPA-PSK or WPA2/WPA2-PSK authen?? */
718	u8 byReAssocCount;
719	u8 byLinkWaitCount;
720
721	struct ethhdr sTxEthHeader;
722	struct ethhdr sRxEthHeader;
723	u8 abyBroadcastAddr[ETH_ALEN];
724	u8 abySNAP_RFC1042[ETH_ALEN];
725	u8 abySNAP_Bridgetunnel[ETH_ALEN];
726
727	/* Pre-Authentication & PMK cache */
728	SPMKID gsPMKID;
729	SPMKIDCandidateEvent gsPMKIDCandidate;
730
731	/* for 802.11h */
732	int b11hEnable;
733
734	int bChannelSwitch;
735	u8 byNewChannel;
736	u8 byChannelSwitchCount;
737
738	/* WPA supplicant daemon */
739	int bWPADEVUp;
740	int bwextstep0;
741	int bwextstep1;
742	int bwextstep2;
743	int bwextstep3;
744	int bWPASuppWextEnabled;
745
746	/* user space daemon: hostapd, is used for HOSTAP */
747	int bEnableHostapd;
748	int bEnable8021x;
749	int bEnableHostWEP;
750	struct net_device *apdev;
751	int (*tx_80211)(struct sk_buff *skb, struct net_device *dev);
752
753	u32 uChannel;
754
755	struct iw_statistics wstats; /* wireless stats */
756
757	int bCommit;
758
759};
760
761#define EnqueueRCB(_Head, _Tail, _RCB)                  \
762{                                                       \
763    if (!_Head) {                                       \
764        _Head = _RCB;                                   \
765    }                                                   \
766    else {                                              \
767        _Tail->Next = _RCB;                             \
768    }                                                   \
769    _RCB->Next = NULL;                                  \
770    _Tail = _RCB;                                       \
771}
772
773#define DequeueRCB(Head, Tail)                          \
774{                                                       \
775    struct vnt_rcb *RCB = Head;                         \
776    if (!RCB->Next) {                                   \
777        Tail = NULL;                                    \
778    }                                                   \
779    Head = RCB->Next;                                   \
780}
781
782#define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) {   \
783    if ((uVar) >= ((uModulo) - 1))                  \
784        (uVar) = 0;                                 \
785    else                                            \
786        (uVar)++;                                   \
787}
788
789#define fMP_RESET_IN_PROGRESS               0x00000001
790#define fMP_DISCONNECTED                    0x00000002
791#define fMP_HALT_IN_PROGRESS                0x00000004
792#define fMP_SURPRISE_REMOVED                0x00000008
793#define fMP_RECV_LOOKASIDE                  0x00000010
794#define fMP_INIT_IN_PROGRESS                0x00000020
795#define fMP_SEND_SIDE_RESOURCE_ALLOCATED    0x00000040
796#define fMP_RECV_SIDE_RESOURCE_ALLOCATED    0x00000080
797#define fMP_POST_READS                      0x00000100
798#define fMP_POST_WRITES                     0x00000200
799#define fMP_CONTROL_READS                   0x00000400
800#define fMP_CONTROL_WRITES                  0x00000800
801
802#define MP_SET_FLAG(_M, _F)             ((_M)->Flags |= (_F))
803#define MP_CLEAR_FLAG(_M, _F)            ((_M)->Flags &= ~(_F))
804#define MP_TEST_FLAGS(_M, _F)            (((_M)->Flags & (_F)) == (_F))
805
806#define MP_IS_READY(_M)        (((_M)->Flags & \
807                                 (fMP_DISCONNECTED | fMP_RESET_IN_PROGRESS | fMP_HALT_IN_PROGRESS | fMP_INIT_IN_PROGRESS | fMP_SURPRISE_REMOVED)) == 0)
808
809int device_alloc_frag_buf(struct vnt_private *, PSDeFragControlBlock pDeF);
810
811#endif
812