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