rt2x00.h revision 4ea545d476d3182056aeb042c439237ed61d261e
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/interrupt.h> 33#include <linux/skbuff.h> 34#include <linux/workqueue.h> 35#include <linux/firmware.h> 36#include <linux/leds.h> 37#include <linux/mutex.h> 38#include <linux/etherdevice.h> 39#include <linux/input-polldev.h> 40#include <linux/kfifo.h> 41#include <linux/hrtimer.h> 42 43#include <net/mac80211.h> 44 45#include "rt2x00debug.h" 46#include "rt2x00dump.h" 47#include "rt2x00leds.h" 48#include "rt2x00reg.h" 49#include "rt2x00queue.h" 50 51/* 52 * Module information. 53 */ 54#define DRV_VERSION "2.3.0" 55#define DRV_PROJECT "http://rt2x00.serialmonkey.com" 56 57/* 58 * Debug definitions. 59 * Debug output has to be enabled during compile time. 60 */ 61#define DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, __args...) \ 62 printk(__kernlvl "%s -> %s: %s - " __msg, \ 63 wiphy_name((__dev)->hw->wiphy), __func__, __lvl, ##__args) 64 65#define DEBUG_PRINTK_PROBE(__kernlvl, __lvl, __msg, __args...) \ 66 printk(__kernlvl "%s -> %s: %s - " __msg, \ 67 KBUILD_MODNAME, __func__, __lvl, ##__args) 68 69#ifdef CONFIG_RT2X00_DEBUG 70#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \ 71 DEBUG_PRINTK_MSG(__dev, __kernlvl, __lvl, __msg, ##__args) 72#else 73#define DEBUG_PRINTK(__dev, __kernlvl, __lvl, __msg, __args...) \ 74 do { } while (0) 75#endif /* CONFIG_RT2X00_DEBUG */ 76 77/* 78 * Various debug levels. 79 * The debug levels PANIC and ERROR both indicate serious problems, 80 * for this reason they should never be ignored. 81 * The special ERROR_PROBE message is for messages that are generated 82 * when the rt2x00_dev is not yet initialized. 83 */ 84#define PANIC(__dev, __msg, __args...) \ 85 DEBUG_PRINTK_MSG(__dev, KERN_CRIT, "Panic", __msg, ##__args) 86#define ERROR(__dev, __msg, __args...) \ 87 DEBUG_PRINTK_MSG(__dev, KERN_ERR, "Error", __msg, ##__args) 88#define ERROR_PROBE(__msg, __args...) \ 89 DEBUG_PRINTK_PROBE(KERN_ERR, "Error", __msg, ##__args) 90#define WARNING(__dev, __msg, __args...) \ 91 DEBUG_PRINTK_MSG(__dev, KERN_WARNING, "Warning", __msg, ##__args) 92#define INFO(__dev, __msg, __args...) \ 93 DEBUG_PRINTK_MSG(__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 RT3290 0x3290 189#define RT3352 0x3352 /* WSOC */ 190#define RT3390 0x3390 191#define RT3572 0x3572 192#define RT3593 0x3593 193#define RT3883 0x3883 /* WSOC */ 194#define RT5390 0x5390 /* 2.4GHz */ 195#define RT5392 0x5392 /* 2.4GHz */ 196 197 u16 rf; 198 u16 rev; 199 200 enum rt2x00_chip_intf intf; 201}; 202 203/* 204 * RF register values that belong to a particular channel. 205 */ 206struct rf_channel { 207 int channel; 208 u32 rf1; 209 u32 rf2; 210 u32 rf3; 211 u32 rf4; 212}; 213 214/* 215 * Channel information structure 216 */ 217struct channel_info { 218 unsigned int flags; 219#define GEOGRAPHY_ALLOWED 0x00000001 220 221 short max_power; 222 short default_power1; 223 short default_power2; 224}; 225 226/* 227 * Antenna setup values. 228 */ 229struct antenna_setup { 230 enum antenna rx; 231 enum antenna tx; 232 u8 rx_chain_num; 233 u8 tx_chain_num; 234}; 235 236/* 237 * Quality statistics about the currently active link. 238 */ 239struct link_qual { 240 /* 241 * Statistics required for Link tuning by driver 242 * The rssi value is provided by rt2x00lib during the 243 * link_tuner() callback function. 244 * The false_cca field is filled during the link_stats() 245 * callback function and could be used during the 246 * link_tuner() callback function. 247 */ 248 int rssi; 249 int false_cca; 250 251 /* 252 * VGC levels 253 * Hardware driver will tune the VGC level during each call 254 * to the link_tuner() callback function. This vgc_level is 255 * is determined based on the link quality statistics like 256 * average RSSI and the false CCA count. 257 * 258 * In some cases the drivers need to differentiate between 259 * the currently "desired" VGC level and the level configured 260 * in the hardware. The latter is important to reduce the 261 * number of BBP register reads to reduce register access 262 * overhead. For this reason we store both values here. 263 */ 264 u8 vgc_level; 265 u8 vgc_level_reg; 266 267 /* 268 * Statistics required for Signal quality calculation. 269 * These fields might be changed during the link_stats() 270 * callback function. 271 */ 272 int rx_success; 273 int rx_failed; 274 int tx_success; 275 int tx_failed; 276}; 277 278/* 279 * Antenna settings about the currently active link. 280 */ 281struct link_ant { 282 /* 283 * Antenna flags 284 */ 285 unsigned int flags; 286#define ANTENNA_RX_DIVERSITY 0x00000001 287#define ANTENNA_TX_DIVERSITY 0x00000002 288#define ANTENNA_MODE_SAMPLE 0x00000004 289 290 /* 291 * Currently active TX/RX antenna setup. 292 * When software diversity is used, this will indicate 293 * which antenna is actually used at this time. 294 */ 295 struct antenna_setup active; 296 297 /* 298 * RSSI history information for the antenna. 299 * Used to determine when to switch antenna 300 * when using software diversity. 301 */ 302 int rssi_history; 303 304 /* 305 * Current RSSI average of the currently active antenna. 306 * Similar to the avg_rssi in the link_qual structure 307 * this value is updated by using the walking average. 308 */ 309 struct avg_val rssi_ant; 310}; 311 312/* 313 * To optimize the quality of the link we need to store 314 * the quality of received frames and periodically 315 * optimize the link. 316 */ 317struct link { 318 /* 319 * Link tuner counter 320 * The number of times the link has been tuned 321 * since the radio has been switched on. 322 */ 323 u32 count; 324 325 /* 326 * Quality measurement values. 327 */ 328 struct link_qual qual; 329 330 /* 331 * TX/RX antenna setup. 332 */ 333 struct link_ant ant; 334 335 /* 336 * Currently active average RSSI value 337 */ 338 struct avg_val avg_rssi; 339 340 /* 341 * Work structure for scheduling periodic link tuning. 342 */ 343 struct delayed_work work; 344 345 /* 346 * Work structure for scheduling periodic watchdog monitoring. 347 * This work must be scheduled on the kernel workqueue, while 348 * all other work structures must be queued on the mac80211 349 * workqueue. This guarantees that the watchdog can schedule 350 * other work structures and wait for their completion in order 351 * to bring the device/driver back into the desired state. 352 */ 353 struct delayed_work watchdog_work; 354 355 /* 356 * Work structure for scheduling periodic AGC adjustments. 357 */ 358 struct delayed_work agc_work; 359 360 /* 361 * Work structure for scheduling periodic VCO calibration. 362 */ 363 struct delayed_work vco_work; 364}; 365 366enum rt2x00_delayed_flags { 367 DELAYED_UPDATE_BEACON, 368}; 369 370/* 371 * Interface structure 372 * Per interface configuration details, this structure 373 * is allocated as the private data for ieee80211_vif. 374 */ 375struct rt2x00_intf { 376 /* 377 * beacon->skb must be protected with the mutex. 378 */ 379 struct mutex beacon_skb_mutex; 380 381 /* 382 * Entry in the beacon queue which belongs to 383 * this interface. Each interface has its own 384 * dedicated beacon entry. 385 */ 386 struct queue_entry *beacon; 387 bool enable_beacon; 388 389 /* 390 * Actions that needed rescheduling. 391 */ 392 unsigned long delayed_flags; 393 394 /* 395 * Software sequence counter, this is only required 396 * for hardware which doesn't support hardware 397 * sequence counting. 398 */ 399 atomic_t seqno; 400}; 401 402static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif) 403{ 404 return (struct rt2x00_intf *)vif->drv_priv; 405} 406 407/** 408 * struct hw_mode_spec: Hardware specifications structure 409 * 410 * Details about the supported modes, rates and channels 411 * of a particular chipset. This is used by rt2x00lib 412 * to build the ieee80211_hw_mode array for mac80211. 413 * 414 * @supported_bands: Bitmask contained the supported bands (2.4GHz, 5.2GHz). 415 * @supported_rates: Rate types which are supported (CCK, OFDM). 416 * @num_channels: Number of supported channels. This is used as array size 417 * for @tx_power_a, @tx_power_bg and @channels. 418 * @channels: Device/chipset specific channel values (See &struct rf_channel). 419 * @channels_info: Additional information for channels (See &struct channel_info). 420 * @ht: Driver HT Capabilities (See &ieee80211_sta_ht_cap). 421 */ 422struct hw_mode_spec { 423 unsigned int supported_bands; 424#define SUPPORT_BAND_2GHZ 0x00000001 425#define SUPPORT_BAND_5GHZ 0x00000002 426 427 unsigned int supported_rates; 428#define SUPPORT_RATE_CCK 0x00000001 429#define SUPPORT_RATE_OFDM 0x00000002 430 431 unsigned int num_channels; 432 const struct rf_channel *channels; 433 const struct channel_info *channels_info; 434 435 struct ieee80211_sta_ht_cap ht; 436}; 437 438/* 439 * Configuration structure wrapper around the 440 * mac80211 configuration structure. 441 * When mac80211 configures the driver, rt2x00lib 442 * can precalculate values which are equal for all 443 * rt2x00 drivers. Those values can be stored in here. 444 */ 445struct rt2x00lib_conf { 446 struct ieee80211_conf *conf; 447 448 struct rf_channel rf; 449 struct channel_info channel; 450}; 451 452/* 453 * Configuration structure for erp settings. 454 */ 455struct rt2x00lib_erp { 456 int short_preamble; 457 int cts_protection; 458 459 u32 basic_rates; 460 461 int slot_time; 462 463 short sifs; 464 short pifs; 465 short difs; 466 short eifs; 467 468 u16 beacon_int; 469 u16 ht_opmode; 470}; 471 472/* 473 * Configuration structure for hardware encryption. 474 */ 475struct rt2x00lib_crypto { 476 enum cipher cipher; 477 478 enum set_key_cmd cmd; 479 const u8 *address; 480 481 u32 bssidx; 482 483 u8 key[16]; 484 u8 tx_mic[8]; 485 u8 rx_mic[8]; 486 487 int wcid; 488}; 489 490/* 491 * Configuration structure wrapper around the 492 * rt2x00 interface configuration handler. 493 */ 494struct rt2x00intf_conf { 495 /* 496 * Interface type 497 */ 498 enum nl80211_iftype type; 499 500 /* 501 * TSF sync value, this is dependent on the operation type. 502 */ 503 enum tsf_sync sync; 504 505 /* 506 * The MAC and BSSID addresses are simple array of bytes, 507 * these arrays are little endian, so when sending the addresses 508 * to the drivers, copy the it into a endian-signed variable. 509 * 510 * Note that all devices (except rt2500usb) have 32 bits 511 * register word sizes. This means that whatever variable we 512 * pass _must_ be a multiple of 32 bits. Otherwise the device 513 * might not accept what we are sending to it. 514 * This will also make it easier for the driver to write 515 * the data to the device. 516 */ 517 __le32 mac[2]; 518 __le32 bssid[2]; 519}; 520 521/* 522 * Private structure for storing STA details 523 * wcid: Wireless Client ID 524 */ 525struct rt2x00_sta { 526 int wcid; 527}; 528 529static inline struct rt2x00_sta* sta_to_rt2x00_sta(struct ieee80211_sta *sta) 530{ 531 return (struct rt2x00_sta *)sta->drv_priv; 532} 533 534/* 535 * rt2x00lib callback functions. 536 */ 537struct rt2x00lib_ops { 538 /* 539 * Interrupt handlers. 540 */ 541 irq_handler_t irq_handler; 542 543 /* 544 * TX status tasklet handler. 545 */ 546 void (*txstatus_tasklet) (unsigned long data); 547 void (*pretbtt_tasklet) (unsigned long data); 548 void (*tbtt_tasklet) (unsigned long data); 549 void (*rxdone_tasklet) (unsigned long data); 550 void (*autowake_tasklet) (unsigned long data); 551 552 /* 553 * Device init handlers. 554 */ 555 int (*probe_hw) (struct rt2x00_dev *rt2x00dev); 556 char *(*get_firmware_name) (struct rt2x00_dev *rt2x00dev); 557 int (*check_firmware) (struct rt2x00_dev *rt2x00dev, 558 const u8 *data, const size_t len); 559 int (*load_firmware) (struct rt2x00_dev *rt2x00dev, 560 const u8 *data, const size_t len); 561 562 /* 563 * Device initialization/deinitialization handlers. 564 */ 565 int (*initialize) (struct rt2x00_dev *rt2x00dev); 566 void (*uninitialize) (struct rt2x00_dev *rt2x00dev); 567 568 /* 569 * queue initialization handlers 570 */ 571 bool (*get_entry_state) (struct queue_entry *entry); 572 void (*clear_entry) (struct queue_entry *entry); 573 574 /* 575 * Radio control handlers. 576 */ 577 int (*set_device_state) (struct rt2x00_dev *rt2x00dev, 578 enum dev_state state); 579 int (*rfkill_poll) (struct rt2x00_dev *rt2x00dev); 580 void (*link_stats) (struct rt2x00_dev *rt2x00dev, 581 struct link_qual *qual); 582 void (*reset_tuner) (struct rt2x00_dev *rt2x00dev, 583 struct link_qual *qual); 584 void (*link_tuner) (struct rt2x00_dev *rt2x00dev, 585 struct link_qual *qual, const u32 count); 586 void (*gain_calibration) (struct rt2x00_dev *rt2x00dev); 587 void (*vco_calibration) (struct rt2x00_dev *rt2x00dev); 588 589 /* 590 * Data queue handlers. 591 */ 592 void (*watchdog) (struct rt2x00_dev *rt2x00dev); 593 void (*start_queue) (struct data_queue *queue); 594 void (*kick_queue) (struct data_queue *queue); 595 void (*stop_queue) (struct data_queue *queue); 596 void (*flush_queue) (struct data_queue *queue, bool drop); 597 void (*tx_dma_done) (struct queue_entry *entry); 598 599 /* 600 * TX control handlers 601 */ 602 void (*write_tx_desc) (struct queue_entry *entry, 603 struct txentry_desc *txdesc); 604 void (*write_tx_data) (struct queue_entry *entry, 605 struct txentry_desc *txdesc); 606 void (*write_beacon) (struct queue_entry *entry, 607 struct txentry_desc *txdesc); 608 void (*clear_beacon) (struct queue_entry *entry); 609 int (*get_tx_data_len) (struct queue_entry *entry); 610 611 /* 612 * RX control handlers 613 */ 614 void (*fill_rxdone) (struct queue_entry *entry, 615 struct rxdone_entry_desc *rxdesc); 616 617 /* 618 * Configuration handlers. 619 */ 620 int (*config_shared_key) (struct rt2x00_dev *rt2x00dev, 621 struct rt2x00lib_crypto *crypto, 622 struct ieee80211_key_conf *key); 623 int (*config_pairwise_key) (struct rt2x00_dev *rt2x00dev, 624 struct rt2x00lib_crypto *crypto, 625 struct ieee80211_key_conf *key); 626 void (*config_filter) (struct rt2x00_dev *rt2x00dev, 627 const unsigned int filter_flags); 628 void (*config_intf) (struct rt2x00_dev *rt2x00dev, 629 struct rt2x00_intf *intf, 630 struct rt2x00intf_conf *conf, 631 const unsigned int flags); 632#define CONFIG_UPDATE_TYPE ( 1 << 1 ) 633#define CONFIG_UPDATE_MAC ( 1 << 2 ) 634#define CONFIG_UPDATE_BSSID ( 1 << 3 ) 635 636 void (*config_erp) (struct rt2x00_dev *rt2x00dev, 637 struct rt2x00lib_erp *erp, 638 u32 changed); 639 void (*config_ant) (struct rt2x00_dev *rt2x00dev, 640 struct antenna_setup *ant); 641 void (*config) (struct rt2x00_dev *rt2x00dev, 642 struct rt2x00lib_conf *libconf, 643 const unsigned int changed_flags); 644 int (*sta_add) (struct rt2x00_dev *rt2x00dev, 645 struct ieee80211_vif *vif, 646 struct ieee80211_sta *sta); 647 int (*sta_remove) (struct rt2x00_dev *rt2x00dev, 648 int wcid); 649}; 650 651/* 652 * rt2x00 driver callback operation structure. 653 */ 654struct rt2x00_ops { 655 const char *name; 656 const unsigned int drv_data_size; 657 const unsigned int max_ap_intf; 658 const unsigned int eeprom_size; 659 const unsigned int rf_size; 660 const unsigned int tx_queues; 661 const unsigned int extra_tx_headroom; 662 const struct data_queue_desc *rx; 663 const struct data_queue_desc *tx; 664 const struct data_queue_desc *bcn; 665 const struct data_queue_desc *atim; 666 const struct rt2x00lib_ops *lib; 667 const void *drv; 668 const struct ieee80211_ops *hw; 669#ifdef CONFIG_RT2X00_LIB_DEBUGFS 670 const struct rt2x00debug *debugfs; 671#endif /* CONFIG_RT2X00_LIB_DEBUGFS */ 672}; 673 674/* 675 * rt2x00 state flags 676 */ 677enum rt2x00_state_flags { 678 /* 679 * Device flags 680 */ 681 DEVICE_STATE_PRESENT, 682 DEVICE_STATE_REGISTERED_HW, 683 DEVICE_STATE_INITIALIZED, 684 DEVICE_STATE_STARTED, 685 DEVICE_STATE_ENABLED_RADIO, 686 DEVICE_STATE_SCANNING, 687 688 /* 689 * Driver configuration 690 */ 691 CONFIG_CHANNEL_HT40, 692 CONFIG_POWERSAVING, 693 CONFIG_HT_DISABLED, 694 CONFIG_QOS_DISABLED, 695 696 /* 697 * Mark we currently are sequentially reading TX_STA_FIFO register 698 * FIXME: this is for only rt2800usb, should go to private data 699 */ 700 TX_STATUS_READING, 701}; 702 703/* 704 * rt2x00 capability flags 705 */ 706enum rt2x00_capability_flags { 707 /* 708 * Requirements 709 */ 710 REQUIRE_FIRMWARE, 711 REQUIRE_BEACON_GUARD, 712 REQUIRE_ATIM_QUEUE, 713 REQUIRE_DMA, 714 REQUIRE_COPY_IV, 715 REQUIRE_L2PAD, 716 REQUIRE_TXSTATUS_FIFO, 717 REQUIRE_TASKLET_CONTEXT, 718 REQUIRE_SW_SEQNO, 719 REQUIRE_HT_TX_DESC, 720 REQUIRE_PS_AUTOWAKE, 721 722 /* 723 * Capabilities 724 */ 725 CAPABILITY_HW_BUTTON, 726 CAPABILITY_HW_CRYPTO, 727 CAPABILITY_POWER_LIMIT, 728 CAPABILITY_CONTROL_FILTERS, 729 CAPABILITY_CONTROL_FILTER_PSPOLL, 730 CAPABILITY_PRE_TBTT_INTERRUPT, 731 CAPABILITY_LINK_TUNING, 732 CAPABILITY_FRAME_TYPE, 733 CAPABILITY_RF_SEQUENCE, 734 CAPABILITY_EXTERNAL_LNA_A, 735 CAPABILITY_EXTERNAL_LNA_BG, 736 CAPABILITY_DOUBLE_ANTENNA, 737 CAPABILITY_BT_COEXIST, 738 CAPABILITY_VCO_RECALIBRATION, 739}; 740 741/* 742 * Interface combinations 743 */ 744enum { 745 IF_COMB_AP = 0, 746 NUM_IF_COMB, 747}; 748 749/* 750 * rt2x00 device structure. 751 */ 752struct rt2x00_dev { 753 /* 754 * Device structure. 755 * The structure stored in here depends on the 756 * system bus (PCI or USB). 757 * When accessing this variable, the rt2x00dev_{pci,usb} 758 * macros should be used for correct typecasting. 759 */ 760 struct device *dev; 761 762 /* 763 * Callback functions. 764 */ 765 const struct rt2x00_ops *ops; 766 767 /* 768 * Driver data. 769 */ 770 void *drv_data; 771 772 /* 773 * IEEE80211 control structure. 774 */ 775 struct ieee80211_hw *hw; 776 struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS]; 777 enum ieee80211_band curr_band; 778 int curr_freq; 779 780 /* 781 * If enabled, the debugfs interface structures 782 * required for deregistration of debugfs. 783 */ 784#ifdef CONFIG_RT2X00_LIB_DEBUGFS 785 struct rt2x00debug_intf *debugfs_intf; 786#endif /* CONFIG_RT2X00_LIB_DEBUGFS */ 787 788 /* 789 * LED structure for changing the LED status 790 * by mac8011 or the kernel. 791 */ 792#ifdef CONFIG_RT2X00_LIB_LEDS 793 struct rt2x00_led led_radio; 794 struct rt2x00_led led_assoc; 795 struct rt2x00_led led_qual; 796 u16 led_mcu_reg; 797#endif /* CONFIG_RT2X00_LIB_LEDS */ 798 799 /* 800 * Device state flags. 801 * In these flags the current status is stored. 802 * Access to these flags should occur atomically. 803 */ 804 unsigned long flags; 805 806 /* 807 * Device capabiltiy flags. 808 * In these flags the device/driver capabilities are stored. 809 * Access to these flags should occur non-atomically. 810 */ 811 unsigned long cap_flags; 812 813 /* 814 * Device information, Bus IRQ and name (PCI, SoC) 815 */ 816 int irq; 817 const char *name; 818 819 /* 820 * Chipset identification. 821 */ 822 struct rt2x00_chip chip; 823 824 /* 825 * hw capability specifications. 826 */ 827 struct hw_mode_spec spec; 828 829 /* 830 * This is the default TX/RX antenna setup as indicated 831 * by the device's EEPROM. 832 */ 833 struct antenna_setup default_ant; 834 835 /* 836 * Register pointers 837 * csr.base: CSR base register address. (PCI) 838 * csr.cache: CSR cache for usb_control_msg. (USB) 839 */ 840 union csr { 841 void __iomem *base; 842 void *cache; 843 } csr; 844 845 /* 846 * Mutex to protect register accesses. 847 * For PCI and USB devices it protects against concurrent indirect 848 * register access (BBP, RF, MCU) since accessing those 849 * registers require multiple calls to the CSR registers. 850 * For USB devices it also protects the csr_cache since that 851 * field is used for normal CSR access and it cannot support 852 * multiple callers simultaneously. 853 */ 854 struct mutex csr_mutex; 855 856 /* 857 * Current packet filter configuration for the device. 858 * This contains all currently active FIF_* flags send 859 * to us by mac80211 during configure_filter(). 860 */ 861 unsigned int packet_filter; 862 863 /* 864 * Interface details: 865 * - Open ap interface count. 866 * - Open sta interface count. 867 * - Association count. 868 * - Beaconing enabled count. 869 */ 870 unsigned int intf_ap_count; 871 unsigned int intf_sta_count; 872 unsigned int intf_associated; 873 unsigned int intf_beaconing; 874 875 /* 876 * Interface combinations 877 */ 878 struct ieee80211_iface_limit if_limits_ap; 879 struct ieee80211_iface_combination if_combinations[NUM_IF_COMB]; 880 881 /* 882 * Link quality 883 */ 884 struct link link; 885 886 /* 887 * EEPROM data. 888 */ 889 __le16 *eeprom; 890 891 /* 892 * Active RF register values. 893 * These are stored here so we don't need 894 * to read the rf registers and can directly 895 * use this value instead. 896 * This field should be accessed by using 897 * rt2x00_rf_read() and rt2x00_rf_write(). 898 */ 899 u32 *rf; 900 901 /* 902 * LNA gain 903 */ 904 short lna_gain; 905 906 /* 907 * Current TX power value. 908 */ 909 u16 tx_power; 910 911 /* 912 * Current retry values. 913 */ 914 u8 short_retry; 915 u8 long_retry; 916 917 /* 918 * Rssi <-> Dbm offset 919 */ 920 u8 rssi_offset; 921 922 /* 923 * Frequency offset. 924 */ 925 u8 freq_offset; 926 927 /* 928 * Association id. 929 */ 930 u16 aid; 931 932 /* 933 * Beacon interval. 934 */ 935 u16 beacon_int; 936 937 /** 938 * Timestamp of last received beacon 939 */ 940 unsigned long last_beacon; 941 942 /* 943 * Low level statistics which will have 944 * to be kept up to date while device is running. 945 */ 946 struct ieee80211_low_level_stats low_level_stats; 947 948 /** 949 * Work queue for all work which should not be placed 950 * on the mac80211 workqueue (because of dependencies 951 * between various work structures). 952 */ 953 struct workqueue_struct *workqueue; 954 955 /* 956 * Scheduled work. 957 * NOTE: intf_work will use ieee80211_iterate_active_interfaces() 958 * which means it cannot be placed on the hw->workqueue 959 * due to RTNL locking requirements. 960 */ 961 struct work_struct intf_work; 962 963 /** 964 * Scheduled work for TX/RX done handling (USB devices) 965 */ 966 struct work_struct rxdone_work; 967 struct work_struct txdone_work; 968 969 /* 970 * Powersaving work 971 */ 972 struct delayed_work autowakeup_work; 973 struct work_struct sleep_work; 974 975 /* 976 * Data queue arrays for RX, TX, Beacon and ATIM. 977 */ 978 unsigned int data_queues; 979 struct data_queue *rx; 980 struct data_queue *tx; 981 struct data_queue *bcn; 982 struct data_queue *atim; 983 984 /* 985 * Firmware image. 986 */ 987 const struct firmware *fw; 988 989 /* 990 * FIFO for storing tx status reports between isr and tasklet. 991 */ 992 DECLARE_KFIFO_PTR(txstatus_fifo, u32); 993 994 /* 995 * Timer to ensure tx status reports are read (rt2800usb). 996 */ 997 struct hrtimer txstatus_timer; 998 999 /* 1000 * Tasklet for processing tx status reports (rt2800pci). 1001 */ 1002 struct tasklet_struct txstatus_tasklet; 1003 struct tasklet_struct pretbtt_tasklet; 1004 struct tasklet_struct tbtt_tasklet; 1005 struct tasklet_struct rxdone_tasklet; 1006 struct tasklet_struct autowake_tasklet; 1007 1008 /* 1009 * Used for VCO periodic calibration. 1010 */ 1011 int rf_channel; 1012 1013 /* 1014 * Protect the interrupt mask register. 1015 */ 1016 spinlock_t irqmask_lock; 1017 1018 /* 1019 * List of BlockAckReq TX entries that need driver BlockAck processing. 1020 */ 1021 struct list_head bar_list; 1022 spinlock_t bar_list_lock; 1023}; 1024 1025struct rt2x00_bar_list_entry { 1026 struct list_head list; 1027 struct rcu_head head; 1028 1029 struct queue_entry *entry; 1030 int block_acked; 1031 1032 /* Relevant parts of the IEEE80211 BAR header */ 1033 __u8 ra[6]; 1034 __u8 ta[6]; 1035 __le16 control; 1036 __le16 start_seq_num; 1037}; 1038 1039/* 1040 * Register defines. 1041 * Some registers require multiple attempts before success, 1042 * in those cases REGISTER_BUSY_COUNT attempts should be 1043 * taken with a REGISTER_BUSY_DELAY interval. 1044 */ 1045#define REGISTER_BUSY_COUNT 100 1046#define REGISTER_BUSY_DELAY 100 1047 1048/* 1049 * Generic RF access. 1050 * The RF is being accessed by word index. 1051 */ 1052static inline void rt2x00_rf_read(struct rt2x00_dev *rt2x00dev, 1053 const unsigned int word, u32 *data) 1054{ 1055 BUG_ON(word < 1 || word > rt2x00dev->ops->rf_size / sizeof(u32)); 1056 *data = rt2x00dev->rf[word - 1]; 1057} 1058 1059static inline void rt2x00_rf_write(struct rt2x00_dev *rt2x00dev, 1060 const unsigned int word, u32 data) 1061{ 1062 BUG_ON(word < 1 || word > rt2x00dev->ops->rf_size / sizeof(u32)); 1063 rt2x00dev->rf[word - 1] = data; 1064} 1065 1066/* 1067 * Generic EEPROM access. 1068 * The EEPROM is being accessed by word index. 1069 */ 1070static inline void *rt2x00_eeprom_addr(struct rt2x00_dev *rt2x00dev, 1071 const unsigned int word) 1072{ 1073 return (void *)&rt2x00dev->eeprom[word]; 1074} 1075 1076static inline void rt2x00_eeprom_read(struct rt2x00_dev *rt2x00dev, 1077 const unsigned int word, u16 *data) 1078{ 1079 *data = le16_to_cpu(rt2x00dev->eeprom[word]); 1080} 1081 1082static inline void rt2x00_eeprom_write(struct rt2x00_dev *rt2x00dev, 1083 const unsigned int word, u16 data) 1084{ 1085 rt2x00dev->eeprom[word] = cpu_to_le16(data); 1086} 1087 1088/* 1089 * Chipset handlers 1090 */ 1091static inline void rt2x00_set_chip(struct rt2x00_dev *rt2x00dev, 1092 const u16 rt, const u16 rf, const u16 rev) 1093{ 1094 rt2x00dev->chip.rt = rt; 1095 rt2x00dev->chip.rf = rf; 1096 rt2x00dev->chip.rev = rev; 1097 1098 INFO(rt2x00dev, 1099 "Chipset detected - rt: %04x, rf: %04x, rev: %04x.\n", 1100 rt2x00dev->chip.rt, rt2x00dev->chip.rf, rt2x00dev->chip.rev); 1101} 1102 1103static inline bool rt2x00_rt(struct rt2x00_dev *rt2x00dev, const u16 rt) 1104{ 1105 return (rt2x00dev->chip.rt == rt); 1106} 1107 1108static inline bool rt2x00_rf(struct rt2x00_dev *rt2x00dev, const u16 rf) 1109{ 1110 return (rt2x00dev->chip.rf == rf); 1111} 1112 1113static inline u16 rt2x00_rev(struct rt2x00_dev *rt2x00dev) 1114{ 1115 return rt2x00dev->chip.rev; 1116} 1117 1118static inline bool rt2x00_rt_rev(struct rt2x00_dev *rt2x00dev, 1119 const u16 rt, const u16 rev) 1120{ 1121 return (rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) == rev); 1122} 1123 1124static inline bool rt2x00_rt_rev_lt(struct rt2x00_dev *rt2x00dev, 1125 const u16 rt, const u16 rev) 1126{ 1127 return (rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) < rev); 1128} 1129 1130static inline bool rt2x00_rt_rev_gte(struct rt2x00_dev *rt2x00dev, 1131 const u16 rt, const u16 rev) 1132{ 1133 return (rt2x00_rt(rt2x00dev, rt) && rt2x00_rev(rt2x00dev) >= rev); 1134} 1135 1136static inline void rt2x00_set_chip_intf(struct rt2x00_dev *rt2x00dev, 1137 enum rt2x00_chip_intf intf) 1138{ 1139 rt2x00dev->chip.intf = intf; 1140} 1141 1142static inline bool rt2x00_intf(struct rt2x00_dev *rt2x00dev, 1143 enum rt2x00_chip_intf intf) 1144{ 1145 return (rt2x00dev->chip.intf == intf); 1146} 1147 1148static inline bool rt2x00_is_pci(struct rt2x00_dev *rt2x00dev) 1149{ 1150 return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_PCI) || 1151 rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_PCIE); 1152} 1153 1154static inline bool rt2x00_is_pcie(struct rt2x00_dev *rt2x00dev) 1155{ 1156 return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_PCIE); 1157} 1158 1159static inline bool rt2x00_is_usb(struct rt2x00_dev *rt2x00dev) 1160{ 1161 return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_USB); 1162} 1163 1164static inline bool rt2x00_is_soc(struct rt2x00_dev *rt2x00dev) 1165{ 1166 return rt2x00_intf(rt2x00dev, RT2X00_CHIP_INTF_SOC); 1167} 1168 1169/** 1170 * rt2x00queue_map_txskb - Map a skb into DMA for TX purposes. 1171 * @entry: Pointer to &struct queue_entry 1172 * 1173 * Returns -ENOMEM if mapping fail, 0 otherwise. 1174 */ 1175int rt2x00queue_map_txskb(struct queue_entry *entry); 1176 1177/** 1178 * rt2x00queue_unmap_skb - Unmap a skb from DMA. 1179 * @entry: Pointer to &struct queue_entry 1180 */ 1181void rt2x00queue_unmap_skb(struct queue_entry *entry); 1182 1183/** 1184 * rt2x00queue_get_tx_queue - Convert tx queue index to queue pointer 1185 * @rt2x00dev: Pointer to &struct rt2x00_dev. 1186 * @queue: rt2x00 queue index (see &enum data_queue_qid). 1187 * 1188 * Returns NULL for non tx queues. 1189 */ 1190static inline struct data_queue * 1191rt2x00queue_get_tx_queue(struct rt2x00_dev *rt2x00dev, 1192 const enum data_queue_qid queue) 1193{ 1194 if (queue < rt2x00dev->ops->tx_queues && rt2x00dev->tx) 1195 return &rt2x00dev->tx[queue]; 1196 1197 if (queue == QID_ATIM) 1198 return rt2x00dev->atim; 1199 1200 return NULL; 1201} 1202 1203/** 1204 * rt2x00queue_get_entry - Get queue entry where the given index points to. 1205 * @queue: Pointer to &struct data_queue from where we obtain the entry. 1206 * @index: Index identifier for obtaining the correct index. 1207 */ 1208struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue, 1209 enum queue_index index); 1210 1211/** 1212 * rt2x00queue_pause_queue - Pause a data queue 1213 * @queue: Pointer to &struct data_queue. 1214 * 1215 * This function will pause the data queue locally, preventing 1216 * new frames to be added to the queue (while the hardware is 1217 * still allowed to run). 1218 */ 1219void rt2x00queue_pause_queue(struct data_queue *queue); 1220 1221/** 1222 * rt2x00queue_unpause_queue - unpause a data queue 1223 * @queue: Pointer to &struct data_queue. 1224 * 1225 * This function will unpause the data queue locally, allowing 1226 * new frames to be added to the queue again. 1227 */ 1228void rt2x00queue_unpause_queue(struct data_queue *queue); 1229 1230/** 1231 * rt2x00queue_start_queue - Start a data queue 1232 * @queue: Pointer to &struct data_queue. 1233 * 1234 * This function will start handling all pending frames in the queue. 1235 */ 1236void rt2x00queue_start_queue(struct data_queue *queue); 1237 1238/** 1239 * rt2x00queue_stop_queue - Halt a data queue 1240 * @queue: Pointer to &struct data_queue. 1241 * 1242 * This function will stop all pending frames in the queue. 1243 */ 1244void rt2x00queue_stop_queue(struct data_queue *queue); 1245 1246/** 1247 * rt2x00queue_flush_queue - Flush a data queue 1248 * @queue: Pointer to &struct data_queue. 1249 * @drop: True to drop all pending frames. 1250 * 1251 * This function will flush the queue. After this call 1252 * the queue is guaranteed to be empty. 1253 */ 1254void rt2x00queue_flush_queue(struct data_queue *queue, bool drop); 1255 1256/** 1257 * rt2x00queue_start_queues - Start all data queues 1258 * @rt2x00dev: Pointer to &struct rt2x00_dev. 1259 * 1260 * This function will loop through all available queues to start them 1261 */ 1262void rt2x00queue_start_queues(struct rt2x00_dev *rt2x00dev); 1263 1264/** 1265 * rt2x00queue_stop_queues - Halt all data queues 1266 * @rt2x00dev: Pointer to &struct rt2x00_dev. 1267 * 1268 * This function will loop through all available queues to stop 1269 * any pending frames. 1270 */ 1271void rt2x00queue_stop_queues(struct rt2x00_dev *rt2x00dev); 1272 1273/** 1274 * rt2x00queue_flush_queues - Flush all data queues 1275 * @rt2x00dev: Pointer to &struct rt2x00_dev. 1276 * @drop: True to drop all pending frames. 1277 * 1278 * This function will loop through all available queues to flush 1279 * any pending frames. 1280 */ 1281void rt2x00queue_flush_queues(struct rt2x00_dev *rt2x00dev, bool drop); 1282 1283/* 1284 * Debugfs handlers. 1285 */ 1286/** 1287 * rt2x00debug_dump_frame - Dump a frame to userspace through debugfs. 1288 * @rt2x00dev: Pointer to &struct rt2x00_dev. 1289 * @type: The type of frame that is being dumped. 1290 * @skb: The skb containing the frame to be dumped. 1291 */ 1292#ifdef CONFIG_RT2X00_LIB_DEBUGFS 1293void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev, 1294 enum rt2x00_dump_type type, struct sk_buff *skb); 1295#else 1296static inline void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev, 1297 enum rt2x00_dump_type type, 1298 struct sk_buff *skb) 1299{ 1300} 1301#endif /* CONFIG_RT2X00_LIB_DEBUGFS */ 1302 1303/* 1304 * Utility functions. 1305 */ 1306u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev, 1307 struct ieee80211_vif *vif); 1308 1309/* 1310 * Interrupt context handlers. 1311 */ 1312void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev); 1313void rt2x00lib_pretbtt(struct rt2x00_dev *rt2x00dev); 1314void rt2x00lib_dmastart(struct queue_entry *entry); 1315void rt2x00lib_dmadone(struct queue_entry *entry); 1316void rt2x00lib_txdone(struct queue_entry *entry, 1317 struct txdone_entry_desc *txdesc); 1318void rt2x00lib_txdone_noinfo(struct queue_entry *entry, u32 status); 1319void rt2x00lib_rxdone(struct queue_entry *entry, gfp_t gfp); 1320 1321/* 1322 * mac80211 handlers. 1323 */ 1324void rt2x00mac_tx(struct ieee80211_hw *hw, 1325 struct ieee80211_tx_control *control, 1326 struct sk_buff *skb); 1327int rt2x00mac_start(struct ieee80211_hw *hw); 1328void rt2x00mac_stop(struct ieee80211_hw *hw); 1329int rt2x00mac_add_interface(struct ieee80211_hw *hw, 1330 struct ieee80211_vif *vif); 1331void rt2x00mac_remove_interface(struct ieee80211_hw *hw, 1332 struct ieee80211_vif *vif); 1333int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed); 1334void rt2x00mac_configure_filter(struct ieee80211_hw *hw, 1335 unsigned int changed_flags, 1336 unsigned int *total_flags, 1337 u64 multicast); 1338int rt2x00mac_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta, 1339 bool set); 1340#ifdef CONFIG_RT2X00_LIB_CRYPTO 1341int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, 1342 struct ieee80211_vif *vif, struct ieee80211_sta *sta, 1343 struct ieee80211_key_conf *key); 1344#else 1345#define rt2x00mac_set_key NULL 1346#endif /* CONFIG_RT2X00_LIB_CRYPTO */ 1347int rt2x00mac_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 1348 struct ieee80211_sta *sta); 1349int rt2x00mac_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 1350 struct ieee80211_sta *sta); 1351void rt2x00mac_sw_scan_start(struct ieee80211_hw *hw); 1352void rt2x00mac_sw_scan_complete(struct ieee80211_hw *hw); 1353int rt2x00mac_get_stats(struct ieee80211_hw *hw, 1354 struct ieee80211_low_level_stats *stats); 1355void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw, 1356 struct ieee80211_vif *vif, 1357 struct ieee80211_bss_conf *bss_conf, 1358 u32 changes); 1359int rt2x00mac_conf_tx(struct ieee80211_hw *hw, 1360 struct ieee80211_vif *vif, u16 queue, 1361 const struct ieee80211_tx_queue_params *params); 1362void rt2x00mac_rfkill_poll(struct ieee80211_hw *hw); 1363void rt2x00mac_flush(struct ieee80211_hw *hw, bool drop); 1364int rt2x00mac_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant); 1365int rt2x00mac_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant); 1366void rt2x00mac_get_ringparam(struct ieee80211_hw *hw, 1367 u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); 1368bool rt2x00mac_tx_frames_pending(struct ieee80211_hw *hw); 1369 1370/* 1371 * Driver allocation handlers. 1372 */ 1373int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev); 1374void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev); 1375#ifdef CONFIG_PM 1376int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state); 1377int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev); 1378#endif /* CONFIG_PM */ 1379 1380#endif /* RT2X00_H */ 1381