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