2         Copyright (C) 2004 - 2008 rt2x00 SourceForge Project
 
   3         <http://rt2x00.serialmonkey.com>
 
   5         This program is free software; you can redistribute it and/or modify
 
   6         it under the terms of the GNU General Public License as published by
 
   7         the Free Software Foundation; either version 2 of the License, or
 
   8         (at your option) any later version.
 
  10         This program is distributed in the hope that it will be useful,
 
  11         but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  12         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
  13         GNU General Public License for more details.
 
  15         You should have received a copy of the GNU General Public License
 
  16         along with this program; if not, write to the
 
  17         Free Software Foundation, Inc.,
 
  18         59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
  23         Abstract: rt2x00 generic mac80211 routines.
 
  26 #include <linux/kernel.h>
 
  27 #include <linux/module.h>
 
  30 #include "rt2x00lib.h"
 
  32 static int rt2x00mac_tx_rts_cts(struct rt2x00_dev *rt2x00dev,
 
  33                                 struct data_queue *queue,
 
  34                                 struct sk_buff *frag_skb)
 
  36         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(frag_skb);
 
  37         struct ieee80211_tx_info *rts_info;
 
  39         unsigned int data_length;
 
  42         if (tx_info->flags & IEEE80211_TX_CTL_USE_CTS_PROTECT)
 
  43                 data_length = sizeof(struct ieee80211_cts);
 
  45                 data_length = sizeof(struct ieee80211_rts);
 
  47         skb = dev_alloc_skb(data_length + rt2x00dev->hw->extra_tx_headroom);
 
  49                 WARNING(rt2x00dev, "Failed to create RTS/CTS frame.\n");
 
  53         skb_reserve(skb, rt2x00dev->hw->extra_tx_headroom);
 
  54         skb_put(skb, data_length);
 
  57          * Copy TX information over from original frame to
 
  58          * RTS/CTS frame. Note that we set the no encryption flag
 
  59          * since we don't want this frame to be encrypted.
 
  60          * RTS frames should be acked, while CTS-to-self frames
 
  61          * should not. The ready for TX flag is cleared to prevent
 
  62          * it being automatically send when the descriptor is
 
  63          * written to the hardware.
 
  65         memcpy(skb->cb, frag_skb->cb, sizeof(skb->cb));
 
  66         rts_info = IEEE80211_SKB_CB(skb);
 
  67         rts_info->flags &= ~IEEE80211_TX_CTL_USE_RTS_CTS;
 
  68         rts_info->flags &= ~IEEE80211_TX_CTL_USE_CTS_PROTECT;
 
  69         rts_info->flags &= ~IEEE80211_TX_CTL_REQ_TX_STATUS;
 
  71         if (tx_info->flags & IEEE80211_TX_CTL_USE_CTS_PROTECT)
 
  72                 rts_info->flags |= IEEE80211_TX_CTL_NO_ACK;
 
  74                 rts_info->flags &= ~IEEE80211_TX_CTL_NO_ACK;
 
  76         skb->do_not_encrypt = 1;
 
  79          * RTS/CTS frame should use the length of the frame plus any
 
  80          * encryption overhead that will be added by the hardware.
 
  82 #ifdef CONFIG_RT2X00_LIB_CRYPTO
 
  83         if (!frag_skb->do_not_encrypt)
 
  84                 data_length += rt2x00crypto_tx_overhead(tx_info);
 
  85 #endif /* CONFIG_RT2X00_LIB_CRYPTO */
 
  87         if (tx_info->flags & IEEE80211_TX_CTL_USE_CTS_PROTECT)
 
  88                 ieee80211_ctstoself_get(rt2x00dev->hw, tx_info->control.vif,
 
  89                                         frag_skb->data, data_length, tx_info,
 
  90                                         (struct ieee80211_cts *)(skb->data));
 
  92                 ieee80211_rts_get(rt2x00dev->hw, tx_info->control.vif,
 
  93                                   frag_skb->data, data_length, tx_info,
 
  94                                   (struct ieee80211_rts *)(skb->data));
 
  96         retval = rt2x00queue_write_tx_frame(queue, skb);
 
  98                 dev_kfree_skb_any(skb);
 
  99                 WARNING(rt2x00dev, "Failed to send RTS/CTS frame.\n");
 
 105 int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
 
 107         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 108         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
 
 109         struct ieee80211_hdr *ieee80211hdr = (struct ieee80211_hdr *)skb->data;
 
 110         enum data_queue_qid qid = skb_get_queue_mapping(skb);
 
 111         struct data_queue *queue;
 
 115          * Mac80211 might be calling this function while we are trying
 
 116          * to remove the device or perhaps suspending it.
 
 117          * Note that we can only stop the TX queues inside the TX path
 
 118          * due to possible race conditions in mac80211.
 
 120         if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
 
 124          * Determine which queue to put packet on.
 
 126         if (tx_info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM &&
 
 127             test_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags))
 
 128                 queue = rt2x00queue_get_queue(rt2x00dev, QID_ATIM);
 
 130                 queue = rt2x00queue_get_queue(rt2x00dev, qid);
 
 131         if (unlikely(!queue)) {
 
 133                       "Attempt to send packet over invalid queue %d.\n"
 
 134                       "Please file bug report to %s.\n", qid, DRV_PROJECT);
 
 135                 dev_kfree_skb_any(skb);
 
 140          * If CTS/RTS is required. create and queue that frame first.
 
 141          * Make sure we have at least enough entries available to send
 
 142          * this CTS/RTS frame as well as the data frame.
 
 143          * Note that when the driver has set the set_rts_threshold()
 
 144          * callback function it doesn't need software generation of
 
 145          * either RTS or CTS-to-self frame and handles everything
 
 146          * inside the hardware.
 
 148         frame_control = le16_to_cpu(ieee80211hdr->frame_control);
 
 149         if ((tx_info->flags & (IEEE80211_TX_CTL_USE_RTS_CTS |
 
 150                                IEEE80211_TX_CTL_USE_CTS_PROTECT)) &&
 
 151             !rt2x00dev->ops->hw->set_rts_threshold) {
 
 152                 if (rt2x00queue_available(queue) <= 1)
 
 155                 if (rt2x00mac_tx_rts_cts(rt2x00dev, queue, skb))
 
 159         if (rt2x00queue_write_tx_frame(queue, skb))
 
 162         if (rt2x00queue_threshold(queue))
 
 163                 ieee80211_stop_queue(rt2x00dev->hw, qid);
 
 168         ieee80211_stop_queue(rt2x00dev->hw, qid);
 
 169         dev_kfree_skb_any(skb);
 
 172 EXPORT_SYMBOL_GPL(rt2x00mac_tx);
 
 174 int rt2x00mac_start(struct ieee80211_hw *hw)
 
 176         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 178         if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
 
 181         return rt2x00lib_start(rt2x00dev);
 
 183 EXPORT_SYMBOL_GPL(rt2x00mac_start);
 
 185 void rt2x00mac_stop(struct ieee80211_hw *hw)
 
 187         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 189         if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
 
 192         rt2x00lib_stop(rt2x00dev);
 
 194 EXPORT_SYMBOL_GPL(rt2x00mac_stop);
 
 196 int rt2x00mac_add_interface(struct ieee80211_hw *hw,
 
 197                             struct ieee80211_if_init_conf *conf)
 
 199         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 200         struct rt2x00_intf *intf = vif_to_intf(conf->vif);
 
 201         struct data_queue *queue = rt2x00queue_get_queue(rt2x00dev, QID_BEACON);
 
 202         struct queue_entry *entry = NULL;
 
 206          * Don't allow interfaces to be added
 
 207          * the device has disappeared.
 
 209         if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) ||
 
 210             !test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
 
 213         switch (conf->type) {
 
 214         case NL80211_IFTYPE_AP:
 
 216                  * We don't support mixed combinations of
 
 217                  * sta and ap interfaces.
 
 219                 if (rt2x00dev->intf_sta_count)
 
 223                  * Check if we exceeded the maximum amount
 
 224                  * of supported interfaces.
 
 226                 if (rt2x00dev->intf_ap_count >= rt2x00dev->ops->max_ap_intf)
 
 230         case NL80211_IFTYPE_STATION:
 
 231         case NL80211_IFTYPE_ADHOC:
 
 233                  * We don't support mixed combinations of
 
 234                  * sta and ap interfaces.
 
 236                 if (rt2x00dev->intf_ap_count)
 
 240                  * Check if we exceeded the maximum amount
 
 241                  * of supported interfaces.
 
 243                 if (rt2x00dev->intf_sta_count >= rt2x00dev->ops->max_sta_intf)
 
 252          * Loop through all beacon queues to find a free
 
 253          * entry. Since there are as much beacon entries
 
 254          * as the maximum interfaces, this search shouldn't
 
 257         for (i = 0; i < queue->limit; i++) {
 
 258                 entry = &queue->entries[i];
 
 259                 if (!test_and_set_bit(ENTRY_BCN_ASSIGNED, &entry->flags))
 
 263         if (unlikely(i == queue->limit))
 
 267          * We are now absolutely sure the interface can be created,
 
 268          * increase interface count and start initialization.
 
 271         if (conf->type == NL80211_IFTYPE_AP)
 
 272                 rt2x00dev->intf_ap_count++;
 
 274                 rt2x00dev->intf_sta_count++;
 
 276         spin_lock_init(&intf->lock);
 
 277         spin_lock_init(&intf->seqlock);
 
 278         intf->beacon = entry;
 
 280         if (conf->type == NL80211_IFTYPE_AP)
 
 281                 memcpy(&intf->bssid, conf->mac_addr, ETH_ALEN);
 
 282         memcpy(&intf->mac, conf->mac_addr, ETH_ALEN);
 
 285          * The MAC adddress must be configured after the device
 
 286          * has been initialized. Otherwise the device can reset
 
 289         rt2x00lib_config_intf(rt2x00dev, intf, conf->type, intf->mac, NULL);
 
 292          * Some filters depend on the current working mode. We can force
 
 293          * an update during the next configure_filter() run by mac80211 by
 
 294          * resetting the current packet_filter state.
 
 296         rt2x00dev->packet_filter = 0;
 
 300 EXPORT_SYMBOL_GPL(rt2x00mac_add_interface);
 
 302 void rt2x00mac_remove_interface(struct ieee80211_hw *hw,
 
 303                                 struct ieee80211_if_init_conf *conf)
 
 305         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 306         struct rt2x00_intf *intf = vif_to_intf(conf->vif);
 
 309          * Don't allow interfaces to be remove while
 
 310          * either the device has disappeared or when
 
 311          * no interface is present.
 
 313         if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) ||
 
 314             (conf->type == NL80211_IFTYPE_AP && !rt2x00dev->intf_ap_count) ||
 
 315             (conf->type != NL80211_IFTYPE_AP && !rt2x00dev->intf_sta_count))
 
 318         if (conf->type == NL80211_IFTYPE_AP)
 
 319                 rt2x00dev->intf_ap_count--;
 
 321                 rt2x00dev->intf_sta_count--;
 
 324          * Release beacon entry so it is available for
 
 325          * new interfaces again.
 
 327         clear_bit(ENTRY_BCN_ASSIGNED, &intf->beacon->flags);
 
 330          * Make sure the bssid and mac address registers
 
 331          * are cleared to prevent false ACKing of frames.
 
 333         rt2x00lib_config_intf(rt2x00dev, intf,
 
 334                               NL80211_IFTYPE_UNSPECIFIED, NULL, NULL);
 
 336 EXPORT_SYMBOL_GPL(rt2x00mac_remove_interface);
 
 338 int rt2x00mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf)
 
 340         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 345          * Mac80211 might be calling this function while we are trying
 
 346          * to remove the device or perhaps suspending it.
 
 348         if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
 
 352          * Only change device state when the radio is enabled. It does not
 
 353          * matter what parameters we have configured when the radio is disabled
 
 354          * because we won't be able to send or receive anyway. Also note that
 
 355          * some configuration parameters (e.g. channel and antenna values) can
 
 356          * only be set when the radio is enabled.
 
 358         radio_on = test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags);
 
 359         if (conf->radio_enabled) {
 
 360                 /* For programming the values, we have to turn RX off */
 
 361                 rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
 
 363                 /* Enable the radio */
 
 364                 status = rt2x00lib_enable_radio(rt2x00dev);
 
 365                 if (unlikely(status))
 
 369                  * When we've just turned on the radio, we want to reprogram
 
 370                  * everything to ensure a consistent state
 
 372                 rt2x00lib_config(rt2x00dev, conf, !radio_on);
 
 374                 /* Turn RX back on */
 
 375                 rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
 
 377                 /* Disable the radio */
 
 378                 rt2x00lib_disable_radio(rt2x00dev);
 
 383 EXPORT_SYMBOL_GPL(rt2x00mac_config);
 
 385 int rt2x00mac_config_interface(struct ieee80211_hw *hw,
 
 386                                struct ieee80211_vif *vif,
 
 387                                struct ieee80211_if_conf *conf)
 
 389         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 390         struct rt2x00_intf *intf = vif_to_intf(vif);
 
 391         int update_bssid = 0;
 
 395          * Mac80211 might be calling this function while we are trying
 
 396          * to remove the device or perhaps suspending it.
 
 398         if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
 
 401         spin_lock(&intf->lock);
 
 404          * conf->bssid can be NULL if coming from the internal
 
 405          * beacon update routine.
 
 407         if (conf->changed & IEEE80211_IFCC_BSSID && conf->bssid) {
 
 409                 memcpy(&intf->bssid, conf->bssid, ETH_ALEN);
 
 412         spin_unlock(&intf->lock);
 
 415          * Call rt2x00_config_intf() outside of the spinlock context since
 
 416          * the call will sleep for USB drivers. By using the ieee80211_if_conf
 
 417          * values as arguments we make keep access to rt2x00_intf thread safe
 
 418          * even without the lock.
 
 420         rt2x00lib_config_intf(rt2x00dev, intf, vif->type, NULL,
 
 421                               update_bssid ? conf->bssid : NULL);
 
 426         if (conf->changed & IEEE80211_IFCC_BEACON)
 
 427                 status = rt2x00queue_update_beacon(rt2x00dev, vif);
 
 431 EXPORT_SYMBOL_GPL(rt2x00mac_config_interface);
 
 433 void rt2x00mac_configure_filter(struct ieee80211_hw *hw,
 
 434                                 unsigned int changed_flags,
 
 435                                 unsigned int *total_flags,
 
 436                                 int mc_count, struct dev_addr_list *mc_list)
 
 438         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 441          * Mask off any flags we are going to ignore
 
 442          * from the total_flags field.
 
 453          * Apply some rules to the filters:
 
 454          * - Some filters imply different filters to be set.
 
 455          * - Some things we can't filter out at all.
 
 456          * - Multicast filter seems to kill broadcast traffic so never use it.
 
 458         *total_flags |= FIF_ALLMULTI;
 
 459         if (*total_flags & FIF_OTHER_BSS ||
 
 460             *total_flags & FIF_PROMISC_IN_BSS)
 
 461                 *total_flags |= FIF_PROMISC_IN_BSS | FIF_OTHER_BSS;
 
 464          * Check if there is any work left for us.
 
 466         if (rt2x00dev->packet_filter == *total_flags)
 
 468         rt2x00dev->packet_filter = *total_flags;
 
 470         if (!test_bit(DRIVER_REQUIRE_SCHEDULED, &rt2x00dev->flags))
 
 471                 rt2x00dev->ops->lib->config_filter(rt2x00dev, *total_flags);
 
 473                 queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->filter_work);
 
 475 EXPORT_SYMBOL_GPL(rt2x00mac_configure_filter);
 
 477 #ifdef CONFIG_RT2X00_LIB_CRYPTO
 
 478 int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
 
 479                       const u8 *local_address, const u8 *address,
 
 480                       struct ieee80211_key_conf *key)
 
 482         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 483         int (*set_key) (struct rt2x00_dev *rt2x00dev,
 
 484                         struct rt2x00lib_crypto *crypto,
 
 485                         struct ieee80211_key_conf *key);
 
 486         struct rt2x00lib_crypto crypto;
 
 488         if (!test_bit(CONFIG_SUPPORT_HW_CRYPTO, &rt2x00dev->flags))
 
 490         else if (key->keylen > 32)
 
 493         memset(&crypto, 0, sizeof(crypto));
 
 496          * When in STA mode, bssidx is always 0 otherwise local_address[5]
 
 497          * contains the bss number, see BSS_ID_MASK comments for details.
 
 499         if (rt2x00dev->intf_sta_count)
 
 503                     local_address[5] & (rt2x00dev->ops->max_ap_intf - 1);
 
 505         crypto.cipher = rt2x00crypto_key_to_cipher(key);
 
 506         if (crypto.cipher == CIPHER_NONE)
 
 510         crypto.address = address;
 
 512         if (crypto.cipher == CIPHER_TKIP) {
 
 513                 if (key->keylen > NL80211_TKIP_DATA_OFFSET_ENCR_KEY)
 
 515                                &key->key[NL80211_TKIP_DATA_OFFSET_ENCR_KEY],
 
 518                 if (key->keylen > NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY)
 
 519                         memcpy(&crypto.tx_mic,
 
 520                                &key->key[NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY],
 
 521                                sizeof(crypto.tx_mic));
 
 523                 if (key->keylen > NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY)
 
 524                         memcpy(&crypto.rx_mic,
 
 525                                &key->key[NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY],
 
 526                                sizeof(crypto.rx_mic));
 
 528                 memcpy(&crypto.key, &key->key[0], key->keylen);
 
 531          * Each BSS has a maximum of 4 shared keys.
 
 532          * Shared key index values:
 
 540          * Both pairwise as shared key indeces are determined by
 
 541          * driver. This is required because the hardware requires
 
 542          * keys to be assigned in correct order (When key 1 is
 
 543          * provided but key 0 is not, then the key is not found
 
 544          * by the hardware during RX).
 
 549         if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
 
 550                 set_key = rt2x00dev->ops->lib->config_pairwise_key;
 
 552                 set_key = rt2x00dev->ops->lib->config_shared_key;
 
 557         return set_key(rt2x00dev, &crypto, key);
 
 559 EXPORT_SYMBOL_GPL(rt2x00mac_set_key);
 
 560 #endif /* CONFIG_RT2X00_LIB_CRYPTO */
 
 562 int rt2x00mac_get_stats(struct ieee80211_hw *hw,
 
 563                         struct ieee80211_low_level_stats *stats)
 
 565         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 568          * The dot11ACKFailureCount, dot11RTSFailureCount and
 
 569          * dot11RTSSuccessCount are updated in interrupt time.
 
 570          * dot11FCSErrorCount is updated in the link tuner.
 
 572         memcpy(stats, &rt2x00dev->low_level_stats, sizeof(*stats));
 
 576 EXPORT_SYMBOL_GPL(rt2x00mac_get_stats);
 
 578 int rt2x00mac_get_tx_stats(struct ieee80211_hw *hw,
 
 579                            struct ieee80211_tx_queue_stats *stats)
 
 581         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 584         for (i = 0; i < rt2x00dev->ops->tx_queues; i++) {
 
 585                 stats[i].len = rt2x00dev->tx[i].length;
 
 586                 stats[i].limit = rt2x00dev->tx[i].limit;
 
 587                 stats[i].count = rt2x00dev->tx[i].count;
 
 592 EXPORT_SYMBOL_GPL(rt2x00mac_get_tx_stats);
 
 594 void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
 
 595                                 struct ieee80211_vif *vif,
 
 596                                 struct ieee80211_bss_conf *bss_conf,
 
 599         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 600         struct rt2x00_intf *intf = vif_to_intf(vif);
 
 601         unsigned int delayed = 0;
 
 604          * When the association status has changed we must reset the link
 
 605          * tuner counter. This is because some drivers determine if they
 
 606          * should perform link tuning based on the number of seconds
 
 607          * while associated or not associated.
 
 609         if (changes & BSS_CHANGED_ASSOC) {
 
 610                 rt2x00dev->link.count = 0;
 
 613                         rt2x00dev->intf_associated++;
 
 615                         rt2x00dev->intf_associated--;
 
 617                 if (!test_bit(DRIVER_REQUIRE_SCHEDULED, &rt2x00dev->flags))
 
 618                         rt2x00leds_led_assoc(rt2x00dev,
 
 619                                              !!rt2x00dev->intf_associated);
 
 621                         delayed |= DELAYED_LED_ASSOC;
 
 625          * When the erp information has changed, we should perform
 
 626          * additional configuration steps. For all other changes we are done.
 
 628         if (changes & (BSS_CHANGED_ERP_PREAMBLE | BSS_CHANGED_ERP_CTS_PROT)) {
 
 629                 if (!test_bit(DRIVER_REQUIRE_SCHEDULED, &rt2x00dev->flags))
 
 630                         rt2x00lib_config_erp(rt2x00dev, intf, bss_conf);
 
 632                         delayed |= DELAYED_CONFIG_ERP;
 
 635         spin_lock(&intf->lock);
 
 636         memcpy(&intf->conf, bss_conf, sizeof(*bss_conf));
 
 638                 intf->delayed_flags |= delayed;
 
 639                 schedule_work(&rt2x00dev->intf_work);
 
 641         spin_unlock(&intf->lock);
 
 643 EXPORT_SYMBOL_GPL(rt2x00mac_bss_info_changed);
 
 645 int rt2x00mac_conf_tx(struct ieee80211_hw *hw, u16 queue_idx,
 
 646                       const struct ieee80211_tx_queue_params *params)
 
 648         struct rt2x00_dev *rt2x00dev = hw->priv;
 
 649         struct data_queue *queue;
 
 651         queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
 
 652         if (unlikely(!queue))
 
 656          * The passed variables are stored as real value ((2^n)-1).
 
 657          * Ralink registers require to know the bit number 'n'.
 
 659         if (params->cw_min > 0)
 
 660                 queue->cw_min = fls(params->cw_min);
 
 662                 queue->cw_min = 5; /* cw_min: 2^5 = 32. */
 
 664         if (params->cw_max > 0)
 
 665                 queue->cw_max = fls(params->cw_max);
 
 667                 queue->cw_max = 10; /* cw_min: 2^10 = 1024. */
 
 669         queue->aifs = params->aifs;
 
 670         queue->txop = params->txop;
 
 673              "Configured TX queue %d - CWmin: %d, CWmax: %d, Aifs: %d, TXop: %d.\n",
 
 674              queue_idx, queue->cw_min, queue->cw_max, queue->aifs, queue->txop);
 
 678 EXPORT_SYMBOL_GPL(rt2x00mac_conf_tx);