linux/drivers/staging/rtl8192e/rtl8192e/rtl_core.h
<<
>>
Prefs
   1/******************************************************************************
   2 * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
   3 *
   4 * Based on the r8180 driver, which is:
   5 * Copyright 2004-2005 Andrea Merello <andrea.merello@gmail.com>, et al.
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under the terms of version 2 of the GNU General Public License as
   8 * published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful, but WITHOUT
  11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  13 * more details.
  14 *
  15 * The full GNU General Public License is included in this distribution in the
  16 * file called LICENSE.
  17 *
  18 * Contact Information:
  19 * wlanfae <wlanfae@realtek.com>
  20 *****************************************************************************/
  21
  22#ifndef _RTL_CORE_H
  23#define _RTL_CORE_H
  24
  25#include <linux/module.h>
  26#include <linux/kernel.h>
  27#include <linux/ioport.h>
  28#include <linux/sched.h>
  29#include <linux/types.h>
  30#include <linux/interrupt.h>
  31#include <linux/slab.h>
  32#include <linux/netdevice.h>
  33#include <linux/pci.h>
  34#include <linux/etherdevice.h>
  35#include <linux/delay.h>
  36#include <linux/rtnetlink.h>
  37#include <linux/wireless.h>
  38#include <linux/timer.h>
  39#include <linux/proc_fs.h>
  40#include <linux/if_arp.h>
  41#include <linux/random.h>
  42#include <linux/io.h>
  43
  44/* Need this defined before including local include files */
  45#define DRV_NAME "rtl819xE"
  46
  47#include "../rtllib.h"
  48
  49#include "../dot11d.h"
  50
  51#include "r8192E_firmware.h"
  52#include "r8192E_hw.h"
  53
  54#include "r8190P_def.h"
  55#include "r8192E_dev.h"
  56
  57#include "rtl_eeprom.h"
  58#include "rtl_ps.h"
  59#include "rtl_pci.h"
  60#include "rtl_cam.h"
  61
  62#define DRV_COPYRIGHT           \
  63        "Copyright(c) 2008 - 2010 Realsil Semiconductor Corporation"
  64#define DRV_AUTHOR  "<wlanfae@realtek.com>"
  65#define DRV_VERSION  "0014.0401.2010"
  66
  67#define IS_HARDWARE_TYPE_8192SE(_priv)          \
  68        (((struct r8192_priv *)rtllib_priv(dev))->card_8192 == NIC_8192SE)
  69
  70#define RTL_PCI_DEVICE(vend, dev, cfg) \
  71        .vendor = (vend), .device = (dev), \
  72        .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, \
  73        .driver_data = (kernel_ulong_t)&(cfg)
  74
  75#define TOTAL_CAM_ENTRY         32
  76#define CAM_CONTENT_COUNT       8
  77
  78#define HAL_HW_PCI_REVISION_ID_8192PCIE         0x01
  79#define HAL_HW_PCI_REVISION_ID_8192SE   0x10
  80
  81#define RTL819X_DEFAULT_RF_TYPE         RF_1T2R
  82
  83#define RTLLIB_WATCH_DOG_TIME           2000
  84
  85#define MAX_DEV_ADDR_SIZE               8  /*support till 64 bit bus width OS*/
  86#define MAX_FIRMWARE_INFORMATION_SIZE   32
  87#define MAX_802_11_HEADER_LENGTH        (40 + MAX_FIRMWARE_INFORMATION_SIZE)
  88#define ENCRYPTION_MAX_OVERHEAD         128
  89#define MAX_FRAGMENT_COUNT              8
  90#define MAX_TRANSMIT_BUFFER_SIZE        \
  91        (1600 + (MAX_802_11_HEADER_LENGTH + ENCRYPTION_MAX_OVERHEAD) *  \
  92         MAX_FRAGMENT_COUNT)
  93
  94#define CMDPACKET_FRAG_SIZE (4 * (MAX_TRANSMIT_BUFFER_SIZE / 4) - 8)
  95
  96#define DEFAULT_FRAG_THRESHOLD  2342U
  97#define MIN_FRAG_THRESHOLD      256U
  98#define DEFAULT_BEACONINTERVAL  0x64U
  99
 100#define DEFAULT_RETRY_RTS       7
 101#define DEFAULT_RETRY_DATA      7
 102
 103#define PHY_RSSI_SLID_WIN_MAX                   100
 104
 105#define TxBBGainTableLength                     37
 106#define CCKTxBBGainTableLength                  23
 107
 108#define CHANNEL_PLAN_LEN                        10
 109#define sCrcLng                                 4
 110
 111#define NIC_SEND_HANG_THRESHOLD_NORMAL          4
 112#define NIC_SEND_HANG_THRESHOLD_POWERSAVE       8
 113
 114#define MAX_TX_QUEUE                            9
 115
 116#define MAX_RX_QUEUE                            1
 117
 118#define MAX_RX_COUNT                            64
 119#define MAX_TX_QUEUE_COUNT                      9
 120
 121extern int hwwep;
 122
 123enum nic_t {
 124        NIC_UNKNOWN     = 0,
 125        NIC_8192E       = 1,
 126        NIC_8190P       = 2,
 127        NIC_8192SE      = 4,
 128        NIC_8192CE      = 5,
 129        NIC_8192CU      = 6,
 130        NIC_8192DE      = 7,
 131        NIC_8192DU      = 8,
 132};
 133
 134enum rt_eeprom_type {
 135        EEPROM_93C46,
 136        EEPROM_93C56,
 137};
 138
 139enum dcmg_txcmd_op {
 140        TXCMD_TXRA_HISTORY_CTRL         = 0xFF900000,
 141        TXCMD_RESET_TX_PKT_BUFF         = 0xFF900001,
 142        TXCMD_RESET_RX_PKT_BUFF         = 0xFF900002,
 143        TXCMD_SET_TX_DURATION           = 0xFF900003,
 144        TXCMD_SET_RX_RSSI               = 0xFF900004,
 145        TXCMD_SET_TX_PWR_TRACKING       = 0xFF900005,
 146        TXCMD_XXXX_CTRL,
 147};
 148
 149enum rt_rf_type_819xu {
 150        RF_TYPE_MIN = 0,
 151        RF_8225,
 152        RF_8256,
 153        RF_8258,
 154        RF_6052 = 4,
 155        RF_PSEUDO_11N = 5,
 156};
 157
 158enum rt_customer_id {
 159        RT_CID_DEFAULT    = 0,
 160        RT_CID_8187_ALPHA0      = 1,
 161        RT_CID_8187_SERCOMM_PS  = 2,
 162        RT_CID_8187_HW_LED      = 3,
 163        RT_CID_8187_NETGEAR     = 4,
 164        RT_CID_WHQL          = 5,
 165        RT_CID_819x_CAMEO       = 6,
 166        RT_CID_819x_RUNTOP      = 7,
 167        RT_CID_819x_Senao       = 8,
 168        RT_CID_TOSHIBA    = 9,
 169        RT_CID_819x_Netcore     = 10,
 170        RT_CID_Nettronix        = 11,
 171        RT_CID_DLINK        = 12,
 172        RT_CID_PRONET      = 13,
 173        RT_CID_COREGA      = 14,
 174        RT_CID_819x_ALPHA       = 15,
 175        RT_CID_819x_Sitecom     = 16,
 176        RT_CID_CCX            = 17,
 177        RT_CID_819x_Lenovo      = 18,
 178        RT_CID_819x_QMI  = 19,
 179        RT_CID_819x_Edimax_Belkin = 20,
 180        RT_CID_819x_Sercomm_Belkin = 21,
 181        RT_CID_819x_CAMEO1 = 22,
 182        RT_CID_819x_MSI = 23,
 183        RT_CID_819x_Acer = 24,
 184        RT_CID_819x_HP  = 27,
 185        RT_CID_819x_CLEVO = 28,
 186        RT_CID_819x_Arcadyan_Belkin = 29,
 187        RT_CID_819x_SAMSUNG = 30,
 188        RT_CID_819x_WNC_COREGA = 31,
 189};
 190
 191enum reset_type {
 192        RESET_TYPE_NORESET = 0x00,
 193        RESET_TYPE_NORMAL = 0x01,
 194        RESET_TYPE_SILENT = 0x02
 195};
 196
 197struct rt_stats {
 198        unsigned long rxrdu;
 199        unsigned long rxok;
 200        unsigned long rxdatacrcerr;
 201        unsigned long rxmgmtcrcerr;
 202        unsigned long rxcrcerrmin;
 203        unsigned long rxcrcerrmid;
 204        unsigned long rxcrcerrmax;
 205        unsigned long received_rate_histogram[4][32];
 206        unsigned long received_preamble_GI[2][32];
 207        unsigned long numpacket_matchbssid;
 208        unsigned long numpacket_toself;
 209        unsigned long num_process_phyinfo;
 210        unsigned long numqry_phystatus;
 211        unsigned long numqry_phystatusCCK;
 212        unsigned long numqry_phystatusHT;
 213        unsigned long received_bwtype[5];
 214        unsigned long rxoverflow;
 215        unsigned long rxint;
 216        unsigned long ints;
 217        unsigned long shints;
 218        unsigned long txoverflow;
 219        unsigned long txbeokint;
 220        unsigned long txbkokint;
 221        unsigned long txviokint;
 222        unsigned long txvookint;
 223        unsigned long txbeaconokint;
 224        unsigned long txbeaconerr;
 225        unsigned long txmanageokint;
 226        unsigned long txcmdpktokint;
 227        unsigned long txbytesmulticast;
 228        unsigned long txbytesbroadcast;
 229        unsigned long txbytesunicast;
 230        unsigned long rxbytesunicast;
 231        unsigned long txretrycount;
 232        u8      last_packet_rate;
 233        unsigned long slide_signal_strength[100];
 234        unsigned long slide_evm[100];
 235        unsigned long   slide_rssi_total;
 236        unsigned long slide_evm_total;
 237        long signal_strength;
 238        long signal_quality;
 239        long last_signal_strength_inpercent;
 240        long    recv_signal_power;
 241        u8 rx_rssi_percentage[4];
 242        u8 rx_evm_percentage[2];
 243        long rxSNRdB[4];
 244        u32 Slide_Beacon_pwdb[100];
 245        u32 Slide_Beacon_Total;
 246        u32     CurrentShowTxate;
 247};
 248
 249struct channel_access_setting {
 250        u16 SIFS_Timer;
 251        u16 DIFS_Timer;
 252        u16 SlotTimeTimer;
 253        u16 EIFS_Timer;
 254        u16 CWminIndex;
 255        u16 CWmaxIndex;
 256};
 257
 258struct init_gain {
 259        u8      xaagccore1;
 260        u8      xbagccore1;
 261        u8      xcagccore1;
 262        u8      xdagccore1;
 263        u8      cca;
 264
 265};
 266
 267struct tx_ring {
 268        u32 *desc;
 269        u8 nStuckCount;
 270        struct tx_ring *next;
 271} __packed;
 272
 273struct rtl8192_tx_ring {
 274        struct tx_desc *desc;
 275        dma_addr_t dma;
 276        unsigned int idx;
 277        unsigned int entries;
 278        struct sk_buff_head queue;
 279};
 280
 281
 282
 283struct rtl819x_ops {
 284        enum nic_t nic_type;
 285        void (*get_eeprom_size)(struct net_device *dev);
 286        void (*init_adapter_variable)(struct net_device *dev);
 287        void (*init_before_adapter_start)(struct net_device *dev);
 288        bool (*initialize_adapter)(struct net_device *dev);
 289        void (*link_change)(struct net_device *dev);
 290        void (*tx_fill_descriptor)(struct net_device *dev,
 291                                   struct tx_desc *tx_desc,
 292                                   struct cb_desc *cb_desc,
 293                                   struct sk_buff *skb);
 294        void (*tx_fill_cmd_descriptor)(struct net_device *dev,
 295                                       struct tx_desc_cmd *entry,
 296                                       struct cb_desc *cb_desc,
 297                                       struct sk_buff *skb);
 298        bool (*rx_query_status_descriptor)(struct net_device *dev,
 299                                           struct rtllib_rx_stats *stats,
 300                                           struct rx_desc *pdesc,
 301                                           struct sk_buff *skb);
 302        bool (*rx_command_packet_handler)(struct net_device *dev,
 303                                          struct sk_buff *skb,
 304                                          struct rx_desc *pdesc);
 305        void (*stop_adapter)(struct net_device *dev, bool reset);
 306        void (*update_ratr_table)(struct net_device *dev);
 307        void (*irq_enable)(struct net_device *dev);
 308        void (*irq_disable)(struct net_device *dev);
 309        void (*irq_clear)(struct net_device *dev);
 310        void (*rx_enable)(struct net_device *dev);
 311        void (*tx_enable)(struct net_device *dev);
 312        void (*interrupt_recognized)(struct net_device *dev,
 313                                     u32 *p_inta, u32 *p_intb);
 314        bool (*TxCheckStuckHandler)(struct net_device *dev);
 315        bool (*RxCheckStuckHandler)(struct net_device *dev);
 316};
 317
 318struct r8192_priv {
 319        struct pci_dev *pdev;
 320        struct pci_dev *bridge_pdev;
 321
 322        bool            bfirst_init;
 323        bool            bfirst_after_down;
 324        bool            initialized_at_probe;
 325        bool            being_init_adapter;
 326        bool            bDriverIsGoingToUnload;
 327
 328        int             irq;
 329        short   irq_enabled;
 330
 331        short   up;
 332        short   up_first_time;
 333        struct delayed_work             update_beacon_wq;
 334        struct delayed_work             watch_dog_wq;
 335        struct delayed_work             txpower_tracking_wq;
 336        struct delayed_work             rfpath_check_wq;
 337        struct delayed_work             gpio_change_rf_wq;
 338
 339        struct channel_access_setting ChannelAccessSetting;
 340
 341        struct rtl819x_ops                      *ops;
 342        struct rtllib_device                    *rtllib;
 343
 344        struct work_struct                              reset_wq;
 345
 346        struct log_int_8190 InterruptLog;
 347
 348        enum rt_customer_id CustomerID;
 349
 350
 351        enum rt_rf_type_819xu rf_chip;
 352        enum ht_channel_width CurrentChannelBW;
 353        struct bb_reg_definition PHYRegDef[4];
 354        struct rate_adaptive rate_adaptive;
 355
 356        enum acm_method AcmMethod;
 357
 358        struct rt_firmware                      *pFirmware;
 359        enum rtl819x_loopback LoopbackMode;
 360
 361        struct timer_list                       watch_dog_timer;
 362        struct timer_list                       fsync_timer;
 363        struct timer_list                       gpio_polling_timer;
 364
 365        spinlock_t                              irq_th_lock;
 366        spinlock_t                              tx_lock;
 367        spinlock_t                              rf_ps_lock;
 368        spinlock_t                              ps_lock;
 369
 370        struct sk_buff_head             skb_queue;
 371
 372        struct tasklet_struct           irq_rx_tasklet;
 373        struct tasklet_struct           irq_tx_tasklet;
 374        struct tasklet_struct           irq_prepare_beacon_tasklet;
 375
 376        struct mutex                            wx_mutex;
 377        struct mutex                            rf_mutex;
 378        struct mutex                            mutex;
 379
 380        struct rt_stats stats;
 381        struct iw_statistics                    wstats;
 382
 383        short (*rf_set_sens)(struct net_device *dev, short sens);
 384        u8 (*rf_set_chan)(struct net_device *dev, u8 ch);
 385
 386        struct rx_desc *rx_ring[MAX_RX_QUEUE];
 387        struct sk_buff  *rx_buf[MAX_RX_QUEUE][MAX_RX_COUNT];
 388        dma_addr_t      rx_ring_dma[MAX_RX_QUEUE];
 389        unsigned int    rx_idx[MAX_RX_QUEUE];
 390        int             rxringcount;
 391        u16             rxbuffersize;
 392
 393        u64             LastRxDescTSF;
 394
 395        u32             ReceiveConfig;
 396        u8              retry_data;
 397        u8              retry_rts;
 398        u16             rts;
 399
 400        struct rtl8192_tx_ring tx_ring[MAX_TX_QUEUE_COUNT];
 401        int              txringcount;
 402        atomic_t        tx_pending[0x10];
 403
 404        u16             ShortRetryLimit;
 405        u16             LongRetryLimit;
 406
 407        bool            bHwRadioOff;
 408        bool            blinked_ingpio;
 409        u8              polling_timer_on;
 410
 411        /**********************************************************/
 412
 413        enum card_type {
 414                PCI, MINIPCI,
 415                CARDBUS, USB
 416        } card_type;
 417
 418        struct work_struct qos_activate;
 419
 420        short   promisc;
 421
 422        short   chan;
 423        short   sens;
 424        short   max_sens;
 425
 426        u8 ScanDelay;
 427        bool ps_force;
 428
 429        u32 irq_mask[2];
 430
 431        u8 Rf_Mode;
 432        enum nic_t card_8192;
 433        u8 card_8192_version;
 434
 435        u8 rf_type;
 436        u8 IC_Cut;
 437        char nick[IW_ESSID_MAX_SIZE + 1];
 438        u8 check_roaming_cnt;
 439
 440        u32 SilentResetRxSlotIndex;
 441        u32 SilentResetRxStuckEvent[MAX_SILENT_RESET_RX_SLOT_NUM];
 442
 443        u16 basic_rate;
 444        u8 short_preamble;
 445        u8 dot11CurrentPreambleMode;
 446        u8 slot_time;
 447        u16 SifsTime;
 448
 449        bool AutoloadFailFlag;
 450
 451        short   epromtype;
 452        u16 eeprom_vid;
 453        u16 eeprom_did;
 454        u8 eeprom_CustomerID;
 455        u16 eeprom_ChannelPlan;
 456
 457        u8 EEPROMTxPowerLevelCCK[14];
 458        u8 EEPROMTxPowerLevelOFDM24G[14];
 459        u8 EEPROMRfACCKChnl1TxPwLevel[3];
 460        u8 EEPROMRfAOfdmChnlTxPwLevel[3];
 461        u8 EEPROMRfCCCKChnl1TxPwLevel[3];
 462        u8 EEPROMRfCOfdmChnlTxPwLevel[3];
 463        u16 EEPROMAntPwDiff;
 464        u8 EEPROMThermalMeter;
 465        u8 EEPROMCrystalCap;
 466
 467        u8 EEPROMLegacyHTTxPowerDiff;
 468
 469        u8 CrystalCap;
 470        u8 ThermalMeter[2];
 471
 472        u8 SwChnlInProgress;
 473        u8 SwChnlStage;
 474        u8 SwChnlStep;
 475        u8 SetBWModeInProgress;
 476
 477        u8 nCur40MhzPrimeSC;
 478
 479        u32 RfReg0Value[4];
 480        u8 NumTotalRFPath;
 481        bool brfpath_rxenable[4];
 482
 483        bool bTXPowerDataReadFromEEPORM;
 484
 485        u16 RegChannelPlan;
 486        u16 ChannelPlan;
 487
 488        bool RegRfOff;
 489        bool isRFOff;
 490        bool bInPowerSaveMode;
 491        u8 bHwRfOffAction;
 492
 493        bool RFChangeInProgress;
 494        bool SetRFPowerStateInProgress;
 495        bool bdisable_nic;
 496
 497        u8 DM_Type;
 498
 499        u8 CckPwEnl;
 500        u16 TSSI_13dBm;
 501        u32 Pwr_Track;
 502        u8 CCKPresentAttentuation_20Mdefault;
 503        u8 CCKPresentAttentuation_40Mdefault;
 504        s8 CCKPresentAttentuation_difference;
 505        s8 CCKPresentAttentuation;
 506        long undecorated_smoothed_pwdb;
 507
 508        u32 MCSTxPowerLevelOriginalOffset[6];
 509        u8 TxPowerLevelCCK[14];
 510        u8 TxPowerLevelCCK_A[14];
 511        u8 TxPowerLevelCCK_C[14];
 512        u8              TxPowerLevelOFDM24G[14];
 513        u8              TxPowerLevelOFDM24G_A[14];
 514        u8              TxPowerLevelOFDM24G_C[14];
 515        u8              LegacyHTTxPowerDiff;
 516        s8              RF_C_TxPwDiff;
 517        u8              AntennaTxPwDiff[3];
 518
 519        bool            bDynamicTxHighPower;
 520        bool            bDynamicTxLowPower;
 521        bool            bLastDTPFlag_High;
 522        bool            bLastDTPFlag_Low;
 523
 524        u8              rfa_txpowertrackingindex;
 525        u8              rfa_txpowertrackingindex_real;
 526        u8              rfa_txpowertracking_default;
 527        u8              rfc_txpowertrackingindex;
 528        u8              rfc_txpowertrackingindex_real;
 529        bool            btxpower_tracking;
 530        bool            bcck_in_ch14;
 531
 532        u8              txpower_count;
 533        bool            btxpower_trackingInit;
 534
 535        u8              OFDM_index[2];
 536        u8              CCK_index;
 537
 538        u8              Record_CCK_20Mindex;
 539        u8              Record_CCK_40Mindex;
 540
 541        struct init_gain initgain_backup;
 542        u8              DefaultInitialGain[4];
 543        bool            bis_any_nonbepkts;
 544        bool            bcurrent_turbo_EDCA;
 545        bool            bis_cur_rdlstate;
 546
 547        bool            bfsync_processing;
 548        u32             rate_record;
 549        u32             rateCountDiffRecord;
 550        u32             ContinueDiffCount;
 551        bool            bswitch_fsync;
 552        u8              framesync;
 553        u32             framesyncC34;
 554        u8              framesyncMonitor;
 555
 556        u32             reset_count;
 557
 558        enum reset_type ResetProgress;
 559        bool            bForcedSilentReset;
 560        bool            bDisableNormalResetCheck;
 561        u16             TxCounter;
 562        u16             RxCounter;
 563        bool            bResetInProgress;
 564        bool            force_reset;
 565        bool            force_lps;
 566
 567        bool            chan_forced;
 568
 569        u8              PwrDomainProtect;
 570        u8              H2CTxCmdSeq;
 571};
 572
 573extern const struct ethtool_ops rtl819x_ethtool_ops;
 574
 575u8 rtl92e_readb(struct net_device *dev, int x);
 576u32 rtl92e_readl(struct net_device *dev, int x);
 577u16 rtl92e_readw(struct net_device *dev, int x);
 578void rtl92e_writeb(struct net_device *dev, int x, u8 y);
 579void rtl92e_writew(struct net_device *dev, int x, u16 y);
 580void rtl92e_writel(struct net_device *dev, int x, u32 y);
 581
 582void force_pci_posting(struct net_device *dev);
 583
 584void rtl92e_rx_enable(struct net_device *);
 585void rtl92e_tx_enable(struct net_device *);
 586
 587void rtl92e_hw_sleep_wq(void *data);
 588void rtl92e_commit(struct net_device *dev);
 589
 590void rtl92e_check_rfctrl_gpio_timer(struct timer_list *t);
 591
 592void rtl92e_hw_wakeup_wq(void *data);
 593
 594void rtl92e_reset_desc_ring(struct net_device *dev);
 595void rtl92e_set_wireless_mode(struct net_device *dev, u8 wireless_mode);
 596void rtl92e_irq_enable(struct net_device *dev);
 597void rtl92e_config_rate(struct net_device *dev, u16 *rate_config);
 598void rtl92e_irq_disable(struct net_device *dev);
 599
 600void rtl92e_update_rx_pkt_timestamp(struct net_device *dev,
 601                                    struct rtllib_rx_stats *stats);
 602long rtl92e_translate_to_dbm(struct r8192_priv *priv, u8 signal_strength_index);
 603void rtl92e_update_rx_statistics(struct r8192_priv *priv,
 604                                 struct rtllib_rx_stats *pprevious_stats);
 605u8 rtl92e_evm_db_to_percent(s8 value);
 606u8 rtl92e_rx_db_to_percent(s8 antpower);
 607void rtl92e_copy_mpdu_stats(struct rtllib_rx_stats *psrc_stats,
 608                            struct rtllib_rx_stats *ptarget_stats);
 609bool rtl92e_enable_nic(struct net_device *dev);
 610bool rtl92e_disable_nic(struct net_device *dev);
 611
 612bool rtl92e_set_rf_state(struct net_device *dev,
 613                         enum rt_rf_power_state StateToSet,
 614                         RT_RF_CHANGE_SOURCE ChangeSource);
 615#endif
 616