linux/drivers/net/wireless/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, write to the
  18        Free Software Foundation, Inc.,
  19        59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  20 */
  21
  22/*
  23        Module: rt2x00lib
  24        Abstract: rt2x00 generic device routines.
  25 */
  26
  27#include <linux/kernel.h>
  28#include <linux/module.h>
  29#include <linux/slab.h>
  30#include <linux/log2.h>
  31
  32#include "rt2x00.h"
  33#include "rt2x00lib.h"
  34
  35/*
  36 * Radio control handlers.
  37 */
  38int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev)
  39{
  40        int status;
  41
  42        /*
  43         * Don't enable the radio twice.
  44         * And check if the hardware button has been disabled.
  45         */
  46        if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
  47                return 0;
  48
  49        /*
  50         * Initialize all data queues.
  51         */
  52        rt2x00queue_init_queues(rt2x00dev);
  53
  54        /*
  55         * Enable radio.
  56         */
  57        status =
  58            rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_ON);
  59        if (status)
  60                return status;
  61
  62        rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_ON);
  63
  64        rt2x00leds_led_radio(rt2x00dev, true);
  65        rt2x00led_led_activity(rt2x00dev, true);
  66
  67        set_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags);
  68
  69        /*
  70         * Enable queues.
  71         */
  72        rt2x00queue_start_queues(rt2x00dev);
  73        rt2x00link_start_tuner(rt2x00dev);
  74        rt2x00link_start_agc(rt2x00dev);
  75
  76        /*
  77         * Start watchdog monitoring.
  78         */
  79        rt2x00link_start_watchdog(rt2x00dev);
  80
  81        return 0;
  82}
  83
  84void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)
  85{
  86        if (!test_and_clear_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
  87                return;
  88
  89        /*
  90         * Stop watchdog monitoring.
  91         */
  92        rt2x00link_stop_watchdog(rt2x00dev);
  93
  94        /*
  95         * Stop all queues
  96         */
  97        rt2x00link_stop_agc(rt2x00dev);
  98        rt2x00link_stop_tuner(rt2x00dev);
  99        rt2x00queue_stop_queues(rt2x00dev);
 100        rt2x00queue_flush_queues(rt2x00dev, true);
 101
 102        /*
 103         * Disable radio.
 104         */
 105        rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_OFF);
 106        rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_OFF);
 107        rt2x00led_led_activity(rt2x00dev, false);
 108        rt2x00leds_led_radio(rt2x00dev, false);
 109}
 110
 111static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac,
 112                                          struct ieee80211_vif *vif)
 113{
 114        struct rt2x00_dev *rt2x00dev = data;
 115        struct rt2x00_intf *intf = vif_to_intf(vif);
 116
 117        /*
 118         * It is possible the radio was disabled while the work had been
 119         * scheduled. If that happens we should return here immediately,
 120         * note that in the spinlock protected area above the delayed_flags
 121         * have been cleared correctly.
 122         */
 123        if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 124                return;
 125
 126        if (test_and_clear_bit(DELAYED_UPDATE_BEACON, &intf->delayed_flags))
 127                rt2x00queue_update_beacon(rt2x00dev, vif);
 128}
 129
 130static void rt2x00lib_intf_scheduled(struct work_struct *work)
 131{
 132        struct rt2x00_dev *rt2x00dev =
 133            container_of(work, struct rt2x00_dev, intf_work);
 134
 135        /*
 136         * Iterate over each interface and perform the
 137         * requested configurations.
 138         */
 139        ieee80211_iterate_active_interfaces(rt2x00dev->hw,
 140                                            rt2x00lib_intf_scheduled_iter,
 141                                            rt2x00dev);
 142}
 143
 144static void rt2x00lib_autowakeup(struct work_struct *work)
 145{
 146        struct rt2x00_dev *rt2x00dev =
 147            container_of(work, struct rt2x00_dev, autowakeup_work.work);
 148
 149        if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
 150                return;
 151
 152        if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_AWAKE))
 153                ERROR(rt2x00dev, "Device failed to wakeup.\n");
 154        clear_bit(CONFIG_POWERSAVING, &rt2x00dev->flags);
 155}
 156
 157/*
 158 * Interrupt context handlers.
 159 */
 160static void rt2x00lib_bc_buffer_iter(void *data, u8 *mac,
 161                                     struct ieee80211_vif *vif)
 162{
 163        struct rt2x00_dev *rt2x00dev = data;
 164        struct sk_buff *skb;
 165
 166        /*
 167         * Only AP mode interfaces do broad- and multicast buffering
 168         */
 169        if (vif->type != NL80211_IFTYPE_AP)
 170                return;
 171
 172        /*
 173         * Send out buffered broad- and multicast frames
 174         */
 175        skb = ieee80211_get_buffered_bc(rt2x00dev->hw, vif);
 176        while (skb) {
 177                rt2x00mac_tx(rt2x00dev->hw, skb);
 178                skb = ieee80211_get_buffered_bc(rt2x00dev->hw, vif);
 179        }
 180}
 181
 182static void rt2x00lib_beaconupdate_iter(void *data, u8 *mac,
 183                                        struct ieee80211_vif *vif)
 184{
 185        struct rt2x00_dev *rt2x00dev = data;
 186
 187        if (vif->type != NL80211_IFTYPE_AP &&
 188            vif->type != NL80211_IFTYPE_ADHOC &&
 189            vif->type != NL80211_IFTYPE_MESH_POINT &&
 190            vif->type != NL80211_IFTYPE_WDS)
 191                return;
 192
 193        /*
 194         * Update the beacon without locking. This is safe on PCI devices
 195         * as they only update the beacon periodically here. This should
 196         * never be called for USB devices.
 197         */
 198        WARN_ON(rt2x00_is_usb(rt2x00dev));
 199        rt2x00queue_update_beacon_locked(rt2x00dev, vif);
 200}
 201
 202void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev)
 203{
 204        if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 205                return;
 206
 207        /* send buffered bc/mc frames out for every bssid */
 208        ieee80211_iterate_active_interfaces_atomic(rt2x00dev->hw,
 209                                                   rt2x00lib_bc_buffer_iter,
 210                                                   rt2x00dev);
 211        /*
 212         * Devices with pre tbtt interrupt don't need to update the beacon
 213         * here as they will fetch the next beacon directly prior to
 214         * transmission.
 215         */
 216        if (test_bit(CAPABILITY_PRE_TBTT_INTERRUPT, &rt2x00dev->cap_flags))
 217                return;
 218
 219        /* fetch next beacon */
 220        ieee80211_iterate_active_interfaces_atomic(rt2x00dev->hw,
 221                                                   rt2x00lib_beaconupdate_iter,
 222                                                   rt2x00dev);
 223}
 224EXPORT_SYMBOL_GPL(rt2x00lib_beacondone);
 225
 226void rt2x00lib_pretbtt(struct rt2x00_dev *rt2x00dev)
 227{
 228        if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 229                return;
 230
 231        /* fetch next beacon */
 232        ieee80211_iterate_active_interfaces_atomic(rt2x00dev->hw,
 233                                                   rt2x00lib_beaconupdate_iter,
 234                                                   rt2x00dev);
 235}
 236EXPORT_SYMBOL_GPL(rt2x00lib_pretbtt);
 237
 238void rt2x00lib_dmastart(struct queue_entry *entry)
 239{
 240        set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
 241        rt2x00queue_index_inc(entry, Q_INDEX);
 242}
 243EXPORT_SYMBOL_GPL(rt2x00lib_dmastart);
 244
 245void rt2x00lib_dmadone(struct queue_entry *entry)
 246{
 247        set_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags);
 248        clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
 249        rt2x00queue_index_inc(entry, Q_INDEX_DMA_DONE);
 250}
 251EXPORT_SYMBOL_GPL(rt2x00lib_dmadone);
 252
 253void rt2x00lib_txdone(struct queue_entry *entry,
 254                      struct txdone_entry_desc *txdesc)
 255{
 256        struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
 257        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb);
 258        struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
 259        unsigned int header_length, i;
 260        u8 rate_idx, rate_flags, retry_rates;
 261        u8 skbdesc_flags = skbdesc->flags;
 262        bool success;
 263
 264        /*
 265         * Unmap the skb.
 266         */
 267        rt2x00queue_unmap_skb(entry);
 268
 269        /*
 270         * Remove the extra tx headroom from the skb.
 271         */
 272        skb_pull(entry->skb, rt2x00dev->ops->extra_tx_headroom);
 273
 274        /*
 275         * Signal that the TX descriptor is no longer in the skb.
 276         */
 277        skbdesc->flags &= ~SKBDESC_DESC_IN_SKB;
 278
 279        /*
 280         * Determine the length of 802.11 header.
 281         */
 282        header_length = ieee80211_get_hdrlen_from_skb(entry->skb);
 283
 284        /*
 285         * Remove L2 padding which was added during
 286         */
 287        if (test_bit(REQUIRE_L2PAD, &rt2x00dev->cap_flags))
 288                rt2x00queue_remove_l2pad(entry->skb, header_length);
 289
 290        /*
 291         * If the IV/EIV data was stripped from the frame before it was
 292         * passed to the hardware, we should now reinsert it again because
 293         * mac80211 will expect the same data to be present it the
 294         * frame as it was passed to us.
 295         */
 296        if (test_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags))
 297                rt2x00crypto_tx_insert_iv(entry->skb, header_length);
 298
 299        /*
 300         * Send frame to debugfs immediately, after this call is completed
 301         * we are going to overwrite the skb->cb array.
 302         */
 303        rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_TXDONE, entry->skb);
 304
 305        /*
 306         * Determine if the frame has been successfully transmitted.
 307         */
 308        success =
 309            test_bit(TXDONE_SUCCESS, &txdesc->flags) ||
 310            test_bit(TXDONE_UNKNOWN, &txdesc->flags);
 311
 312        /*
 313         * Update TX statistics.
 314         */
 315        rt2x00dev->link.qual.tx_success += success;
 316        rt2x00dev->link.qual.tx_failed += !success;
 317
 318        rate_idx = skbdesc->tx_rate_idx;
 319        rate_flags = skbdesc->tx_rate_flags;
 320        retry_rates = test_bit(TXDONE_FALLBACK, &txdesc->flags) ?
 321            (txdesc->retry + 1) : 1;
 322
 323        /*
 324         * Initialize TX status
 325         */
 326        memset(&tx_info->status, 0, sizeof(tx_info->status));
 327        tx_info->status.ack_signal = 0;
 328
 329        /*
 330         * Frame was send with retries, hardware tried
 331         * different rates to send out the frame, at each
 332         * retry it lowered the rate 1 step except when the
 333         * lowest rate was used.
 334         */
 335        for (i = 0; i < retry_rates && i < IEEE80211_TX_MAX_RATES; i++) {
 336                tx_info->status.rates[i].idx = rate_idx - i;
 337                tx_info->status.rates[i].flags = rate_flags;
 338
 339                if (rate_idx - i == 0) {
 340                        /*
 341                         * The lowest rate (index 0) was used until the
 342                         * number of max retries was reached.
 343                         */
 344                        tx_info->status.rates[i].count = retry_rates - i;
 345                        i++;
 346                        break;
 347                }
 348                tx_info->status.rates[i].count = 1;
 349        }
 350        if (i < (IEEE80211_TX_MAX_RATES - 1))
 351                tx_info->status.rates[i].idx = -1; /* terminate */
 352
 353        if (!(tx_info->flags & IEEE80211_TX_CTL_NO_ACK)) {
 354                if (success)
 355                        tx_info->flags |= IEEE80211_TX_STAT_ACK;
 356                else
 357                        rt2x00dev->low_level_stats.dot11ACKFailureCount++;
 358        }
 359
 360        /*
 361         * Every single frame has it's own tx status, hence report
 362         * every frame as ampdu of size 1.
 363         *
 364         * TODO: if we can find out how many frames were aggregated
 365         * by the hw we could provide the real ampdu_len to mac80211
 366         * which would allow the rc algorithm to better decide on
 367         * which rates are suitable.
 368         */
 369        if (test_bit(TXDONE_AMPDU, &txdesc->flags) ||
 370            tx_info->flags & IEEE80211_TX_CTL_AMPDU) {
 371                tx_info->flags |= IEEE80211_TX_STAT_AMPDU;
 372                tx_info->status.ampdu_len = 1;
 373                tx_info->status.ampdu_ack_len = success ? 1 : 0;
 374
 375                if (!success)
 376                        tx_info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
 377        }
 378
 379        if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
 380                if (success)
 381                        rt2x00dev->low_level_stats.dot11RTSSuccessCount++;
 382                else
 383                        rt2x00dev->low_level_stats.dot11RTSFailureCount++;
 384        }
 385
 386        /*
 387         * Only send the status report to mac80211 when it's a frame
 388         * that originated in mac80211. If this was a extra frame coming
 389         * through a mac80211 library call (RTS/CTS) then we should not
 390         * send the status report back.
 391         */
 392        if (!(skbdesc_flags & SKBDESC_NOT_MAC80211)) {
 393                if (test_bit(REQUIRE_TASKLET_CONTEXT, &rt2x00dev->cap_flags))
 394                        ieee80211_tx_status(rt2x00dev->hw, entry->skb);
 395                else
 396                        ieee80211_tx_status_ni(rt2x00dev->hw, entry->skb);
 397        } else
 398                dev_kfree_skb_any(entry->skb);
 399
 400        /*
 401         * Make this entry available for reuse.
 402         */
 403        entry->skb = NULL;
 404        entry->flags = 0;
 405
 406        rt2x00dev->ops->lib->clear_entry(entry);
 407
 408        rt2x00queue_index_inc(entry, Q_INDEX_DONE);
 409
 410        /*
 411         * If the data queue was below the threshold before the txdone
 412         * handler we must make sure the packet queue in the mac80211 stack
 413         * is reenabled when the txdone handler has finished.
 414         */
 415        if (!rt2x00queue_threshold(entry->queue))
 416                rt2x00queue_unpause_queue(entry->queue);
 417}
 418EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
 419
 420void rt2x00lib_txdone_noinfo(struct queue_entry *entry, u32 status)
 421{
 422        struct txdone_entry_desc txdesc;
 423
 424        txdesc.flags = 0;
 425        __set_bit(status, &txdesc.flags);
 426        txdesc.retry = 0;
 427
 428        rt2x00lib_txdone(entry, &txdesc);
 429}
 430EXPORT_SYMBOL_GPL(rt2x00lib_txdone_noinfo);
 431
 432static u8 *rt2x00lib_find_ie(u8 *data, unsigned int len, u8 ie)
 433{
 434        struct ieee80211_mgmt *mgmt = (void *)data;
 435        u8 *pos, *end;
 436
 437        pos = (u8 *)mgmt->u.beacon.variable;
 438        end = data + len;
 439        while (pos < end) {
 440                if (pos + 2 + pos[1] > end)
 441                        return NULL;
 442
 443                if (pos[0] == ie)
 444                        return pos;
 445
 446                pos += 2 + pos[1];
 447        }
 448
 449        return NULL;
 450}
 451
 452static void rt2x00lib_rxdone_check_ps(struct rt2x00_dev *rt2x00dev,
 453                                      struct sk_buff *skb,
 454                                      struct rxdone_entry_desc *rxdesc)
 455{
 456        struct ieee80211_hdr *hdr = (void *) skb->data;
 457        struct ieee80211_tim_ie *tim_ie;
 458        u8 *tim;
 459        u8 tim_len;
 460        bool cam;
 461
 462        /* If this is not a beacon, or if mac80211 has no powersaving
 463         * configured, or if the device is already in powersaving mode
 464         * we can exit now. */
 465        if (likely(!ieee80211_is_beacon(hdr->frame_control) ||
 466                   !(rt2x00dev->hw->conf.flags & IEEE80211_CONF_PS)))
 467                return;
 468
 469        /* min. beacon length + FCS_LEN */
 470        if (skb->len <= 40 + FCS_LEN)
 471                return;
 472
 473        /* and only beacons from the associated BSSID, please */
 474        if (!(rxdesc->dev_flags & RXDONE_MY_BSS) ||
 475            !rt2x00dev->aid)
 476                return;
 477
 478        rt2x00dev->last_beacon = jiffies;
 479
 480        tim = rt2x00lib_find_ie(skb->data, skb->len - FCS_LEN, WLAN_EID_TIM);
 481        if (!tim)
 482                return;
 483
 484        if (tim[1] < sizeof(*tim_ie))
 485                return;
 486
 487        tim_len = tim[1];
 488        tim_ie = (struct ieee80211_tim_ie *) &tim[2];
 489
 490        /* Check whenever the PHY can be turned off again. */
 491
 492        /* 1. What about buffered unicast traffic for our AID? */
 493        cam = ieee80211_check_tim(tim_ie, tim_len, rt2x00dev->aid);
 494
 495        /* 2. Maybe the AP wants to send multicast/broadcast data? */
 496        cam |= (tim_ie->bitmap_ctrl & 0x01);
 497
 498        if (!cam && !test_bit(CONFIG_POWERSAVING, &rt2x00dev->flags))
 499                rt2x00lib_config(rt2x00dev, &rt2x00dev->hw->conf,
 500                                 IEEE80211_CONF_CHANGE_PS);
 501}
 502
 503static int rt2x00lib_rxdone_read_signal(struct rt2x00_dev *rt2x00dev,
 504                                        struct rxdone_entry_desc *rxdesc)
 505{
 506        struct ieee80211_supported_band *sband;
 507        const struct rt2x00_rate *rate;
 508        unsigned int i;
 509        int signal = rxdesc->signal;
 510        int type = (rxdesc->dev_flags & RXDONE_SIGNAL_MASK);
 511
 512        switch (rxdesc->rate_mode) {
 513        case RATE_MODE_CCK:
 514        case RATE_MODE_OFDM:
 515                /*
 516                 * For non-HT rates the MCS value needs to contain the
 517                 * actually used rate modulation (CCK or OFDM).
 518                 */
 519                if (rxdesc->dev_flags & RXDONE_SIGNAL_MCS)
 520                        signal = RATE_MCS(rxdesc->rate_mode, signal);
 521
 522                sband = &rt2x00dev->bands[rt2x00dev->curr_band];
 523                for (i = 0; i < sband->n_bitrates; i++) {
 524                        rate = rt2x00_get_rate(sband->bitrates[i].hw_value);
 525                        if (((type == RXDONE_SIGNAL_PLCP) &&
 526                             (rate->plcp == signal)) ||
 527                            ((type == RXDONE_SIGNAL_BITRATE) &&
 528                              (rate->bitrate == signal)) ||
 529                            ((type == RXDONE_SIGNAL_MCS) &&
 530                              (rate->mcs == signal))) {
 531                                return i;
 532                        }
 533                }
 534                break;
 535        case RATE_MODE_HT_MIX:
 536        case RATE_MODE_HT_GREENFIELD:
 537                if (signal >= 0 && signal <= 76)
 538                        return signal;
 539                break;
 540        default:
 541                break;
 542        }
 543
 544        WARNING(rt2x00dev, "Frame received with unrecognized signal, "
 545                "mode=0x%.4x, signal=0x%.4x, type=%d.\n",
 546                rxdesc->rate_mode, signal, type);
 547        return 0;
 548}
 549
 550void rt2x00lib_rxdone(struct queue_entry *entry)
 551{
 552        struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
 553        struct rxdone_entry_desc rxdesc;
 554        struct sk_buff *skb;
 555        struct ieee80211_rx_status *rx_status;
 556        unsigned int header_length;
 557        int rate_idx;
 558
 559        if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) ||
 560            !test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 561                goto submit_entry;
 562
 563        if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
 564                goto submit_entry;
 565
 566        /*
 567         * Allocate a new sk_buffer. If no new buffer available, drop the
 568         * received frame and reuse the existing buffer.
 569         */
 570        skb = rt2x00queue_alloc_rxskb(entry);
 571        if (!skb)
 572                goto submit_entry;
 573
 574        /*
 575         * Unmap the skb.
 576         */
 577        rt2x00queue_unmap_skb(entry);
 578
 579        /*
 580         * Extract the RXD details.
 581         */
 582        memset(&rxdesc, 0, sizeof(rxdesc));
 583        rt2x00dev->ops->lib->fill_rxdone(entry, &rxdesc);
 584
 585        /*
 586         * The data behind the ieee80211 header must be
 587         * aligned on a 4 byte boundary.
 588         */
 589        header_length = ieee80211_get_hdrlen_from_skb(entry->skb);
 590
 591        /*
 592         * Hardware might have stripped the IV/EIV/ICV data,
 593         * in that case it is possible that the data was
 594         * provided separately (through hardware descriptor)
 595         * in which case we should reinsert the data into the frame.
 596         */
 597        if ((rxdesc.dev_flags & RXDONE_CRYPTO_IV) &&
 598            (rxdesc.flags & RX_FLAG_IV_STRIPPED))
 599                rt2x00crypto_rx_insert_iv(entry->skb, header_length,
 600                                          &rxdesc);
 601        else if (header_length &&
 602                 (rxdesc.size > header_length) &&
 603                 (rxdesc.dev_flags & RXDONE_L2PAD))
 604                rt2x00queue_remove_l2pad(entry->skb, header_length);
 605
 606        /* Trim buffer to correct size */
 607        skb_trim(entry->skb, rxdesc.size);
 608
 609        /*
 610         * Translate the signal to the correct bitrate index.
 611         */
 612        rate_idx = rt2x00lib_rxdone_read_signal(rt2x00dev, &rxdesc);
 613        if (rxdesc.rate_mode == RATE_MODE_HT_MIX ||
 614            rxdesc.rate_mode == RATE_MODE_HT_GREENFIELD)
 615                rxdesc.flags |= RX_FLAG_HT;
 616
 617        /*
 618         * Check if this is a beacon, and more frames have been
 619         * buffered while we were in powersaving mode.
 620         */
 621        rt2x00lib_rxdone_check_ps(rt2x00dev, entry->skb, &rxdesc);
 622
 623        /*
 624         * Update extra components
 625         */
 626        rt2x00link_update_stats(rt2x00dev, entry->skb, &rxdesc);
 627        rt2x00debug_update_crypto(rt2x00dev, &rxdesc);
 628        rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_RXDONE, entry->skb);
 629
 630        /*
 631         * Initialize RX status information, and send frame
 632         * to mac80211.
 633         */
 634        rx_status = IEEE80211_SKB_RXCB(entry->skb);
 635        rx_status->mactime = rxdesc.timestamp;
 636        rx_status->band = rt2x00dev->curr_band;
 637        rx_status->freq = rt2x00dev->curr_freq;
 638        rx_status->rate_idx = rate_idx;
 639        rx_status->signal = rxdesc.rssi;
 640        rx_status->flag = rxdesc.flags;
 641        rx_status->antenna = rt2x00dev->link.ant.active.rx;
 642
 643        ieee80211_rx_ni(rt2x00dev->hw, entry->skb);
 644
 645        /*
 646         * Replace the skb with the freshly allocated one.
 647         */
 648        entry->skb = skb;
 649
 650submit_entry:
 651        entry->flags = 0;
 652        rt2x00queue_index_inc(entry, Q_INDEX_DONE);
 653        if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) &&
 654            test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
 655                rt2x00dev->ops->lib->clear_entry(entry);
 656}
 657EXPORT_SYMBOL_GPL(rt2x00lib_rxdone);
 658
 659/*
 660 * Driver initialization handlers.
 661 */
 662const struct rt2x00_rate rt2x00_supported_rates[12] = {
 663        {
 664                .flags = DEV_RATE_CCK,
 665                .bitrate = 10,
 666                .ratemask = BIT(0),
 667                .plcp = 0x00,
 668                .mcs = RATE_MCS(RATE_MODE_CCK, 0),
 669        },
 670        {
 671                .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
 672                .bitrate = 20,
 673                .ratemask = BIT(1),
 674                .plcp = 0x01,
 675                .mcs = RATE_MCS(RATE_MODE_CCK, 1),
 676        },
 677        {
 678                .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
 679                .bitrate = 55,
 680                .ratemask = BIT(2),
 681                .plcp = 0x02,
 682                .mcs = RATE_MCS(RATE_MODE_CCK, 2),
 683        },
 684        {
 685                .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
 686                .bitrate = 110,
 687                .ratemask = BIT(3),
 688                .plcp = 0x03,
 689                .mcs = RATE_MCS(RATE_MODE_CCK, 3),
 690        },
 691        {
 692                .flags = DEV_RATE_OFDM,
 693                .bitrate = 60,
 694                .ratemask = BIT(4),
 695                .plcp = 0x0b,
 696                .mcs = RATE_MCS(RATE_MODE_OFDM, 0),
 697        },
 698        {
 699                .flags = DEV_RATE_OFDM,
 700                .bitrate = 90,
 701                .ratemask = BIT(5),
 702                .plcp = 0x0f,
 703                .mcs = RATE_MCS(RATE_MODE_OFDM, 1),
 704        },
 705        {
 706                .flags = DEV_RATE_OFDM,
 707                .bitrate = 120,
 708                .ratemask = BIT(6),
 709                .plcp = 0x0a,
 710                .mcs = RATE_MCS(RATE_MODE_OFDM, 2),
 711        },
 712        {
 713                .flags = DEV_RATE_OFDM,
 714                .bitrate = 180,
 715                .ratemask = BIT(7),
 716                .plcp = 0x0e,
 717                .mcs = RATE_MCS(RATE_MODE_OFDM, 3),
 718        },
 719        {
 720                .flags = DEV_RATE_OFDM,
 721                .bitrate = 240,
 722                .ratemask = BIT(8),
 723                .plcp = 0x09,
 724                .mcs = RATE_MCS(RATE_MODE_OFDM, 4),
 725        },
 726        {
 727                .flags = DEV_RATE_OFDM,
 728                .bitrate = 360,
 729                .ratemask = BIT(9),
 730                .plcp = 0x0d,
 731                .mcs = RATE_MCS(RATE_MODE_OFDM, 5),
 732        },
 733        {
 734                .flags = DEV_RATE_OFDM,
 735                .bitrate = 480,
 736                .ratemask = BIT(10),
 737                .plcp = 0x08,
 738                .mcs = RATE_MCS(RATE_MODE_OFDM, 6),
 739        },
 740        {
 741                .flags = DEV_RATE_OFDM,
 742                .bitrate = 540,
 743                .ratemask = BIT(11),
 744                .plcp = 0x0c,
 745                .mcs = RATE_MCS(RATE_MODE_OFDM, 7),
 746        },
 747};
 748
 749static void rt2x00lib_channel(struct ieee80211_channel *entry,
 750                              const int channel, const int tx_power,
 751                              const int value)
 752{
 753        /* XXX: this assumption about the band is wrong for 802.11j */
 754        entry->band = channel <= 14 ? IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ;
 755        entry->center_freq = ieee80211_channel_to_frequency(channel,
 756                                                            entry->band);
 757        entry->hw_value = value;
 758        entry->max_power = tx_power;
 759        entry->max_antenna_gain = 0xff;
 760}
 761
 762static void rt2x00lib_rate(struct ieee80211_rate *entry,
 763                           const u16 index, const struct rt2x00_rate *rate)
 764{
 765        entry->flags = 0;
 766        entry->bitrate = rate->bitrate;
 767        entry->hw_value = index;
 768        entry->hw_value_short = index;
 769
 770        if (rate->flags & DEV_RATE_SHORT_PREAMBLE)
 771                entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE;
 772}
 773
 774static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev,
 775                                    struct hw_mode_spec *spec)
 776{
 777        struct ieee80211_hw *hw = rt2x00dev->hw;
 778        struct ieee80211_channel *channels;
 779        struct ieee80211_rate *rates;
 780        unsigned int num_rates;
 781        unsigned int i;
 782
 783        num_rates = 0;
 784        if (spec->supported_rates & SUPPORT_RATE_CCK)
 785                num_rates += 4;
 786        if (spec->supported_rates & SUPPORT_RATE_OFDM)
 787                num_rates += 8;
 788
 789        channels = kzalloc(sizeof(*channels) * spec->num_channels, GFP_KERNEL);
 790        if (!channels)
 791                return -ENOMEM;
 792
 793        rates = kzalloc(sizeof(*rates) * num_rates, GFP_KERNEL);
 794        if (!rates)
 795                goto exit_free_channels;
 796
 797        /*
 798         * Initialize Rate list.
 799         */
 800        for (i = 0; i < num_rates; i++)
 801                rt2x00lib_rate(&rates[i], i, rt2x00_get_rate(i));
 802
 803        /*
 804         * Initialize Channel list.
 805         */
 806        for (i = 0; i < spec->num_channels; i++) {
 807                rt2x00lib_channel(&channels[i],
 808                                  spec->channels[i].channel,
 809                                  spec->channels_info[i].max_power, i);
 810        }
 811
 812        /*
 813         * Intitialize 802.11b, 802.11g
 814         * Rates: CCK, OFDM.
 815         * Channels: 2.4 GHz
 816         */
 817        if (spec->supported_bands & SUPPORT_BAND_2GHZ) {
 818                rt2x00dev->bands[IEEE80211_BAND_2GHZ].n_channels = 14;
 819                rt2x00dev->bands[IEEE80211_BAND_2GHZ].n_bitrates = num_rates;
 820                rt2x00dev->bands[IEEE80211_BAND_2GHZ].channels = channels;
 821                rt2x00dev->bands[IEEE80211_BAND_2GHZ].bitrates = rates;
 822                hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
 823                    &rt2x00dev->bands[IEEE80211_BAND_2GHZ];
 824                memcpy(&rt2x00dev->bands[IEEE80211_BAND_2GHZ].ht_cap,
 825                       &spec->ht, sizeof(spec->ht));
 826        }
 827
 828        /*
 829         * Intitialize 802.11a
 830         * Rates: OFDM.
 831         * Channels: OFDM, UNII, HiperLAN2.
 832         */
 833        if (spec->supported_bands & SUPPORT_BAND_5GHZ) {
 834                rt2x00dev->bands[IEEE80211_BAND_5GHZ].n_channels =
 835                    spec->num_channels - 14;
 836                rt2x00dev->bands[IEEE80211_BAND_5GHZ].n_bitrates =
 837                    num_rates - 4;
 838                rt2x00dev->bands[IEEE80211_BAND_5GHZ].channels = &channels[14];
 839                rt2x00dev->bands[IEEE80211_BAND_5GHZ].bitrates = &rates[4];
 840                hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
 841                    &rt2x00dev->bands[IEEE80211_BAND_5GHZ];
 842                memcpy(&rt2x00dev->bands[IEEE80211_BAND_5GHZ].ht_cap,
 843                       &spec->ht, sizeof(spec->ht));
 844        }
 845
 846        return 0;
 847
 848 exit_free_channels:
 849        kfree(channels);
 850        ERROR(rt2x00dev, "Allocation ieee80211 modes failed.\n");
 851        return -ENOMEM;
 852}
 853
 854static void rt2x00lib_remove_hw(struct rt2x00_dev *rt2x00dev)
 855{
 856        if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags))
 857                ieee80211_unregister_hw(rt2x00dev->hw);
 858
 859        if (likely(rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ])) {
 860                kfree(rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ]->channels);
 861                kfree(rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ]->bitrates);
 862                rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = NULL;
 863                rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = NULL;
 864        }
 865
 866        kfree(rt2x00dev->spec.channels_info);
 867}
 868
 869static int rt2x00lib_probe_hw(struct rt2x00_dev *rt2x00dev)
 870{
 871        struct hw_mode_spec *spec = &rt2x00dev->spec;
 872        int status;
 873
 874        if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags))
 875                return 0;
 876
 877        /*
 878         * Initialize HW modes.
 879         */
 880        status = rt2x00lib_probe_hw_modes(rt2x00dev, spec);
 881        if (status)
 882                return status;
 883
 884        /*
 885         * Initialize HW fields.
 886         */
 887        rt2x00dev->hw->queues = rt2x00dev->ops->tx_queues;
 888
 889        /*
 890         * Initialize extra TX headroom required.
 891         */
 892        rt2x00dev->hw->extra_tx_headroom =
 893                max_t(unsigned int, IEEE80211_TX_STATUS_HEADROOM,
 894                      rt2x00dev->ops->extra_tx_headroom);
 895
 896        /*
 897         * Take TX headroom required for alignment into account.
 898         */
 899        if (test_bit(REQUIRE_L2PAD, &rt2x00dev->cap_flags))
 900                rt2x00dev->hw->extra_tx_headroom += RT2X00_L2PAD_SIZE;
 901        else if (test_bit(REQUIRE_DMA, &rt2x00dev->cap_flags))
 902                rt2x00dev->hw->extra_tx_headroom += RT2X00_ALIGN_SIZE;
 903
 904        /*
 905         * Allocate tx status FIFO for driver use.
 906         */
 907        if (test_bit(REQUIRE_TXSTATUS_FIFO, &rt2x00dev->cap_flags)) {
 908                /*
 909                 * Allocate the txstatus fifo. In the worst case the tx
 910                 * status fifo has to hold the tx status of all entries
 911                 * in all tx queues. Hence, calculate the kfifo size as
 912                 * tx_queues * entry_num and round up to the nearest
 913                 * power of 2.
 914                 */
 915                int kfifo_size =
 916                        roundup_pow_of_two(rt2x00dev->ops->tx_queues *
 917                                           rt2x00dev->ops->tx->entry_num *
 918                                           sizeof(u32));
 919
 920                status = kfifo_alloc(&rt2x00dev->txstatus_fifo, kfifo_size,
 921                                     GFP_KERNEL);
 922                if (status)
 923                        return status;
 924        }
 925
 926        /*
 927         * Initialize tasklets if used by the driver. Tasklets are
 928         * disabled until the interrupts are turned on. The driver
 929         * has to handle that.
 930         */
 931#define RT2X00_TASKLET_INIT(taskletname) \
 932        if (rt2x00dev->ops->lib->taskletname) { \
 933                tasklet_init(&rt2x00dev->taskletname, \
 934                             rt2x00dev->ops->lib->taskletname, \
 935                             (unsigned long)rt2x00dev); \
 936                tasklet_disable(&rt2x00dev->taskletname); \
 937        }
 938
 939        RT2X00_TASKLET_INIT(txstatus_tasklet);
 940        RT2X00_TASKLET_INIT(pretbtt_tasklet);
 941        RT2X00_TASKLET_INIT(tbtt_tasklet);
 942        RT2X00_TASKLET_INIT(rxdone_tasklet);
 943        RT2X00_TASKLET_INIT(autowake_tasklet);
 944
 945#undef RT2X00_TASKLET_INIT
 946
 947        /*
 948         * Register HW.
 949         */
 950        status = ieee80211_register_hw(rt2x00dev->hw);
 951        if (status)
 952                return status;
 953
 954        set_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags);
 955
 956        return 0;
 957}
 958
 959/*
 960 * Initialization/uninitialization handlers.
 961 */
 962static void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev)
 963{
 964        if (!test_and_clear_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags))
 965                return;
 966
 967        /*
 968         * Unregister extra components.
 969         */
 970        rt2x00rfkill_unregister(rt2x00dev);
 971
 972        /*
 973         * Allow the HW to uninitialize.
 974         */
 975        rt2x00dev->ops->lib->uninitialize(rt2x00dev);
 976
 977        /*
 978         * Free allocated queue entries.
 979         */
 980        rt2x00queue_uninitialize(rt2x00dev);
 981}
 982
 983static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
 984{
 985        int status;
 986
 987        if (test_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags))
 988                return 0;
 989
 990        /*
 991         * Allocate all queue entries.
 992         */
 993        status = rt2x00queue_initialize(rt2x00dev);
 994        if (status)
 995                return status;
 996
 997        /*
 998         * Initialize the device.
 999         */
