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