rt2x00.h revision 8d1331b37d5b656a7a8e561f8e9d7661dd00c910
1/* 2 Copyright (C) 2010 Willow Garage <http://www.willowgarage.com> 3 Copyright (C) 2004 - 2010 Ivo van Doorn <IvDoorn@gmail.com> 4 Copyright (C) 2004 - 2009 Gertjan van Wingerde <gwingerde@gmail.com> 5 <http://rt2x00.serialmonkey.com> 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program; if not, write to the 19 Free Software Foundation, Inc., 20 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 21 */ 22 23/* 24 Module: rt2x00 25 Abstract: rt2x00 global information. 26 */ 27 28#ifndef RT2X00_H 29#define RT2X00_H 30 31#include <linux/bitops.h> 32#include <linux/skbuff.h> 33#include <linux/workqueue.h> 34#include <linux/firmware.h> 35#include <linux/leds.h> 36#include <linux/mutex.h> 37#include <linux/etherdevice.h> 38#include <linux/input-polldev.h> 39 40#include <net/mac80211.h> 41 42#include "rt2x00debug.h" 43#include "rt2x00dump.h" 44#include "rt2x00leds.h" 45#include "rt2x00reg.h" 46#include "rt2x00queue.h" 47 48/* 49 * Module information. 50 */ 51#define DRV_VERSION "2.3.0" 52#define DRV_PROJECT "http://rt2x00.serialmonkey.com" 53 54/* 55 * Debug definitions. 56 * Debug output has to be enabled during compile time. 57 */ 58#define DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, __args...) \ 59 printk(__kernlvl "%s -> %s: %s - " __msg, \ 60 wiphy_name((__dev)->hw->wiphy), __func__, __lvl, ##__args) 61 62#define DEBUG_PRINTK_PROBE(__kernlvl, __lvl, __msg, __args...) \ 63 printk(__kernlvl "%s -> %s: %s - " __msg, \ 64 KBUILD_MODNAME, __func__, __lvl, ##__args) 65 66#ifdef CONFIG_RT2X00_DEBUG 67#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \ 68 DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, ##__args); 69#else 70#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \ 71 do { } while (0) 72#endif /* CONFIG_RT2X00_DEBUG */ 73 74/* 75 * Various debug levels. 76 * The debug levels PANIC and ERROR both indicate serious problems, 77 * for this reason they should never be ignored. 78 * The special ERROR_PROBE message is for messages that are generated 79 * when the rt2x00_dev is not yet initialized. 80 */ 81#define PANIC(__dev, __msg, __args...) \ 82 DEBUG_PRINTK_MSG(__dev, KERN_CRIT, "Panic", __msg, ##__args) 83#define ERROR(__dev, __msg, __args...) \ 84 DEBUG_PRINTK_MSG(__dev, KERN_ERR, "Error", __msg, ##__args) 85#define ERROR_PROBE(__msg, __args...) \ 86 DEBUG_PRINTK_PROBE(KERN_ERR, "Error", __msg, ##__args) 87#define WARNING(__dev, __msg, __args...) \ 88 DEBUG_PRINTK(__dev, KERN_WARNING, "Warning", __msg, ##__args) 89#define NOTICE(__dev, __msg, __args...) \ 90 DEBUG_PRINTK(__dev, KERN_NOTICE, "Notice", __msg, ##__args) 91#define INFO(__dev, __msg, __args...) \ 92 DEBUG_PRINTK(__dev, KERN_INFO, "Info", __msg, ##__args) 93#define DEBUG(__dev, __msg, __args...) \ 94 DEBUG_PRINTK(__dev, KERN_DEBUG, "Debug", __msg, ##__args) 95#define EEPROM(__dev, __msg, __args...) \ 96 DEBUG_PRINTK(__dev, KERN_DEBUG, "EEPROM recovery", __msg, ##__args) 97 98/* 99 * Duration calculations 100 * The rate variable passed is: 100kbs. 101 * To convert from bytes to bits we multiply size with 8, 102 * then the size is multiplied with 10 to make the 103 * real rate -> rate argument correction. 104 */ 105#define GET_DURATION(__size, __rate) (((__size) * 8 * 10) / (__rate)) 106#define GET_DURATION_RES(__size, __rate)(((__size) * 8 * 10) % (__rate)) 107 108/* 109 * Determine the number of L2 padding bytes required between the header and 110 * the payload. 111 */ 112#define L2PAD_SIZE(__hdrlen) (-(__hdrlen) & 3) 113 114/* 115 * Determine the alignment requirement, 116 * to make sure the 802.11 payload is padded to a 4-byte boundrary 117 * we must determine the address of the payload and calculate the 118 * amount of bytes needed to move the data. 119 */ 120#define ALIGN_SIZE(__skb, __header) \ 121 ( ((unsigned long)((__skb)->data + (__header))) & 3 ) 122 123/* 124 * Constants for extra TX headroom for alignment purposes. 125 */ 126#define RT2X00_ALIGN_SIZE 4 /* Only whole frame needs alignment */ 127#define RT2X00_L2PAD_SIZE 8 /* Both header & payload need alignment */ 128 129/* 130 * Standard timing and size defines. 131 * These values should follow the ieee80211 specifications. 132 */ 133#define ACK_SIZE 14 134#define IEEE80211_HEADER 24 135#define PLCP 48 136#define BEACON 100 137#define PREAMBLE 144 138#define SHORT_PREAMBLE 72 139#define SLOT_TIME 20 140#define SHORT_SLOT_TIME 9 141#define SIFS 10 142#define PIFS ( SIFS + SLOT_TIME ) 143#define SHORT_PIFS ( SIFS + SHORT_SLOT_TIME ) 144#define DIFS ( PIFS + SLOT_TIME ) 145#define SHORT_DIFS ( SHORT_PIFS + SHORT_SLOT_TIME ) 146#define EIFS ( SIFS + DIFS + \ 147 GET_DURATION(IEEE80211_HEADER + ACK_SIZE, 10) ) 148#define SHORT_EIFS ( SIFS + SHORT_DIFS + \ 149 GET_DURATION(IEEE80211_HEADER + ACK_SIZE, 10) ) 150 151/* 152 * Structure for average calculation 153 * The avg field contains the actual average value, 154 * but avg_weight is internally used during calculations 155 * to prevent rounding errors. 156 */ 157struct avg_val { 158 int avg; 159 int avg_weight; 160}; 161 162enum rt2x00_chip_intf { 163 RT2X00_CHIP_INTF_PCI, 164 RT2X00_CHIP_INTF_PCIE, 165 RT2X00_CHIP_INTF_USB, 166 RT2X00_CHIP_INTF_SOC, 167}; 168 169/* 170 * Chipset identification 171 * The chipset on the device is composed of a RT and RF chip. 172 * The chipset combination is important for determining device capabilities. 173 */ 174struct rt2x00_chip { 175 u16 rt; 176#define RT2460 0x2460 177#define RT2560 0x2560 178#define RT2570 0x2570 179#define RT2661 0x2661 180#define RT2573 0x2573 181#define RT2860 0x2860 /* 2.4GHz */ 182#define RT2872 0x2872 /* WSOC */ 183#define RT2883 0x2883 /* WSOC */ 184#define RT3070 0x3070 185#define RT3071 0x3071 186#define RT3090 0x3090 /* 2.4GHz PCIe */ 187#define RT3390 0x3390 188#define RT3572 0x3572 189#define RT3593 0x3593 /* PCIe */ 190#define RT3883 0x3883 /* WSOC */ 191 192 u16 rf; 193 u16 rev; 194 195 enum rt2x00_chip_intf intf; 196}; 197 198/* 199 * RF register values that belong to a particular channel. 200 */ 201struct rf_channel { 202 int channel; 203 u32 rf1; 204 u32 rf2; 205 u32 rf3; 206 u32 rf4; 207}; 208 209/* 210 * Channel information structure 211 */ 212struct channel_info { 213 unsigned int flags; 214#define GEOGRAPHY_ALLOWED 0x00000001 215 216 short max_power; 217 short default_power1; 218 short default_power2; 219}; 220 221/* 222 * Antenna setup values. 223 */ 224struct antenna_setup { 225 enum antenna rx; 226 enum antenna tx; 227}; 228 229/* 230 * Quality statistics about the currently active link. 231 */ 232struct link_qual { 233 /* 234 * Statistics required for Link tuning by driver 235 * The rssi value is provided by rt2x00lib during the 236 * link_tuner() callback function. 237 * The false_cca field is filled during the link_stats() 238 * callback function and could be used during the 239 * link_tuner() callback function. 240 */ 241 int rssi; 242 int false_cca; 243 244 /* 245 * VGC levels 246 * Hardware driver will tune the VGC level during each call 247 * to the link_tuner() callback function. This vgc_level is 248 * is determined based on the link quality statistics like 249 * average RSSI and the false CCA count. 250 * 251 * In some cases the drivers need to differentiate between 252 * the currently "desired" VGC level and the level configured 253 * in the hardware. The latter is important to reduce the 254 * number of BBP register reads to reduce register access 255 * overhead. For this reason we store both values here. 256 */ 257 u8 vgc_level; 258 u8 vgc_level_reg; 259 260 /* 261 * Statistics required for Signal quality calculation. 262 * These fields might be changed during the link_stats() 263 * callback function. 264 */ 265 int rx_success; 266 int rx_failed; 267 int tx_success; 268 int tx_failed; 269}; 270 271/* 272 * Antenna settings about the currently active link. 273 */ 274struct link_ant { 275 /* 276 * Antenna flags 277 */ 278 unsigned int flags; 279#define ANTENNA_RX_DIVERSITY 0x00000001 280#define ANTENNA_TX_DIVERSITY 0x00000002 281#define ANTENNA_MODE_SAMPLE 0x00000004 282 283 /* 284 * Currently active TX/RX antenna setup. 285 * When software diversity is used, this will indicate 286 * which antenna is actually used at this time. 287 */ 288 struct antenna_setup active; 289 290 /* 291 * RSSI history information for the antenna. 292 * Used to determine when to switch antenna 293 * when using software diversity. 294 */ 295 int rssi_history; 296 297 /* 298 * Current RSSI average of the currently active antenna. 299 * Similar to the avg_rssi in the link_qual structure 300 * this value is updated by using the walking average. 301 */ 302 struct avg_val rssi_ant; 303}; 304 305/* 306 * To optimize the quality of the link we need to store 307 * the quality of received frames and periodically 308 * optimize the link. 309 */ 310struct link { 311 /* 312 * Link tuner counter 313 * The number of times the link has been tuned 314 * since the radio has been switched on. 315 */ 316 u32 count; 317 318 /* 319 * Quality measurement values. 320 */ 321 struct link_qual qual; 322 323 /* 324 * TX/RX antenna setup. 325 */ 326 struct link_ant ant; 327 328 /* 329 * Currently active average RSSI value 330 */ 331 struct avg_val avg_rssi; 332 333 /* 334 * Work structure for scheduling periodic link tuning. 335 */ 336 struct delayed_work work; 337 338 /* 339 * Work structure for scheduling periodic watchdog monitoring. 340 */ 341 struct delayed_work watchdog_work; 342}; 343 344/* 345 * Interface structure 346 * Per interface configuration details, this structure 347 * is allocated as the private data for ieee80211_vif. 348 */ 349struct rt2x00_intf { 350 /* 351 * All fields within the rt2x00_intf structure 352 * must be protected with a spinlock. 353 */ 354 spinlock_t lock; 355 356 /* 357 * MAC of the device. 358 */ 359 u8 mac[ETH_ALEN]; 360 361 /* 362 * BBSID of the AP to associate with. 363 */ 364 u8 bssid[ETH_ALEN]; 365 366 /* 367 * beacon->skb must be protected with the mutex. 368 */ 369 struct mutex beacon_skb_mutex; 370 371 /* 372 * Entry in the beacon queue which belongs to 373 * this interface. Each interface has its own 374 * dedicated beacon entry. 375 */ 376 struct queue_entry *beacon; 377 378 /* 379 * Actions that needed rescheduling. 380 */ 381 unsigned int delayed_flags; 382#define DELAYED_UPDATE_BEACON 0x00000001 383 384 /* 385 * Software sequence counter, this is only required 386 * for hardware which doesn't support hardware 387 * sequence counting. 388 */ 389 spinlock_t seqlock; 390 u16 seqno; 391}; 392 393static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif) 394{ 395 return (struct rt2x00_intf *)vif->drv_priv; 396} 397 398/** 399 * struct hw_mode_spec: Hardware specifications structure 400 * 401 * Details about the supported modes, rates and channels 402 * of a particular chipset. This is used by rt2x00lib 403 * to build the ieee80211_hw_mode array for mac80211. 404 * 405 * @supported_bands: Bitmask contained the supported bands (2.4GHz, 5.2GHz). 406 * @supported_rates: Rate types which are supported (CCK, OFDM). 407 * @num_channels: Number of supported channels. This is used as array size 408 * for @tx_power_a, @tx_power_bg and @channels. 409 * @channels: Device/chipset specific channel values (See &struct rf_channel). 410 * @channels_info: Additional information for channels (See &struct channel_info). 411 * @ht: Driver HT Capabilities (See &ieee80211_sta_ht_cap). 412 */ 413struct hw_mode_spec { 414 unsigned int supported_bands; 415#define SUPPORT_BAND_2GHZ 0x00000001 416#define SUPPORT_BAND_5GHZ 0x00000002 417 418 unsigned int supported_rates; 419#define SUPPORT_RATE_CCK 0x00000001 420#define SUPPORT_RATE_OFDM 0x00000002 421 422 unsigned int num_channels; 423 const struct rf_channel *channels; 424 const struct channel_info *channels_info; 425 426 struct ieee80211_sta_ht_cap ht; 427}; 428 429/* 430 * Configuration structure wrapper around the 431 * mac80211 configuration structure. 432 * When mac80211 configures the driver, rt2x00lib 433 * can precalculate values which are equal for all 434 * rt2x00 drivers. Those values can be stored in here. 435 */ 436struct rt2x00lib_conf { 437 struct ieee80211_conf *conf; 438 439 struct rf_channel rf; 440 struct channel_info channel; 441}; 442 443/* 444 * Configuration structure for erp settings. 445 */ 446struct rt2x00lib_erp { 447 int short_preamble; 448 int cts_protection; 449 450 u32 basic_rates; 451 452 int slot_time; 453 454 short sifs; 455 short pifs; 456 short difs; 457 short eifs; 458 459 u16 beacon_int; 460}; 461 462/* 463 * Configuration structure for hardware encryption. 464 */ 465struct rt2x00lib_crypto { 466 enum cipher cipher; 467 468 enum set_key_cmd cmd; 469 const u8 *address; 470 471 u32 bssidx; 472 u32 aid; 473 474 u8 key[16]; 475 u8 tx_mic[8]; 476 u8 rx_mic[8]; 477}; 478 479/* 480 * Configuration structure wrapper around the 481 * rt2x00 interface configuration handler. 482 */ 483struct rt2x00intf_conf { 484 /* 485 * Interface type 486 */ 487 enum nl80211_iftype type; 488 489 /* 490 * TSF sync value, this is dependant on the operation type. 491 */ 492 enum tsf_sync sync; 493 494 /* 495 * The MAC and BSSID addressess are simple array of bytes, 496 * these arrays are little endian, so when sending the addressess 497 * to the drivers, copy the it into a endian-signed variable. 498 * 499 * Note that all devices (except rt2500usb) have 32 bits 500 * register word sizes. This means that whatever variable we 501 * pass _must_ be a multiple of 32 bits. Otherwise the device 502 * might not accept what we are sending to it. 503 * This will also make it easier for the driver to write 504 * the data to the device. 505 */ 506 __le32 mac[2]; 507 __le32 bssid[2]; 508}; 509 510/* 511 * rt2x00lib callback functions. 512 */ 513struct rt2x00lib_ops { 514 /* 515 * Interrupt handlers. 516 */ 517 irq_handler_t irq_handler; 518 519 /* 520 * Threaded Interrupt handlers. 521 */ 522 irq_handler_t irq_handler_thread; 523 524 /* 525 * Device init handlers. 526 */ 527 int (*probe_hw) (struct rt2x00_dev *rt2x00dev); 528 char *(*get_firmware_name) (struct rt2x00_dev *rt2x00dev); 529 int (*check_firmware) (struct rt2x00_dev *rt2x00dev, 530 const u8 *data, const size_t len); 531 int (*load_firmware) (struct rt2x00_dev *rt2x00dev, 532 const u8 *data, const size_t len); 533 534 /* 535 * Device initialization/deinitialization handlers. 536 */ 537 int (*initialize) (struct rt2x00_dev *rt2x00dev); 538 void (*uninitialize) (struct rt2x00_dev *rt2x00dev); 539 540 /* 541 * queue initialization handlers 542 */ 543 bool (*get_entry_state) (struct queue_entry *entry); 544 void (*clear_entry) (struct queue_entry *entry); 545 546 /* 547 * Radio control handlers. 548 */ 549 int (*set_device_state) (struct rt2x00_dev *rt2x00dev, 550 enum dev_state state); 551 int (*rfkill_poll) (struct rt2x00_dev *rt2x00dev); 552 void (*link_stats) (struct rt2x00_dev *rt2x00dev, 553 struct link_qual *qual); 554 void (*reset_tuner) (struct rt2x00_dev *rt2x00dev, 555 struct link_qual *qual); 556 void (*link_tuner) (struct rt2x00_dev *rt2x00dev, 557 struct link_qual *qual, const u32 count); 558 void (*watchdog) (struct rt2x00_dev *rt2x00dev); 559 560 /* 561 * TX control handlers 562 */ 563 void (*write_tx_desc) (struct queue_entry *entry, 564 struct txentry_desc *txdesc); 565 void (*write_tx_data) (struct queue_entry *entry, 566 struct txentry_desc *txdesc); 567 void (*write_beacon) (struct queue_entry *entry, 568 struct txentry_desc *txdesc); 569 int (*get_tx_data_len) (struct queue_entry *entry); 570 void (*kick_tx_queue) (struct data_queue *queue); 571 void (*kill_tx_queue) (struct data_queue *queue); 572 573 /* 574 * RX control handlers 575 */ 576 void (*fill_rxdone) (struct queue_entry *entry, 577 struct rxdone_entry_desc *rxdesc); 578 579 /* 580 * Configuration handlers. 581 */ 582 int (*config_shared_key) (struct rt2x00_dev *rt2x00dev, 583 struct rt2x00lib_crypto *crypto, 584 struct ieee80211_key_conf *key); 585 int (*config_pairwise_key) (struct rt2x00_dev *rt2x00dev, 586 struct rt2x00lib_crypto *crypto, 587 struct ieee80211_key_conf *key); 588 void (*config_filter) (struct rt2x00_dev *rt2x00dev, 589 const unsigned int filter_flags); 590 void (*config_intf) (struct rt2x00_dev *rt2x00dev, 591 struct rt2x00_intf *intf, 592 struct rt2x00intf_conf *conf, 593 const unsigned int flags); 594#define CONFIG_UPDATE_TYPE ( 1 << 1 ) 595#define CONFIG_UPDATE_MAC ( 1 << 2 ) 596#define CONFIG_UPDATE_BSSID ( 1 << 3 ) 597 598 void (*config_erp) (struct rt2x00_dev *rt2x00dev, 599 struct rt2x00lib_erp *erp); 600 void (*config_ant) (struct rt2x00_dev *rt2x00dev, 601 struct antenna_setup *ant); 602 void (*config) (struct rt2x00_dev *rt2x00dev, 603 struct rt2x00lib_conf *libconf, 604 const unsigned int changed_flags); 605}; 606 607/* 608 * rt2x00 driver callback operation structure. 609 */ 610struct rt2x00_ops { 611 const char *name; 612 const unsigned int max_sta_intf; 613 const unsigned int max_ap_intf; 614 const unsigned int eeprom_size; 615 const unsigned int rf_size; 616 const unsigned int tx_queues; 617 const unsigned int extra_tx_headroom; 618 const struct data_queue_desc *rx; 619 const struct data_queue_desc *tx; 620 const struct data_queue_desc *bcn; 621 const struct data_queue_desc *atim; 622 const struct rt2x00lib_ops *lib; 623 const void *drv; 624 const struct ieee80211_ops *hw; 625#ifdef CONFIG_RT2X00_LIB_DEBUGFS 626 const struct rt2x00debug *debugfs; 627#endif /* CONFIG_RT2X00_LIB_DEBUGFS */ 628}; 629 630/* 631 * rt2x00 device flags 632 */ 633enum rt2x00_flags { 634 /* 635 * Device state flags 636 */ 637 DEVICE_STATE_PRESENT, 638 DEVICE_STATE_REGISTERED_HW, 639 DEVICE_STATE_INITIALIZED, 640 DEVICE_STATE_STARTED, 641 DEVICE_STATE_ENABLED_RADIO, 642 DEVICE_STATE_SCANNING, 643 644 /* 645 * Driver requirements 646 */ 647 DRIVER_REQUIRE_FIRMWARE, 648 DRIVER_REQUIRE_BEACON_GUARD, 649 DRIVER_REQUIRE_ATIM_QUEUE, 650 DRIVER_REQUIRE_DMA, 651 DRIVER_REQUIRE_COPY_IV, 652 DRIVER_REQUIRE_L2PAD, 653 654 /* 655 * Driver features 656 */ 657 CONFIG_SUPPORT_HW_BUTTON, 658 CONFIG_SUPPORT_HW_CRYPTO, 659 DRIVER_SUPPORT_CONTROL_FILTERS, 660 DRIVER_SUPPORT_CONTROL_FILTER_PSPOLL, 661 DRIVER_SUPPORT_PRE_TBTT_INTERRUPT, 662 DRIVER_SUPPORT_LINK_TUNING, 663 DRIVER_SUPPORT_WATCHDOG, 664 665 /* 666 * Driver configuration 667 */ 668 CONFIG_FRAME_TYPE, 669 CONFIG_RF_SEQUENCE, 670 CONFIG_EXTERNAL_LNA_A, 671 CONFIG_EXTERNAL_LNA_BG, 672 CONFIG_DOUBLE_ANTENNA, 673 CONFIG_CHANNEL_HT40, 674}; 675 676/* 677 * rt2x00 device structure. 678 */ 679struct rt2x00_dev { 680 /* 681 * Device structure. 682 * The structure stored in here depends on the 683 * system bus (PCI or USB). 684 * When accessing this variable, the rt2x00dev_{pci,usb} 685 * macros should be used for correct typecasting. 686 */ 687 struct device *dev; 688 689 /* 690 * Callback functions. 691 */ 692 const struct rt2x00_ops *ops; 693 694 /* 695 * IEEE80211 control structure. 696 */ 697 struct ieee80211_hw *hw; 698 struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS]; 699 enum ieee80211_band curr_band; 700 int curr_freq; 701 702 /* 703 * If enabled, the debugfs interface structures 704 * required for deregistration of debugfs. 705 */ 706#ifdef CONFIG_RT2X00_LIB_DEBUGFS 707 struct rt2x00debug_intf *debugfs_intf; 708#endif /* CONFIG_RT2X00_LIB_DEBUGFS */ 709 710 /* 711 * LED structure for changing the LED status 712 * by mac8011 or the kernel. 713 */ 714#ifdef CONFIG_RT2X00_LIB_LEDS 715 struct rt2x00_led led_radio; 716 struct rt2x00_led led_assoc; 717 struct rt2x00_led led_qual; 718 u16 led_mcu_reg; 719#endif /* CONFIG_RT2X00_LIB_LEDS */ 720 721 /* 722 * Device flags. 723 * In these flags the current status and some 724 * of the device capabilities are stored. 725 */ 726 unsigned long flags; 727 728 /* 729 * Device information, Bus IRQ and name (PCI, SoC) 730 */ 731 int irq; 732 const char *name; 733 734 /* 735 * Chipset identification. 736 */ 737 struct rt2x00_chip chip; 738 739 /* 740 * hw capability specifications. 741 */ 742 struct hw_mode_spec spec; 743 744 /* 745 * This is the default TX/RX antenna setup as indicated 746 * by the device's EEPROM. 747 */ 748 struct antenna_setup default_ant; 749 750 /* 751 * Register pointers 752 * csr.base: CSR base register address. (PCI) 753 * csr.cache: CSR cache for usb_control_msg. (USB) 754 */ 755 union csr { 756 void __iomem *base; 757 void *cache; 758 } csr; 759 760 /* 761 * Mutex to protect register accesses. 762 * For PCI and USB devices it protects against concurrent indirect 763 * register access (BBP, RF, MCU) since accessing those 764 * registers require multiple calls to the CSR registers. 765 * For USB devices it also protects the csr_cache since that 766 * field is used for normal CSR access and it cannot support 767 * multiple callers simultaneously. 768 */ 769 struct mutex csr_mutex; 770 771 /* 772 * Current packet filter configuration for the device. 773 * This contains all currently active FIF_* flags send 774 * to us by mac80211 during configure_filter(). 775 */ 776 unsigned int packet_filter; 777 778 /* 779 * Interface details: 780 * - Open ap interface count. 781 * - Open sta interface count. 782 * - Association count. 783 */ 784 unsigned int intf_ap_count; 785 unsigned int intf_sta_count; 786 unsigned int intf_associated; 787 788 /* 789 * Link quality 790 */ 791 struct link link; 792 793 /* 794 * EEPROM data. 795 */ 796 __le16 *eeprom; 797 798 /* 799 * Active RF register values. 800 * These are stored here so we don't need 801 * to read the rf registers and can directly 802 * use this value instead. 803 * This field should be accessed by using 804 * rt2x00_rf_read() and rt2x00_rf_write(). 805 */ 806 u32 *rf; 807 808 /* 809 * LNA gain 810 */ 811 short lna_gain; 812 813 /* 814 * Current TX power value. 815 */ 816 u16 tx_power; 817 818 /* 819 * Current retry values. 820 */ 821 u8 short_retry; 822 u8 long_retry; 823 824 /* 825 * Rssi <-> Dbm offset 826 */ 827 u8 rssi_offset; 828 829 /* 830 * Frequency offset (for rt61pci & rt73usb). 831 */ 832 u8 freq_offset; 833 834 /* 835 * Calibration information (for rt2800usb & rt2800pci). 836 * [0] -> BW20 837 * [1] -> BW40 838 */ 839 u8 calibration[2]; 840 841 /* 842 * Beacon interval. 843 */ 844 u16 beacon_int; 845 846 /* 847 * Low level statistics which will have 848 * to be kept up to date while device is running. 849 */ 850 struct ieee80211_low_level_stats low_level_stats; 851 852 /* 853 * Scheduled work. 854 * NOTE: intf_work will use ieee80211_iterate_active_interfaces() 855 * which means it cannot be placed on the hw->workqueue 856 * due to RTNL locking requirements. 857 */ 858 struct work_struct intf_work; 859 860 /** 861 * Scheduled work for TX/RX done handling (USB devices) 862 */ 863 struct work_struct rxdone_work; 864 struct work_struct txdone_work; 865 866 /* 867 * Data queue arrays for RX, TX and Beacon. 868 * The Beacon array also contains the Atim queue 869 * if that is supported by the device. 870 */ 871 unsigned int data_queues; 872 struct data_queue *rx; 873 struct data_queue *tx; 874 struct data_queue *bcn; 875 876 /* 877 * Firmware image. 878 */ 879 const struct firmware *fw; 880 881 /* 882 * Interrupt values, stored between interrupt service routine 883 * and interrupt thread routine. 884 */ 885 u32 irqvalue[2]; 886}; 887 888/* 889 * Register defines. 890 * Some registers require multiple attempts before success, 891 * in those cases REGISTER_BUSY_COUNT attempts should be 892 * taken with a REGISTER_BUSY_DELAY interval. 893 */ 894#define REGISTER_BUSY_COUNT 5 895#define REGISTER_BUSY_DELAY 100 896 897/* 898 * Generic RF access. 899 * The RF is being accessed by word index. 900 */ 901static inline void rt2x00_rf_read(struct rt2x00_dev *rt2x00dev, 902 const unsigned int word, u32 *data) 903{ 904 BUG_ON(word < 1 || word > rt2x00dev->ops->rf_size / sizeof(u32)); 905 *data = rt2x00dev->rf[word - 1]; 906} 907 908static inline void rt2x00_rf_write(struct rt2x00_dev *rt2x00dev, 909 const unsigned int word, u32 data) 910{ 911 BUG_ON(word < 1 || word > rt2x00dev->ops->rf_size / sizeof(u32)); 912 rt2x00dev->rf[word - 1] = data; 913} 914 915/* 916 * Generic EEPROM access. 917 * The EEPROM is being accessed by word index. 918 */ 919static inline void *rt2x00_eeprom_addr(struct rt2x00_dev *rt2x00dev, 920 const unsigned int word) 921{ 922 return (void *)&rt2x00dev->eeprom[word]; 923} 924 925static inline void rt2x00_eeprom_read(struct rt2x00_dev *rt2x00dev, 926 const unsigned int word, u16 *data) 927{ 928 *data = le16_to_cpu(rt2x00dev->eeprom[word]); 929} 930 931static inline void rt2x00_eeprom_write(struct rt2x00_dev *rt2x00dev, 932 const unsigned int word, u16 data) 933{ 934 rt2x00dev->eeprom[word] = cpu_to_le16(data); 935} 936 937/* 938 * Chipset handlers 939 */ 940static inline void rt2x00_set_chip(struct rt2x00_dev *rt2x00dev, 941 const u16 rt, const u16 rf, const u16 rev) 942{ 943 rt2x00dev->chip.rt = rt; 944 rt2x00dev->chip.rf = rf; 945 rt2x00dev->chip.rev = rev; 946 947 INFO(rt2x00dev, 948 "Chipset detected - rt: %04x, rf: %04x, rev: %04x.\n", 949 rt2x00dev->chip.rt, rt2x00dev->chip.rf, rt2x00dev->chip.rev); 950} 951 952static inline bool rt2x00_rt(struct rt2x00_dev *rt2x00dev, const u16 rt) 953{ 954 return (rt2x00dev->chip.rt == rt); 955} 956 957static inline bool rt2x00_rf(struct rt2x00_dev *rt2x00dev, const u16 rf) 958{ 959 return (rt2x00dev->chip.rf == rf); 960} 961 962static inline u16 rt2x00_rev(struct rt2x00_dev *rt2x00dev) 963{ 964 return rt2x00dev->chip.rev; 965} 966 967static inline bool rt2x00_rt_rev(struct rt2x00_dev *rt2x00dev, 968 const u16 rt, const u16 rev) 969{ 970 return (rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) == rev); 971} 972 973static inline bool rt2x00_rt_rev_lt(struct rt2x00_dev *rt2x00dev, 974 const u16 rt, const u16 rev) 975{ 976 return (rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) < rev); 977} 978 979static inline bool rt2x00_rt_rev_gte(struct rt2x00_dev *rt2x00dev, 980 const u16 rt, const u16 rev) 981{ 982 return (rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) >= rev); 983} 984 985static inline void rt2x00_set_chip_intf(struct rt2x00_dev *rt2x00dev, 986 enum rt2x00_chip_intf intf) 987{ 988 rt2x00dev->chip.intf = intf; 989} 990 991static inline bool rt2x00_intf(struct rt2x00_dev *rt2x00dev, 992 enum rt2x00_chip_intf intf) 993{ 994 return (rt2x00dev->chip.intf == intf); 995} 996 997static inline bool rt2x00_is_pci(struct rt2x00_dev *rt2x00dev) 998{ 999 return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_PCI) || 1000 rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_PCIE); 1001} 1002 1003static inline bool rt2x00_is_pcie(struct rt2x00_dev *rt2x00dev) 1004{ 1005 return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_PCIE); 1006} 1007 1008static inline bool rt2x00_is_usb(struct rt2x00_dev *rt2x00dev) 1009{ 1010 return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_USB); 1011} 1012 1013static inline bool rt2x00_is_soc(struct rt2x00_dev *rt2x00dev) 1014{ 1015 return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_SOC); 1016} 1017 1018/** 1019 * rt2x00queue_map_txskb - Map a skb into DMA for TX purposes. 1020 * @rt2x00dev: Pointer to &struct rt2x00_dev. 1021 * @skb: The skb to map. 1022 */ 1023void rt2x00queue_map_txskb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb); 1024 1025/** 1026 * rt2x00queue_unmap_skb - Unmap a skb from DMA. 1027 * @rt2x00dev: Pointer to &struct rt2x00_dev. 1028 * @skb: The skb to unmap. 1029 */ 1030void rt2x00queue_unmap_skb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb); 1031 1032/** 1033 * rt2x00queue_get_queue - Convert queue index to queue pointer 1034 * @rt2x00dev: Pointer to &struct rt2x00_dev. 1035 * @queue: rt2x00 queue index (see &enum data_queue_qid). 1036 */ 1037struct data_queue *rt2x00queue_get_queue(struct rt2x00_dev *rt2x00dev, 1038 const enum data_queue_qid queue); 1039 1040/** 1041 * rt2x00queue_get_entry - Get queue entry where the given index points to. 1042 * @queue: Pointer to &struct data_queue from where we obtain the entry. 1043 * @index: Index identifier for obtaining the correct index. 1044 */ 1045struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue, 1046 enum queue_index index); 1047 1048/* 1049 * Debugfs handlers. 1050 */ 1051/** 1052 * rt2x00debug_dump_frame - Dump a frame to userspace through debugfs. 1053 * @rt2x00dev: Pointer to &struct rt2x00_dev. 1054 * @type: The type of frame that is being dumped. 1055 * @skb: The skb containing the frame to be dumped. 1056 */ 1057#ifdef CONFIG_RT2X00_LIB_DEBUGFS 1058void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev, 1059 enum rt2x00_dump_type type, struct sk_buff *skb); 1060#else 1061static inline void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev, 1062 enum rt2x00_dump_type type, 1063 struct sk_buff *skb) 1064{ 1065} 1066#endif /* CONFIG_RT2X00_LIB_DEBUGFS */ 1067 1068/* 1069 * Interrupt context handlers. 1070 */ 1071void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev); 1072void rt2x00lib_pretbtt(struct rt2x00_dev *rt2x00dev); 1073void rt2x00lib_txdone(struct queue_entry *entry, 1074 struct txdone_entry_desc *txdesc); 1075void rt2x00lib_txdone_noinfo(struct queue_entry *entry, u32 status); 1076void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev, 1077 struct queue_entry *entry); 1078 1079/* 1080 * mac80211 handlers. 1081 */ 1082int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb); 1083int rt2x00mac_start(struct ieee80211_hw *hw); 1084void rt2x00mac_stop(struct ieee80211_hw *hw); 1085int rt2x00mac_add_interface(struct ieee80211_hw *hw, 1086 struct ieee80211_vif *vif); 1087void rt2x00mac_remove_interface(struct ieee80211_hw *hw, 1088 struct ieee80211_vif *vif); 1089int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed); 1090void rt2x00mac_configure_filter(struct ieee80211_hw *hw, 1091 unsigned int changed_flags, 1092 unsigned int *total_flags, 1093 u64 multicast); 1094int rt2x00mac_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta, 1095 bool set); 1096#ifdef CONFIG_RT2X00_LIB_CRYPTO 1097int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, 1098 struct ieee80211_vif *vif, struct ieee80211_sta *sta, 1099 struct ieee80211_key_conf *key); 1100#else 1101#define rt2x00mac_set_key NULL 1102#endif /* CONFIG_RT2X00_LIB_CRYPTO */ 1103void rt2x00mac_sw_scan_start(struct ieee80211_hw *hw); 1104void rt2x00mac_sw_scan_complete(struct ieee80211_hw *hw); 1105int rt2x00mac_get_stats(struct ieee80211_hw *hw, 1106 struct ieee80211_low_level_stats *stats); 1107void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw, 1108 struct ieee80211_vif *vif, 1109 struct ieee80211_bss_conf *bss_conf, 1110 u32 changes); 1111int rt2x00mac_conf_tx(struct ieee80211_hw *hw, u16 queue, 1112 const struct ieee80211_tx_queue_params *params); 1113void rt2x00mac_rfkill_poll(struct ieee80211_hw *hw); 1114 1115/* 1116 * Driver allocation handlers. 1117 */ 1118int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev); 1119void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev); 1120#ifdef CONFIG_PM 1121int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state); 1122int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev); 1123#endif /* CONFIG_PM */ 1124 1125#endif /* RT2X00_H */ 1126