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