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