linux/drivers/net/wireless/rt2x00/rt2x00.h
<<
>>
Prefs
   1/*
   2        Copyright (C) 2004 - 2008 rt2x00 SourceForge Project
   3        <http://rt2x00.serialmonkey.com>
   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
  16        along with this program; if not, write to the
  17        Free Software Foundation, Inc.,
  18        59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19 */
  20
  21/*
  22        Module: rt2x00
  23        Abstract: rt2x00 global information.
  24 */
  25
  26#ifndef RT2X00_H
  27#define RT2X00_H
  28
  29#include <linux/bitops.h>
  30#include <linux/skbuff.h>
  31#include <linux/workqueue.h>
  32#include <linux/firmware.h>
  33#include <linux/leds.h>
  34#include <linux/mutex.h>
  35#include <linux/etherdevice.h>
  36
  37#include <net/mac80211.h>
  38
  39#include "rt2x00debug.h"
  40#include "rt2x00leds.h"
  41#include "rt2x00reg.h"
  42#include "rt2x00queue.h"
  43
  44/*
  45 * Module information.
  46 */
  47#define DRV_VERSION     "2.2.1"
  48#define DRV_PROJECT     "http://rt2x00.serialmonkey.com"
  49
  50/*
  51 * Debug definitions.
  52 * Debug output has to be enabled during compile time.
  53 */
  54#define DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, __args...)     \
  55        printk(__kernlvl "%s -> %s: %s - " __msg,                       \
  56               wiphy_name((__dev)->hw->wiphy), __func__, __lvl, ##__args)
  57
  58#define DEBUG_PRINTK_PROBE(__kernlvl, __lvl, __msg, __args...)  \
  59        printk(__kernlvl "%s -> %s: %s - " __msg,               \
  60               KBUILD_MODNAME, __func__, __lvl, ##__args)
  61
  62#ifdef CONFIG_RT2X00_DEBUG
  63#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \
  64        DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, ##__args);
  65#else
  66#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \
  67        do { } while (0)
  68#endif /* CONFIG_RT2X00_DEBUG */
  69
  70/*
  71 * Various debug levels.
  72 * The debug levels PANIC and ERROR both indicate serious problems,
  73 * for this reason they should never be ignored.
  74 * The special ERROR_PROBE message is for messages that are generated
  75 * when the rt2x00_dev is not yet initialized.
  76 */
  77#define PANIC(__dev, __msg, __args...) \
  78        DEBUG_PRINTK_MSG(__dev, KERN_CRIT, "Panic", __msg, ##__args)
  79#define ERROR(__dev, __msg, __args...)  \
  80        DEBUG_PRINTK_MSG(__dev, KERN_ERR, "Error", __msg, ##__args)
  81#define ERROR_PROBE(__msg, __args...) \
  82        DEBUG_PRINTK_PROBE(KERN_ERR, "Error", __msg, ##__args)
  83#define WARNING(__dev, __msg, __args...) \
  84        DEBUG_PRINTK(__dev, KERN_WARNING, "Warning", __msg, ##__args)
  85#define NOTICE(__dev, __msg, __args...) \
  86        DEBUG_PRINTK(__dev, KERN_NOTICE, "Notice", __msg, ##__args)
  87#define INFO(__dev, __msg, __args...) \
  88        DEBUG_PRINTK(__dev, KERN_INFO, "Info", __msg, ##__args)
  89#define DEBUG(__dev, __msg, __args...) \
  90        DEBUG_PRINTK(__dev, KERN_DEBUG, "Debug", __msg, ##__args)
  91#define EEPROM(__dev, __msg, __args...) \
  92        DEBUG_PRINTK(__dev, KERN_DEBUG, "EEPROM recovery", __msg, ##__args)
  93
  94/*
  95 * Standard timing and size defines.
  96 * These values should follow the ieee80211 specifications.
  97 */
  98#define ACK_SIZE                14
  99#define IEEE80211_HEADER        24
 100#define PLCP                    48
 101#define BEACON                  100
 102#define PREAMBLE                144
 103#define SHORT_PREAMBLE          72
 104#define SLOT_TIME               20
 105#define SHORT_SLOT_TIME         9
 106#define SIFS                    10
 107#define PIFS                    ( SIFS + SLOT_TIME )
 108#define SHORT_PIFS              ( SIFS + SHORT_SLOT_TIME )
 109#define DIFS                    ( PIFS + SLOT_TIME )
 110#define SHORT_DIFS              ( SHORT_PIFS + SHORT_SLOT_TIME )
 111#define EIFS                    ( SIFS + DIFS + \
 112                                  (8 * (IEEE80211_HEADER + ACK_SIZE)) )
 113#define SHORT_EIFS              ( SIFS + SHORT_DIFS + \
 114                                  (8 * (IEEE80211_HEADER + ACK_SIZE)) )
 115
 116/*
 117 * Chipset identification
 118 * The chipset on the device is composed of a RT and RF chip.
 119 * The chipset combination is important for determining device capabilities.
 120 */
 121struct rt2x00_chip {
 122        u16 rt;
 123#define RT2460          0x0101
 124#define RT2560          0x0201
 125#define RT2570          0x1201
 126#define RT2561s         0x0301  /* Turbo */
 127#define RT2561          0x0302
 128#define RT2661          0x0401
 129#define RT2571          0x1300
 130
 131        u16 rf;
 132        u32 rev;
 133};
 134
 135/*
 136 * RF register values that belong to a particular channel.
 137 */
 138struct rf_channel {
 139        int channel;
 140        u32 rf1;
 141        u32 rf2;
 142        u32 rf3;
 143        u32 rf4;
 144};
 145
 146/*
 147 * Channel information structure
 148 */
 149struct channel_info {
 150        unsigned int flags;
 151#define GEOGRAPHY_ALLOWED       0x00000001
 152
 153        short tx_power1;
 154        short tx_power2;
 155};
 156
 157/*
 158 * Antenna setup values.
 159 */
 160struct antenna_setup {
 161        enum antenna rx;
 162        enum antenna tx;
 163};
 164
 165/*
 166 * Quality statistics about the currently active link.
 167 */
 168struct link_qual {
 169        /*
 170         * Statistics required for Link tuning.
 171         * For the average RSSI value we use the "Walking average" approach.
 172         * When adding RSSI to the average value the following calculation
 173         * is needed:
 174         *
 175         *        avg_rssi = ((avg_rssi * 7) + rssi) / 8;
 176         *
 177         * The advantage of this approach is that we only need 1 variable
 178         * to store the average in (No need for a count and a total).
 179         * But more importantly, normal average values will over time
 180         * move less and less towards newly added values this results
 181         * that with link tuning, the device can have a very good RSSI
 182         * for a few minutes but when the device is moved away from the AP
 183         * the average will not decrease fast enough to compensate.
 184         * The walking average compensates this and will move towards
 185         * the new values correctly allowing a effective link tuning.
 186         */
 187        int avg_rssi;
 188        int false_cca;
 189
 190        /*
 191         * Statistics required for Signal quality calculation.
 192         * For calculating the Signal quality we have to determine
 193         * the total number of success and failed RX and TX frames.
 194         * After that we also use the average RSSI value to help
 195         * determining the signal quality.
 196         * For the calculation we will use the following algorithm:
 197         *
 198         *         rssi_percentage = (avg_rssi * 100) / rssi_offset
 199         *         rx_percentage = (rx_success * 100) / rx_total
 200         *         tx_percentage = (tx_success * 100) / tx_total
 201         *         avg_signal = ((WEIGHT_RSSI * avg_rssi) +
 202         *                       (WEIGHT_TX * tx_percentage) +
 203         *                       (WEIGHT_RX * rx_percentage)) / 100
 204         *
 205         * This value should then be checked to not be greated then 100.
 206         */
 207        int rx_percentage;
 208        int rx_success;
 209        int rx_failed;
 210        int tx_percentage;
 211        int tx_success;
 212        int tx_failed;
 213#define WEIGHT_RSSI     20
 214#define WEIGHT_RX       40
 215#define WEIGHT_TX       40
 216};
 217
 218/*
 219 * Antenna settings about the currently active link.
 220 */
 221struct link_ant {
 222        /*
 223         * Antenna flags
 224         */
 225        unsigned int flags;
 226#define ANTENNA_RX_DIVERSITY    0x00000001
 227#define ANTENNA_TX_DIVERSITY    0x00000002
 228#define ANTENNA_MODE_SAMPLE     0x00000004
 229
 230        /*
 231         * Currently active TX/RX antenna setup.
 232         * When software diversity is used, this will indicate
 233         * which antenna is actually used at this time.
 234         */
 235        struct antenna_setup active;
 236
 237        /*
 238         * RSSI information for the different antenna's.
 239         * These statistics are used to determine when
 240         * to switch antenna when using software diversity.
 241         *
 242         *        rssi[0] -> Antenna A RSSI
 243         *        rssi[1] -> Antenna B RSSI
 244         */
 245        int rssi_history[2];
 246
 247        /*
 248         * Current RSSI average of the currently active antenna.
 249         * Similar to the avg_rssi in the link_qual structure
 250         * this value is updated by using the walking average.
 251         */
 252        int rssi_ant;
 253};
 254
 255/*
 256 * To optimize the quality of the link we need to store
 257 * the quality of received frames and periodically
 258 * optimize the link.
 259 */
 260struct link {
 261        /*
 262         * Link tuner counter
 263         * The number of times the link has been tuned
 264         * since the radio has been switched on.
 265         */
 266        u32 count;
 267
 268        /*
 269         * Quality measurement values.
 270         */
 271        struct link_qual qual;
 272
 273        /*
 274         * TX/RX antenna setup.
 275         */
 276        struct link_ant ant;
 277
 278        /*
 279         * Active VGC level
 280         */
 281        int vgc_level;
 282
 283        /*
 284         * Work structure for scheduling periodic link tuning.
 285         */
 286        struct delayed_work work;
 287};
 288
 289/*
 290 * Small helper macro to work with moving/walking averages.
 291 */
 292#define MOVING_AVERAGE(__avg, __val, __samples) \
 293        ( (((__avg) * ((__samples) - 1)) + (__val)) / (__samples) )
 294
 295/*
 296 * When we lack RSSI information return something less then -80 to
 297 * tell the driver to tune the device to maximum sensitivity.
 298 */
 299#define DEFAULT_RSSI    ( -128 )
 300
 301/*
 302 * Link quality access functions.
 303 */
 304static inline int rt2x00_get_link_rssi(struct link *link)
 305{
 306        if (link->qual.avg_rssi && link->qual.rx_success)
 307                return link->qual.avg_rssi;
 308        return DEFAULT_RSSI;
 309}
 310
 311static inline int rt2x00_get_link_ant_rssi(struct link *link)
 312{
 313        if (link->ant.rssi_ant && link->qual.rx_success)
 314                return link->ant.rssi_ant;
 315        return DEFAULT_RSSI;
 316}
 317
 318static inline void rt2x00_reset_link_ant_rssi(struct link *link)
 319{
 320        link->ant.rssi_ant = 0;
 321}
 322
 323static inline int rt2x00_get_link_ant_rssi_history(struct link *link,
 324                                                   enum antenna ant)
 325{
 326        if (link->ant.rssi_history[ant - ANTENNA_A])
 327                return link->ant.rssi_history[ant - ANTENNA_A];
 328        return DEFAULT_RSSI;
 329}
 330
 331static inline int rt2x00_update_ant_rssi(struct link *link, int rssi)
 332{
 333        int old_rssi = link->ant.rssi_history[link->ant.active.rx - ANTENNA_A];
 334        link->ant.rssi_history[link->ant.active.rx - ANTENNA_A] = rssi;
 335        return old_rssi;
 336}
 337
 338/*
 339 * Interface structure
 340 * Per interface configuration details, this structure
 341 * is allocated as the private data for ieee80211_vif.
 342 */
 343struct rt2x00_intf {
 344        /*
 345         * All fields within the rt2x00_intf structure
 346         * must be protected with a spinlock.
 347         */
 348        spinlock_t lock;
 349
 350        /*
 351         * BSS configuration. Copied from the structure
 352         * passed to us through the bss_info_changed()
 353         * callback funtion.
 354         */
 355        struct ieee80211_bss_conf conf;
 356
 357        /*
 358         * MAC of the device.
 359         */
 360        u8 mac[ETH_ALEN];
 361
 362        /*
 363         * BBSID of the AP to associate with.
 364         */
 365        u8 bssid[ETH_ALEN];
 366
 367        /*
 368         * Entry in the beacon queue which belongs to
 369         * this interface. Each interface has its own
 370         * dedicated beacon entry.
 371         */
 372        struct queue_entry *beacon;
 373
 374        /*
 375         * Actions that needed rescheduling.
 376         */
 377        unsigned int delayed_flags;
 378#define DELAYED_UPDATE_BEACON           0x00000001
 379#define DELAYED_CONFIG_ERP              0x00000002
 380#define DELAYED_LED_ASSOC               0x00000004
 381
 382        /*
 383         * Software sequence counter, this is only required
 384         * for hardware which doesn't support hardware
 385         * sequence counting.
 386         */
 387        spinlock_t seqlock;
 388        u16 seqno;
 389};
 390
 391static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif)
 392{
 393        return (struct rt2x00_intf *)vif->drv_priv;
 394}
 395
 396/**
 397 * struct hw_mode_spec: Hardware specifications structure
 398 *
 399 * Details about the supported modes, rates and channels
 400 * of a particular chipset. This is used by rt2x00lib
 401 * to build the ieee80211_hw_mode array for mac80211.
 402 *
 403 * @supported_bands: Bitmask contained the supported bands (2.4GHz, 5.2GHz).
 404 * @supported_rates: Rate types which are supported (CCK, OFDM).
 405 * @num_channels: Number of supported channels. This is used as array size
 406 *      for @tx_power_a, @tx_power_bg and @channels.
 407 * @channels: Device/chipset specific channel values (See &struct rf_channel).
 408 * @channels_info: Additional information for channels (See &struct channel_info).
 409 */
 410struct hw_mode_spec {
 411        unsigned int supported_bands;
 412#define SUPPORT_BAND_2GHZ       0x00000001
 413#define SUPPORT_BAND_5GHZ       0x00000002
 414
 415        unsigned int supported_rates;
 416#define SUPPORT_RATE_CCK        0x00000001
 417#define SUPPORT_RATE_OFDM       0x00000002
 418
 419        unsigned int num_channels;
 420        const struct rf_channel *channels;
 421        const struct channel_info *channels_info;
 422};
 423
 424/*
 425 * Configuration structure wrapper around the
 426 * mac80211 configuration structure.
 427 * When mac80211 configures the driver, rt2x00lib
 428 * can precalculate values which are equal for all
 429 * rt2x00 drivers. Those values can be stored in here.
 430 */
 431struct rt2x00lib_conf {
 432        struct ieee80211_conf *conf;
 433
 434        struct rf_channel rf;
 435        struct channel_info channel;
 436
 437        struct antenna_setup ant;
 438
 439        enum ieee80211_band band;
 440
 441        u32 basic_rates;
 442        u32 slot_time;
 443
 444        short sifs;
 445        short pifs;
 446        short difs;
 447        short eifs;
 448};
 449
 450/*
 451 * Configuration structure for erp settings.
 452 */
 453struct rt2x00lib_erp {
 454        int short_preamble;
 455        int cts_protection;
 456
 457        int ack_timeout;
 458        int ack_consume_time;
 459};
 460
 461/*
 462 * Configuration structure for hardware encryption.
 463 */
 464struct rt2x00lib_crypto {
 465        enum cipher cipher;
 466
 467        enum set_key_cmd cmd;
 468        const u8 *address;
 469
 470        u32 bssidx;
 471        u32 aid;
 472
 473        u8 key[16];
 474        u8 tx_mic[8];
 475        u8 rx_mic[8];
 476};
 477
 478/*
 479 * Configuration structure wrapper around the
 480 * rt2x00 interface configuration handler.
 481 */
 482struct rt2x00intf_conf {
 483        /*
 484         * Interface type
 485         */
 486        enum nl80211_iftype type;
 487
 488        /*
 489         * TSF sync value, this is dependant on the operation type.
 490         */
 491        enum tsf_sync sync;
 492
 493        /*
 494         * The MAC and BSSID addressess are simple array of bytes,
 495         * these arrays are little endian, so when sending the addressess
 496         * to the drivers, copy the it into a endian-signed variable.
 497         *
 498         * Note that all devices (except rt2500usb) have 32 bits
 499         * register word sizes. This means that whatever variable we
 500         * pass _must_ be a multiple of 32 bits. Otherwise the device
 501         * might not accept what we are sending to it.
 502         * This will also make it easier for the driver to write
 503         * the data to the device.
 504         */
 505        __le32 mac[2];
 506        __le32 bssid[2];
 507};
 508
 509/*
 510 * rt2x00lib callback functions.
 511 */
 512struct rt2x00lib_ops {
 513        /*
 514         * Interrupt handlers.
 515         */
 516        irq_handler_t irq_handler;
 517
 518        /*
 519         * Device init handlers.
 520         */
 521        int (*probe_hw) (struct rt2x00_dev *rt2x00dev);
 522        char *(*get_firmware_name) (struct rt2x00_dev *rt2x00dev);
 523        u16 (*get_firmware_crc) (const void *data, const size_t len);
 524        int (*load_firmware) (struct rt2x00_dev *rt2x00dev, const void *data,
 525                              const size_t len);
 526
 527        /*
 528         * Device initialization/deinitialization handlers.
 529         */
 530        int (*initialize) (struct rt2x00_dev *rt2x00dev);
 531        void (*uninitialize) (struct rt2x00_dev *rt2x00dev);
 532
 533        /*
 534         * queue initialization handlers
 535         */
 536        void (*init_rxentry) (struct rt2x00_dev *rt2x00dev,
 537                              struct queue_entry *entry);
 538        void (*init_txentry) (struct rt2x00_dev *rt2x00dev,
 539                              struct queue_entry *entry);
 540
 541        /*
 542         * Radio control handlers.
 543         */
 544        int (*set_device_state) (struct rt2x00_dev *rt2x00dev,
 545                                 enum dev_state state);
 546        int (*rfkill_poll) (struct rt2x00_dev *rt2x00dev);
 547        void (*link_stats) (struct rt2x00_dev *rt2x00dev,
 548                            struct link_qual *qual);
 549        void (*reset_tuner) (struct rt2x00_dev *rt2x00dev);
 550        void (*link_tuner) (struct rt2x00_dev *rt2x00dev);
 551
 552        /*
 553         * TX control handlers
 554         */
 555        void (*write_tx_desc) (struct rt2x00_dev *rt2x00dev,
 556                               struct sk_buff *skb,
 557                               struct txentry_desc *txdesc);
 558        int (*write_tx_data) (struct queue_entry *entry);
 559        void (*write_beacon) (struct queue_entry *entry);
 560        int (*get_tx_data_len) (struct rt2x00_dev *rt2x00dev,
 561                                struct sk_buff *skb);
 562        void (*kick_tx_queue) (struct rt2x00_dev *rt2x00dev,
 563                               const enum data_queue_qid queue);
 564
 565        /*
 566         * RX control handlers
 567         */
 568        void (*fill_rxdone) (struct queue_entry *entry,
 569                             struct rxdone_entry_desc *rxdesc);
 570
 571        /*
 572         * Configuration handlers.
 573         */
 574        int (*config_shared_key) (struct rt2x00_dev *rt2x00dev,
 575                                  struct rt2x00lib_crypto *crypto,
 576                                  struct ieee80211_key_conf *key);
 577        int (*config_pairwise_key) (struct rt2x00_dev *rt2x00dev,
 578                                    struct rt2x00lib_crypto *crypto,
 579                                    struct ieee80211_key_conf *key);
 580        void (*config_filter) (struct rt2x00_dev *rt2x00dev,
 581                               const unsigned int filter_flags);
 582        void (*config_intf) (struct rt2x00_dev *rt2x00dev,
 583                             struct rt2x00_intf *intf,
 584                             struct rt2x00intf_conf *conf,
 585                             const unsigned int flags);
 586#define CONFIG_UPDATE_TYPE              ( 1 << 1 )
 587#define CONFIG_UPDATE_MAC               ( 1 << 2 )
 588#define CONFIG_UPDATE_BSSID             ( 1 << 3 )
 589
 590        void (*config_erp) (struct rt2x00_dev *rt2x00dev,
 591                            struct rt2x00lib_erp *erp);
 592        void (*config) (struct rt2x00_dev *rt2x00dev,
 593                        struct rt2x00lib_conf *libconf,
 594                        const unsigned int flags);
 595#define CONFIG_UPDATE_PHYMODE           ( 1 << 1 )
 596#define CONFIG_UPDATE_CHANNEL           ( 1 << 2 )
 597#define CONFIG_UPDATE_TXPOWER           ( 1 << 3 )
 598#define CONFIG_UPDATE_ANTENNA           ( 1 << 4 )
 599#define CONFIG_UPDATE_SLOT_TIME         ( 1 << 5 )
 600#define CONFIG_UPDATE_BEACON_INT        ( 1 << 6 )
 601#define CONFIG_UPDATE_ALL               0xffff
 602};
 603
 604/*
 605 * rt2x00 driver callback operation structure.
 606 */
 607struct rt2x00_ops {
 608        const char *name;
 609        const unsigned int max_sta_intf;
 610        const unsigned int max_ap_intf;
 611        const unsigned int eeprom_size;
 612        const unsigned int rf_size;
 613        const unsigned int tx_queues;
 614        const struct data_queue_desc *rx;
 615        const struct data_queue_desc *tx;
 616        const struct data_queue_desc *bcn;
 617        const struct data_queue_desc *atim;
 618        const struct rt2x00lib_ops *lib;
 619        const struct ieee80211_ops *hw;
 620#ifdef CONFIG_RT2X00_LIB_DEBUGFS
 621        const struct rt2x00debug *debugfs;
 622#endif /* CONFIG_RT2X00_LIB_DEBUGFS */
 623};
 624
 625/*
 626 * rt2x00 device flags
 627 */
 628enum rt2x00_flags {
 629        /*
 630         * Device state flags
 631         */
 632        DEVICE_STATE_PRESENT,
 633        DEVICE_STATE_REGISTERED_HW,
 634        DEVICE_STATE_INITIALIZED,
 635        DEVICE_STATE_STARTED,
 636        DEVICE_STATE_STARTED_SUSPEND,
 637        DEVICE_STATE_ENABLED_RADIO,
 638        DEVICE_STATE_DISABLED_RADIO_HW,
 639
 640        /*
 641         * Driver requirements
 642         */
 643        DRIVER_REQUIRE_FIRMWARE,
 644        DRIVER_REQUIRE_BEACON_GUARD,
 645        DRIVER_REQUIRE_ATIM_QUEUE,
 646        DRIVER_REQUIRE_SCHEDULED,
 647        DRIVER_REQUIRE_DMA,
 648
 649        /*
 650         * Driver features
 651         */
 652        CONFIG_SUPPORT_HW_BUTTON,
 653        CONFIG_SUPPORT_HW_CRYPTO,
 654
 655        /*
 656         * Driver configuration
 657         */
 658        CONFIG_FRAME_TYPE,
 659        CONFIG_RF_SEQUENCE,
 660        CONFIG_EXTERNAL_LNA_A,
 661        CONFIG_EXTERNAL_LNA_BG,
 662        CONFIG_DOUBLE_ANTENNA,
 663        CONFIG_DISABLE_LINK_TUNING,
 664};
 665
 666/*
 667 * rt2x00 device structure.
 668 */
 669struct rt2x00_dev {
 670        /*
 671         * Device structure.
 672         * The structure stored in here depends on the
 673         * system bus (PCI or USB).
 674         * When accessing this variable, the rt2x00dev_{pci,usb}
 675         * macro's should be used for correct typecasting.
 676         */
 677        struct device *dev;
 678
 679        /*
 680         * Callback functions.
 681         */
 682        const struct rt2x00_ops *ops;
 683
 684        /*
 685         * IEEE80211 control structure.
 686         */
 687        struct ieee80211_hw *hw;
 688        struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS];
 689        enum ieee80211_band curr_band;
 690
 691        /*
 692         * rfkill structure for RF state switching support.
 693         * This will only be compiled in when required.
 694         */
 695#ifdef CONFIG_RT2X00_LIB_RFKILL
 696        unsigned long rfkill_state;
 697#define RFKILL_STATE_ALLOCATED          1
 698#define RFKILL_STATE_REGISTERED         2
 699        struct rfkill *rfkill;
 700        struct delayed_work rfkill_work;
 701#endif /* CONFIG_RT2X00_LIB_RFKILL */
 702
 703        /*
 704         * If enabled, the debugfs interface structures
 705         * required for deregistration of debugfs.
 706         */
 707#ifdef CONFIG_RT2X00_LIB_DEBUGFS
 708        struct rt2x00debug_intf *debugfs_intf;
 709#endif /* CONFIG_RT2X00_LIB_DEBUGFS */
 710
 711        /*
 712         * LED structure for changing the LED status
 713         * by mac8011 or the kernel.
 714         */
 715#ifdef CONFIG_RT2X00_LIB_LEDS
 716        struct rt2x00_led led_radio;
 717        struct rt2x00_led led_assoc;
 718        struct rt2x00_led led_qual;
 719        u16 led_mcu_reg;
 720#endif /* CONFIG_RT2X00_LIB_LEDS */
 721
 722        /*
 723         * Device flags.
 724         * In these flags the current status and some
 725         * of the device capabilities are stored.
 726         */
 727        unsigned long flags;
 728
 729        /*
 730         * Chipset identification.
 731         */
 732        struct rt2x00_chip chip;
 733
 734        /*
 735         * hw capability specifications.
 736         */
 737        struct hw_mode_spec spec;
 738
 739        /*
 740         * This is the default TX/RX antenna setup as indicated
 741         * by the device's EEPROM. When mac80211 sets its
 742         * antenna value to 0 we should be using these values.
 743         */
 744        struct antenna_setup default_ant;
 745
 746        /*
 747         * Register pointers
 748         * csr.base: CSR base register address. (PCI)
 749         * csr.cache: CSR cache for usb_control_msg. (USB)
 750         */
 751        union csr {
 752                void __iomem *base;
 753                void *cache;
 754        } csr;
 755
 756        /*
 757         * Mutex to protect register accesses on USB devices.
 758         * There are 2 reasons this is needed, one is to ensure
 759         * use of the csr_cache (for USB devices) by one thread
 760         * isn't corrupted by another thread trying to access it.
 761         * The other is that access to BBP and RF registers
 762         * require multiple BUS transactions and if another thread
 763         * attempted to access one of those registers at the same
 764         * time one of the writes could silently fail.
 765         */
 766        struct mutex usb_cache_mutex;
 767
 768        /*
 769         * Current packet filter configuration for the device.
 770         * This contains all currently active FIF_* flags send
 771         * to us by mac80211 during configure_filter().
 772         */
 773        unsigned int packet_filter;
 774
 775        /*
 776         * Interface details:
 777         *  - Open ap interface count.
 778         *  - Open sta interface count.
 779         *  - Association count.
 780         */
 781        unsigned int intf_ap_count;
 782        unsigned int intf_sta_count;
 783        unsigned int intf_associated;
 784
 785        /*
 786         * Link quality
 787         */
 788        struct link link;
 789
 790        /*
 791         * EEPROM data.
 792         */
 793        __le16 *eeprom;
 794
 795        /*
 796         * Active RF register values.
 797         * These are stored here so we don't need
 798         * to read the rf registers and can directly
 799         * use this value instead.
 800         * This field should be accessed by using
 801         * rt2x00_rf_read() and rt2x00_rf_write().
 802         */
 803        u32 *rf;
 804
 805        /*
 806         * LNA gain
 807         */
 808        short lna_gain;
 809
 810        /*
 811         * USB Max frame size (for rt2500usb & rt73usb).
 812         */
 813        u16 usb_maxpacket;
 814
 815        /*
 816         * Current TX power value.
 817         */
 818        u16 tx_power;
 819
 820        /*
 821         * Rssi <-> Dbm offset
 822         */
 823        u8 rssi_offset;
 824
 825        /*
 826         * Frequency offset (for rt61pci & rt73usb).
 827         */
 828        u8 freq_offset;
 829
 830        /*
 831         * Low level statistics which will have
 832         * to be kept up to date while device is running.
 833         */
 834        struct ieee80211_low_level_stats low_level_stats;
 835
 836        /*
 837         * RX configuration information.
 838         */
 839        struct ieee80211_rx_status rx_status;
 840
 841        /*
 842         * Scheduled work.
 843         * NOTE: intf_work will use ieee80211_iterate_active_interfaces()
 844         * which means it cannot be placed on the hw->workqueue
 845         * due to RTNL locking requirements.
 846         */
 847        struct work_struct intf_work;
 848        struct work_struct filter_work;
 849
 850        /*
 851         * Data queue arrays for RX, TX and Beacon.
 852         * The Beacon array also contains the Atim queue
 853         * if that is supported by the device.
 854         */
 855        unsigned int data_queues;
 856        struct data_queue *rx;
 857        struct data_queue *tx;
 858        struct data_queue *bcn;
 859
 860        /*
 861         * Firmware image.
 862         */
 863        const struct firmware *fw;
 864};
 865
 866/*
 867 * Generic RF access.
 868 * The RF is being accessed by word index.
 869 */
 870static inline void rt2x00_rf_read(struct rt2x00_dev *rt2x00dev,
 871                                  const unsigned int word, u32 *data)
 872{
 873        *data = rt2x00dev->rf[word];
 874}
 875
 876static inline void rt2x00_rf_write(struct rt2x00_dev *rt2x00dev,
 877                                   const unsigned int word, u32 data)
 878{
 879        rt2x00dev->rf[word] = data;
 880}
 881
 882/*
 883 *  Generic EEPROM access.
 884 * The EEPROM is being accessed by word index.
 885 */
 886static inline void *rt2x00_eeprom_addr(struct rt2x00_dev *rt2x00dev,
 887                                       const unsigned int word)
 888{
 889        return (void *)&rt2x00dev->eeprom[word];
 890}
 891
 892static inline void rt2x00_eeprom_read(struct rt2x00_dev *rt2x00dev,
 893                                      const unsigned int word, u16 *data)
 894{
 895        *data = le16_to_cpu(rt2x00dev->eeprom[word]);
 896}
 897
 898static inline void rt2x00_eeprom_write(struct rt2x00_dev *rt2x00dev,
 899                                       const unsigned int word, u16 data)
 900{
 901        rt2x00dev->eeprom[word] = cpu_to_le16(data);
 902}
 903
 904/*
 905 * Chipset handlers
 906 */
 907static inline void rt2x00_set_chip(struct rt2x00_dev *rt2x00dev,
 908                                   const u16 rt, const u16 rf, const u32 rev)
 909{
 910        INFO(rt2x00dev,
 911             "Chipset detected - rt: %04x, rf: %04x, rev: %08x.\n",
 912             rt, rf, rev);
 913
 914        rt2x00dev->chip.rt = rt;
 915        rt2x00dev->chip.rf = rf;
 916        rt2x00dev->chip.rev = rev;
 917}
 918
 919static inline char rt2x00_rt(const struct rt2x00_chip *chipset, const u16 chip)
 920{
 921        return (chipset->rt == chip);
 922}
 923
 924static inline char rt2x00_rf(const struct rt2x00_chip *chipset, const u16 chip)
 925{
 926        return (chipset->rf == chip);
 927}
 928
 929static inline u16 rt2x00_rev(const struct rt2x00_chip *chipset)
 930{
 931        return chipset->rev;
 932}
 933
 934static inline u16 rt2x00_check_rev(const struct rt2x00_chip *chipset,
 935                                   const u32 rev)
 936{
 937        return (((chipset->rev & 0xffff0) == rev) &&
 938                !!(chipset->rev & 0x0000f));
 939}
 940
 941/*
 942 * Duration calculations
 943 * The rate variable passed is: 100kbs.
 944 * To convert from bytes to bits we multiply size with 8,
 945 * then the size is multiplied with 10 to make the
 946 * real rate -> rate argument correction.
 947 */
 948static inline u16 get_duration(const unsigned int size, const u8 rate)
 949{
 950        return ((size * 8 * 10) / rate);
 951}
 952
 953static inline u16 get_duration_res(const unsigned int size, const u8 rate)
 954{
 955        return ((size * 8 * 10) % rate);
 956}
 957
 958/**
 959 * rt2x00queue_map_txskb - Map a skb into DMA for TX purposes.
 960 * @rt2x00dev: Pointer to &struct rt2x00_dev.
 961 * @skb: The skb to map.
 962 */
 963void rt2x00queue_map_txskb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb);
 964
 965/**
 966 * rt2x00queue_get_queue - Convert queue index to queue pointer
 967 * @rt2x00dev: Pointer to &struct rt2x00_dev.
 968 * @queue: rt2x00 queue index (see &enum data_queue_qid).
 969 */
 970struct data_queue *rt2x00queue_get_queue(struct rt2x00_dev *rt2x00dev,
 971                                         const enum data_queue_qid queue);
 972
 973/**
 974 * rt2x00queue_get_entry - Get queue entry where the given index points to.
 975 * @queue: Pointer to &struct data_queue from where we obtain the entry.
 976 * @index: Index identifier for obtaining the correct index.
 977 */
 978struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue,
 979                                          enum queue_index index);
 980
 981/*
 982 * Interrupt context handlers.
 983 */
 984void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev);
 985void rt2x00lib_txdone(struct queue_entry *entry,
 986                      struct txdone_entry_desc *txdesc);
 987void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev,
 988                      struct queue_entry *entry);
 989
 990/*
 991 * mac80211 handlers.
 992 */
 993int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb);
 994int rt2x00mac_start(struct ieee80211_hw *hw);
 995void rt2x00mac_stop(struct ieee80211_hw *hw);
 996int rt2x00mac_add_interface(struct ieee80211_hw *hw,
 997                            struct ieee80211_if_init_conf *conf);
 998void rt2x00mac_remove_interface(struct ieee80211_hw *hw,
 999                                struct ieee80211_if_init_conf *conf);
1000int rt2x00mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf);
1001int rt2x00mac_config_interface(struct ieee80211_hw *hw,
1002                               struct ieee80211_vif *vif,
1003                               struct ieee80211_if_conf *conf);
1004void rt2x00mac_configure_filter(struct ieee80211_hw *hw,
1005                                unsigned int changed_flags,
1006                                unsigned int *total_flags,
1007                                int mc_count, struct dev_addr_list *mc_list);
1008#ifdef CONFIG_RT2X00_LIB_CRYPTO
1009int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1010                      const u8 *local_address, const u8 *address,
1011                      struct ieee80211_key_conf *key);
1012#else
1013#define rt2x00mac_set_key       NULL
1014#endif /* CONFIG_RT2X00_LIB_CRYPTO */
1015int rt2x00mac_get_stats(struct ieee80211_hw *hw,
1016                        struct ieee80211_low_level_stats *stats);
1017int rt2x00mac_get_tx_stats(struct ieee80211_hw *hw,
1018                           struct ieee80211_tx_queue_stats *stats);
1019void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
1020                                struct ieee80211_vif *vif,
1021                                struct ieee80211_bss_conf *bss_conf,
1022                                u32 changes);
1023int rt2x00mac_conf_tx(struct ieee80211_hw *hw, u16 queue,
1024                      const struct ieee80211_tx_queue_params *params);
1025
1026/*
1027 * Driver allocation handlers.
1028 */
1029int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev);
1030void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev);
1031#ifdef CONFIG_PM
1032int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state);
1033int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev);
1034#endif /* CONFIG_PM */
1035
1036#endif /* RT2X00_H */
1037
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.