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