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