linux/drivers/net/wireless/ath/carl9170/main.c
<<
>>
Prefs
   1/*
   2 * Atheros CARL9170 driver
   3 *
   4 * mac80211 interaction code
   5 *
   6 * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
   7 * Copyright 2009, 2010, Christian Lamparter <chunkeey@googlemail.com>
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License as published by
  11 * the Free Software Foundation; either version 2 of the License, or
  12 * (at your option) any later version.
  13 *
  14 * This program is distributed in the hope that it will be useful,
  15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 * GNU General Public License for more details.
  18 *
  19 * You should have received a copy of the GNU General Public License
  20 * along with this program; see the file COPYING.  If not, see
  21 * http://www.gnu.org/licenses/.
  22 *
  23 * This file incorporates work covered by the following copyright and
  24 * permission notice:
  25 *    Copyright (c) 2007-2008 Atheros Communications, Inc.
  26 *
  27 *    Permission to use, copy, modify, and/or distribute this software for any
  28 *    purpose with or without fee is hereby granted, provided that the above
  29 *    copyright notice and this permission notice appear in all copies.
  30 *
  31 *    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  32 *    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  33 *    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  34 *    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  35 *    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  36 *    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  37 *    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  38 */
  39
  40#include <linux/init.h>
  41#include <linux/slab.h>
  42#include <linux/module.h>
  43#include <linux/etherdevice.h>
  44#include <linux/random.h>
  45#include <net/mac80211.h>
  46#include <net/cfg80211.h>
  47#include "hw.h"
  48#include "carl9170.h"
  49#include "cmd.h"
  50
  51static int modparam_nohwcrypt;
  52module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
  53MODULE_PARM_DESC(nohwcrypt, "Disable hardware crypto offload.");
  54
  55int modparam_noht;
  56module_param_named(noht, modparam_noht, int, S_IRUGO);
  57MODULE_PARM_DESC(noht, "Disable MPDU aggregation.");
  58
  59#define RATE(_bitrate, _hw_rate, _txpidx, _flags) {     \
  60        .bitrate        = (_bitrate),                   \
  61        .flags          = (_flags),                     \
  62        .hw_value       = (_hw_rate) | (_txpidx) << 4,  \
  63}
  64
  65struct ieee80211_rate __carl9170_ratetable[] = {
  66        RATE(10, 0, 0, 0),
  67        RATE(20, 1, 1, IEEE80211_RATE_SHORT_PREAMBLE),
  68        RATE(55, 2, 2, IEEE80211_RATE_SHORT_PREAMBLE),
  69        RATE(110, 3, 3, IEEE80211_RATE_SHORT_PREAMBLE),
  70        RATE(60, 0xb, 0, 0),
  71        RATE(90, 0xf, 0, 0),
  72        RATE(120, 0xa, 0, 0),
  73        RATE(180, 0xe, 0, 0),
  74        RATE(240, 0x9, 0, 0),
  75        RATE(360, 0xd, 1, 0),
  76        RATE(480, 0x8, 2, 0),
  77        RATE(540, 0xc, 3, 0),
  78};
  79#undef RATE
  80
  81#define carl9170_g_ratetable    (__carl9170_ratetable + 0)
  82#define carl9170_g_ratetable_size       12
  83#define carl9170_a_ratetable    (__carl9170_ratetable + 4)
  84#define carl9170_a_ratetable_size       8
  85
  86/*
  87 * NB: The hw_value is used as an index into the carl9170_phy_freq_params
  88 *     array in phy.c so that we don't have to do frequency lookups!
  89 */
  90#define CHAN(_freq, _idx) {             \
  91        .center_freq    = (_freq),      \
  92        .hw_value       = (_idx),       \
  93        .max_power      = 18, /* XXX */ \
  94}
  95
  96static struct ieee80211_channel carl9170_2ghz_chantable[] = {
  97        CHAN(2412,  0),
  98        CHAN(2417,  1),
  99        CHAN(2422,  2),
 100        CHAN(2427,  3),
 101        CHAN(2432,  4),
 102        CHAN(2437,  5),
 103        CHAN(2442,  6),
 104        CHAN(2447,  7),
 105        CHAN(2452,  8),
 106        CHAN(2457,  9),
 107        CHAN(2462, 10),
 108        CHAN(2467, 11),
 109        CHAN(2472, 12),
 110        CHAN(2484, 13),
 111};
 112
 113static struct ieee80211_channel carl9170_5ghz_chantable[] = {
 114        CHAN(4920, 14),
 115        CHAN(4940, 15),
 116        CHAN(4960, 16),
 117        CHAN(4980, 17),
 118        CHAN(5040, 18),
 119        CHAN(5060, 19),
 120        CHAN(5080, 20),
 121        CHAN(5180, 21),
 122        CHAN(5200, 22),
 123        CHAN(5220, 23),
 124        CHAN(5240, 24),
 125        CHAN(5260, 25),
 126        CHAN(5280, 26),
 127        CHAN(5300, 27),
 128        CHAN(5320, 28),
 129        CHAN(5500, 29),
 130        CHAN(5520, 30),
 131        CHAN(5540, 31),
 132        CHAN(5560, 32),
 133        CHAN(5580, 33),
 134        CHAN(5600, 34),
 135        CHAN(5620, 35),
 136        CHAN(5640, 36),
 137        CHAN(5660, 37),
 138        CHAN(5680, 38),
 139        CHAN(5700, 39),
 140        CHAN(5745, 40),
 141        CHAN(5765, 41),
 142        CHAN(5785, 42),
 143        CHAN(5805, 43),
 144        CHAN(5825, 44),
 145        CHAN(5170, 45),
 146        CHAN(5190, 46),
 147        CHAN(5210, 47),
 148        CHAN(5230, 48),
 149};
 150#undef CHAN
 151
 152#define CARL9170_HT_CAP                                                 \
 153{                                                                       \
 154        .ht_supported   = true,                                         \
 155        .cap            = IEEE80211_HT_CAP_MAX_AMSDU |                  \
 156                          IEEE80211_HT_CAP_SUP_WIDTH_20_40 |            \
 157                          IEEE80211_HT_CAP_SGI_40 |                     \
 158                          IEEE80211_HT_CAP_DSSSCCK40 |                  \
 159                          IEEE80211_HT_CAP_SM_PS,                       \
 160        .ampdu_factor   = IEEE80211_HT_MAX_AMPDU_64K,                   \
 161        .ampdu_density  = IEEE80211_HT_MPDU_DENSITY_8,                  \
 162        .mcs            = {                                             \
 163                .rx_mask = { 0xff, 0xff, 0, 0, 0x1, 0, 0, 0, 0, 0, },   \
 164                .rx_highest = cpu_to_le16(300),                         \
 165                .tx_params = IEEE80211_HT_MCS_TX_DEFINED,               \
 166        },                                                              \
 167}
 168
 169static struct ieee80211_supported_band carl9170_band_2GHz = {
 170        .channels       = carl9170_2ghz_chantable,
 171        .n_channels     = ARRAY_SIZE(carl9170_2ghz_chantable),
 172        .bitrates       = carl9170_g_ratetable,
 173        .n_bitrates     = carl9170_g_ratetable_size,
 174        .ht_cap         = CARL9170_HT_CAP,
 175};
 176
 177static struct ieee80211_supported_band carl9170_band_5GHz = {
 178        .channels       = carl9170_5ghz_chantable,
 179        .n_channels     = ARRAY_SIZE(carl9170_5ghz_chantable),
 180        .bitrates       = carl9170_a_ratetable,
 181        .n_bitrates     = carl9170_a_ratetable_size,
 182        .ht_cap         = CARL9170_HT_CAP,
 183};
 184
 185static void carl9170_ampdu_gc(struct ar9170 *ar)
 186{
 187        struct carl9170_sta_tid *tid_info;
 188        LIST_HEAD(tid_gc);
 189
 190        rcu_read_lock();
 191        list_for_each_entry_rcu(tid_info, &ar->tx_ampdu_list, list) {
 192                spin_lock_bh(&ar->tx_ampdu_list_lock);
 193                if (tid_info->state == CARL9170_TID_STATE_SHUTDOWN) {
 194                        tid_info->state = CARL9170_TID_STATE_KILLED;
 195                        list_del_rcu(&tid_info->list);
 196                        ar->tx_ampdu_list_len--;
 197                        list_add_tail(&tid_info->tmp_list, &tid_gc);
 198                }
 199                spin_unlock_bh(&ar->tx_ampdu_list_lock);
 200
 201        }
 202        rcu_assign_pointer(ar->tx_ampdu_iter, tid_info);
 203        rcu_read_unlock();
 204
 205        synchronize_rcu();
 206
 207        while (!list_empty(&tid_gc)) {
 208                struct sk_buff *skb;
 209                tid_info = list_first_entry(&tid_gc, struct carl9170_sta_tid,
 210                                            tmp_list);
 211
 212                while ((skb = __skb_dequeue(&tid_info->queue)))
 213                        carl9170_tx_status(ar, skb, false);
 214
 215                list_del_init(&tid_info->tmp_list);
 216                kfree(tid_info);
 217        }
 218}
 219
 220static void carl9170_flush(struct ar9170 *ar, bool drop_queued)
 221{
 222        if (drop_queued) {
 223                int i;
 224
 225                /*
 226                 * We can only drop frames which have not been uploaded
 227                 * to the device yet.
 228                 */
 229
 230                for (i = 0; i < ar->hw->queues; i++) {
 231                        struct sk_buff *skb;
 232
 233                        while ((skb = skb_dequeue(&ar->tx_pending[i]))) {
 234                                struct ieee80211_tx_info *info;
 235
 236                                info = IEEE80211_SKB_CB(skb);
 237                                if (info->flags & IEEE80211_TX_CTL_AMPDU)
 238                                        atomic_dec(&ar->tx_ampdu_upload);
 239
 240                                carl9170_tx_status(ar, skb, false);
 241                        }
 242                }
 243        }
 244
 245        /* Wait for all other outstanding frames to timeout. */
 246        if (atomic_read(&ar->tx_total_queued))
 247                WARN_ON(wait_for_completion_timeout(&ar->tx_flush, HZ) == 0);
 248}
 249
 250static void carl9170_flush_ba(struct ar9170 *ar)
 251{
 252        struct sk_buff_head free;
 253        struct carl9170_sta_tid *tid_info;
 254        struct sk_buff *skb;
 255
 256        __skb_queue_head_init(&free);
 257
 258        rcu_read_lock();
 259        spin_lock_bh(&ar->tx_ampdu_list_lock);
 260        list_for_each_entry_rcu(tid_info, &ar->tx_ampdu_list, list) {
 261                if (tid_info->state > CARL9170_TID_STATE_SUSPEND) {
 262                        tid_info->state = CARL9170_TID_STATE_SUSPEND;
 263
 264                        spin_lock(&tid_info->lock);
 265                        while ((skb = __skb_dequeue(&tid_info->queue)))
 266                                __skb_queue_tail(&free, skb);
 267                        spin_unlock(&tid_info->lock);
 268                }
 269        }
 270        spin_unlock_bh(&ar->tx_ampdu_list_lock);
 271        rcu_read_unlock();
 272
 273        while ((skb = __skb_dequeue(&free)))
 274                carl9170_tx_status(ar, skb, false);
 275}
 276
 277static void carl9170_zap_queues(struct ar9170 *ar)
 278{
 279        struct carl9170_vif_info *cvif;
 280        unsigned int i;
 281
 282        carl9170_ampdu_gc(ar);
 283
 284        carl9170_flush_ba(ar);
 285        carl9170_flush(ar, true);
 286
 287        for (i = 0; i < ar->hw->queues; i++) {
 288                spin_lock_bh(&ar->tx_status[i].lock);
 289                while (!skb_queue_empty(&ar->tx_status[i])) {
 290                        struct sk_buff *skb;
 291
 292                        skb = skb_peek(&ar->tx_status[i]);
 293                        carl9170_tx_get_skb(skb);
 294                        spin_unlock_bh(&ar->tx_status[i].lock);
 295                        carl9170_tx_drop(ar, skb);
 296                        spin_lock_bh(&ar->tx_status[i].lock);
 297                        carl9170_tx_put_skb(skb);
 298                }
 299                spin_unlock_bh(&ar->tx_status[i].lock);
 300        }
 301
 302        BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_SOFT < 1);
 303        BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_HARD < CARL9170_NUM_TX_LIMIT_SOFT);
 304        BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_HARD >= CARL9170_BAW_BITS);
 305
 306        /* reinitialize queues statistics */
 307        memset(&ar->tx_stats, 0, sizeof(ar->tx_stats));
 308        for (i = 0; i < ar->hw->queues; i++)
 309                ar->tx_stats[i].limit = CARL9170_NUM_TX_LIMIT_HARD;
 310
 311        for (i = 0; i < DIV_ROUND_UP(ar->fw.mem_blocks, BITS_PER_LONG); i++)
 312                ar->mem_bitmap[i] = 0;
 313
 314        rcu_read_lock();
 315        list_for_each_entry_rcu(cvif, &ar->vif_list, list) {
 316                spin_lock_bh(&ar->beacon_lock);
 317                dev_kfree_skb_any(cvif->beacon);
 318                cvif->beacon = NULL;
 319                spin_unlock_bh(&ar->beacon_lock);
 320        }
 321        rcu_read_unlock();
 322
 323        atomic_set(&ar->tx_ampdu_upload, 0);
 324        atomic_set(&ar->tx_ampdu_scheduler, 0);
 325        atomic_set(&ar->tx_total_pending, 0);
 326        atomic_set(&ar->tx_total_queued, 0);
 327        atomic_set(&ar->mem_free_blocks, ar->fw.mem_blocks);
 328}
 329
 330#define CARL9170_FILL_QUEUE(queue, ai_fs, cwmin, cwmax, _txop)          \
 331do {                                                                    \
 332        queue.aifs = ai_fs;                                             \
 333        queue.cw_min = cwmin;                                           \
 334        queue.cw_max = cwmax;                                           \
 335        queue.txop = _txop;                                             \
 336} while (0)
 337
 338static int carl9170_op_start(struct ieee80211_hw *hw)
 339{
 340        struct ar9170 *ar = hw->priv;
 341        int err, i;
 342
 343        mutex_lock(&ar->mutex);
 344
 345        carl9170_zap_queues(ar);
 346
 347        /* reset QoS defaults */
 348        CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_VO], 2, 3,     7, 47);
 349        CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_VI], 2, 7,    15, 94);
 350        CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_BE], 3, 15, 1023,  0);
 351        CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_BK], 7, 15, 1023,  0);
 352        CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_SPECIAL], 2, 3, 7, 0);
 353
 354        ar->current_factor = ar->current_density = -1;
 355        /* "The first key is unique." */
 356        ar->usedkeys = 1;
 357        ar->filter_state = 0;
 358        ar->ps.last_action = jiffies;
 359        ar->ps.last_slept = jiffies;
 360        ar->erp_mode = CARL9170_ERP_AUTO;
 361        ar->rx_software_decryption = false;
 362        ar->disable_offload = false;
 363
 364        for (i = 0; i < ar->hw->queues; i++) {
 365                ar->queue_stop_timeout[i] = jiffies;
 366                ar->max_queue_stop_timeout[i] = 0;
 367        }
 368
 369        atomic_set(&ar->mem_allocs, 0);
 370
 371        err = carl9170_usb_open(ar);
 372        if (err)
 373                goto out;
 374
 375        err = carl9170_init_mac(ar);
 376        if (err)
 377                goto out;
 378
 379        err = carl9170_set_qos(ar);
 380        if (err)
 381                goto out;
 382
 383        if (ar->fw.rx_filter) {
 384                err = carl9170_rx_filter(ar, CARL9170_RX_FILTER_OTHER_RA |
 385                        CARL9170_RX_FILTER_CTL_OTHER | CARL9170_RX_FILTER_BAD);
 386                if (err)
 387                        goto out;
 388        }
 389
 390        err = carl9170_write_reg(ar, AR9170_MAC_REG_DMA_TRIGGER,
 391                                 AR9170_DMA_TRIGGER_RXQ);
 392        if (err)
 393                goto out;
 394
 395        /* Clear key-cache */
 396        for (i = 0; i < AR9170_CAM_MAX_USER + 4; i++) {
 397                err = carl9170_upload_key(ar, i, NULL, AR9170_ENC_ALG_NONE,
 398                                          0, NULL, 0);
 399                if (err)
 400                        goto out;
 401
 402                err = carl9170_upload_key(ar, i, NULL, AR9170_ENC_ALG_NONE,
 403                                          1, NULL, 0);
 404                if (err)
 405                        goto out;
 406
 407                if (i < AR9170_CAM_MAX_USER) {
 408                        err = carl9170_disable_key(ar, i);
 409                        if (err)
 410                                goto out;
 411                }
 412        }
 413
 414        carl9170_set_state_when(ar, CARL9170_IDLE, CARL9170_STARTED);
 415
 416        ieee80211_queue_delayed_work(ar->hw, &ar->stat_work,
 417                round_jiffies(msecs_to_jiffies(CARL9170_STAT_WORK)));
 418
 419        ieee80211_wake_queues(ar->hw);
 420        err = 0;
 421
 422out:
 423        mutex_unlock(&ar->mutex);
 424        return err;
 425}
 426
 427static void carl9170_cancel_worker(struct ar9170 *ar)
 428{
 429        cancel_delayed_work_sync(&ar->stat_work);
 430        cancel_delayed_work_sync(&ar->tx_janitor);
 431#ifdef CONFIG_CARL9170_LEDS
 432        cancel_delayed_work_sync(&ar->led_work);
 433#endif /* CONFIG_CARL9170_LEDS */
 434        cancel_work_sync(&ar->ps_work);
 435        cancel_work_sync(&ar->ping_work);
 436        cancel_work_sync(&ar->ampdu_work);
 437}
 438
 439static void carl9170_op_stop(struct ieee80211_hw *hw)
 440{
 441        struct ar9170 *ar = hw->priv;
 442
 443        carl9170_set_state_when(ar, CARL9170_STARTED, CARL9170_IDLE);
 444
 445        ieee80211_stop_queues(ar->hw);
 446
 447        mutex_lock(&ar->mutex);
 448        if (IS_ACCEPTING_CMD(ar)) {
 449                rcu_assign_pointer(ar->beacon_iter, NULL);
 450
 451                carl9170_led_set_state(ar, 0);
 452
 453                /* stop DMA */
 454                carl9170_write_reg(ar, AR9170_MAC_REG_DMA_TRIGGER, 0);
 455                carl9170_usb_stop(ar);
 456        }
 457
 458        carl9170_zap_queues(ar);
 459        mutex_unlock(&ar->mutex);
 460
 461        carl9170_cancel_worker(ar);
 462}
 463
 464static void carl9170_restart_work(struct work_struct *work)
 465{
 466        struct ar9170 *ar = container_of(work, struct ar9170,
 467                                         restart_work);
 468        int err;
 469
 470        ar->usedkeys = 0;
 471        ar->filter_state = 0;
 472        carl9170_cancel_worker(ar);
 473
 474        mutex_lock(&ar->mutex);
 475        err = carl9170_usb_restart(ar);
 476        if (net_ratelimit()) {
 477                if (err) {
 478                        dev_err(&ar->udev->dev, "Failed to restart device "
 479                                " (%d).\n", err);
 480                 } else {
 481                        dev_info(&ar->udev->dev, "device restarted "
 482                                 "successfully.\n");
 483                }
 484        }
 485
 486        carl9170_zap_queues(ar);
 487        mutex_unlock(&ar->mutex);
 488        if (!err) {
 489                ar->restart_counter++;
 490                atomic_set(&ar->pending_restarts, 0);
 491
 492                ieee80211_restart_hw(ar->hw);
 493        } else {
 494                /*
 495                 * The reset was unsuccessful and the device seems to
 496                 * be dead. But there's still one option: a low-level
 497                 * usb subsystem reset...
 498                 */
 499
 500                carl9170_usb_reset(ar);
 501        }
 502}
 503
 504void carl9170_restart(struct ar9170 *ar, const enum carl9170_restart_reasons r)
 505{
 506        carl9170_set_state_when(ar, CARL9170_STARTED, CARL9170_IDLE);
 507
 508        /*
 509         * Sometimes, an error can trigger several different reset events.
 510         * By ignoring these *surplus* reset events, the device won't be
 511         * killed again, right after it has recovered.
 512         */
 513        if (atomic_inc_return(&ar->pending_restarts) > 1) {
 514                dev_dbg(&ar->udev->dev, "ignoring restart (%d)\n", r);
 515                return;
 516        }
 517
 518        ieee80211_stop_queues(ar->hw);
 519
 520        dev_err(&ar->udev->dev, "restart device (%d)\n", r);
 521
 522        if (!WARN_ON(r == CARL9170_RR_NO_REASON) ||
 523            !WARN_ON(r >= __CARL9170_RR_LAST))
 524                ar->last_reason = r;
 525
 526        if (!ar->registered)
 527                return;
 528
 529        if (IS_ACCEPTING_CMD(ar) && !ar->needs_full_reset)
 530                ieee80211_queue_work(ar->hw, &ar->restart_work);
 531        else
 532                carl9170_usb_reset(ar);
 533
 534        /*
 535         * At this point, the device instance might have vanished/disabled.
 536         * So, don't put any code which access the ar9170 struct
 537         * without proper protection.
 538         */
 539}
 540
 541static void carl9170_ping_work(struct work_struct *work)
 542{
 543        struct ar9170 *ar = container_of(work, struct ar9170, ping_work);
 544        int err;
 545
 546        if (!IS_STARTED(ar))
 547                return;
 548
 549        mutex_lock(&ar->mutex);
 550        err = carl9170_echo_test(ar, 0xdeadbeef);
 551        if (err)
 552                carl9170_restart(ar, CARL9170_RR_UNRESPONSIVE_DEVICE);
 553        mutex_unlock(&ar->mutex);
 554}
 555
 556static int carl9170_init_interface(struct ar9170 *ar,
 557                                   struct ieee80211_vif *vif)
 558{
 559        struct ath_common *common = &ar->common;
 560        int err;
 561
 562        if (!vif) {
 563                WARN_ON_ONCE(IS_STARTED(ar));
 564                return 0;
 565        }
 566
 567        memcpy(common->macaddr, vif->addr, ETH_ALEN);
 568
 569        if (modparam_nohwcrypt ||
 570            ((vif->type != NL80211_IFTYPE_STATION) &&
 571             (vif->type != NL80211_IFTYPE_AP))) {
 572                ar->rx_software_decryption = true;
 573                ar->disable_offload = true;
 574        }
 575
 576        err = carl9170_set_operating_mode(ar);
 577        return err;
 578}
 579
 580static int carl9170_op_add_interface(struct ieee80211_hw *hw,
 581                                     struct ieee80211_vif *vif)
 582{
 583        struct carl9170_vif_info *vif_priv = (void *) vif->drv_priv;
 584        struct ieee80211_vif *main_vif;
 585        struct ar9170 *ar = hw->priv;
 586        int vif_id = -1, err = 0;
 587
 588        mutex_lock(&ar->mutex);
 589        rcu_read_lock();
 590        if (vif_priv->active) {
 591                /*
 592                 * Skip the interface structure initialization,
 593                 * if the vif survived the _restart call.
 594                 */
 595                vif_id = vif_priv->id;
 596                vif_priv->enable_beacon = false;
 597
 598                spin_lock_bh(&ar->beacon_lock);
 599                dev_kfree_skb_any(vif_priv->beacon);
 600                vif_priv->beacon = NULL;
 601                spin_unlock_bh(&ar->beacon_lock);
 602
 603                goto init;
 604        }
 605
 606        main_vif = carl9170_get_main_vif(ar);
 607
 608        if (main_vif) {
 609                switch (main_vif->type) {
 610                case NL80211_IFTYPE_STATION:
 611                        if (vif->type == NL80211_IFTYPE_STATION)
 612                                break;
 613
 614                        err = -EBUSY;
 615                        rcu_read_unlock();
 616
 617                        goto unlock;
 618
 619                case NL80211_IFTYPE_AP:
 620                        if ((vif->type == NL80211_IFTYPE_STATION) ||
 621                            (vif->type == NL80211_IFTYPE_WDS) ||
 622                            (vif->type == NL80211_IFTYPE_AP))
 623                                break;
 624
 625                        err = -EBUSY;
 626                        rcu_read_unlock();
 627                        goto unlock;
 628
 629                default:
 630                        rcu_read_unlock();
 631                        goto unlock;
 632                }
 633        }
 634
 635        vif_id = bitmap_find_free_region(&ar->vif_bitmap, ar->fw.vif_num, 0);
 636
 637        if (vif_id < 0) {
 638                rcu_read_unlock();
 639
 640                err = -ENOSPC;
 641                goto unlock;
 642        }
 643
 644        BUG_ON(ar->vif_priv[vif_id].id != vif_id);
 645
 646        vif_priv->active = true;
 647        vif_priv->id = vif_id;
 648        vif_priv->enable_beacon = false;
 649        ar->vifs++;
 650        list_add_tail_rcu(&vif_priv->list, &ar->vif_list);
 651        rcu_assign_pointer(ar->vif_priv[vif_id].vif, vif);
 652
 653init:
 654        if (carl9170_get_main_vif(ar) == vif) {
 655                rcu_assign_pointer(ar->beacon_iter, vif_priv);
 656                rcu_read_unlock();
 657
 658                err = carl9170_init_interface(ar, vif);
 659                if (err)
 660                        goto unlock;
 661        } else {
 662                rcu_read_unlock();
 663                err = carl9170_mod_virtual_mac(ar, vif_id, vif->addr);
 664
 665                if (err)
 666                        goto unlock;
 667        }
 668
 669        if (ar->fw.tx_seq_table) {
 670                err = carl9170_write_reg(ar, ar->fw.tx_seq_table + vif_id * 4,
 671                                         0);
 672                if (err)
 673                        goto unlock;
 674        }
 675
 676unlock:
 677        if (err && (vif_id >= 0)) {
 678                vif_priv->active = false;
 679                bitmap_release_region(&ar->vif_bitmap, vif_id, 0);
 680                ar->vifs--;
 681                rcu_assign_pointer(ar->vif_priv[vif_id].vif, NULL);
 682                list_del_rcu(&vif_priv->list);
 683                mutex_unlock(&ar->mutex);
 684                synchronize_rcu();
 685        } else {
 686                if (ar->vifs > 1)
 687                        ar->ps.off_override |= PS_OFF_VIF;
 688
 689                mutex_unlock(&ar->mutex);
 690        }
 691
 692        return err;
 693}
 694
 695static void carl9170_op_remove_interface(struct ieee80211_hw *hw,
 696                                         struct ieee80211_vif *vif)
 697{
 698        struct carl9170_vif_info *vif_priv = (void *) vif->drv_priv;
 699        struct ieee80211_vif *main_vif;
 700        struct ar9170 *ar = hw->priv;
 701        unsigned int id;
 702
 703        mutex_lock(&ar->mutex);
 704
 705        if (WARN_ON_ONCE(!vif_priv->active))
 706                goto unlock;
 707
 708        ar->vifs--;
 709
 710        rcu_read_lock();
 711        main_vif = carl9170_get_main_vif(ar);
 712
 713        id = vif_priv->id;
 714
 715        vif_priv->active = false;
 716        WARN_ON(vif_priv->enable_beacon);
 717        vif_priv->enable_beacon = false;
 718        list_del_rcu(&vif_priv->list);
 719        rcu_assign_pointer(ar->vif_priv[id].vif, NULL);
 720
 721        if (vif == main_vif) {
 722                rcu_read_unlock();
 723
 724                if (ar->vifs) {
 725                        WARN_ON(carl9170_init_interface(ar,
 726                                        carl9170_get_main_vif(ar)));
 727                } else {
 728                        carl9170_set_operating_mode(ar);
 729                }
 730        } else {
 731                rcu_read_unlock();
 732
 733                WARN_ON(carl9170_mod_virtual_mac(ar, id, NULL));
 734        }
 735
 736        carl9170_update_beacon(ar, false);
 737        carl9170_flush_cab(ar, id);
 738
 739        spin_lock_bh(&ar->beacon_lock);
 740        dev_kfree_skb_any(vif_priv->beacon);
 741        vif_priv->beacon = NULL;
 742        spin_unlock_bh(&ar->beacon_lock);
 743
 744        bitmap_release_region(&ar->vif_bitmap, id, 0);
 745
 746        carl9170_set_beacon_timers(ar);
 747
 748        if (ar->vifs == 1)
 749                ar->ps.off_override &= ~PS_OFF_VIF;
 750
 751unlock:
 752        mutex_unlock(&ar->mutex);
 753
 754        synchronize_rcu();
 755}
 756
 757void carl9170_ps_check(struct ar9170 *ar)
 758{
 759        ieee80211_queue_work(ar->hw, &ar->ps_work);
 760}
 761
 762/* caller must hold ar->mutex */
 763static int carl9170_ps_update(struct ar9170 *ar)
 764{
 765        bool ps = false;
 766        int err = 0;
 767
 768        if (!ar->ps.off_override)
 769                ps = (ar->hw->conf.flags & IEEE80211_CONF_PS);
 770
 771        if (ps != ar->ps.state) {
 772                err = carl9170_powersave(ar, ps);
 773                if (err)
 774                        return err;
 775
 776                if (ar->ps.state && !ps) {
 777                        ar->ps.sleep_ms = jiffies_to_msecs(jiffies -
 778                                ar->ps.last_action);
 779                }
 780
 781                if (ps)
 782                        ar->ps.last_slept = jiffies;
 783
 784                ar->ps.last_action = jiffies;
 785                ar->ps.state = ps;
 786        }
 787
 788        return 0;
 789}
 790
 791static void carl9170_ps_work(struct work_struct *work)
 792{
 793        struct ar9170 *ar = container_of(work, struct ar9170,
 794                                         ps_work);
 795        mutex_lock(&ar->mutex);
 796        if (IS_STARTED(ar))
 797                WARN_ON_ONCE(carl9170_ps_update(ar) != 0);
 798        mutex_unlock(&ar->mutex);
 799}
 800
 801static int carl9170_update_survey(struct ar9170 *ar, bool flush, bool noise)
 802{
 803        int err;
 804
 805        if (noise) {
 806                err = carl9170_get_noisefloor(ar);
 807                if (err)
 808                        return err;
 809        }
 810
 811        if (ar->fw.hw_counters) {
 812                err = carl9170_collect_tally(ar);
 813                if (err)
 814                        return err;
 815        }
 816
 817        if (flush)
 818                memset(&ar->tally, 0, sizeof(ar->tally));
 819
 820        return 0;
 821}
 822
 823static void carl9170_stat_work(struct work_struct *work)
 824{
 825        struct ar9170 *ar = container_of(work, struct ar9170, stat_work.work);
 826        int err;
 827
 828        mutex_lock(&ar->mutex);
 829        err = carl9170_update_survey(ar, false, true);
 830        mutex_unlock(&ar->mutex);
 831
 832        if (err)
 833                return;
 834
 835        ieee80211_queue_delayed_work(ar->hw, &ar->stat_work,
 836                round_jiffies(msecs_to_jiffies(CARL9170_STAT_WORK)));
 837}
 838
 839static int carl9170_op_config(struct ieee80211_hw *hw, u32 changed)
 840{
 841        struct ar9170 *ar = hw->priv;
 842        int err = 0;
 843
 844        mutex_lock(&ar->mutex);
 845        if (changed & IEEE80211_CONF_CHANGE_LISTEN_INTERVAL) {
 846                /* TODO */
 847                err = 0;
 848        }
 849
 850        if (changed & IEEE80211_CONF_CHANGE_PS) {
 851                err = carl9170_ps_update(ar);
 852                if (err)
 853                        goto out;
 854        }
 855
 856        if (changed & IEEE80211_CONF_CHANGE_POWER) {
 857                /* TODO */
 858                err = 0;
 859        }
 860
 861        if (changed & IEEE80211_CONF_CHANGE_SMPS) {
 862                /* TODO */
 863                err = 0;
 864        }
 865
 866        if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
 867                /* adjust slot time for 5 GHz */
 868                err = carl9170_set_slot_time(ar);
 869                if (err)
 870                        goto out;
 871
 872                err = carl9170_update_survey(ar, true, false);
 873                if (err)
 874                        goto out;
 875
 876                err = carl9170_set_channel(ar, hw->conf.channel,
 877                        hw->conf.channel_type, CARL9170_RFI_NONE);
 878                if (err)
 879                        goto out;
 880
 881                err = carl9170_update_survey(ar, false, true);
 882                if (err)
 883                        goto out;
 884
 885                err = carl9170_set_dyn_sifs_ack(ar);
 886                if (err)
 887                        goto out;
 888
 889                err = carl9170_set_rts_cts_rate(ar);
 890                if (err)
 891                        goto out;
 892        }
 893
 894out:
 895        mutex_unlock(&ar->mutex);
 896        return err;
 897}
 898
 899static u64 carl9170_op_prepare_multicast(struct ieee80211_hw *hw,
 900                                         struct netdev_hw_addr_list *mc_list)
 901{
 902        struct netdev_hw_addr *ha;
 903        u64 mchash;
 904
 905        /* always get broadcast frames */
 906        mchash = 1ULL << (0xff >> 2);
 907
 908        netdev_hw_addr_list_for_each(ha, mc_list)
 909                mchash |= 1ULL << (ha->addr[5] >> 2);
 910
 911        return mchash;
 912}
 913
 914static void carl9170_op_configure_filter(struct ieee80211_hw *hw,
 915                                         unsigned int changed_flags,
 916                                         unsigned int *new_flags,
 917                                         u64 multicast)
 918{
 919        struct ar9170 *ar = hw->priv;
 920
 921        /* mask supported flags */
 922        *new_flags &= FIF_ALLMULTI | ar->rx_filter_caps;
 923
 924        if (!IS_ACCEPTING_CMD(ar))
 925                return;
 926
 927        mutex_lock(&ar->mutex);
 928
 929        ar->filter_state = *new_flags;
 930        /*
 931         * We can support more by setting the sniffer bit and
 932         * then checking the error flags, later.
 933         */
 934
 935        if (*new_flags & FIF_ALLMULTI)
 936                multicast = ~0ULL;
 937
 938        if (multicast != ar->cur_mc_hash)
 939                WARN_ON(carl9170_update_multicast(ar, multicast));
 940
 941        if (changed_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS)) {
 942                ar->sniffer_enabled = !!(*new_flags &
 943                        (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS));
 944
 945                WARN_ON(carl9170_set_operating_mode(ar));
 946        }
 947
 948        if (ar->fw.rx_filter && changed_flags & ar->rx_filter_caps) {
 949                u32 rx_filter = 0;
 950
 951                if (!(*new_flags & (FIF_FCSFAIL | FIF_PLCPFAIL)))
 952                        rx_filter |= CARL9170_RX_FILTER_BAD;
 953
 954                if (!(*new_flags & FIF_CONTROL))
 955                        rx_filter |= CARL9170_RX_FILTER_CTL_OTHER;
 956
 957                if (!(*new_flags & FIF_PSPOLL))
 958                        rx_filter |= CARL9170_RX_FILTER_CTL_PSPOLL;
 959
 960                if (!(*new_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS))) {
 961                        rx_filter |= CARL9170_RX_FILTER_OTHER_RA;
 962                        rx_filter |= CARL9170_RX_FILTER_DECRY_FAIL;
 963                }
 964
 965                WARN_ON(carl9170_rx_filter(ar, rx_filter));
 966        }
 967
 968        mutex_unlock(&ar->mutex);
 969}
 970
 971
 972static void carl9170_op_bss_info_changed(struct ieee80211_hw *hw,
 973                                         struct ieee80211_vif *vif,
 974                                         struct ieee80211_bss_conf *bss_conf,
 975                                         u32 changed)
 976{
 977        struct ar9170 *ar = hw->priv;
 978        struct ath_common *common = &ar->common;
 979        int err = 0;
 980        struct carl9170_vif_info *vif_priv;
 981        struct ieee80211_vif *main_vif;
 982
 983        mutex_lock(&ar->mutex);
 984        vif_priv = (void *) vif->drv_priv;
 985        main_vif = carl9170_get_main_vif(ar);
 986        if (WARN_ON(!main_vif))
 987                goto out;
 988
 989        if (changed & BSS_CHANGED_BEACON_ENABLED) {
 990                struct carl9170_vif_info *iter;
 991                int i = 0;
 992
 993                vif_priv->enable_beacon = bss_conf->enable_beacon;
 994                rcu_read_lock();
 995                list_for_each_entry_rcu(iter, &ar->vif_list, list) {
 996                        if (iter->active && iter->enable_beacon)
 997                                i++;
 998
 999                }
1000                rcu_read_unlock();
1001
1002                ar->beacon_enabled = i;
1003        }
1004
1005        if (changed & BSS_CHANGED_BEACON) {
1006                err = carl9170_update_beacon(ar, false);
1007                if (err)
1008                        goto out;
1009        }
1010
1011        if (changed & (BSS_CHANGED_BEACON_ENABLED | BSS_CHANGED_BEACON |
1012                       BSS_CHANGED_BEACON_INT)) {
1013
1014                if (main_vif != vif) {
1015                        bss_conf->beacon_int = main_vif->bss_conf.beacon_int;
1016                        bss_conf->dtim_period = main_vif->bss_conf.dtim_period;
1017                }
1018
1019                /*
1020                 * Therefore a hard limit for the broadcast traffic should
1021                 * prevent false alarms.
1022                 */
1023                if (vif->type != NL80211_IFTYPE_STATION &&
1024                    (bss_conf->beacon_int * bss_conf->dtim_period >=
1025                     (CARL9170_QUEUE_STUCK_TIMEOUT / 2))) {
1026                        err = -EINVAL;
1027                        goto out;
1028                }
1029
1030                err = carl9170_set_beacon_timers(ar);
1031                if (err)
1032                        goto out;
1033        }
1034
1035        if (changed & BSS_CHANGED_HT) {
1036                /* TODO */
1037                err = 0;
1038                if (err)
1039                        goto out;
1040        }
1041
1042        if (main_vif != vif)
1043                goto out;
1044
1045        /*
1046         * The following settings can only be changed by the
1047         * master interface.
1048         */
1049
1050        if (changed & BSS_CHANGED_BSSID) {
1051                memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1052                err = carl9170_set_operating_mode(ar);
1053                if (err)
1054                        goto out;
1055        }
1056
1057        if (changed & BSS_CHANGED_ASSOC) {
1058                ar->common.curaid = bss_conf->aid;
1059                err = carl9170_set_beacon_timers(ar);
1060                if (err)
1061                        goto out;
1062        }
1063
1064        if (changed & BSS_CHANGED_ERP_SLOT) {
1065                err = carl9170_set_slot_time(ar);
1066                if (err)
1067                        goto out;
1068        }
1069
1070        if (changed & BSS_CHANGED_BASIC_RATES) {
1071                err = carl9170_set_mac_rates(ar);
1072                if (err)
1073                        goto out;
1074        }
1075
1076out:
1077        WARN_ON_ONCE(err && IS_STARTED(ar));
1078        mutex_unlock(&ar->mutex);
1079}
1080
1081static u64 carl9170_op_get_tsf(struct ieee80211_hw *hw,
1082                               struct ieee80211_vif *vif)
1083{
1084        struct ar9170 *ar = hw->priv;
1085        struct carl9170_tsf_rsp tsf;
1086        int err;
1087
1088        mutex_lock(&ar->mutex);
1089        err = carl9170_exec_cmd(ar, CARL9170_CMD_READ_TSF,
1090                                0, NULL, sizeof(tsf), &tsf);
1091        mutex_unlock(&ar->mutex);
1092        if (WARN_ON(err))
1093                return 0;
1094
1095        return le64_to_cpu(tsf.tsf_64);
1096}
1097
1098static int carl9170_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1099                               struct ieee80211_vif *vif,
1100                               struct ieee80211_sta *sta,
1101                               struct ieee80211_key_conf *key)
1102{
1103        struct ar9170 *ar = hw->priv;
1104        int err = 0, i;
1105        u8 ktype;
1106
1107        if (ar->disable_offload || !vif)
1108                return -EOPNOTSUPP;
1109
1110        /*
1111         * We have to fall back to software encryption, whenever
1112         * the user choose to participates in an IBSS or is connected
1113         * to more than one network.
1114         *
1115         * This is very unfortunate, because some machines cannot handle
1116         * the high througput speed in 802.11n networks.
1117         */
1118
1119        if (!is_main_vif(ar, vif)) {
1120                mutex_lock(&ar->mutex);
1121                goto err_softw;
1122        }
1123
1124        /*
1125         * While the hardware supports *catch-all* key, for offloading
1126         * group-key en-/de-cryption. The way of how the hardware
1127         * decides which keyId maps to which key, remains a mystery...
1128         */
1129        if ((vif->type != NL80211_IFTYPE_STATION &&
1130             vif->type != NL80211_IFTYPE_ADHOC) &&
1131            !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
1132                return -EOPNOTSUPP;
1133
1134        switch (key->cipher) {
1135        case WLAN_CIPHER_SUITE_WEP40:
1136                ktype = AR9170_ENC_ALG_WEP64;
1137                break;
1138        case WLAN_CIPHER_SUITE_WEP104:
1139                ktype = AR9170_ENC_ALG_WEP128;
1140                break;
1141        case WLAN_CIPHER_SUITE_TKIP:
1142                ktype = AR9170_ENC_ALG_TKIP;
1143                break;
1144        case WLAN_CIPHER_SUITE_CCMP:
1145                ktype = AR9170_ENC_ALG_AESCCMP;
1146                break;
1147        default:
1148                return -EOPNOTSUPP;
1149        }
1150
1151        mutex_lock(&ar->mutex);
1152        if (cmd == SET_KEY) {
1153                if (!IS_STARTED(ar)) {
1154                        err = -EOPNOTSUPP;
1155                        goto out;
1156                }
1157
1158                if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
1159                        sta = NULL;
1160
1161                        i = 64 + key->keyidx;
1162                } else {
1163                        for (i = 0; i < 64; i++)
1164                                if (!(ar->usedkeys & BIT(i)))
1165                                        break;
1166                        if (i == 64)
1167                                goto err_softw;
1168                }
1169
1170                key->hw_key_idx = i;
1171
1172                err = carl9170_upload_key(ar, i, sta ? sta->addr : NULL,
1173                                          ktype, 0, key->key,
1174                                          min_t(u8, 16, key->keylen));
1175                if (err)
1176                        goto out;
1177
1178                if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
1179                        err = carl9170_upload_key(ar, i, sta ? sta->addr :
1180                                                  NULL, ktype, 1,
1181                                                  key->key + 16, 16);
1182                        if (err)
1183                                goto out;
1184
1185                        /*
1186                         * hardware is not capable generating MMIC
1187                         * of fragmented frames!
1188                         */
1189                        key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
1190                }
1191
1192                if (i < 64)
1193                        ar->usedkeys |= BIT(i);
1194
1195                key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1196        } else {
1197                if (!IS_STARTED(ar)) {
1198                        /* The device is gone... together with the key ;-) */
1199                        err = 0;
1200                        goto out;
1201                }
1202
1203                if (key->hw_key_idx < 64) {
1204                        ar->usedkeys &= ~BIT(key->hw_key_idx);
1205                } else {
1206                        err = carl9170_upload_key(ar, key->hw_key_idx, NULL,
1207                                                  AR9170_ENC_ALG_NONE, 0,
1208                                                  NULL, 0);
1209                        if (err)
1210                                goto out;
1211
1212                        if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
1213                                err = carl9170_upload_key(ar, key->hw_key_idx,
1214                                                          NULL,
1215                                                          AR9170_ENC_ALG_NONE,
1216                                                          1, NULL, 0);
1217                                if (err)
1218                                        goto out;
1219                        }
1220
1221                }
1222
1223                err = carl9170_disable_key(ar, key->hw_key_idx);
1224                if (err)
1225                        goto out;
1226        }
1227
1228out:
1229        mutex_unlock(&ar->mutex);
1230        return err;
1231
1232err_softw:
1233        if (!ar->rx_software_decryption) {
1234                ar->rx_software_decryption = true;
1235                carl9170_set_operating_mode(ar);
1236        }
1237        mutex_unlock(&ar->mutex);
1238        return -ENOSPC;
1239}
1240
1241static int carl9170_op_sta_add(struct ieee80211_hw *hw,
1242                               struct ieee80211_vif *vif,
1243                               struct ieee80211_sta *sta)
1244{
1245        struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1246        unsigned int i;
1247
1248        atomic_set(&sta_info->pending_frames, 0);
1249
1250        if (sta->ht_cap.ht_supported) {
1251                if (sta->ht_cap.ampdu_density > 6) {
1252                        /*
1253                         * HW does support 16us AMPDU density.
1254                         * No HT-Xmit for station.
1255                         */
1256
1257                        return 0;
1258                }
1259
1260                for (i = 0; i < CARL9170_NUM_TID; i++)
1261                        rcu_assign_pointer(sta_info->agg[i], NULL);
1262
1263                sta_info->ampdu_max_len = 1 << (3 + sta->ht_cap.ampdu_factor);
1264                sta_info->ht_sta = true;
1265        }
1266
1267        return 0;
1268}
1269
1270static int carl9170_op_sta_remove(struct ieee80211_hw *hw,
1271                                struct ieee80211_vif *vif,
1272                                struct ieee80211_sta *sta)
1273{
1274        struct ar9170 *ar = hw->priv;
1275        struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1276        unsigned int i;
1277        bool cleanup = false;
1278
1279        if (sta->ht_cap.ht_supported) {
1280
1281                sta_info->ht_sta = false;
1282
1283                rcu_read_lock();
1284                for (i = 0; i < CARL9170_NUM_TID; i++) {
1285                        struct carl9170_sta_tid *tid_info;
1286
1287                        tid_info = rcu_dereference(sta_info->agg[i]);
1288                        rcu_assign_pointer(sta_info->agg[i], NULL);
1289
1290                        if (!tid_info)
1291                                continue;
1292
1293                        spin_lock_bh(&ar->tx_ampdu_list_lock);
1294                        if (tid_info->state > CARL9170_TID_STATE_SHUTDOWN)
1295                                tid_info->state = CARL9170_TID_STATE_SHUTDOWN;
1296                        spin_unlock_bh(&ar->tx_ampdu_list_lock);
1297                        cleanup = true;
1298                }
1299                rcu_read_unlock();
1300
1301                if (cleanup)
1302                        carl9170_ampdu_gc(ar);
1303        }
1304
1305        return 0;
1306}
1307
1308static int carl9170_op_conf_tx(struct ieee80211_hw *hw,
1309                               struct ieee80211_vif *vif, u16 queue,
1310                               const struct ieee80211_tx_queue_params *param)
1311{
1312        struct ar9170 *ar = hw->priv;
1313        int ret;
1314
1315        mutex_lock(&ar->mutex);
1316        if (queue < ar->hw->queues) {
1317                memcpy(&ar->edcf[ar9170_qmap[queue]], param, sizeof(*param));
1318                ret = carl9170_set_qos(ar);
1319        } else {
1320                ret = -EINVAL;
1321        }
1322
1323        mutex_unlock(&ar->mutex);
1324        return ret;
1325}
1326
1327static void carl9170_ampdu_work(struct work_struct *work)
1328{
1329        struct ar9170 *ar = container_of(work, struct ar9170,
1330                                         ampdu_work);
1331
1332        if (!IS_STARTED(ar))
1333                return;
1334
1335        mutex_lock(&ar->mutex);
1336        carl9170_ampdu_gc(ar);
1337        mutex_unlock(&ar->mutex);
1338}
1339
1340static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
1341                                    struct ieee80211_vif *vif,
1342                                    enum ieee80211_ampdu_mlme_action action,
1343                                    struct ieee80211_sta *sta,
1344                                    u16 tid, u16 *ssn, u8 buf_size)
1345{
1346        struct ar9170 *ar = hw->priv;
1347        struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1348        struct carl9170_sta_tid *tid_info;
1349
1350        if (modparam_noht)
1351                return -EOPNOTSUPP;
1352
1353        switch (action) {
1354        case IEEE80211_AMPDU_TX_START:
1355                if (!sta_info->ht_sta)
1356                        return -EOPNOTSUPP;
1357
1358                rcu_read_lock();
1359                if (rcu_dereference(sta_info->agg[tid])) {
1360                        rcu_read_unlock();
1361                        return -EBUSY;
1362                }
1363
1364                tid_info = kzalloc(sizeof(struct carl9170_sta_tid),
1365                                   GFP_ATOMIC);
1366                if (!tid_info) {
1367                        rcu_read_unlock();
1368                        return -ENOMEM;
1369                }
1370
1371                tid_info->hsn = tid_info->bsn = tid_info->snx = (*ssn);
1372                tid_info->state = CARL9170_TID_STATE_PROGRESS;
1373                tid_info->tid = tid;
1374                tid_info->max = sta_info->ampdu_max_len;
1375
1376                INIT_LIST_HEAD(&tid_info->list);
1377                INIT_LIST_HEAD(&tid_info->tmp_list);
1378                skb_queue_head_init(&tid_info->queue);
1379                spin_lock_init(&tid_info->lock);
1380
1381                spin_lock_bh(&ar->tx_ampdu_list_lock);
1382                ar->tx_ampdu_list_len++;
1383                list_add_tail_rcu(&tid_info->list, &ar->tx_ampdu_list);
1384                rcu_assign_pointer(sta_info->agg[tid], tid_info);
1385                spin_unlock_bh(&ar->tx_ampdu_list_lock);
1386                rcu_read_unlock();
1387
1388                ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1389                break;
1390
1391        case IEEE80211_AMPDU_TX_STOP:
1392                rcu_read_lock();
1393                tid_info = rcu_dereference(sta_info->agg[tid]);
1394                if (tid_info) {
1395                        spin_lock_bh(&ar->tx_ampdu_list_lock);
1396                        if (tid_info->state > CARL9170_TID_STATE_SHUTDOWN)
1397                                tid_info->state = CARL9170_TID_STATE_SHUTDOWN;
1398                        spin_unlock_bh(&ar->tx_ampdu_list_lock);
1399                }
1400
1401                rcu_assign_pointer(sta_info->agg[tid], NULL);
1402                rcu_read_unlock();
1403
1404                ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1405                ieee80211_queue_work(ar->hw, &ar->ampdu_work);
1406                break;
1407
1408        case IEEE80211_AMPDU_TX_OPERATIONAL:
1409                rcu_read_lock();
1410                tid_info = rcu_dereference(sta_info->agg[tid]);
1411
1412                sta_info->stats[tid].clear = true;
1413                sta_info->stats[tid].req = false;
1414
1415                if (tid_info) {
1416                        bitmap_zero(tid_info->bitmap, CARL9170_BAW_SIZE);
1417                        tid_info->state = CARL9170_TID_STATE_IDLE;
1418                }
1419                rcu_read_unlock();
1420
1421                if (WARN_ON_ONCE(!tid_info))
1422                        return -EFAULT;
1423
1424                break;
1425
1426        case IEEE80211_AMPDU_RX_START:
1427        case IEEE80211_AMPDU_RX_STOP:
1428                /* Handled by hardware */
1429                break;
1430
1431        default:
1432                return -EOPNOTSUPP;
1433        }
1434
1435        return 0;
1436}
1437
1438#ifdef CONFIG_CARL9170_WPC
1439static int carl9170_register_wps_button(struct ar9170 *ar)
1440{
1441        struct input_dev *input;
1442        int err;
1443
1444        if (!(ar->features & CARL9170_WPS_BUTTON))
1445                return 0;
1446
1447        input = input_allocate_device();
1448        if (!input)
1449                return -ENOMEM;
1450
1451        snprintf(ar->wps.name, sizeof(ar->wps.name), "%s WPS Button",
1452                 wiphy_name(ar->hw->wiphy));
1453
1454        snprintf(ar->wps.phys, sizeof(ar->wps.phys),
1455                 "ieee80211/%s/input0", wiphy_name(ar->hw->wiphy));
1456
1457        input->name = ar->wps.name;
1458        input->phys = ar->wps.phys;
1459        input->id.bustype = BUS_USB;
1460        input->dev.parent = &ar->hw->wiphy->dev;
1461
1462        input_set_capability(input, EV_KEY, KEY_WPS_BUTTON);
1463
1464        err = input_register_device(input);
1465        if (err) {
1466                input_free_device(input);
1467                return err;
1468        }
1469
1470        ar->wps.pbc = input;
1471        return 0;
1472}
1473#endif /* CONFIG_CARL9170_WPC */
1474
1475#ifdef CONFIG_CARL9170_HWRNG
1476static int carl9170_rng_get(struct ar9170 *ar)
1477{
1478
1479#define RW      (CARL9170_MAX_CMD_PAYLOAD_LEN / sizeof(u32))
1480#define RB      (CARL9170_MAX_CMD_PAYLOAD_LEN)
1481
1482        static const __le32 rng_load[RW] = {
1483                [0 ... (RW - 1)] = cpu_to_le32(AR9170_RAND_REG_NUM)};
1484
1485        u32 buf[RW];
1486
1487        unsigned int i, off = 0, transfer, count;
1488        int err;
1489
1490        BUILD_BUG_ON(RB > CARL9170_MAX_CMD_PAYLOAD_LEN);
1491
1492        if (!IS_ACCEPTING_CMD(ar) || !ar->rng.initialized)
1493                return -EAGAIN;
1494
1495        count = ARRAY_SIZE(ar->rng.cache);
1496        while (count) {
1497                err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG,
1498                                        RB, (u8 *) rng_load,
1499                                        RB, (u8 *) buf);
1500                if (err)
1501                        return err;
1502
1503                transfer = min_t(unsigned int, count, RW);
1504                for (i = 0; i < transfer; i++)
1505                        ar->rng.cache[off + i] = buf[i];
1506
1507                off += transfer;
1508                count -= transfer;
1509        }
1510
1511        ar->rng.cache_idx = 0;
1512
1513#undef RW
1514#undef RB
1515        return 0;
1516}
1517
1518static int carl9170_rng_read(struct hwrng *rng, u32 *data)
1519{
1520        struct ar9170 *ar = (struct ar9170 *)rng->priv;
1521        int ret = -EIO;
1522
1523        mutex_lock(&ar->mutex);
1524        if (ar->rng.cache_idx >= ARRAY_SIZE(ar->rng.cache)) {
1525                ret = carl9170_rng_get(ar);
1526                if (ret) {
1527                        mutex_unlock(&ar->mutex);
1528                        return ret;
1529                }
1530        }
1531
1532        *data = ar->rng.cache[ar->rng.cache_idx++];
1533        mutex_unlock(&ar->mutex);
1534
1535        return sizeof(u16);
1536}
1537
1538static void carl9170_unregister_hwrng(struct ar9170 *ar)
1539{
1540        if (ar->rng.initialized) {
1541                hwrng_unregister(&ar->rng.rng);
1542                ar->rng.initialized = false;
1543        }
1544}
1545
1546static int carl9170_register_hwrng(struct ar9170 *ar)
1547{
1548        int err;
1549
1550        snprintf(ar->rng.name, ARRAY_SIZE(ar->rng.name),
1551                 "%s_%s", KBUILD_MODNAME, wiphy_name(ar->hw->wiphy));
1552        ar->rng.rng.name = ar->rng.name;
1553        ar->rng.rng.data_read = carl9170_rng_read;
1554        ar->rng.rng.priv = (unsigned long)ar;
1555
1556        if (WARN_ON(ar->rng.initialized))
1557                return -EALREADY;
1558
1559        err = hwrng_register(&ar->rng.rng);
1560        if (err) {
1561                dev_err(&ar->udev->dev, "Failed to register the random "
1562                        "number generator (%d)\n", err);
1563                return err;
1564        }
1565
1566        ar->rng.initialized = true;
1567
1568        err = carl9170_rng_get(ar);
1569        if (err) {
1570                carl9170_unregister_hwrng(ar);
1571                return err;
1572        }
1573
1574        return 0;
1575}
1576#endif /* CONFIG_CARL9170_HWRNG */
1577
1578static int carl9170_op_get_survey(struct ieee80211_hw *hw, int idx,
1579                                struct survey_info *survey)
1580{
1581        struct ar9170 *ar = hw->priv;
1582        struct ieee80211_channel *chan;
1583        struct ieee80211_supported_band *band;
1584        int err, b, i;
1585
1586        chan = ar->channel;
1587        if (!chan)
1588                return -ENODEV;
1589
1590        if (idx == chan->hw_value) {
1591                mutex_lock(&ar->mutex);
1592                err = carl9170_update_survey(ar, false, true);
1593                mutex_unlock(&ar->mutex);
1594                if (err)
1595                        return err;
1596        }
1597
1598        for (b = 0; b < IEEE80211_NUM_BANDS; b++) {
1599                band = ar->hw->wiphy->bands[b];
1600
1601                if (!band)
1602                        continue;
1603
1604                for (i = 0; i < band->n_channels; i++) {
1605                        if (band->channels[i].hw_value == idx) {
1606                                chan = &band->channels[i];
1607                                goto found;
1608                        }
1609                }
1610        }
1611        return -ENOENT;
1612
1613found:
1614        memcpy(survey, &ar->survey[idx], sizeof(*survey));
1615
1616        survey->channel = chan;
1617        survey->filled = SURVEY_INFO_NOISE_DBM;
1618
1619        if (ar->channel == chan)
1620                survey->filled |= SURVEY_INFO_IN_USE;
1621
1622        if (ar->fw.hw_counters) {
1623                survey->filled |= SURVEY_INFO_CHANNEL_TIME |
1624                                  SURVEY_INFO_CHANNEL_TIME_BUSY |
1625                                  SURVEY_INFO_CHANNEL_TIME_TX;
1626        }
1627
1628        return 0;
1629}
1630
1631static void carl9170_op_flush(struct ieee80211_hw *hw, bool drop)
1632{
1633        struct ar9170 *ar = hw->priv;
1634        unsigned int vid;
1635
1636        mutex_lock(&ar->mutex);
1637        for_each_set_bit(vid, &ar->vif_bitmap, ar->fw.vif_num)
1638                carl9170_flush_cab(ar, vid);
1639
1640        carl9170_flush(ar, drop);
1641        mutex_unlock(&ar->mutex);
1642}
1643
1644static int carl9170_op_get_stats(struct ieee80211_hw *hw,
1645                                 struct ieee80211_low_level_stats *stats)
1646{
1647        struct ar9170 *ar = hw->priv;
1648
1649        memset(stats, 0, sizeof(*stats));
1650        stats->dot11ACKFailureCount = ar->tx_ack_failures;
1651        stats->dot11FCSErrorCount = ar->tx_fcs_errors;
1652        return 0;
1653}
1654
1655static void carl9170_op_sta_notify(struct ieee80211_hw *hw,
1656                                   struct ieee80211_vif *vif,
1657                                   enum sta_notify_cmd cmd,
1658                                   struct ieee80211_sta *sta)
1659{
1660        struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1661
1662        switch (cmd) {
1663        case STA_NOTIFY_SLEEP:
1664                sta_info->sleeping = true;
1665                if (atomic_read(&sta_info->pending_frames))
1666                        ieee80211_sta_block_awake(hw, sta, true);
1667                break;
1668
1669        case STA_NOTIFY_AWAKE:
1670                sta_info->sleeping = false;
1671                break;
1672        }
1673}
1674
1675static bool carl9170_tx_frames_pending(struct ieee80211_hw *hw)
1676{
1677        struct ar9170 *ar = hw->priv;
1678
1679        return !!atomic_read(&ar->tx_total_queued);
1680}
1681
1682static const struct ieee80211_ops carl9170_ops = {
1683        .start                  = carl9170_op_start,
1684        .stop                   = carl9170_op_stop,
1685        .tx                     = carl9170_op_tx,
1686        .flush                  = carl9170_op_flush,
1687        .add_interface          = carl9170_op_add_interface,
1688        .remove_interface       = carl9170_op_remove_interface,
1689        .config                 = carl9170_op_config,
1690        .prepare_multicast      = carl9170_op_prepare_multicast,
1691        .configure_filter       = carl9170_op_configure_filter,
1692        .conf_tx                = carl9170_op_conf_tx,
1693        .bss_info_changed       = carl9170_op_bss_info_changed,
1694        .get_tsf                = carl9170_op_get_tsf,
1695        .set_key                = carl9170_op_set_key,
1696        .sta_add                = carl9170_op_sta_add,
1697        .sta_remove             = carl9170_op_sta_remove,
1698        .sta_notify             = carl9170_op_sta_notify,
1699        .get_survey             = carl9170_op_get_survey,
1700        .get_stats              = carl9170_op_get_stats,
1701        .ampdu_action           = carl9170_op_ampdu_action,
1702        .tx_frames_pending      = carl9170_tx_frames_pending,
1703};
1704
1705void *carl9170_alloc(size_t priv_size)
1706{
1707        struct ieee80211_hw *hw;
1708        struct ar9170 *ar;
1709        struct sk_buff *skb;
1710        int i;
1711
1712        /*
1713         * this buffer is used for rx stream reconstruction.
1714         * Under heavy load this device (or the transport layer?)
1715         * tends to split the streams into separate rx descriptors.
1716         */
1717
1718        skb = __dev_alloc_skb(AR9170_RX_STREAM_MAX_SIZE, GFP_KERNEL);
1719        if (!skb)
1720                goto err_nomem;
1721
1722        hw = ieee80211_alloc_hw(priv_size, &carl9170_ops);
1723        if (!hw)
1724                goto err_nomem;
1725
1726        ar = hw->priv;
1727        ar->hw = hw;
1728        ar->rx_failover = skb;
1729
1730        memset(&ar->rx_plcp, 0, sizeof(struct ar9170_rx_head));
1731        ar->rx_has_plcp = false;
1732
1733        /*
1734         * Here's a hidden pitfall!
1735         *
1736         * All 4 AC queues work perfectly well under _legacy_ operation.
1737         * However as soon as aggregation is enabled, the traffic flow
1738         * gets very bumpy. Therefore we have to _switch_ to a
1739         * software AC with a single HW queue.
1740         */
1741        hw->queues = __AR9170_NUM_TXQ;
1742
1743        mutex_init(&ar->mutex);
1744        spin_lock_init(&ar->beacon_lock);
1745        spin_lock_init(&ar->cmd_lock);
1746        spin_lock_init(&ar->tx_stats_lock);
1747        spin_lock_init(&ar->tx_ampdu_list_lock);
1748        spin_lock_init(&ar->mem_lock);
1749        spin_lock_init(&ar->state_lock);
1750        atomic_set(&ar->pending_restarts, 0);
1751        ar->vifs = 0;
1752        for (i = 0; i < ar->hw->queues; i++) {
1753                skb_queue_head_init(&ar->tx_status[i]);
1754                skb_queue_head_init(&ar->tx_pending[i]);
1755        }
1756        INIT_WORK(&ar->ps_work, carl9170_ps_work);
1757        INIT_WORK(&ar->ping_work, carl9170_ping_work);
1758        INIT_WORK(&ar->restart_work, carl9170_restart_work);
1759        INIT_WORK(&ar->ampdu_work, carl9170_ampdu_work);
1760        INIT_DELAYED_WORK(&ar->stat_work, carl9170_stat_work);
1761        INIT_DELAYED_WORK(&ar->tx_janitor, carl9170_tx_janitor);
1762        INIT_LIST_HEAD(&ar->tx_ampdu_list);
1763        rcu_assign_pointer(ar->tx_ampdu_iter,
1764                           (struct carl9170_sta_tid *) &ar->tx_ampdu_list);
1765
1766        bitmap_zero(&ar->vif_bitmap, ar->fw.vif_num);
1767        INIT_LIST_HEAD(&ar->vif_list);
1768        init_completion(&ar->tx_flush);
1769
1770        /* firmware decides which modes we support */
1771        hw->wiphy->interface_modes = 0;
1772
1773        hw->flags |= IEEE80211_HW_RX_INCLUDES_FCS |
1774                     IEEE80211_HW_REPORTS_TX_ACK_STATUS |
1775                     IEEE80211_HW_SUPPORTS_PS |
1776                     IEEE80211_HW_PS_NULLFUNC_STACK |
1777                     IEEE80211_HW_NEED_DTIM_PERIOD |
1778                     IEEE80211_HW_SIGNAL_DBM;
1779
1780        if (!modparam_noht) {
1781                /*
1782                 * see the comment above, why we allow the user
1783                 * to disable HT by a module parameter.
1784                 */
1785                hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
1786        }
1787
1788        hw->extra_tx_headroom = sizeof(struct _carl9170_tx_superframe);
1789        hw->sta_data_size = sizeof(struct carl9170_sta_info);
1790        hw->vif_data_size = sizeof(struct carl9170_vif_info);
1791
1792        hw->max_rates = CARL9170_TX_MAX_RATES;
1793        hw->max_rate_tries = CARL9170_TX_USER_RATE_TRIES;
1794
1795        for (i = 0; i < ARRAY_SIZE(ar->noise); i++)
1796                ar->noise[i] = -95; /* ATH_DEFAULT_NOISE_FLOOR */
1797
1798        hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
1799        return ar;
1800
1801err_nomem:
1802        kfree_skb(skb);
1803        return ERR_PTR(-ENOMEM);
1804}
1805
1806static int carl9170_read_eeprom(struct ar9170 *ar)
1807{
1808#define RW      8       /* number of words to read at once */
1809#define RB      (sizeof(u32) * RW)
1810        u8 *eeprom = (void *)&ar->eeprom;
1811        __le32 offsets[RW];
1812        int i, j, err;
1813
1814        BUILD_BUG_ON(sizeof(ar->eeprom) & 3);
1815
1816        BUILD_BUG_ON(RB > CARL9170_MAX_CMD_LEN - 4);
1817#ifndef __CHECKER__
1818        /* don't want to handle trailing remains */
1819        BUILD_BUG_ON(sizeof(ar->eeprom) % RB);
1820#endif
1821
1822        for (i = 0; i < sizeof(ar->eeprom) / RB; i++) {
1823                for (j = 0; j < RW; j++)
1824                        offsets[j] = cpu_to_le32(AR9170_EEPROM_START +
1825                                                 RB * i + 4 * j);
1826
1827                err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG,
1828                                        RB, (u8 *) &offsets,
1829                                        RB, eeprom + RB * i);
1830                if (err)
1831                        return err;
1832        }
1833
1834#undef RW
1835#undef RB
1836        return 0;
1837}
1838
1839static int carl9170_parse_eeprom(struct ar9170 *ar)
1840{
1841        struct ath_regulatory *regulatory = &ar->common.regulatory;
1842        unsigned int rx_streams, tx_streams, tx_params = 0;
1843        int bands = 0;
1844        int chans = 0;
1845
1846        if (ar->eeprom.length == cpu_to_le16(0xffff))
1847                return -ENODATA;
1848
1849        rx_streams = hweight8(ar->eeprom.rx_mask);
1850        tx_streams = hweight8(ar->eeprom.tx_mask);
1851
1852        if (rx_streams != tx_streams) {
1853                tx_params = IEEE80211_HT_MCS_TX_RX_DIFF;
1854
1855                WARN_ON(!(tx_streams >= 1 && tx_streams <=
1856                        IEEE80211_HT_MCS_TX_MAX_STREAMS));
1857
1858                tx_params = (tx_streams - 1) <<
1859                            IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT;
1860
1861                carl9170_band_2GHz.ht_cap.mcs.tx_params |= tx_params;
1862                carl9170_band_5GHz.ht_cap.mcs.tx_params |= tx_params;
1863        }
1864
1865        if (ar->eeprom.operating_flags & AR9170_OPFLAG_2GHZ) {
1866                ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
1867                        &carl9170_band_2GHz;
1868                chans += carl9170_band_2GHz.n_channels;
1869                bands++;
1870        }
1871        if (ar->eeprom.operating_flags & AR9170_OPFLAG_5GHZ) {
1872                ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
1873                        &carl9170_band_5GHz;
1874                chans += carl9170_band_5GHz.n_channels;
1875                bands++;
1876        }
1877
1878        if (!bands)
1879                return -EINVAL;
1880
1881        ar->survey = kzalloc(sizeof(struct survey_info) * chans, GFP_KERNEL);
1882        if (!ar->survey)
1883                return -ENOMEM;
1884        ar->num_channels = chans;
1885
1886        /*
1887         * I measured this, a bandswitch takes roughly
1888         * 135 ms and a frequency switch about 80.
1889         *
1890         * FIXME: measure these values again once EEPROM settings
1891         *        are used, that will influence them!
1892         */
1893        if (bands == 2)
1894                ar->hw->channel_change_time = 135 * 1000;
1895        else
1896                ar->hw->channel_change_time = 80 * 1000;
1897
1898        regulatory->current_rd = le16_to_cpu(ar->eeprom.reg_domain[0]);
1899
1900        /* second part of wiphy init */
1901        SET_IEEE80211_PERM_ADDR(ar->hw, ar->eeprom.mac_address);
1902
1903        return 0;
1904}
1905
1906static int carl9170_reg_notifier(struct wiphy *wiphy,
1907                                 struct regulatory_request *request)
1908{
1909        struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1910        struct ar9170 *ar = hw->priv;
1911
1912        return ath_reg_notifier_apply(wiphy, request, &ar->common.regulatory);
1913}
1914
1915int carl9170_register(struct ar9170 *ar)
1916{
1917        struct ath_regulatory *regulatory = &ar->common.regulatory;
1918        int err = 0, i;
1919
1920        if (WARN_ON(ar->mem_bitmap))
1921                return -EINVAL;
1922
1923        ar->mem_bitmap = kzalloc(roundup(ar->fw.mem_blocks, BITS_PER_LONG) *
1924                                 sizeof(unsigned long), GFP_KERNEL);
1925
1926        if (!ar->mem_bitmap)
1927                return -ENOMEM;
1928
1929        /* try to read EEPROM, init MAC addr */
1930        err = carl9170_read_eeprom(ar);
1931        if (err)
1932                return err;
1933
1934        err = carl9170_fw_fix_eeprom(ar);
1935        if (err)
1936                return err;
1937
1938        err = carl9170_parse_eeprom(ar);
1939        if (err)
1940                return err;
1941
1942        err = ath_regd_init(regulatory, ar->hw->wiphy,
1943                            carl9170_reg_notifier);
1944        if (err)
1945                return err;
1946
1947        if (modparam_noht) {
1948                carl9170_band_2GHz.ht_cap.ht_supported = false;
1949                carl9170_band_5GHz.ht_cap.ht_supported = false;
1950        }
1951
1952        for (i = 0; i < ar->fw.vif_num; i++) {
1953                ar->vif_priv[i].id = i;
1954                ar->vif_priv[i].vif = NULL;
1955        }
1956
1957        err = ieee80211_register_hw(ar->hw);
1958        if (err)
1959                return err;
1960
1961        /* mac80211 interface is now registered */
1962        ar->registered = true;
1963
1964        if (!ath_is_world_regd(regulatory))
1965                regulatory_hint(ar->hw->wiphy, regulatory->alpha2);
1966
1967#ifdef CONFIG_CARL9170_DEBUGFS
1968        carl9170_debugfs_register(ar);
1969#endif /* CONFIG_CARL9170_DEBUGFS */
1970
1971        err = carl9170_led_init(ar);
1972        if (err)
1973                goto err_unreg;
1974
1975#ifdef CONFIG_CARL9170_LEDS
1976        err = carl9170_led_register(ar);
1977        if (err)
1978                goto err_unreg;
1979#endif /* CONFIG_CARL9170_LEDS */
1980
1981#ifdef CONFIG_CARL9170_WPC
1982        err = carl9170_register_wps_button(ar);
1983        if (err)
1984                goto err_unreg;
1985#endif /* CONFIG_CARL9170_WPC */
1986
1987#ifdef CONFIG_CARL9170_HWRNG
1988        err = carl9170_register_hwrng(ar);
1989        if (err)
1990                goto err_unreg;
1991#endif /* CONFIG_CARL9170_HWRNG */
1992
1993        dev_info(&ar->udev->dev, "Atheros AR9170 is registered as '%s'\n",
1994                 wiphy_name(ar->hw->wiphy));
1995
1996        return 0;
1997
1998err_unreg:
1999        carl9170_unregister(ar);
2000        return err;
2001}
2002
2003void carl9170_unregister(struct ar9170 *ar)
2004{
2005        if (!ar->registered)
2006                return;
2007
2008        ar->registered = false;
2009
2010#ifdef CONFIG_CARL9170_LEDS
2011        carl9170_led_unregister(ar);
2012#endif /* CONFIG_CARL9170_LEDS */
2013
2014#ifdef CONFIG_CARL9170_DEBUGFS
2015        carl9170_debugfs_unregister(ar);
2016#endif /* CONFIG_CARL9170_DEBUGFS */
2017
2018#ifdef CONFIG_CARL9170_WPC
2019        if (ar->wps.pbc) {
2020                input_unregister_device(ar->wps.pbc);
2021                ar->wps.pbc = NULL;
2022        }
2023#endif /* CONFIG_CARL9170_WPC */
2024
2025#ifdef CONFIG_CARL9170_HWRNG
2026        carl9170_unregister_hwrng(ar);
2027#endif /* CONFIG_CARL9170_HWRNG */
2028
2029        carl9170_cancel_worker(ar);
2030        cancel_work_sync(&ar->restart_work);
2031
2032        ieee80211_unregister_hw(ar->hw);
2033}
2034
2035void carl9170_free(struct ar9170 *ar)
2036{
2037        WARN_ON(ar->registered);
2038        WARN_ON(IS_INITIALIZED(ar));
2039
2040        kfree_skb(ar->rx_failover);
2041        ar->rx_failover = NULL;
2042
2043        kfree(ar->mem_bitmap);
2044        ar->mem_bitmap = NULL;
2045
2046        kfree(ar->survey);
2047        ar->survey = NULL;
2048
2049        mutex_destroy(&ar->mutex);
2050
2051        ieee80211_free_hw(ar->hw);
2052}
2053