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