1000        status = rt2x00dev->ops->lib->initialize(rt2x00dev);
1001        if (status) {
1002                rt2x00queue_uninitialize(rt2x00dev);
1003                return status;
1004        }
1005
1006        set_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags);
1007
1008        /*
1009         * Register the extra components.
1010         */
1011        rt2x00rfkill_register(rt2x00dev);
1012
1013        return 0;
1014}
1015
1016int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
1017{
1018        int retval;
1019
1020        if (test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
1021                return 0;
1022
1023        /*
1024         * If this is the first interface which is added,
1025         * we should load the firmware now.
1026         */
1027        retval = rt2x00lib_load_firmware(rt2x00dev);
1028        if (retval)
1029                return retval;
1030
1031        /*
1032         * Initialize the device.
1033         */
1034        retval = rt2x00lib_initialize(rt2x00dev);
1035        if (retval)
1036                return retval;
1037
1038        rt2x00dev->intf_ap_count = 0;
1039        rt2x00dev->intf_sta_count = 0;
1040        rt2x00dev->intf_associated = 0;
1041
1042        /* Enable the radio */
1043        retval = rt2x00lib_enable_radio(rt2x00dev);
1044        if (retval)
1045                return retval;
1046
1047        set_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags);
1048
1049        return 0;
1050}
1051
1052void rt2x00lib_stop(struct rt2x00_dev *rt2x00dev)
1053{
1054        if (!test_and_clear_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
1055                return;
1056
1057        /*
1058         * Perhaps we can add something smarter here,
1059         * but for now just disabling the radio should do.
1060         */
1061        rt2x00lib_disable_radio(rt2x00dev);
1062
1063        rt2x00dev->intf_ap_count = 0;
1064        rt2x00dev->intf_sta_count = 0;
1065        rt2x00dev->intf_associated = 0;
1066}
1067
1068/*
1069 * driver allocation handlers.
1070 */
1071int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
1072{
1073        int retval = -ENOMEM;
1074
1075        spin_lock_init(&rt2x00dev->irqmask_lock);
1076        mutex_init(&rt2x00dev->csr_mutex);
1077
1078        set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1079
1080        /*
1081         * Make room for rt2x00_intf inside the per-interface
1082         * structure ieee80211_vif.
1083         */
1084        rt2x00dev->hw->vif_data_size = sizeof(struct rt2x00_intf);
1085
1086        /*
1087         * Determine which operating modes are supported, all modes
1088         * which require beaconing, depend on the availability of
1089         * beacon entries.
1090         */
1091        rt2x00dev->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
1092        if (rt2x00dev->ops->bcn->entry_num > 0)
1093                rt2x00dev->hw->wiphy->interface_modes |=
1094                    BIT(NL80211_IFTYPE_ADHOC) |
1095                    BIT(NL80211_IFTYPE_AP) |
1096                    BIT(NL80211_IFTYPE_MESH_POINT) |
1097                    BIT(NL80211_IFTYPE_WDS);
1098
1099        /*
1100         * Initialize work.
1101         */
1102        rt2x00dev->workqueue =
1103            alloc_ordered_workqueue(wiphy_name(rt2x00dev->hw->wiphy), 0);
1104        if (!rt2x00dev->workqueue) {
1105                retval = -ENOMEM;
1106                goto exit;
1107        }
1108
1109        INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled);
1110        INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup);
1111
1112        /*
1113         * Let the driver probe the device to detect the capabilities.
1114         */
1115        retval = rt2x00dev->ops->lib->probe_hw(rt2x00dev);
1116        if (retval) {
1117                ERROR(rt2x00dev, "Failed to allocate device.\n");
1118                goto exit;
1119        }
1120
1121        /*
1122         * Allocate queue array.
1123         */
1124        retval = rt2x00queue_allocate(rt2x00dev);
1125        if (retval)
1126                goto exit;
1127
1128        /*
1129         * Initialize ieee80211 structure.
1130         */
1131        retval = rt2x00lib_probe_hw(rt2x00dev);
1132        if (retval) {
1133                ERROR(rt2x00dev, "Failed to initialize hw.\n");
1134                goto exit;
1135        }
1136
1137        /*
1138         * Register extra components.
1139         */
1140        rt2x00link_register(rt2x00dev);
1141        rt2x00leds_register(rt2x00dev);
1142        rt2x00debug_register(rt2x00dev);
1143
1144        return 0;
1145
1146exit:
1147        rt2x00lib_remove_dev(rt2x00dev);
1148
1149        return retval;
1150}
1151EXPORT_SYMBOL_GPL(rt2x00lib_probe_dev);
1152
1153void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
1154{
1155        clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1156
1157        /*
1158         * Disable radio.
1159         */
1160        rt2x00lib_disable_radio(rt2x00dev);
1161
1162        /*
1163         * Stop all work.
1164         */
1165        cancel_work_sync(&rt2x00dev->intf_work);
1166        cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
1167        if (rt2x00_is_usb(rt2x00dev)) {
1168                del_timer_sync(&rt2x00dev->txstatus_timer);
1169                cancel_work_sync(&rt2x00dev->rxdone_work);
1170                cancel_work_sync(&rt2x00dev->txdone_work);
1171        }
1172        destroy_workqueue(rt2x00dev->workqueue);
1173
1174        /*
1175         * Free the tx status fifo.
1176         */
1177        kfifo_free(&rt2x00dev->txstatus_fifo);
1178
1179        /*
1180         * Kill the tx status tasklet.
1181         */
1182        tasklet_kill(&rt2x00dev->txstatus_tasklet);
1183        tasklet_kill(&rt2x00dev->pretbtt_tasklet);
1184        tasklet_kill(&rt2x00dev->tbtt_tasklet);
1185        tasklet_kill(&rt2x00dev->rxdone_tasklet);
1186        tasklet_kill(&rt2x00dev->autowake_tasklet);
1187
1188        /*
1189         * Uninitialize device.
1190         */
1191        rt2x00lib_uninitialize(rt2x00dev);
1192
1193        /*
1194         * Free extra components
1195         */
1196        rt2x00debug_deregister(rt2x00dev);
1197        rt2x00leds_unregister(rt2x00dev);
1198
1199        /*
1200         * Free ieee80211_hw memory.
1201         */
1202        rt2x00lib_remove_hw(rt2x00dev);
1203
1204        /*
1205         * Free firmware image.
1206         */
1207        rt2x00lib_free_firmware(rt2x00dev);
1208
1209        /*
1210         * Free queue structures.
1211         */
1212        rt2x00queue_free(rt2x00dev);
1213}
1214EXPORT_SYMBOL_GPL(rt2x00lib_remove_dev);
1215
1216/*
1217 * Device state handlers
1218 */
1219#ifdef CONFIG_PM
1220int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state)
1221{
1222        NOTICE(rt2x00dev, "Going to sleep.\n");
1223
1224        /*
1225         * Prevent mac80211 from accessing driver while suspended.
1226         */
1227        if (!test_and_clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
1228                return 0;
1229
1230        /*
1231         * Cleanup as much as possible.
1232         */
1233        rt2x00lib_uninitialize(rt2x00dev);
1234
1235        /*
1236         * Suspend/disable extra components.
1237         */
1238        rt2x00leds_suspend(rt2x00dev);
1239        rt2x00debug_deregister(rt2x00dev);
1240
1241        /*
1242         * Set device mode to sleep for power management,
1243         * on some hardware this call seems to consistently fail.
1244         * From the specifications it is hard to tell why it fails,
1245         * and if this is a "bad thing".
1246         * Overall it is safe to just ignore the failure and
1247         * continue suspending. The only downside is that the
1248         * device will not be in optimal power save mode, but with
1249         * the radio and the other components already disabled the
1250         * device is as good as disabled.
1251         */
1252        if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_SLEEP))
1253                WARNING(rt2x00dev, "Device failed to enter sleep state, "
1254                        "continue suspending.\n");
1255
1256        return 0;
1257}
1258EXPORT_SYMBOL_GPL(rt2x00lib_suspend);
1259
1260int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev)
1261{
1262        NOTICE(rt2x00dev, "Waking up.\n");
1263
1264        /*
1265         * Restore/enable extra components.
1266         */
1267        rt2x00debug_register(rt2x00dev);
1268        rt2x00leds_resume(rt2x00dev);
1269
1270        /*
1271         * We are ready again to receive requests from mac80211.
1272         */
1273        set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1274
1275        return 0;
1276}
1277EXPORT_SYMBOL_GPL(rt2x00lib_resume);
1278#endif /* CONFIG_PM */
1279
1280/*
1281 * rt2x00lib module information.
1282 */
1283MODULE_AUTHOR(DRV_PROJECT);
1284MODULE_VERSION(DRV_VERSION);
1285MODULE_DESCRIPTION("rt2x00 library");
1286MODULE_LICENSE("GPL");
1287