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