staging: vt6655: mac80211 conversion: add new key functions
[firefly-linux-kernel-4.4.55.git] / drivers / staging / vt6655 / 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/types.h>
34 #include <linux/mm.h>
35 #include <linux/errno.h>
36 #include <linux/ioport.h>
37 #include <linux/pci.h>
38 #include <linux/kernel.h>
39 #include <linux/netdevice.h>
40 #include <linux/etherdevice.h>
41 #include <linux/skbuff.h>
42 #include <linux/delay.h>
43 #include <linux/timer.h>
44 #include <linux/slab.h>
45 #include <linux/interrupt.h>
46 #include <linux/string.h>
47 #include <linux/wait.h>
48 #include <linux/if_arp.h>
49 #include <linux/sched.h>
50 #include <linux/io.h>
51 #include <linux/if.h>
52 #include <linux/crc32.h>
53 #include <linux/uaccess.h>
54 #include <linux/proc_fs.h>
55 #include <linux/inetdevice.h>
56 #include <linux/reboot.h>
57 #include <linux/ethtool.h>
58 /* Include Wireless Extension definition and check version - Jean II */
59 #include <net/mac80211.h>
60 #include <linux/wireless.h>
61 #include <net/iw_handler.h>     /* New driver API */
62
63 #ifndef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
64 #define WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
65 #endif
66
67 /* device specific */
68
69 #include "device_cfg.h"
70 #include "ttype.h"
71 #include "80211hdr.h"
72 #include "tether.h"
73 #include "wmgr.h"
74 #include "wcmd.h"
75 #include "mib.h"
76 #include "srom.h"
77 #include "rc4.h"
78 #include "desc.h"
79 #include "key.h"
80 #include "mac.h"
81
82 /*---------------------  Export Definitions -------------------------*/
83
84 #define MAC_MAX_CONTEXT_REG     (256+128)
85
86 #define MAX_MULTICAST_ADDRESS_NUM       32
87 #define MULTICAST_ADDRESS_LIST_SIZE     (MAX_MULTICAST_ADDRESS_NUM * ETH_ALEN)
88
89 #define DUPLICATE_RX_CACHE_LENGTH       5
90
91 #define NUM_KEY_ENTRY                   11
92
93 #define TX_WEP_NONE                     0
94 #define TX_WEP_OTF                      1
95 #define TX_WEP_SW                       2
96 #define TX_WEP_SWOTP                    3
97 #define TX_WEP_OTPSW                    4
98 #define TX_WEP_SW232                    5
99
100 #define KEYSEL_WEP40                    0
101 #define KEYSEL_WEP104                   1
102 #define KEYSEL_TKIP                     2
103 #define KEYSEL_CCMP                     3
104
105 #define AUTO_FB_NONE            0
106 #define AUTO_FB_0               1
107 #define AUTO_FB_1               2
108
109 #define FB_RATE0                0
110 #define FB_RATE1                1
111
112 /* Antenna Mode */
113 #define ANT_A                   0
114 #define ANT_B                   1
115 #define ANT_DIVERSITY           2
116 #define ANT_RXD_TXA             3
117 #define ANT_RXD_TXB             4
118 #define ANT_UNKNOWN             0xFF
119
120 #define MAXCHECKHANGCNT         4
121
122 #define BB_VGA_LEVEL            4
123 #define BB_VGA_CHANGE_THRESHOLD 16
124
125 #ifndef RUN_AT
126 #define RUN_AT(x)                       (jiffies+(x))
127 #endif
128
129 /* DMA related */
130 #define RESERV_AC0DMA                   4
131
132 /* BUILD OBJ mode */
133
134 #define AVAIL_TD(p, q)  ((p)->sOpts.nTxDescs[(q)] - ((p)->iTDUsed[(q)]))
135
136 #define NUM                             64
137
138 #define PRIVATE_Message                 0
139
140 /*---------------------  Export Types  ------------------------------*/
141
142 #define PRINT_K(p, args...)             \
143 do {                                    \
144         if (PRIVATE_Message)            \
145                 printk(p, ##args);      \
146 } while (0)
147
148 /* 0:11A 1:11B 2:11G */
149 typedef enum _VIA_BB_TYPE
150 {
151         BB_TYPE_11A = 0,
152         BB_TYPE_11B,
153         BB_TYPE_11G
154 } VIA_BB_TYPE, *PVIA_BB_TYPE;
155
156 /* 0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate) */
157 typedef enum _VIA_PKT_TYPE
158 {
159         PK_TYPE_11A = 0,
160         PK_TYPE_11B,
161         PK_TYPE_11GB,
162         PK_TYPE_11GA
163 } VIA_PKT_TYPE, *PVIA_PKT_TYPE;
164
165 typedef enum __device_msg_level {
166         MSG_LEVEL_ERR = 0,      /* Errors that will cause abnormal operation. */
167         MSG_LEVEL_NOTICE = 1,   /* Some errors need users to be notified. */
168         MSG_LEVEL_INFO = 2,     /* Normal message. */
169         MSG_LEVEL_VERBOSE = 3,  /* Will report all trival errors. */
170         MSG_LEVEL_DEBUG = 4     /* Only for debug purpose. */
171 } DEVICE_MSG_LEVEL, *PDEVICE_MSG_LEVEL;
172
173 /* NDIS related */
174 #define MAX_BSSIDINFO_4_PMKID   16
175 #define MAX_PMKIDLIST           5
176 /* Flags for PMKID Candidate list structure */
177 #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED     0x01
178
179 /* PMKID Structures */
180 typedef unsigned char NDIS_802_11_PMKID_VALUE[16];
181
182 typedef enum _NDIS_802_11_WEP_STATUS {
183         Ndis802_11WEPEnabled,
184         Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
185         Ndis802_11WEPDisabled,
186         Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
187         Ndis802_11WEPKeyAbsent,
188         Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
189         Ndis802_11WEPNotSupported,
190         Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
191         Ndis802_11Encryption2Enabled,
192         Ndis802_11Encryption2KeyAbsent,
193         Ndis802_11Encryption3Enabled,
194         Ndis802_11Encryption3KeyAbsent
195 } NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
196         NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
197
198 typedef enum _NDIS_802_11_STATUS_TYPE {
199         Ndis802_11StatusType_Authentication,
200         Ndis802_11StatusType_MediaStreamMode,
201         Ndis802_11StatusType_PMKID_CandidateList,
202         Ndis802_11StatusTypeMax    /* defined as an upper bound */
203 } NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE;
204
205 /* Added new types for PMKID Candidate lists. */
206 struct pmkid_candidate {
207         NDIS_802_11_MAC_ADDRESS BSSID;
208         unsigned long Flags;
209 };
210
211 typedef struct _BSSID_INFO {
212         NDIS_802_11_MAC_ADDRESS BSSID;
213         NDIS_802_11_PMKID_VALUE PMKID;
214 } BSSID_INFO, *PBSSID_INFO;
215
216 typedef struct tagSPMKID {
217         unsigned long Length;
218         unsigned long BSSIDInfoCount;
219         BSSID_INFO BSSIDInfo[MAX_BSSIDINFO_4_PMKID];
220 } SPMKID, *PSPMKID;
221
222 typedef struct tagSPMKIDCandidateEvent {
223         NDIS_802_11_STATUS_TYPE     StatusType;
224         unsigned long Version;       /* Version of the structure */
225         unsigned long NumCandidates; /* No. of pmkid candidates */
226         struct pmkid_candidate CandidateList[MAX_PMKIDLIST];
227 } SPMKIDCandidateEvent, *PSPMKIDCandidateEvent;
228
229 /* 802.11h related */
230 #define MAX_QUIET_COUNT     8
231
232 typedef struct tagSQuietControl {
233         bool bEnable;
234         unsigned long dwStartTime;
235         unsigned char byPeriod;
236         unsigned short wDuration;
237 } SQuietControl, *PSQuietControl;
238
239 typedef struct __chip_info_tbl {
240         CHIP_TYPE   chip_id;
241         char *name;
242         int         io_size;
243         int         nTxQueue;
244         u32         flags;
245 } CHIP_INFO, *PCHIP_INFO;
246
247 typedef enum {
248         OWNED_BY_HOST = 0,
249         OWNED_BY_NIC = 1
250 } DEVICE_OWNER_TYPE, *PDEVICE_OWNER_TYPE;
251
252 /* The receive duplicate detection cache entry */
253 typedef struct tagSCacheEntry {
254         unsigned short wFmSequence;
255         unsigned char abyAddr2[ETH_ALEN];
256 } SCacheEntry, *PSCacheEntry;
257
258 typedef struct tagSCache {
259 /* The receive cache is updated circularly. The next entry to be written is
260  * indexed by the "InPtr".
261  */
262         unsigned int uInPtr;         /* Place to use next */
263         SCacheEntry     asCacheEntry[DUPLICATE_RX_CACHE_LENGTH];
264 } SCache, *PSCache;
265
266 #define CB_MAX_RX_FRAG                 64
267 /* DeFragment Control Block, used for collecting fragments prior to reassembly */
268 typedef struct tagSDeFragControlBlock {
269         unsigned short wSequence;
270         unsigned short wFragNum;
271         unsigned char abyAddr2[ETH_ALEN];
272         unsigned int uLifetime;
273         struct sk_buff *skb;
274         unsigned char *pbyRxBuffer;
275         unsigned int cbFrameLength;
276         bool bInUse;
277 } SDeFragControlBlock, *PSDeFragControlBlock;
278
279 /* flags for options */
280 #define     DEVICE_FLAGS_IP_ALIGN        0x00000001UL
281 #define     DEVICE_FLAGS_PREAMBLE_TYPE   0x00000002UL
282 #define     DEVICE_FLAGS_OP_MODE         0x00000004UL
283 #define     DEVICE_FLAGS_PS_MODE         0x00000008UL
284 #define         DEVICE_FLAGS_80211h_MODE         0x00000010UL
285 #define         DEVICE_FLAGS_DiversityANT        0x00000020UL
286
287 /* flags for driver status */
288 #define     DEVICE_FLAGS_OPENED          0x00010000UL
289 #define     DEVICE_FLAGS_WOL_ENABLED     0x00080000UL
290 /* flags for capabilities */
291 #define     DEVICE_FLAGS_TX_ALIGN        0x01000000UL
292 #define     DEVICE_FLAGS_HAVE_CAM        0x02000000UL
293 #define     DEVICE_FLAGS_FLOW_CTRL       0x04000000UL
294
295 /* flags for MII status */
296 #define     DEVICE_LINK_FAIL             0x00000001UL
297 #define     DEVICE_SPEED_10              0x00000002UL
298 #define     DEVICE_SPEED_100             0x00000004UL
299 #define     DEVICE_SPEED_1000            0x00000008UL
300 #define     DEVICE_DUPLEX_FULL           0x00000010UL
301 #define     DEVICE_AUTONEG_ENABLE        0x00000020UL
302 #define     DEVICE_FORCED_BY_EEPROM      0x00000040UL
303 /* for device_set_media_duplex */
304 #define     DEVICE_LINK_CHANGE           0x00000001UL
305
306 typedef struct __device_opt {
307         int         nRxDescs0;          /* Number of RX descriptors0 */
308         int         nRxDescs1;          /* Number of RX descriptors1 */
309         int         nTxDescs[2];        /* Number of TX descriptors 0, 1 */
310         int         int_works;          /* interrupt limits */
311         int         rts_thresh;         /* rts threshold */
312         int         frag_thresh;
313         int         data_rate;
314         int         channel_num;
315         int         short_retry;
316         int         long_retry;
317         int         bbp_type;
318         u32         flags;
319 } OPTIONS, *POPTIONS;
320
321 struct vnt_private {
322         struct pci_dev *pcid;
323         /* mac80211 */
324         struct ieee80211_hw *hw;
325         struct ieee80211_vif *vif;
326         unsigned long key_entry_inuse;
327 /* netdev */
328         struct net_device *dev;
329
330 /* dma addr, rx/tx pool */
331         dma_addr_t                  pool_dma;
332         dma_addr_t                  rd0_pool_dma;
333         dma_addr_t                  rd1_pool_dma;
334
335         dma_addr_t                  td0_pool_dma;
336         dma_addr_t                  td1_pool_dma;
337
338         dma_addr_t                  tx_bufs_dma0;
339         dma_addr_t                  tx_bufs_dma1;
340         dma_addr_t                  tx_beacon_dma;
341
342         unsigned char *tx0_bufs;
343         unsigned char *tx1_bufs;
344         unsigned char *tx_beacon_bufs;
345
346         CHIP_TYPE                   chip_id;
347
348         void __iomem                *PortOffset;
349         unsigned long dwIsr;
350         u32                         memaddr;
351         u32                         ioaddr;
352         u32                         io_size;
353
354         unsigned char byRevId;
355         unsigned char byRxMode;
356         unsigned short SubSystemID;
357         unsigned short SubVendorID;
358
359         spinlock_t                  lock;
360
361         int                         nTxQueues;
362         volatile int                iTDUsed[TYPE_MAXTD];
363
364         volatile PSTxDesc           apCurrTD[TYPE_MAXTD];
365         volatile PSTxDesc           apTailTD[TYPE_MAXTD];
366
367         volatile PSTxDesc           apTD0Rings;
368         volatile PSTxDesc           apTD1Rings;
369
370         volatile PSRxDesc           aRD0Ring;
371         volatile PSRxDesc           aRD1Ring;
372         volatile PSRxDesc           pCurrRD[TYPE_MAXRD];
373         SCache                      sDupRxCache;
374
375         SDeFragControlBlock         sRxDFCB[CB_MAX_RX_FRAG];
376         unsigned int    cbDFCB;
377         unsigned int    cbFreeDFCB;
378         unsigned int    uCurrentDFCBIdx;
379
380         OPTIONS                     sOpts;
381
382         u32                         flags;
383
384         u32                         rx_buf_sz;
385         u8 rx_rate;
386         int                         multicast_limit;
387
388         pid_t                   MLMEThr_pid;
389         struct completion       notify;
390         struct semaphore        mlme_semaphore;
391
392         u32                         rx_bytes;
393
394         /* Version control */
395         unsigned char byLocalID;
396         unsigned char byRFType;
397
398         unsigned char byMaxPwrLevel;
399         unsigned char byZoneType;
400         bool bZoneRegExist;
401         unsigned char byOriginalZonetype;
402         unsigned char abyMacContext[MAC_MAX_CONTEXT_REG];
403         unsigned char abyCurrentNetAddr[ETH_ALEN];
404         bool bLinkPass;          /* link status: OK or fail */
405
406         /* Adapter statistics */
407         SStatCounter                scStatistic;
408         /* 802.11 counter */
409         SDot11Counters              s802_11Counter;
410
411         /* 802.11 management */
412         PSMgmtObject                pMgmt;
413         SMgmtObject                 sMgmtObj;
414
415         /* 802.11 MAC specific */
416         unsigned int    uCurrRSSI;
417         unsigned char byCurrSQ;
418
419         unsigned long dwTxAntennaSel;
420         unsigned long dwRxAntennaSel;
421         unsigned char byAntennaCount;
422         unsigned char byRxAntennaMode;
423         unsigned char byTxAntennaMode;
424         bool bTxRxAntInv;
425
426         unsigned char *pbyTmpBuff;
427         unsigned int    uSIFS;    /* Current SIFS */
428         unsigned int    uDIFS;    /* Current DIFS */
429         unsigned int    uEIFS;    /* Current EIFS */
430         unsigned int    uSlot;    /* Current SlotTime */
431         unsigned int    uCwMin;   /* Current CwMin */
432         unsigned int    uCwMax;   /* CwMax is fixed on 1023. */
433         /* PHY parameter */
434         unsigned char bySIFS;
435         unsigned char byDIFS;
436         unsigned char byEIFS;
437         unsigned char bySlot;
438         unsigned char byCWMaxMin;
439         CARD_PHY_TYPE           eCurrentPHYType;
440
441         VIA_BB_TYPE             byBBType; /* 0:11A, 1:11B, 2:11G */
442         VIA_PKT_TYPE            byPacketType; /*
443                                                * 0:11a,1:11b,2:11gb (only CCK
444                                                * in BasicRate), 3:11ga (OFDM in
445                                                * Basic Rate)
446                                                */
447         unsigned short wBasicRate;
448         unsigned char byACKRate;
449         unsigned char byTopOFDMBasicRate;
450         unsigned char byTopCCKBasicRate;
451
452         unsigned char byMinChannel;
453         unsigned char byMaxChannel;
454         unsigned int    uConnectionRate;
455
456         unsigned char byPreambleType;
457         unsigned char byShortPreamble;
458
459         unsigned short wCurrentRate;
460         unsigned short wRTSThreshold;
461         unsigned short wFragmentationThreshold;
462         unsigned char byShortRetryLimit;
463         unsigned char byLongRetryLimit;
464         enum nl80211_iftype op_mode;
465         unsigned char byOpMode;
466         bool bBSSIDFilter;
467         unsigned short wMaxTransmitMSDULifetime;
468         unsigned char abyBSSID[ETH_ALEN];
469         unsigned char abyDesireBSSID[ETH_ALEN];
470         unsigned short wACKDuration;            /* update while speed change */
471         unsigned short wRTSTransmitLen;         /* update while speed change */
472         unsigned char byRTSServiceField;        /* update while speed change */
473         unsigned char byRTSSignalField;         /* update while speed change */
474
475         unsigned long dwMaxReceiveLifetime;     /* dot11MaxReceiveLifetime */
476
477         bool bEncryptionEnable;
478         bool bLongHeader;
479         bool bShortSlotTime;
480         bool bProtectMode;
481         bool bNonERPPresent;
482         bool bBarkerPreambleMd;
483
484         unsigned char byERPFlag;
485         unsigned short wUseProtectCntDown;
486
487         bool bRadioControlOff;
488         bool bRadioOff;
489         bool bEnablePSMode;
490         unsigned short wListenInterval;
491         bool bPWBitOn;
492         WMAC_POWER_MODE         ePSMode;
493
494         /* GPIO Radio Control */
495         unsigned char byRadioCtl;
496         unsigned char byGPIO;
497         bool bHWRadioOff;
498         bool bPrvActive4RadioOFF;
499         bool bGPIOBlockRead;
500
501         /* Beacon related */
502         unsigned short wSeqCounter;
503         unsigned short wBCNBufLen;
504         bool bBeaconBufReady;
505         bool bBeaconSent;
506         bool bIsBeaconBufReadySet;
507         unsigned int    cbBeaconBufReadySetCnt;
508         bool bFixRate;
509         unsigned char byCurrentCh;
510         unsigned int    uScanTime;
511
512         CMD_STATE               eCommandState;
513
514         CMD_CODE                eCommand;
515         bool bBeaconTx;
516
517         bool bStopBeacon;
518         bool bStopDataPkt;
519         bool bStopTx0Pkt;
520         unsigned int    uAutoReConnectTime;
521
522         /* 802.11 counter */
523
524         CMD_ITEM                eCmdQueue[CMD_Q_SIZE];
525         unsigned int    uCmdDequeueIdx;
526         unsigned int    uCmdEnqueueIdx;
527         unsigned int    cbFreeCmdQueue;
528         bool bCmdRunning;
529         bool bCmdClear;
530
531         bool bRoaming;
532         unsigned char abyIPAddr[4];
533
534         unsigned long ulTxPower;
535         NDIS_802_11_WEP_STATUS  eEncryptionStatus;
536         bool bTransmitKey;
537         NDIS_802_11_WEP_STATUS  eOldEncryptionStatus;
538
539         SKeyManagement          sKey;
540         unsigned long dwIVCounter;
541
542         u64 qwPacketNumber; /* For CCMP and TKIP as TSC(6 bytes) */
543         unsigned int    uCurrentWEPMode;
544
545         RC4Ext                  SBox;
546         unsigned char abyPRNG[WLAN_WEPMAX_KEYLEN+3];
547         unsigned char byKeyIndex;
548         unsigned int    uKeyLength;
549         unsigned char abyKey[WLAN_WEP232_KEYLEN];
550
551         bool bAES;
552         unsigned char byCntMeasure;
553
554         /* for AP mode */
555         unsigned int    uAssocCount;
556         bool bMoreData;
557
558         /* QoS */
559         bool bGrpAckPolicy;
560
561         /* for OID_802_11_ASSOCIATION_INFORMATION */
562         bool bAssocInfoSet;
563
564         unsigned char byAutoFBCtrl;
565
566         bool bTxMICFail;
567         bool bRxMICFail;
568
569         unsigned int    uRATEIdx;
570
571         /* For Update BaseBand VGA Gain Offset */
572         bool bUpdateBBVGA;
573         unsigned int    uBBVGADiffCount;
574         unsigned char byBBVGANew;
575         unsigned char byBBVGACurrent;
576         unsigned char abyBBVGA[BB_VGA_LEVEL];
577         long                    ldBmThreshold[BB_VGA_LEVEL];
578
579         unsigned char byBBPreEDRSSI;
580         unsigned char byBBPreEDIndex;
581
582         bool bRadioCmd;
583         unsigned long dwDiagRefCount;
584
585         /* For FOE Tuning */
586         unsigned char byFOETuning;
587
588         /* For Auto Power Tunning */
589         unsigned char byAutoPwrTunning;
590         short                   sPSetPointCCK;
591         short                   sPSetPointOFDMG;
592         short                   sPSetPointOFDMA;
593         long                    lPFormulaOffset;
594         short                   sPThreshold;
595         char                    cAdjustStep;
596         char                    cMinTxAGC;
597
598         /* For RF Power table */
599         unsigned char byCCKPwr;
600         unsigned char byOFDMPwrG;
601         unsigned char byCurPwr;
602         char     byCurPwrdBm;
603         unsigned char abyCCKPwrTbl[CB_MAX_CHANNEL_24G+1];
604         unsigned char abyOFDMPwrTbl[CB_MAX_CHANNEL+1];
605         char    abyCCKDefaultPwr[CB_MAX_CHANNEL_24G+1];
606         char    abyOFDMDefaultPwr[CB_MAX_CHANNEL+1];
607         char    abyRegPwr[CB_MAX_CHANNEL+1];
608         char    abyLocalPwr[CB_MAX_CHANNEL+1];
609
610         /* BaseBand Loopback Use */
611         unsigned char byBBCR4d;
612         unsigned char byBBCRc9;
613         unsigned char byBBCR88;
614         unsigned char byBBCR09;
615
616         /* command timer */
617         struct timer_list       sTimerCommand;
618         struct timer_list       sTimerTxData;
619         unsigned long nTxDataTimeCout;
620         bool fTxDataInSleep;
621         bool IsTxDataTrigger;
622
623 #ifdef WPA_SM_Transtatus
624         bool fWPA_Authened;     /* is WPA/WPA-PSK or WPA2/WPA2-PSK authen?? */
625 #endif
626         unsigned char byReAssocCount;
627         unsigned char byLinkWaitCount;
628
629         unsigned char abyNodeName[17];
630
631         bool bDiversityRegCtlON;
632         bool bDiversityEnable;
633         unsigned long ulDiversityNValue;
634         unsigned long ulDiversityMValue;
635         unsigned char byTMax;
636         unsigned char byTMax2;
637         unsigned char byTMax3;
638         unsigned long ulSQ3TH;
639
640         /* ANT diversity */
641         unsigned long uDiversityCnt;
642         unsigned char byAntennaState;
643         unsigned long ulRatio_State0;
644         unsigned long ulRatio_State1;
645
646         /* SQ3 functions for antenna diversity */
647         struct timer_list           TimerSQ3Tmax1;
648         struct timer_list           TimerSQ3Tmax2;
649         struct timer_list           TimerSQ3Tmax3;
650
651         unsigned long uNumSQ3[MAX_RATE];
652         unsigned short wAntDiversityMaxRate;
653
654         SEthernetHeader         sTxEthHeader;
655         SEthernetHeader         sRxEthHeader;
656         unsigned char abyBroadcastAddr[ETH_ALEN];
657         unsigned char abySNAP_RFC1042[ETH_ALEN];
658         unsigned char abySNAP_Bridgetunnel[ETH_ALEN];
659         unsigned char abyEEPROM[EEP_MAX_CONTEXT_SIZE]; /* unsigned long alignment */
660         /* Pre-Authentication & PMK cache */
661         SPMKID                  gsPMKID;
662         SPMKIDCandidateEvent    gsPMKIDCandidate;
663
664         /* for 802.11h */
665         bool b11hEnable;
666         unsigned char abyCountryCode[3];
667         /* for 802.11h DFS */
668         unsigned int    uNumOfMeasureEIDs;
669         PWLAN_IE_MEASURE_REQ    pCurrMeasureEID;
670         bool bMeasureInProgress;
671         unsigned char byOrgChannel;
672         unsigned char byOrgRCR;
673         unsigned long dwOrgMAR0;
674         unsigned long dwOrgMAR4;
675         unsigned char byBasicMap;
676         unsigned char byCCAFraction;
677         unsigned char abyRPIs[8];
678         unsigned long dwRPIs[8];
679         bool bChannelSwitch;
680         unsigned char byNewChannel;
681         unsigned char byChannelSwitchCount;
682         bool bQuietEnable;
683         bool bEnableFirstQuiet;
684         unsigned char byQuietStartCount;
685         unsigned int    uQuietEnqueue;
686         unsigned long dwCurrentQuietEndTime;
687         SQuietControl           sQuiet[MAX_QUIET_COUNT];
688         /* for 802.11h TPC */
689         bool bCountryInfo5G;
690         bool bCountryInfo24G;
691
692         unsigned short wBeaconInterval;
693
694         /* WPA supplicant deamon */
695         struct net_device       *wpadev;
696         bool bWPADEVUp;
697         struct sk_buff          *skb;
698 #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
699         unsigned int    bwextcount;
700         bool bWPASuppWextEnabled;
701 #endif
702
703 #ifdef HOSTAP
704         /* user space daemon: hostapd, is used for HOSTAP */
705         bool bEnableHostapd;
706         bool bEnable8021x;
707         bool bEnableHostWEP;
708         struct net_device       *apdev;
709         int (*tx_80211)(struct sk_buff *skb, struct net_device *dev);
710 #endif
711         unsigned int    uChannel;
712         bool bMACSuspend;
713
714         struct iw_statistics    wstats;         /* wireless stats */
715         bool bCommit;
716 };
717
718 static inline bool device_get_ip(struct vnt_private *pInfo)
719 {
720         struct in_device *in_dev = (struct in_device *)pInfo->dev->ip_ptr;
721         struct in_ifaddr *ifa;
722
723         if (in_dev != NULL) {
724                 ifa = (struct in_ifaddr *)in_dev->ifa_list;
725                 if (ifa != NULL) {
726                         memcpy(pInfo->abyIPAddr, &ifa->ifa_address, 4);
727                         return true;
728                 }
729         }
730         return false;
731 }
732
733 static inline PDEVICE_RD_INFO alloc_rd_info(void)
734 {
735         return kzalloc(sizeof(DEVICE_RD_INFO), GFP_ATOMIC);
736 }
737
738 static inline PDEVICE_TD_INFO alloc_td_info(void)
739 {
740         return kzalloc(sizeof(DEVICE_TD_INFO), GFP_ATOMIC);
741 }
742
743 /*---------------------  Export Functions  --------------------------*/
744
745 bool device_dma0_xmit(struct vnt_private *pDevice,
746                       struct sk_buff *skb, unsigned int uNodeIndex);
747 bool device_alloc_frag_buf(struct vnt_private *pDevice,
748                            PSDeFragControlBlock pDeF);
749 int Config_FileOperation(struct vnt_private *pDevice,
750                          bool fwrite, unsigned char *Parameter);
751 #endif