linux/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
<<
>>
Prefs
   1/*
   2        Copyright (C) 2010 Willow Garage <http://www.willowgarage.com>
   3        Copyright (C) 2004 - 2010 Ivo van Doorn <IvDoorn@gmail.com>
   4        <http://rt2x00.serialmonkey.com>
   5
   6        This program is free software; you can redistribute it and/or modify
   7        it under the terms of the GNU General Public License as published by
   8        the Free Software Foundation; either version 2 of the License, or
   9        (at your option) any later version.
  10
  11        This program is distributed in the hope that it will be useful,
  12        but WITHOUT ANY WARRANTY; without even the implied warranty of
  13        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14        GNU General Public License for more details.
  15
  16        You should have received a copy of the GNU General Public License
  17        along with this program; if not, see <http://www.gnu.org/licenses/>.
  18 */
  19
  20/*
  21        Module: rt2x00lib
  22        Abstract: rt2x00 generic device routines.
  23 */
  24
  25#include <linux/kernel.h>
  26#include <linux/module.h>
  27#include <linux/slab.h>
  28#include <linux/log2.h>
  29#include <linux/of.h>
  30#include <linux/of_net.h>
  31
  32#include "rt2x00.h"
  33#include "rt2x00lib.h"
  34
  35/*
  36 * Utility functions.
  37 */
  38u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev,
  39                         struct ieee80211_vif *vif)
  40{
  41        /*
  42         * When in STA mode, bssidx is always 0 otherwise local_address[5]
  43         * contains the bss number, see BSS_ID_MASK comments for details.
  44         */
  45        if (rt2x00dev->intf_sta_count)
  46                return 0;
  47        return vif->addr[5] & (rt2x00dev->ops->max_ap_intf - 1);
  48}
  49EXPORT_SYMBOL_GPL(rt2x00lib_get_bssidx);
  50
  51/*
  52 * Radio control handlers.
  53 */
  54int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev)
  55{
  56        int status;
  57
  58        /*
  59         * Don't enable the radio twice.
  60         * And check if the hardware button has been disabled.
  61         */
  62        if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
  63                return 0;
  64
  65        /*
  66         * Initialize all data queues.
  67         */
  68        rt2x00queue_init_queues(rt2x00dev);
  69
  70        /*
  71         * Enable radio.
  72         */
  73        status =
  74            rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_ON);
  75        if (status)
  76                return status;
  77
  78        rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_ON);
  79
  80        rt2x00leds_led_radio(rt2x00dev, true);
  81        rt2x00led_led_activity(rt2x00dev, true);
  82
  83        set_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags);
  84
  85        /*
  86         * Enable queues.
  87         */
  88        rt2x00queue_start_queues(rt2x00dev);
  89        rt2x00link_start_tuner(rt2x00dev);
  90
  91        /*
  92         * Start watchdog monitoring.
  93         */
  94        rt2x00link_start_watchdog(rt2x00dev);
  95
  96        return 0;
  97}
  98
  99void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)
 100{
 101        if (!test_and_clear_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 102                return;
 103
 104        /*
 105         * Stop watchdog monitoring.
 106         */
 107        rt2x00link_stop_watchdog(rt2x00dev);
 108
 109        /*
 110         * Stop all queues
 111         */
 112        rt2x00link_stop_tuner(rt2x00dev);
 113        rt2x00queue_stop_queues(rt2x00dev);
 114        rt2x00queue_flush_queues(rt2x00dev, true);
 115
 116        /*
 117         * Disable radio.
 118         */
 119        rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_OFF);
 120        rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_OFF);
 121        rt2x00led_led_activity(rt2x00dev, false);
 122        rt2x00leds_led_radio(rt2x00dev, false);
 123}
 124
 125static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac,
 126                                          struct ieee80211_vif *vif)
 127{
 128        struct rt2x00_dev *rt2x00dev = data;
 129        struct rt2x00_intf *intf = vif_to_intf(vif);
 130
 131        /*
 132         * It is possible the radio was disabled while the work had been
 133         * scheduled. If that happens we should return here immediately,
 134         * note that in the spinlock protected area above the delayed_flags
 135         * have been cleared correctly.
 136         */
 137        if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 138                return;
 139
 140        if (test_and_clear_bit(DELAYED_UPDATE_BEACON, &intf->delayed_flags)) {
 141                mutex_lock(&intf->beacon_skb_mutex);
 142                rt2x00queue_update_beacon(rt2x00dev, vif);
 143                mutex_unlock(&intf->beacon_skb_mutex);
 144        }
 145}
 146
 147static void rt2x00lib_intf_scheduled(struct work_struct *work)
 148{
 149        struct rt2x00_dev *rt2x00dev =
 150            container_of(work, struct rt2x00_dev, intf_work);
 151
 152        /*
 153         * Iterate over each interface and perform the
 154         * requested configurations.
 155         */
 156        ieee80211_iterate_active_interfaces(rt2x00dev->hw,
 157                                            IEEE80211_IFACE_ITER_RESUME_ALL,
 158                                            rt2x00lib_intf_scheduled_iter,
 159                                            rt2x00dev);
 160}
 161
 162static void rt2x00lib_autowakeup(struct work_struct *work)
 163{
 164        struct rt2x00_dev *rt2x00dev =
 165            container_of(work, struct rt2x00_dev, autowakeup_work.work);
 166
 167        if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
 168                return;
 169
 170        if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_AWAKE))
 171                rt2x00_err(rt2x00dev, "Device failed to wakeup\n");
 172        clear_bit(CONFIG_POWERSAVING, &rt2x00dev->flags);
 173}
 174
 175/*
 176 * Interrupt context handlers.
 177 */
 178static void rt2x00lib_bc_buffer_iter(void *data, u8 *mac,
 179                                     struct ieee80211_vif *vif)
 180{
 181        struct ieee80211_tx_control control = {};
 182        struct rt2x00_dev *rt2x00dev = data;
 183        struct sk_buff *skb;
 184
 185        /*
 186         * Only AP mode interfaces do broad- and multicast buffering
 187         */
 188        if (vif->type != NL80211_IFTYPE_AP)
 189                return;
 190
 191        /*
 192         * Send out buffered broad- and multicast frames
 193         */
 194        skb = ieee80211_get_buffered_bc(rt2x00dev->hw, vif);
 195        while (skb) {
 196                rt2x00mac_tx(rt2x00dev->hw, &control, skb);
 197                skb = ieee80211_get_buffered_bc(rt2x00dev->hw, vif);
 198        }
 199}
 200
 201static void rt2x00lib_beaconupdate_iter(void *data, u8 *mac,
 202                                        struct ieee80211_vif *vif)
 203{
 204        struct rt2x00_dev *rt2x00dev = data;
 205
 206        if (vif->type != NL80211_IFTYPE_AP &&
 207            vif->type != NL80211_IFTYPE_ADHOC &&
 208            vif->type != NL80211_IFTYPE_MESH_POINT &&
 209            vif->type != NL80211_IFTYPE_WDS)
 210                return;
 211
 212        /*
 213         * Update the beacon without locking. This is safe on PCI devices
 214         * as they only update the beacon periodically here. This should
 215         * never be called for USB devices.
 216         */
 217        WARN_ON(rt2x00_is_usb(rt2x00dev));
 218        rt2x00queue_update_beacon(rt2x00dev, vif);
 219}
 220
 221void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev)
 222{
 223        if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 224                return;
 225
 226        /* send buffered bc/mc frames out for every bssid */
 227        ieee80211_iterate_active_interfaces_atomic(
 228                rt2x00dev->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
 229                rt2x00lib_bc_buffer_iter, rt2x00dev);
 230        /*
 231         * Devices with pre tbtt interrupt don't need to update the beacon
 232         * here as they will fetch the next beacon directly prior to
 233         * transmission.
 234         */
 235        if (rt2x00_has_cap_pre_tbtt_interrupt(rt2x00dev))
 236                return;
 237
 238        /* fetch next beacon */
 239        ieee80211_iterate_active_interfaces_atomic(
 240                rt2x00dev->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
 241                rt2x00lib_beaconupdate_iter, rt2x00dev);
 242}
 243EXPORT_SYMBOL_GPL(rt2x00lib_beacondone);
 244
 245void rt2x00lib_pretbtt(struct rt2x00_dev *rt2x00dev)
 246{
 247        if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 248                return;
 249
 250        /* fetch next beacon */
 251        ieee80211_iterate_active_interfaces_atomic(
 252                rt2x00dev->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
 253                rt2x00lib_beaconupdate_iter, rt2x00dev);
 254}
 255EXPORT_SYMBOL_GPL(rt2x00lib_pretbtt);
 256
 257void rt2x00lib_dmastart(struct queue_entry *entry)
 258{
 259        set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
 260        rt2x00queue_index_inc(entry, Q_INDEX);
 261}
 262EXPORT_SYMBOL_GPL(rt2x00lib_dmastart);
 263
 264void rt2x00lib_dmadone(struct queue_entry *entry)
 265{
 266        set_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags);
 267        clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
 268        rt2x00queue_index_inc(entry, Q_INDEX_DMA_DONE);
 269}
 270EXPORT_SYMBOL_GPL(rt2x00lib_dmadone);
 271
 272static inline int rt2x00lib_txdone_bar_status(struct queue_entry *entry)
 273{
 274        struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
 275        struct ieee80211_bar *bar = (void *) entry->skb->data;
 276        struct rt2x00_bar_list_entry *bar_entry;
 277        int ret;
 278
 279        if (likely(!ieee80211_is_back_req(bar->frame_control)))
 280                return 0;
 281
 282        /*
 283         * Unlike all other frames, the status report for BARs does
 284         * not directly come from the hardware as it is incapable of
 285         * matching a BA to a previously send BAR. The hardware will
 286         * report all BARs as if they weren't acked at all.
 287         *
 288         * Instead the RX-path will scan for incoming BAs and set the
 289         * block_acked flag if it sees one that was likely caused by
 290         * a BAR from us.
 291         *
 292         * Remove remaining BARs here and return their status for
 293         * TX done processing.
 294         */
 295        ret = 0;
 296        rcu_read_lock();
 297        list_for_each_entry_rcu(bar_entry, &rt2x00dev->bar_list, list) {
 298                if (bar_entry->entry != entry)
 299                        continue;
 300
 301                spin_lock_bh(&rt2x00dev->bar_list_lock);
 302                /* Return whether this BAR was blockacked or not */
 303                ret = bar_entry->block_acked;
 304                /* Remove the BAR from our checklist */
 305                list_del_rcu(&bar_entry->list);
 306                spin_unlock_bh(&rt2x00dev->bar_list_lock);
 307                kfree_rcu(bar_entry, head);
 308
 309                break;
 310        }
 311        rcu_read_unlock();
 312
 313        return ret;
 314}
 315
 316void rt2x00lib_txdone(struct queue_entry *entry,
 317                      struct txdone_entry_desc *txdesc)
 318{
 319        struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
 320        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb);
 321        struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
 322        unsigned int header_length, i;
 323        u8 rate_idx, rate_flags, retry_rates;
 324        u8 skbdesc_flags = skbdesc->flags;
 325        bool success;
 326
 327        /*
 328         * Unmap the skb.
 329         */
 330        rt2x00queue_unmap_skb(entry);
 331
 332        /*
 333         * Remove the extra tx headroom from the skb.
 334         */
 335        skb_pull(entry->skb, rt2x00dev->extra_tx_headroom);
 336
 337        /*
 338         * Signal that the TX descriptor is no longer in the skb.
 339         */
 340        skbdesc->flags &= ~SKBDESC_DESC_IN_SKB;
 341
 342        /*
 343         * Determine the length of 802.11 header.
 344         */
 345        header_length = ieee80211_get_hdrlen_from_skb(entry->skb);
 346
 347        /*
 348         * Remove L2 padding which was added during
 349         */
 350        if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_L2PAD))
 351                rt2x00queue_remove_l2pad(entry->skb, header_length);
 352
 353        /*
 354         * If the IV/EIV data was stripped from the frame before it was
 355         * passed to the hardware, we should now reinsert it again because
 356         * mac80211 will expect the same data to be present it the
 357         * frame as it was passed to us.
 358         */
 359        if (rt2x00_has_cap_hw_crypto(rt2x00dev))
 360                rt2x00crypto_tx_insert_iv(entry->skb, header_length);
 361
 362        /*
 363         * Send frame to debugfs immediately, after this call is completed
 364         * we are going to overwrite the skb->cb array.
 365         */
 366        rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_TXDONE, entry);
 367
 368        /*
 369         * Determine if the frame has been successfully transmitted and
 370         * remove BARs from our check list while checking for their
 371         * TX status.
 372         */
 373        success =
 374            rt2x00lib_txdone_bar_status(entry) ||
 375            test_bit(TXDONE_SUCCESS, &txdesc->flags) ||
 376            test_bit(TXDONE_UNKNOWN, &txdesc->flags);
 377
 378        /*
 379         * Update TX statistics.
 380         */
 381        rt2x00dev->link.qual.tx_success += success;
 382        rt2x00dev->link.qual.tx_failed += !success;
 383
 384        rate_idx = skbdesc->tx_rate_idx;
 385        rate_flags = skbdesc->tx_rate_flags;
 386        retry_rates = test_bit(TXDONE_FALLBACK, &txdesc->flags) ?
 387            (txdesc->retry + 1) : 1;
 388
 389        /*
 390         * Initialize TX status
 391         */
 392        memset(&tx_info->status, 0, sizeof(tx_info->status));
 393        tx_info->status.ack_signal = 0;
 394
 395        /*
 396         * Frame was send with retries, hardware tried
 397         * different rates to send out the frame, at each
 398         * retry it lowered the rate 1 step except when the
 399         * lowest rate was used.
 400         */
 401        for (i = 0; i < retry_rates && i < IEEE80211_TX_MAX_RATES; i++) {
 402                tx_info->status.rates[i].idx = rate_idx - i;
 403                tx_info->status.rates[i].flags = rate_flags;
 404
 405                if (rate_idx - i == 0) {
 406                        /*
 407                         * The lowest rate (index 0) was used until the
 408                         * number of max retries was reached.
 409                         */
 410                        tx_info->status.rates[i].count = retry_rates - i;
 411                        i++;
 412                        break;
 413                }
 414                tx_info->status.rates[i].count = 1;
 415        }
 416        if (i < (IEEE80211_TX_MAX_RATES - 1))
 417                tx_info->status.rates[i].idx = -1; /* terminate */
 418
 419        if (!(tx_info->flags & IEEE80211_TX_CTL_NO_ACK)) {
 420                if (success)
 421                        tx_info->flags |= IEEE80211_TX_STAT_ACK;
 422                else
 423                        rt2x00dev->low_level_stats.dot11ACKFailureCount++;
 424        }
 425
 426        /*
 427         * Every single frame has it's own tx status, hence report
 428         * every frame as ampdu of size 1.
 429         *
 430         * TODO: if we can find out how many frames were aggregated
 431         * by the hw we could provide the real ampdu_len to mac80211
 432         * which would allow the rc algorithm to better decide on
 433         * which rates are suitable.
 434         */
 435        if (test_bit(TXDONE_AMPDU, &txdesc->flags) ||
 436            tx_info->flags & IEEE80211_TX_CTL_AMPDU) {
 437                tx_info->flags |= IEEE80211_TX_STAT_AMPDU;
 438                tx_info->status.ampdu_len = 1;
 439                tx_info->status.ampdu_ack_len = success ? 1 : 0;
 440
 441                if (!success)
 442                        tx_info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
 443        }
 444
 445        if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
 446                if (success)
 447                        rt2x00dev->low_level_stats.dot11RTSSuccessCount++;
 448                else
 449                        rt2x00dev->low_level_stats.dot11RTSFailureCount++;
 450        }
 451
 452        /*
 453         * Only send the status report to mac80211 when it's a frame
 454         * that originated in mac80211. If this was a extra frame coming
 455         * through a mac80211 library call (RTS/CTS) then we should not
 456         * send the status report back.
 457         */
 458        if (!(skbdesc_flags & SKBDESC_NOT_MAC80211)) {
 459                if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_TASKLET_CONTEXT))
 460                        ieee80211_tx_status(rt2x00dev->hw, entry->skb);
 461                else
 462                        ieee80211_tx_status_ni(rt2x00dev->hw, entry->skb);
 463        } else
 464                dev_kfree_skb_any(entry->skb);
 465
 466        /*
 467         * Make this entry available for reuse.
 468         */
 469        entry->skb = NULL;
 470        entry->flags = 0;
 471
 472        rt2x00dev->ops->lib->clear_entry(entry);
 473
 474        rt2x00queue_index_inc(entry, Q_INDEX_DONE);
 475
 476        /*
 477         * If the data queue was below the threshold before the txdone
 478         * handler we must make sure the packet queue in the mac80211 stack
 479         * is reenabled when the txdone handler has finished. This has to be
 480         * serialized with rt2x00mac_tx(), otherwise we can wake up queue
 481         * before it was stopped.
 482         */
 483        spin_lock_bh(&entry->queue->tx_lock);
 484        if (!rt2x00queue_threshold(entry->queue))
 485                rt2x00queue_unpause_queue(entry->queue);
 486        spin_unlock_bh(&entry->queue->tx_lock);
 487}
 488EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
 489
 490void rt2x00lib_txdone_noinfo(struct queue_entry *entry, u32 status)
 491{
 492        struct txdone_entry_desc txdesc;
 493
 494        txdesc.flags = 0;
 495        __set_bit(status, &txdesc.flags);
 496        txdesc.retry = 0;
 497
 498        rt2x00lib_txdone(entry, &txdesc);
 499}
 500EXPORT_SYMBOL_GPL(rt2x00lib_txdone_noinfo);
 501
 502static u8 *rt2x00lib_find_ie(u8 *data, unsigned int len, u8 ie)
 503{
 504        struct ieee80211_mgmt *mgmt = (void *)data;
 505        u8 *pos, *end;
 506
 507        pos = (u8 *)mgmt->u.beacon.variable;
 508        end = data + len;
 509        while (pos < end) {
 510                if (pos + 2 + pos[1] > end)
 511                        return NULL;
 512
 513                if (pos[0] == ie)
 514                        return pos;
 515
 516                pos += 2 + pos[1];
 517        }
 518
 519        return NULL;
 520}
 521
 522static void rt2x00lib_sleep(struct work_struct *work)
 523{
 524        struct rt2x00_dev *rt2x00dev =
 525            container_of(work, struct rt2x00_dev, sleep_work);
 526
 527        if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
 528                return;
 529
 530        /*
 531         * Check again is powersaving is enabled, to prevent races from delayed
 532         * work execution.
 533         */
 534        if (!test_bit(CONFIG_POWERSAVING, &rt2x00dev->flags))
 535                rt2x00lib_config(rt2x00dev, &rt2x00dev->hw->conf,
 536                                 IEEE80211_CONF_CHANGE_PS);
 537}
 538
 539static void rt2x00lib_rxdone_check_ba(struct rt2x00_dev *rt2x00dev,
 540                                      struct sk_buff *skb,
 541                                      struct rxdone_entry_desc *rxdesc)
 542{
 543        struct rt2x00_bar_list_entry *entry;
 544        struct ieee80211_bar *ba = (void *)skb->data;
 545
 546        if (likely(!ieee80211_is_back(ba->frame_control)))
 547                return;
 548
 549        if (rxdesc->size < sizeof(*ba) + FCS_LEN)
 550                return;
 551
 552        rcu_read_lock();
 553        list_for_each_entry_rcu(entry, &rt2x00dev->bar_list, list) {
 554
 555                if (ba->start_seq_num != entry->start_seq_num)
 556                        continue;
 557
 558#define TID_CHECK(a, b) (                                               \
 559        ((a) & cpu_to_le16(IEEE80211_BAR_CTRL_TID_INFO_MASK)) ==        \
 560        ((b) & cpu_to_le16(IEEE80211_BAR_CTRL_TID_INFO_MASK)))          \
 561
 562                if (!TID_CHECK(ba->control, entry->control))
 563                        continue;
 564
 565#undef TID_CHECK
 566
 567                if (!ether_addr_equal_64bits(ba->ra, entry->ta))
 568                        continue;
 569
 570                if (!ether_addr_equal_64bits(ba->ta, entry->ra))
 571                        continue;
 572
 573                /* Mark BAR since we received the according BA */
 574                spin_lock_bh(&rt2x00dev->bar_list_lock);
 575                entry->block_acked = 1;
 576                spin_unlock_bh(&rt2x00dev->bar_list_lock);
 577                break;
 578        }
 579        rcu_read_unlock();
 580
 581}
 582
 583static void rt2x00lib_rxdone_check_ps(struct rt2x00_dev *rt2x00dev,
 584                                      struct sk_buff *skb,
 585                                      struct rxdone_entry_desc *rxdesc)
 586{
 587        struct ieee80211_hdr *hdr = (void *) skb->data;
 588        struct ieee80211_tim_ie *tim_ie;
 589        u8 *tim;
 590        u8 tim_len;
 591        bool cam;
 592
 593        /* If this is not a beacon, or if mac80211 has no powersaving
 594         * configured, or if the device is already in powersaving mode
 595         * we can exit now. */
 596        if (likely(!ieee80211_is_beacon(hdr->frame_control) ||
 597                   !(rt2x00dev->hw->conf.flags & IEEE80211_CONF_PS)))
 598                return;
 599
 600        /* min. beacon length + FCS_LEN */
 601        if (skb->len <= 40 + FCS_LEN)
 602                return;
 603
 604        /* and only beacons from the associated BSSID, please */
 605        if (!(rxdesc->dev_flags & RXDONE_MY_BSS) ||
 606            !rt2x00dev->aid)
 607                return;
 608
 609        rt2x00dev->last_beacon = jiffies;
 610
 611        tim = rt2x00lib_find_ie(skb->data, skb->len - FCS_LEN, WLAN_EID_TIM);
 612        if (!tim)
 613                return;
 614
 615        if (tim[1] < sizeof(*tim_ie))
 616                return;
 617
 618        tim_len = tim[1];
 619        tim_ie = (struct ieee80211_tim_ie *) &tim[2];
 620
 621        /* Check whenever the PHY can be turned off again. */
 622
 623        /* 1. What about buffered unicast traffic for our AID? */
 624        cam = ieee80211_check_tim(tim_ie, tim_len, rt2x00dev->aid);
 625
 626        /* 2. Maybe the AP wants to send multicast/broadcast data? */
 627        cam |= (tim_ie->bitmap_ctrl & 0x01);
 628
 629        if (!cam && !test_bit(CONFIG_POWERSAVING, &rt2x00dev->flags))
 630                queue_work(rt2x00dev->workqueue, &rt2x00dev->sleep_work);
 631}
 632
 633static int rt2x00lib_rxdone_read_signal(struct rt2x00_dev *rt2x00dev,
 634                                        struct rxdone_entry_desc *rxdesc)
 635{
 636        struct ieee80211_supported_band *sband;
 637        const struct rt2x00_rate *rate;
 638        unsigned int i;
 639        int signal = rxdesc->signal;
 640        int type = (rxdesc->dev_flags & RXDONE_SIGNAL_MASK);
 641
 642        switch (rxdesc->rate_mode) {
 643        case RATE_MODE_CCK:
 644        case RATE_MODE_OFDM:
 645                /*
 646                 * For non-HT rates the MCS value needs to contain the
 647                 * actually used rate modulation (CCK or OFDM).
 648                 */
 649                if (rxdesc->dev_flags & RXDONE_SIGNAL_MCS)
 650                        signal = RATE_MCS(rxdesc->rate_mode, signal);
 651
 652                sband = &rt2x00dev->bands[rt2x00dev->curr_band];
 653                for (i = 0; i < sband->n_bitrates; i++) {
 654                        rate = rt2x00_get_rate(sband->bitrates[i].hw_value);
 655                        if (((type == RXDONE_SIGNAL_PLCP) &&
 656                             (rate->plcp == signal)) ||
 657                            ((type == RXDONE_SIGNAL_BITRATE) &&
 658                              (rate->bitrate == signal)) ||
 659                            ((type == RXDONE_SIGNAL_MCS) &&
 660                              (rate->mcs == signal))) {
 661                                return i;
 662                        }
 663                }
 664                break;
 665        case RATE_MODE_HT_MIX:
 666        case RATE_MODE_HT_GREENFIELD:
 667                if (signal >= 0 && signal <= 76)
 668                        return signal;
 669                break;
 670        default:
 671                break;
 672        }
 673
 674        rt2x00_warn(rt2x00dev, "Frame received with unrecognized signal, mode=0x%.4x, signal=0x%.4x, type=%d\n",
 675                    rxdesc->rate_mode, signal, type);
 676        return 0;
 677}
 678
 679void rt2x00lib_rxdone(struct queue_entry *entry, gfp_t gfp)
 680{
 681        struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
 682        struct rxdone_entry_desc rxdesc;
 683        struct sk_buff *skb;
 684        struct ieee80211_rx_status *rx_status;
 685        unsigned int header_length;
 686        int rate_idx;
 687
 688        if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) ||
 689            !test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 690                goto submit_entry;
 691
 692        if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
 693                goto submit_entry;
 694
 695        /*
 696         * Allocate a new sk_buffer. If no new buffer available, drop the
 697         * received frame and reuse the existing buffer.
 698         */
 699        skb = rt2x00queue_alloc_rxskb(entry, gfp);
 700        if (!skb)
 701                goto submit_entry;
 702
 703        /*
 704         * Unmap the skb.
 705         */
 706        rt2x00queue_unmap_skb(entry);
 707
 708        /*
 709         * Extract the RXD details.
 710         */
 711        memset(&rxdesc, 0, sizeof(rxdesc));
 712        rt2x00dev->ops->lib->fill_rxdone(entry, &rxdesc);
 713
 714        /*
 715         * Check for valid size in case we get corrupted descriptor from
 716         * hardware.
 717         */
 718        if (unlikely(rxdesc.size == 0 ||
 719                     rxdesc.size > entry->queue->data_size)) {
 720                rt2x00_err(rt2x00dev, "Wrong frame size %d max %d\n",
 721                           rxdesc.size, entry->queue->data_size);
 722                dev_kfree_skb(entry->skb);
 723                goto renew_skb;
 724        }
 725
 726        /*
 727         * The data behind the ieee80211 header must be
 728         * aligned on a 4 byte boundary.
 729         */
 730        header_length = ieee80211_get_hdrlen_from_skb(entry->skb);
 731
 732        /*
 733         * Hardware might have stripped the IV/EIV/ICV data,
 734         * in that case it is possible that the data was
 735         * provided separately (through hardware descriptor)
 736         * in which case we should reinsert the data into the frame.
 737         */
 738        if ((rxdesc.dev_flags & RXDONE_CRYPTO_IV) &&
 739            (rxdesc.flags & RX_FLAG_IV_STRIPPED))
 740                rt2x00crypto_rx_insert_iv(entry->skb, header_length,
 741                                          &rxdesc);
 742        else if (header_length &&
 743                 (rxdesc.size > header_length) &&
 744                 (rxdesc.dev_flags & RXDONE_L2PAD))
 745                rt2x00queue_remove_l2pad(entry->skb, header_length);
 746
 747        /* Trim buffer to correct size */
 748        skb_trim(entry->skb, rxdesc.size);
 749
 750        /*
 751         * Translate the signal to the correct bitrate index.
 752         */
 753        rate_idx = rt2x00lib_rxdone_read_signal(rt2x00dev, &rxdesc);
 754        if (rxdesc.rate_mode == RATE_MODE_HT_MIX ||
 755            rxdesc.rate_mode == RATE_MODE_HT_GREENFIELD)
 756                rxdesc.flags |= RX_FLAG_HT;
 757
 758        /*
 759         * Check if this is a beacon, and more frames have been
 760         * buffered while we were in powersaving mode.
 761         */
 762        rt2x00lib_rxdone_check_ps(rt2x00dev, entry->skb, &rxdesc);
 763
 764        /*
 765         * Check for incoming BlockAcks to match to the BlockAckReqs
 766         * we've send out.
 767         */
 768        rt2x00lib_rxdone_check_ba(rt2x00dev, entry->skb, &rxdesc);
 769
 770        /*
 771         * Update extra components
 772         */
 773        rt2x00link_update_stats(rt2x00dev, entry->skb, &rxdesc);
 774        rt2x00debug_update_crypto(rt2x00dev, &rxdesc);
 775        rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_RXDONE, entry);
 776
 777        /*
 778         * Initialize RX status information, and send frame
 779         * to mac80211.
 780         */
 781        rx_status = IEEE80211_SKB_RXCB(entry->skb);
 782
 783        /* Ensure that all fields of rx_status are initialized
 784         * properly. The skb->cb array was used for driver
 785         * specific informations, so rx_status might contain
 786         * garbage.
 787         */
 788        memset(rx_status, 0, sizeof(*rx_status));
 789
 790        rx_status->mactime = rxdesc.timestamp;
 791        rx_status->band = rt2x00dev->curr_band;
 792        rx_status->freq = rt2x00dev->curr_freq;
 793        rx_status->rate_idx = rate_idx;
 794        rx_status->signal = rxdesc.rssi;
 795        rx_status->flag = rxdesc.flags;
 796        rx_status->antenna = rt2x00dev->link.ant.active.rx;
 797
 798        ieee80211_rx_ni(rt2x00dev->hw, entry->skb);
 799
 800renew_skb:
 801        /*
 802         * Replace the skb with the freshly allocated one.
 803         */
 804        entry->skb = skb;
 805
 806submit_entry:
 807        entry->flags = 0;
 808        rt2x00queue_index_inc(entry, Q_INDEX_DONE);
 809        if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) &&
 810            test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 811                rt2x00dev->ops->lib->clear_entry(entry);
 812}
 813EXPORT_SYMBOL_GPL(rt2x00lib_rxdone);
 814
 815/*
 816 * Driver initialization handlers.
 817 */
 818const struct rt2x00_rate rt2x00_supported_rates[12] = {
 819        {
 820                .flags = DEV_RATE_CCK,
 821                .bitrate = 10,
 822                .ratemask = BIT(0),
 823                .plcp = 0x00,
 824                .mcs = RATE_MCS(RATE_MODE_CCK, 0),
 825        },
 826        {
 827                .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
 828                .bitrate = 20,
 829                .ratemask = BIT(1),
 830                .plcp = 0x01,
 831                .mcs = RATE_MCS(RATE_MODE_CCK, 1),
 832        },
 833        {
 834                .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
 835                .bitrate = 55,
 836                .ratemask = BIT(2),
 837                .plcp = 0x02,
 838                .mcs = RATE_MCS(RATE_MODE_CCK, 2),
 839        },
 840        {
 841                .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
 842                .bitrate = 110,
 843                .ratemask = BIT(3),
 844                .plcp = 0x03,
 845                .mcs = RATE_MCS(RATE_MODE_CCK, 3),
 846        },
 847        {
 848                .flags = DEV_RATE_OFDM,
 849                .bitrate = 60,
 850                .ratemask = BIT(4),
 851                .plcp = 0x0b,
 852                .mcs = RATE_MCS(RATE_MODE_OFDM, 0),
 853        },
 854        {
 855                .flags = DEV_RATE_OFDM,
 856                .bitrate = 90,
 857                .ratemask = BIT(5),
 858                .plcp = 0x0f,
 859                .mcs = RATE_MCS(RATE_MODE_OFDM, 1),
 860        },
 861        {
 862                .flags = DEV_RATE_OFDM,
 863                .bitrate = 120,
 864                .ratemask = BIT(6),
 865                .plcp = 0x0a,
 866                .mcs = RATE_MCS(RATE_MODE_OFDM, 2),
 867        },
 868        {
 869                .flags = DEV_RATE_OFDM,
 870                .bitrate = 180,
 871                .ratemask = BIT(7),
 872                .plcp = 0x0e,
 873                .mcs = RATE_MCS(RATE_MODE_OFDM, 3),
 874        },
 875        {
 876                .flags = DEV_RATE_OFDM,
 877                .bitrate = 240,
 878                .ratemask = BIT(8),
 879                .plcp = 0x09,
 880                .mcs = RATE_MCS(RATE_MODE_OFDM, 4),
 881        },
 882        {
 883                .flags = DEV_RATE_OFDM,
 884                .bitrate = 360,
 885                .ratemask = BIT(9),
 886                .plcp = 0x0d,
 887                .mcs = RATE_MCS(RATE_MODE_OFDM, 5),
 888        },
 889        {
 890                .flags = DEV_RATE_OFDM,
 891                .bitrate = 480,
 892                .ratemask = BIT(10),
 893                .plcp = 0x08,
 894                .mcs = RATE_MCS(RATE_MODE_OFDM, 6),
 895        },
 896        {
 897                .flags = DEV_RATE_OFDM,
 898                .bitrate = 540,
 899                .ratemask = BIT(11),
 900                .plcp = 0x0c,
 901                .mcs = RATE_MCS(RATE_MODE_OFDM, 7),
 902        },
 903};
 904
 905static void rt2x00lib_channel(struct ieee80211_channel *entry,
 906                              const int channel, const int tx_power,
 907                              const int value)
 908{
 909        /* XXX: this assumption about the band is wrong for 802.11j */
 910        entry->band = channel <= 14 ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ;
 911        entry->center_freq = ieee80211_channel_to_frequency(channel,
 912                                                            entry->band);
 913        entry->hw_value = value;
 914        entry->max_power = tx_power;
 915        entry->max_antenna_gain = 0xff;
 916}
 917
 918static void rt2x00lib_rate(struct ieee80211_rate *entry,
 919                           const u16 index, const struct rt2x00_rate *rate)
 920{
 921        entry->flags = 0;
 922        entry->bitrate = rate->bitrate;
 923        entry->hw_value = index;
 924        entry->hw_value_short = index;
 925
 926        if (rate->flags & DEV_RATE_SHORT_PREAMBLE)
 927                entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE;
 928}
 929
 930void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
 931{
 932        const char *mac_addr;
 933
 934        mac_addr = of_get_mac_address(rt2x00dev->dev->of_node);
 935        if (mac_addr)
 936                ether_addr_copy(eeprom_mac_addr, mac_addr);
 937
 938        if (!is_valid_ether_addr(eeprom_mac_addr)) {
 939                eth_random_addr(eeprom_mac_addr);
 940                rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", eeprom_mac_addr);
 941        }
 942}
 943EXPORT_SYMBOL_GPL(rt2x00lib_set_mac_address);
 944
 945static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev,
 946                                    struct hw_mode_spec *spec)
 947{
 948        struct ieee80211_hw *hw = rt2x00dev->hw;
 949        struct ieee80211_channel *channels;
 950        struct ieee80211_rate *rates;
 951        unsigned int num_rates;
 952        unsigned int i;
 953
 954        num_rates = 0;
 955        if (spec->supported_rates & SUPPORT_RATE_CCK)
 956                num_rates += 4;
 957        if (spec->supported_rates & SUPPORT_RATE_OFDM)
 958                num_rates += 8;
 959
 960        channels = kcalloc(spec->num_channels, sizeof(*channels), GFP_KERNEL);
 961        if (!channels)
 962                return -ENOMEM;
 963
 964        rates = kcalloc(num_rates, sizeof(*rates), GFP_KERNEL);
 965        if (!rates)
 966                goto exit_free_channels;
 967
 968        /*
 969         * Initialize Rate list.
 970         */
 971        for (i = 0; i < num_rates; i++)
 972                rt2x00lib_rate(&rates[i], i, rt2x00_get_rate(i));
 973
 974        /*
 975         * Initialize Channel list.
 976         */
 977        for (i = 0; i < spec->num_channels; i++) {
 978                rt2x00lib_channel(&channels[i],
 979                                  spec->channels[i].channel,
 980                                  spec->channels_info[i].max_power, i);
 981        }
 982
 983        /*
 984         * Intitialize 802.11b, 802.11g
 985         * Rates: CCK, OFDM.
 986         * Channels: 2.4 GHz
 987         */
 988        if (spec->supported_bands & SUPPORT_BAND_2GHZ) {
 989                rt2x00dev->bands[NL80211_BAND_2GHZ].n_channels = 14;
 990                rt2x00dev->bands[NL80211_BAND_2GHZ].n_bitrates = num_rates;
 991                rt2x00dev->bands[NL80211_BAND_2GHZ].channels = channels;
 992                rt2x00dev->bands[NL80211_BAND_2GHZ].bitrates = rates;
 993                hw->wiphy->bands[NL80211_BAND_2GHZ] =
 994                    &rt2x00dev->bands[NL80211_BAND_2GHZ];
 995                memcpy(&rt2x00dev->bands[NL80211_BAND_2GHZ].ht_cap,
 996                       &spec->ht, sizeof(spec->ht));
 997        }
 998
 999        /*
1000         * Intitialize 802.11a
1001         * Rates: OFDM.
1002         * Channels: OFDM, UNII, HiperLAN2.
1003         */
1004        if (spec->supported_bands & SUPPORT_BAND_5GHZ) {
1005                rt2x00dev->bands[NL80211_BAND_5GHZ].n_channels =
1006                    spec->num_channels - 14;
1007                rt2x00dev->bands[NL80211_BAND_5GHZ].n_bitrates =
1008                    num_rates - 4;
1009                rt2x00dev->bands[NL80211_BAND_5GHZ].channels = &channels[14];
1010                rt2x00dev->bands[NL80211_BAND_5GHZ].bitrates = &rates[4];
1011                hw->wiphy->bands[NL80211_BAND_5GHZ] =
1012                    &rt2x00dev->bands[NL80211_BAND_5GHZ];
1013                memcpy(&rt2x00dev->bands[NL80211_BAND_5GHZ].ht_cap,
1014                       &spec->ht, sizeof(spec->ht));
1015        }
1016
1017        return 0;
1018
1019 exit_free_channels:
1020        kfree(channels);
1021        rt2x00_err(rt2x00dev, "Allocation ieee80211 modes failed\n");
1022        return -ENOMEM;
1023}
1024
1025static void rt2x00lib_remove_hw(struct rt2x00_dev *rt2x00dev)
1026{
1027        if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags))
1028                ieee80211_unregister_hw(rt2x00dev->hw);
1029
1030        if (likely(rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ])) {
1031                kfree(rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ]->channels);
1032                kfree(rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ]->bitrates);
1033                rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ] = NULL;
1034                rt2x00dev->hw->wiphy->bands[NL80211_BAND_5GHZ] = NULL;
1035        }
1036
1037        kfree(rt2x00dev->spec.channels_info);
1038}
1039
1040static int rt2x00lib_probe_hw(struct rt2x00_dev *rt2x00dev)
1041{
1042        struct hw_mode_spec *spec = &rt2x00dev->spec;
1043        int status;
1044
1045        if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags))
1046                return 0;
1047
1048        /*
1049         * Initialize HW modes.
1050         */
1051        status = rt2x00lib_probe_hw_modes(rt2x00dev, spec);
1052        if (status)
1053                return status;
1054
1055        /*
1056         * Initialize HW fields.
1057         */
1058        rt2x00dev->hw->queues = rt2x00dev->ops->tx_queues;
1059
1060        /*
1061         * Initialize extra TX headroom required.
1062         */
1063        rt2x00dev->hw->extra_tx_headroom =
1064                max_t(unsigned int, IEEE80211_TX_STATUS_HEADROOM,
1065                      rt2x00dev->extra_tx_headroom);
1066
1067        /*
1068         * Take TX headroom required for alignment into account.
1069         */
1070        if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_L2PAD))
1071                rt2x00dev->hw->extra_tx_headroom += RT2X00_L2PAD_SIZE;
1072        else if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DMA))
1073                rt2x00dev->hw->extra_tx_headroom += RT2X00_ALIGN_SIZE;
1074
1075        /*
1076         * Tell mac80211 about the size of our private STA structure.
1077         */
1078        rt2x00dev->hw->sta_data_size = sizeof(struct rt2x00_sta);
1079
1080        /*
1081         * Allocate tx status FIFO for driver use.
1082         */
1083        if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_TXSTATUS_FIFO)) {
1084                /*
1085                 * Allocate the txstatus fifo. In the worst case the tx
1086                 * status fifo has to hold the tx status of all entries
1087                 * in all tx queues. Hence, calculate the kfifo size as
1088                 * tx_queues * entry_num and round up to the nearest
1089                 * power of 2.
1090                 */
1091                int kfifo_size =
1092                        roundup_pow_of_two(rt2x00dev->ops->tx_queues *
1093                                           rt2x00dev->tx->limit *
1094                                           sizeof(u32));
1095
1096                status = kfifo_alloc(&rt2x00dev->txstatus_fifo, kfifo_size,
1097                                     GFP_KERNEL);
1098                if (status)
1099                        return status;
1100        }
1101
1102        /*
1103         * Initialize tasklets if used by the driver. Tasklets are
1104         * disabled until the interrupts are turned on. The driver
1105         * has to handle that.
1106         */
1107#define RT2X00_TASKLET_INIT(taskletname) \
1108        if (rt2x00dev->ops->lib->taskletname) { \
1109                tasklet_init(&rt2x00dev->taskletname, \
1110                             rt2x00dev->ops->lib->taskletname, \
1111                             (unsigned long)rt2x00dev); \
1112        }
1113
1114        RT2X00_TASKLET_INIT(txstatus_tasklet);
1115        RT2X00_TASKLET_INIT(pretbtt_tasklet);
1116        RT2X00_TASKLET_INIT(tbtt_tasklet);
1117        RT2X00_TASKLET_INIT(rxdone_tasklet);
1118        RT2X00_TASKLET_INIT(autowake_tasklet);
1119
1120#undef RT2X00_TASKLET_INIT
1121
1122        /*
1123         * Register HW.
1124         */
1125        status = ieee80211_register_hw(rt2x00dev->hw);
1126        if (status)
1127                return status;
1128
1129        set_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags);
1130
1131        return 0;
1132}
1133
1134/*
1135 * Initialization/uninitialization handlers.
1136 */
1137static void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev)
1138{
1139        if (!test_and_clear_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags))
1140                return;
1141
1142        /*
1143         * Stop rfkill polling.
1144         */
1145        if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1146                rt2x00rfkill_unregister(rt2x00dev);
1147
1148        /*
1149         * Allow the HW to uninitialize.
1150         */
1151        rt2x00dev->ops->lib->uninitialize(rt2x00dev);
1152
1153        /*
1154         * Free allocated queue entries.
1155         */
1156        rt2x00queue_uninitialize(rt2x00dev);
1157}
1158
1159static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
1160{
1161        int status;
1162
1163        if (test_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags))
1164                return 0;
1165
1166        /*
1167         * Allocate all queue entries.
1168         */
1169        status = rt2x00queue_initialize(rt2x00dev);
1170        if (status)
1171                return status;
1172
1173        /*
1174         * Initialize the device.
1175         */
1176        status = rt2x00dev->ops->lib->initialize(rt2x00dev);
1177        if (status) {
1178                rt2x00queue_uninitialize(rt2x00dev);
1179                return status;
1180        }
1181
1182        set_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags);
1183
1184        /*
1185         * Start rfkill polling.
1186         */
1187        if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1188                rt2x00rfkill_register(rt2x00dev);
1189
1190        return 0;
1191}
1192
1193int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
1194{
1195        int retval;
1196
1197        if (test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
1198                return 0;
1199
1200        /*
1201         * If this is the first interface which is added,
1202         * we should load the firmware now.
1203         */
1204        retval = rt2x00lib_load_firmware(rt2x00dev);
1205        if (retval)
1206                return retval;
1207
1208        /*
1209         * Initialize the device.
1210         */
1211        retval = rt2x00lib_initialize(rt2x00dev);
1212        if (retval)
1213                return retval;
1214
1215        rt2x00dev->intf_ap_count = 0;
1216        rt2x00dev->intf_sta_count = 0;
1217        rt2x00dev->intf_associated = 0;
1218
1219        /* Enable the radio */
1220        retval = rt2x00lib_enable_radio(rt2x00dev);
1221        if (retval)
1222                return retval;
1223
1224        set_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags);
1225
1226        return 0;
1227}
1228
1229void rt2x00lib_stop(struct rt2x00_dev *rt2x00dev)
1230{
1231        if (!test_and_clear_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
1232                return;
1233
1234        /*
1235         * Perhaps we can add something smarter here,
1236         * but for now just disabling the radio should do.
1237         */
1238        rt2x00lib_disable_radio(rt2x00dev);
1239
1240        rt2x00dev->intf_ap_count = 0;
1241        rt2x00dev->intf_sta_count = 0;
1242        rt2x00dev->intf_associated = 0;
1243}
1244
1245static inline void rt2x00lib_set_if_combinations(struct rt2x00_dev *rt2x00dev)
1246{
1247        struct ieee80211_iface_limit *if_limit;
1248        struct ieee80211_iface_combination *if_combination;
1249
1250        if (rt2x00dev->ops->max_ap_intf < 2)
1251                return;
1252
1253        /*
1254         * Build up AP interface limits structure.
1255         */
1256        if_limit = &rt2x00dev->if_limits_ap;
1257        if_limit->max = rt2x00dev->ops->max_ap_intf;
1258        if_limit->types = BIT(NL80211_IFTYPE_AP);
1259#ifdef CONFIG_MAC80211_MESH
1260        if_limit->types |= BIT(NL80211_IFTYPE_MESH_POINT);
1261#endif
1262
1263        /*
1264         * Build up AP interface combinations structure.
1265         */
1266        if_combination = &rt2x00dev->if_combinations[IF_COMB_AP];
1267        if_combination->limits = if_limit;
1268        if_combination->n_limits = 1;
1269        if_combination->max_interfaces = if_limit->max;
1270        if_combination->num_different_channels = 1;
1271
1272        /*
1273         * Finally, specify the possible combinations to mac80211.
1274         */
1275        rt2x00dev->hw->wiphy->iface_combinations = rt2x00dev->if_combinations;
1276        rt2x00dev->hw->wiphy->n_iface_combinations = 1;
1277}
1278
1279static unsigned int rt2x00dev_extra_tx_headroom(struct rt2x00_dev *rt2x00dev)
1280{
1281        if (WARN_ON(!rt2x00dev->tx))
1282                return 0;
1283
1284        if (rt2x00_is_usb(rt2x00dev))
1285                return rt2x00dev->tx[0].winfo_size + rt2x00dev->tx[0].desc_size;
1286
1287        return rt2x00dev->tx[0].winfo_size;
1288}
1289
1290/*
1291 * driver allocation handlers.
1292 */
1293int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
1294{
1295        int retval = -ENOMEM;
1296
1297        /*
1298         * Set possible interface combinations.
1299         */
1300        rt2x00lib_set_if_combinations(rt2x00dev);
1301
1302        /*
1303         * Allocate the driver data memory, if necessary.
1304         */
1305        if (rt2x00dev->ops->drv_data_size > 0) {
1306                rt2x00dev->drv_data = kzalloc(rt2x00dev->ops->drv_data_size,
1307                                              GFP_KERNEL);
1308                if (!rt2x00dev->drv_data) {
1309                        retval = -ENOMEM;
1310                        goto exit;
1311                }
1312        }
1313
1314        spin_lock_init(&rt2x00dev->irqmask_lock);
1315        mutex_init(&rt2x00dev->csr_mutex);
1316        mutex_init(&rt2x00dev->conf_mutex);
1317        INIT_LIST_HEAD(&rt2x00dev->bar_list);
1318        spin_lock_init(&rt2x00dev->bar_list_lock);
1319
1320        set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1321
1322        /*
1323         * Make room for rt2x00_intf inside the per-interface
1324         * structure ieee80211_vif.
1325         */
1326        rt2x00dev->hw->vif_data_size = sizeof(struct rt2x00_intf);
1327
1328        /*
1329         * rt2x00 devices can only use the last n bits of the MAC address
1330         * for virtual interfaces.
1331         */
1332        rt2x00dev->hw->wiphy->addr_mask[ETH_ALEN - 1] =
1333                (rt2x00dev->ops->max_ap_intf - 1);
1334
1335        /*
1336         * Initialize work.
1337         */
1338        rt2x00dev->workqueue =
1339            alloc_ordered_workqueue("%s", 0, wiphy_name(rt2x00dev->hw->wiphy));
1340        if (!rt2x00dev->workqueue) {
1341                retval = -ENOMEM;
1342                goto exit;
1343        }
1344
1345        INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled);
1346        INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup);
1347        INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep);
1348
1349        /*
1350         * Let the driver probe the device to detect the capabilities.
1351         */
1352        retval = rt2x00dev->ops->lib->probe_hw(rt2x00dev);
1353        if (retval) {
1354                rt2x00_err(rt2x00dev, "Failed to allocate device\n");
1355                goto exit;
1356        }
1357
1358        /*
1359         * Allocate queue array.
1360         */
1361        retval = rt2x00queue_allocate(rt2x00dev);
1362        if (retval)
1363                goto exit;
1364
1365        /* Cache TX headroom value */
1366        rt2x00dev->extra_tx_headroom = rt2x00dev_extra_tx_headroom(rt2x00dev);
1367
1368        /*
1369         * Determine which operating modes are supported, all modes
1370         * which require beaconing, depend on the availability of
1371         * beacon entries.
1372         */
1373        rt2x00dev->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
1374        if (rt2x00dev->bcn->limit > 0)
1375                rt2x00dev->hw->wiphy->interface_modes |=
1376                    BIT(NL80211_IFTYPE_ADHOC) |
1377#ifdef CONFIG_MAC80211_MESH
1378                    BIT(NL80211_IFTYPE_MESH_POINT) |
1379#endif
1380#ifdef CONFIG_WIRELESS_WDS
1381                    BIT(NL80211_IFTYPE_WDS) |
1382#endif
1383                    BIT(NL80211_IFTYPE_AP);
1384
1385        rt2x00dev->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
1386
1387        /*
1388         * Initialize ieee80211 structure.
1389         */
1390        retval = rt2x00lib_probe_hw(rt2x00dev);
1391        if (retval) {
1392                rt2x00_err(rt2x00dev, "Failed to initialize hw\n");
1393                goto exit;
1394        }
1395
1396        /*
1397         * Register extra components.
1398         */
1399        rt2x00link_register(rt2x00dev);
1400        rt2x00leds_register(rt2x00dev);
1401        rt2x00debug_register(rt2x00dev);
1402
1403        /*
1404         * Start rfkill polling.
1405         */
1406        if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1407                rt2x00rfkill_register(rt2x00dev);
1408
1409        return 0;
1410
1411exit:
1412        rt2x00lib_remove_dev(rt2x00dev);
1413
1414        return retval;
1415}
1416EXPORT_SYMBOL_GPL(rt2x00lib_probe_dev);
1417
1418void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
1419{
1420        clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1421
1422        /*
1423         * Stop rfkill polling.
1424         */
1425        if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1426                rt2x00rfkill_unregister(rt2x00dev);
1427
1428        /*
1429         * Disable radio.
1430         */
1431        rt2x00lib_disable_radio(rt2x00dev);
1432
1433        /*
1434         * Stop all work.
1435         */
1436        cancel_work_sync(&rt2x00dev->intf_work);
1437        cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
1438        cancel_work_sync(&rt2x00dev->sleep_work);
1439
1440        /*
1441         * Kill the tx status tasklet.
1442         */
1443        tasklet_kill(&rt2x00dev->txstatus_tasklet);
1444        tasklet_kill(&rt2x00dev->pretbtt_tasklet);
1445        tasklet_kill(&rt2x00dev->tbtt_tasklet);
1446        tasklet_kill(&rt2x00dev->rxdone_tasklet);
1447        tasklet_kill(&rt2x00dev->autowake_tasklet);
1448
1449        /*
1450         * Uninitialize device.
1451         */
1452        rt2x00lib_uninitialize(rt2x00dev);
1453
1454        if (rt2x00dev->workqueue)
1455                destroy_workqueue(rt2x00dev->workqueue);
1456
1457        /*
1458         * Free the tx status fifo.
1459         */
1460        kfifo_free(&rt2x00dev->txstatus_fifo);
1461
1462        /*
1463         * Free extra components
1464         */
1465        rt2x00debug_deregister(rt2x00dev);
1466        rt2x00leds_unregister(rt2x00dev);
1467
1468        /*
1469         * Free ieee80211_hw memory.
1470         */
1471        rt2x00lib_remove_hw(rt2x00dev);
1472
1473        /*
1474         * Free firmware image.
1475         */
1476        rt2x00lib_free_firmware(rt2x00dev);
1477
1478        /*
1479         * Free queue structures.
1480         */
1481        rt2x00queue_free(rt2x00dev);
1482
1483        /*
1484         * Free the driver data.
1485         */
1486        kfree(rt2x00dev->drv_data);
1487}
1488EXPORT_SYMBOL_GPL(rt2x00lib_remove_dev);
1489
1490/*
1491 * Device state handlers
1492 */
1493#ifdef CONFIG_PM
1494int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state)
1495{
1496        rt2x00_dbg(rt2x00dev, "Going to sleep\n");
1497
1498        /*
1499         * Prevent mac80211 from accessing driver while suspended.
1500         */
1501        if (!test_and_clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
1502                return 0;
1503
1504        /*
1505         * Cleanup as much as possible.
1506         */
1507        rt2x00lib_uninitialize(rt2x00dev);
1508
1509        /*
1510         * Suspend/disable extra components.
1511         */
1512        rt2x00leds_suspend(rt2x00dev);
1513        rt2x00debug_deregister(rt2x00dev);
1514
1515        /*
1516         * Set device mode to sleep for power management,
1517         * on some hardware this call seems to consistently fail.
1518         * From the specifications it is hard to tell why it fails,
1519         * and if this is a "bad thing".
1520         * Overall it is safe to just ignore the failure and
1521         * continue suspending. The only downside is that the
1522         * device will not be in optimal power save mode, but with
1523         * the radio and the other components already disabled the
1524         * device is as good as disabled.
1525         */
1526        if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_SLEEP))
1527                rt2x00_warn(rt2x00dev, "Device failed to enter sleep state, continue suspending\n");
1528
1529        return 0;
1530}
1531EXPORT_SYMBOL_GPL(rt2x00lib_suspend);
1532
1533int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev)
1534{
1535        rt2x00_dbg(rt2x00dev, "Waking up\n");
1536
1537        /*
1538         * Restore/enable extra components.
1539         */
1540        rt2x00debug_register(rt2x00dev);
1541        rt2x00leds_resume(rt2x00dev);
1542
1543        /*
1544         * We are ready again to receive requests from mac80211.
1545         */
1546        set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1547
1548        return 0;
1549}
1550EXPORT_SYMBOL_GPL(rt2x00lib_resume);
1551#endif /* CONFIG_PM */
1552
1553/*
1554 * rt2x00lib module information.
1555 */
1556MODULE_AUTHOR(DRV_PROJECT);
1557MODULE_VERSION(DRV_VERSION);
1558MODULE_DESCRIPTION("rt2x00 library");
1559MODULE_LICENSE("GPL");
1560