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