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[0], 3, 15, 1023,  0); /* BEST EFFORT */
 349        CARL9170_FILL_QUEUE(ar->edcf[1], 2, 7,    15, 94); /* VIDEO */
 350        CARL9170_FILL_QUEUE(ar->edcf[2], 2, 3,     7, 47); /* VOICE */
 351        CARL9170_FILL_QUEUE(ar->edcf[3], 7, 15, 1023,  0); /* BACKGROUND */
 352        CARL9170_FILL_QUEUE(ar->edcf[4], 2, 3,     7,  0); /* SPECIAL */
 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_wake_queues(ar->hw);
 417        err = 0;
 418
 419out:
 420        mutex_unlock(&ar->mutex);
 421        return err;
 422}
 423
 424static void carl9170_cancel_worker(struct ar9170 *ar)
 425{
 426        cancel_delayed_work_sync(&ar->tx_janitor);
 427#ifdef CONFIG_CARL9170_LEDS
 428        cancel_delayed_work_sync(&ar->led_work);
 429#endif /* CONFIG_CARL9170_LEDS */
 430        cancel_work_sync(&ar->ps_work);
 431        cancel_work_sync(&ar->ping_work);
 432        cancel_work_sync(&ar->ampdu_work);
 433}
 434
 435static void carl9170_op_stop(struct ieee80211_hw *hw)
 436{
 437        struct ar9170 *ar = hw->priv;
 438
 439        carl9170_set_state_when(ar, CARL9170_STARTED, CARL9170_IDLE);
 440
 441        ieee80211_stop_queues(ar->hw);
 442
 443        mutex_lock(&ar->mutex);
 444        if (IS_ACCEPTING_CMD(ar)) {
 445                rcu_assign_pointer(ar->beacon_iter, NULL);
 446
 447                carl9170_led_set_state(ar, 0);
 448
 449                /* stop DMA */
 450                carl9170_write_reg(ar, AR9170_MAC_REG_DMA_TRIGGER, 0);
 451                carl9170_usb_stop(ar);
 452        }
 453
 454        carl9170_zap_queues(ar);
 455        mutex_unlock(&ar->mutex);
 456
 457        carl9170_cancel_worker(ar);
 458}
 459
 460static void carl9170_restart_work(struct work_struct *work)
 461{
 462        struct ar9170 *ar = container_of(work, struct ar9170,
 463                                         restart_work);
 464        int err;
 465
 466        ar->usedkeys = 0;
 467        ar->filter_state = 0;
 468        carl9170_cancel_worker(ar);
 469
 470        mutex_lock(&ar->mutex);
 471        err = carl9170_usb_restart(ar);
 472        if (net_ratelimit()) {
 473                if (err) {
 474                        dev_err(&ar->udev->dev, "Failed to restart device "
 475                                " (%d).\n", err);
 476                 } else {
 477                        dev_info(&ar->udev->dev, "device restarted "
 478                                 "successfully.\n");
 479                }
 480        }
 481
 482        carl9170_zap_queues(ar);
 483        mutex_unlock(&ar->mutex);
 484        if (!err) {
 485                ar->restart_counter++;
 486                atomic_set(&ar->pending_restarts, 0);
 487
 488                ieee80211_restart_hw(ar->hw);
 489        } else {
 490                /*
 491                 * The reset was unsuccessful and the device seems to
 492                 * be dead. But there's still one option: a low-level
 493                 * usb subsystem reset...
 494                 */
 495
 496                carl9170_usb_reset(ar);
 497        }
 498}
 499
 500void carl9170_restart(struct ar9170 *ar, const enum carl9170_restart_reasons r)
 501{
 502        carl9170_set_state_when(ar, CARL9170_STARTED, CARL9170_IDLE);
 503
 504        /*
 505         * Sometimes, an error can trigger several different reset events.
 506         * By ignoring these *surplus* reset events, the device won't be
 507         * killed again, right after it has recovered.
 508         */
 509        if (atomic_inc_return(&ar->pending_restarts) > 1) {
 510                dev_dbg(&ar->udev->dev, "ignoring restart (%d)\n", r);
 511                return;
 512        }
 513
 514        ieee80211_stop_queues(ar->hw);
 515
 516        dev_err(&ar->udev->dev, "restart device (%d)\n", r);
 517
 518        if (!WARN_ON(r == CARL9170_RR_NO_REASON) ||
 519            !WARN_ON(r >= __CARL9170_RR_LAST))
 520                ar->last_reason = r;
 521
 522        if (!ar->registered)
 523                return;
 524
 525        if (IS_ACCEPTING_CMD(ar) && !ar->needs_full_reset)
 526                ieee80211_queue_work(ar->hw, &ar->restart_work);
 527        else
 528                carl9170_usb_reset(ar);
 529
 530        /*
 531         * At this point, the device instance might have vanished/disabled.
 532         * So, don't put any code which access the ar9170 struct
 533         * without proper protection.
 534         */
 535}
 536
 537static void carl9170_ping_work(struct work_struct *work)
 538{
 539        struct ar9170 *ar = container_of(work, struct ar9170, ping_work);
 540        int err;
 541
 542        if (!IS_STARTED(ar))
 543                return;
 544
 545        mutex_lock(&ar->mutex);
 546        err = carl9170_echo_test(ar, 0xdeadbeef);
 547        if (err)
 548                carl9170_restart(ar, CARL9170_RR_UNRESPONSIVE_DEVICE);
 549        mutex_unlock(&ar->mutex);
 550}
 551
 552static int carl9170_init_interface(struct ar9170 *ar,
 553                                   struct ieee80211_vif *vif)
 554{
 555        struct ath_common *common = &ar->common;
 556        int err;
 557
 558        if (!vif) {
 559                WARN_ON_ONCE(IS_STARTED(ar));
 560                return 0;
 561        }
 562
 563        memcpy(common->macaddr, vif->addr, ETH_ALEN);
 564
 565        if (modparam_nohwcrypt ||
 566            ((vif->type != NL80211_IFTYPE_STATION) &&
 567             (vif->type != NL80211_IFTYPE_AP))) {
 568                ar->rx_software_decryption = true;
 569                ar->disable_offload = true;
 570        }
 571
 572        err = carl9170_set_operating_mode(ar);
 573        return err;
 574}
 575
 576static int carl9170_op_add_interface(struct ieee80211_hw *hw,
 577                                     struct ieee80211_vif *vif)
 578{
 579        struct carl9170_vif_info *vif_priv = (void *) vif->drv_priv;
 580        struct ieee80211_vif *main_vif;
 581        struct ar9170 *ar = hw->priv;
 582        int vif_id = -1, err = 0;
 583
 584        mutex_lock(&ar->mutex);
 585        rcu_read_lock();
 586        if (vif_priv->active) {
 587                /*
 588                 * Skip the interface structure initialization,
 589                 * if the vif survived the _restart call.
 590                 */
 591                vif_id = vif_priv->id;
 592                vif_priv->enable_beacon = false;
 593
 594                spin_lock_bh(&ar->beacon_lock);
 595                dev_kfree_skb_any(vif_priv->beacon);
 596                vif_priv->beacon = NULL;
 597                spin_unlock_bh(&ar->beacon_lock);
 598
 599                goto init;
 600        }
 601
 602        main_vif = carl9170_get_main_vif(ar);
 603
 604        if (main_vif) {
 605                switch (main_vif->type) {
 606                case NL80211_IFTYPE_STATION:
 607                        if (vif->type == NL80211_IFTYPE_STATION)
 608                                break;
 609
 610                        err = -EBUSY;
 611                        rcu_read_unlock();
 612
 613                        goto unlock;
 614
 615                case NL80211_IFTYPE_AP:
 616                        if ((vif->type == NL80211_IFTYPE_STATION) ||
 617                            (vif->type == NL80211_IFTYPE_WDS) ||
 618                            (vif->type == NL80211_IFTYPE_AP))
 619                                break;
 620
 621                        err = -EBUSY;
 622                        rcu_read_unlock();
 623                        goto unlock;
 624
 625                default:
 626                        rcu_read_unlock();
 627                        goto unlock;
 628                }
 629        }
 630
 631        vif_id = bitmap_find_free_region(&ar->vif_bitmap, ar->fw.vif_num, 0);
 632
 633        if (vif_id < 0) {
 634                rcu_read_unlock();
 635
 636                err = -ENOSPC;
 637                goto unlock;
 638        }
 639
 640        BUG_ON(ar->vif_priv[vif_id].id != vif_id);
 641
 642        vif_priv->active = true;
 643        vif_priv->id = vif_id;
 644        vif_priv->enable_beacon = false;
 645        ar->vifs++;
 646        list_add_tail_rcu(&vif_priv->list, &ar->vif_list);
 647        rcu_assign_pointer(ar->vif_priv[vif_id].vif, vif);
 648
 649init:
 650        if (carl9170_get_main_vif(ar) == vif) {
 651                rcu_assign_pointer(ar->beacon_iter, vif_priv);
 652                rcu_read_unlock();
 653
 654                err = carl9170_init_interface(ar, vif);
 655                if (err)
 656                        goto unlock;
 657        } else {
 658                rcu_read_unlock();
 659                err = carl9170_mod_virtual_mac(ar, vif_id, vif->addr);
 660
 661                if (err)
 662                        goto unlock;
 663        }
 664
 665        if (ar->fw.tx_seq_table) {
 666                err = carl9170_write_reg(ar, ar->fw.tx_seq_table + vif_id * 4,
 667                                         0);
 668                if (err)
 669                        goto unlock;
 670        }
 671
 672unlock:
 673        if (err && (vif_id >= 0)) {
 674                vif_priv->active = false;
 675                bitmap_release_region(&ar->vif_bitmap, vif_id, 0);
 676                ar->vifs--;
 677                rcu_assign_pointer(ar->vif_priv[vif_id].vif, NULL);
 678                list_del_rcu(&vif_priv->list);
 679                mutex_unlock(&ar->mutex);
 680                synchronize_rcu();
 681        } else {
 682                if (ar->vifs > 1)
 683                        ar->ps.off_override |= PS_OFF_VIF;
 684
 685                mutex_unlock(&ar->mutex);
 686        }
 687
 688        return err;
 689}
 690
 691static void carl9170_op_remove_interface(struct ieee80211_hw *hw,
 692                                         struct ieee80211_vif *vif)
 693{
 694        struct carl9170_vif_info *vif_priv = (void *) vif->drv_priv;
 695        struct ieee80211_vif *main_vif;
 696        struct ar9170 *ar = hw->priv;
 697        unsigned int id;
 698
 699        mutex_lock(&ar->mutex);
 700
 701        if (WARN_ON_ONCE(!vif_priv->active))
 702                goto unlock;
 703
 704        ar->vifs--;
 705
 706        rcu_read_lock();
 707        main_vif = carl9170_get_main_vif(ar);
 708
 709        id = vif_priv->id;
 710
 711        vif_priv->active = false;
 712        WARN_ON(vif_priv->enable_beacon);
 713        vif_priv->enable_beacon = false;
 714        list_del_rcu(&vif_priv->list);
 715        rcu_assign_pointer(ar->vif_priv[id].vif, NULL);
 716
 717        if (vif == main_vif) {
 718                rcu_read_unlock();
 719
 720                if (ar->vifs) {
 721                        WARN_ON(carl9170_init_interface(ar,
 722                                        carl9170_get_main_vif(ar)));
 723                } else {
 724                        carl9170_set_operating_mode(ar);
 725                }
 726        } else {
 727                rcu_read_unlock();
 728
 729                WARN_ON(carl9170_mod_virtual_mac(ar, id, NULL));
 730        }
 731
 732        carl9170_update_beacon(ar, false);
 733        carl9170_flush_cab(ar, id);
 734
 735        spin_lock_bh(&ar->beacon_lock);
 736        dev_kfree_skb_any(vif_priv->beacon);
 737        vif_priv->beacon = NULL;
 738        spin_unlock_bh(&ar->beacon_lock);
 739
 740        bitmap_release_region(&ar->vif_bitmap, id, 0);
 741
 742        carl9170_set_beacon_timers(ar);
 743
 744        if (ar->vifs == 1)
 745                ar->ps.off_override &= ~PS_OFF_VIF;
 746
 747unlock:
 748        mutex_unlock(&ar->mutex);
 749
 750        synchronize_rcu();
 751}
 752
 753void carl9170_ps_check(struct ar9170 *ar)
 754{
 755        ieee80211_queue_work(ar->hw, &ar->ps_work);
 756}
 757
 758/* caller must hold ar->mutex */
 759static int carl9170_ps_update(struct ar9170 *ar)
 760{
 761        bool ps = false;
 762        int err = 0;
 763
 764        if (!ar->ps.off_override)
 765                ps = (ar->hw->conf.flags & IEEE80211_CONF_PS);
 766
 767        if (ps != ar->ps.state) {
 768                err = carl9170_powersave(ar, ps);
 769                if (err)
 770                        return err;
 771
 772                if (ar->ps.state && !ps) {
 773                        ar->ps.sleep_ms = jiffies_to_msecs(jiffies -
 774                                ar->ps.last_action);
 775                }
 776
 777                if (ps)
 778                        ar->ps.last_slept = jiffies;
 779
 780                ar->ps.last_action = jiffies;
 781                ar->ps.state = ps;
 782        }
 783
 784        return 0;
 785}
 786
 787static void carl9170_ps_work(struct work_struct *work)
 788{
 789        struct ar9170 *ar = container_of(work, struct ar9170,
 790                                         ps_work);
 791        mutex_lock(&ar->mutex);
 792        if (IS_STARTED(ar))
 793                WARN_ON_ONCE(carl9170_ps_update(ar) != 0);
 794        mutex_unlock(&ar->mutex);
 795}
 796
 797
 798static int carl9170_op_config(struct ieee80211_hw *hw, u32 changed)
 799{
 800        struct ar9170 *ar = hw->priv;
 801        int err = 0;
 802
 803        mutex_lock(&ar->mutex);
 804        if (changed & IEEE80211_CONF_CHANGE_LISTEN_INTERVAL) {
 805                /* TODO */
 806                err = 0;
 807        }
 808
 809        if (changed & IEEE80211_CONF_CHANGE_PS) {
 810                err = carl9170_ps_update(ar);
 811                if (err)
 812                        goto out;
 813        }
 814
 815        if (changed & IEEE80211_CONF_CHANGE_POWER) {
 816                /* TODO */
 817                err = 0;
 818        }
 819
 820        if (changed & IEEE80211_CONF_CHANGE_SMPS) {
 821                /* TODO */
 822                err = 0;
 823        }
 824
 825        if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
 826                /* adjust slot time for 5 GHz */
 827                err = carl9170_set_slot_time(ar);
 828                if (err)
 829                        goto out;
 830
 831                err = carl9170_set_channel(ar, hw->conf.channel,
 832                        hw->conf.channel_type, CARL9170_RFI_NONE);
 833                if (err)
 834                        goto out;
 835
 836                err = carl9170_set_dyn_sifs_ack(ar);
 837                if (err)
 838                        goto out;
 839
 840                err = carl9170_set_rts_cts_rate(ar);
 841                if (err)
 842                        goto out;
 843        }
 844
 845out:
 846        mutex_unlock(&ar->mutex);
 847        return err;
 848}
 849
 850static u64 carl9170_op_prepare_multicast(struct ieee80211_hw *hw,
 851                                         struct netdev_hw_addr_list *mc_list)
 852{
 853        struct netdev_hw_addr *ha;
 854        u64 mchash;
 855
 856        /* always get broadcast frames */
 857        mchash = 1ULL << (0xff >> 2);
 858
 859        netdev_hw_addr_list_for_each(ha, mc_list)
 860                mchash |= 1ULL << (ha->addr[5] >> 2);
 861
 862        return mchash;
 863}
 864
 865static void carl9170_op_configure_filter(struct ieee80211_hw *hw,
 866                                         unsigned int changed_flags,
 867                                         unsigned int *new_flags,
 868                                         u64 multicast)
 869{
 870        struct ar9170 *ar = hw->priv;
 871
 872        /* mask supported flags */
 873        *new_flags &= FIF_ALLMULTI | ar->rx_filter_caps;
 874
 875        if (!IS_ACCEPTING_CMD(ar))
 876                return;
 877
 878        mutex_lock(&ar->mutex);
 879
 880        ar->filter_state = *new_flags;
 881        /*
 882         * We can support more by setting the sniffer bit and
 883         * then checking the error flags, later.
 884         */
 885
 886        if (changed_flags & FIF_ALLMULTI && *new_flags & FIF_ALLMULTI)
 887                multicast = ~0ULL;
 888
 889        if (multicast != ar->cur_mc_hash)
 890                WARN_ON(carl9170_update_multicast(ar, multicast));
 891
 892        if (changed_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS)) {
 893                ar->sniffer_enabled = !!(*new_flags &
 894                        (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS));
 895
 896                WARN_ON(carl9170_set_operating_mode(ar));
 897        }
 898
 899        if (ar->fw.rx_filter && changed_flags & ar->rx_filter_caps) {
 900                u32 rx_filter = 0;
 901
 902                if (!(*new_flags & (FIF_FCSFAIL | FIF_PLCPFAIL)))
 903                        rx_filter |= CARL9170_RX_FILTER_BAD;
 904
 905                if (!(*new_flags & FIF_CONTROL))
 906                        rx_filter |= CARL9170_RX_FILTER_CTL_OTHER;
 907
 908                if (!(*new_flags & FIF_PSPOLL))
 909                        rx_filter |= CARL9170_RX_FILTER_CTL_PSPOLL;
 910
 911                if (!(*new_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS))) {
 912                        rx_filter |= CARL9170_RX_FILTER_OTHER_RA;
 913                        rx_filter |= CARL9170_RX_FILTER_DECRY_FAIL;
 914                }
 915
 916                WARN_ON(carl9170_rx_filter(ar, rx_filter));
 917        }
 918
 919        mutex_unlock(&ar->mutex);
 920}
 921
 922
 923static void carl9170_op_bss_info_changed(struct ieee80211_hw *hw,
 924                                         struct ieee80211_vif *vif,
 925                                         struct ieee80211_bss_conf *bss_conf,
 926                                         u32 changed)
 927{
 928        struct ar9170 *ar = hw->priv;
 929        struct ath_common *common = &ar->common;
 930        int err = 0;
 931        struct carl9170_vif_info *vif_priv;
 932        struct ieee80211_vif *main_vif;
 933
 934        mutex_lock(&ar->mutex);
 935        vif_priv = (void *) vif->drv_priv;
 936        main_vif = carl9170_get_main_vif(ar);
 937        if (WARN_ON(!main_vif))
 938                goto out;
 939
 940        if (changed & BSS_CHANGED_BEACON_ENABLED) {
 941                struct carl9170_vif_info *iter;
 942                int i = 0;
 943
 944                vif_priv->enable_beacon = bss_conf->enable_beacon;
 945                rcu_read_lock();
 946                list_for_each_entry_rcu(iter, &ar->vif_list, list) {
 947                        if (iter->active && iter->enable_beacon)
 948                                i++;
 949
 950                }
 951                rcu_read_unlock();
 952
 953                ar->beacon_enabled = i;
 954        }
 955
 956        if (changed & BSS_CHANGED_BEACON) {
 957                err = carl9170_update_beacon(ar, false);
 958                if (err)
 959                        goto out;
 960        }
 961
 962        if (changed & (BSS_CHANGED_BEACON_ENABLED | BSS_CHANGED_BEACON |
 963                       BSS_CHANGED_BEACON_INT)) {
 964
 965                if (main_vif != vif) {
 966                        bss_conf->beacon_int = main_vif->bss_conf.beacon_int;
 967                        bss_conf->dtim_period = main_vif->bss_conf.dtim_period;
 968                }
 969
 970                /*
 971                 * Therefore a hard limit for the broadcast traffic should
 972                 * prevent false alarms.
 973                 */
 974                if (vif->type != NL80211_IFTYPE_STATION &&
 975                    (bss_conf->beacon_int * bss_conf->dtim_period >=
 976                     (CARL9170_QUEUE_STUCK_TIMEOUT / 2))) {
 977                        err = -EINVAL;
 978                        goto out;
 979                }
 980
 981                err = carl9170_set_beacon_timers(ar);
 982                if (err)
 983                        goto out;
 984        }
 985
 986        if (changed & BSS_CHANGED_HT) {
 987                /* TODO */
 988                err = 0;
 989                if (err)
 990                        goto out;
 991        }
 992
 993        if (main_vif != vif)
 994                goto out;
 995
 996        /*
 997         * The following settings can only be changed by the
 998         * master interface.
 999         */
1000
1001        if (changed & BSS_CHANGED_BSSID) {
1002                memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1003                err = carl9170_set_operating_mode(ar);
1004                if (err)
1005                        goto out;
1006        }
1007
1008        if (changed & BSS_CHANGED_ASSOC) {
1009                ar->common.curaid = bss_conf->aid;
1010                err = carl9170_set_beacon_timers(ar);
1011                if (err)
1012                        goto out;
1013        }
1014
1015        if (changed & BSS_CHANGED_ERP_SLOT) {
1016                err = carl9170_set_slot_time(ar);
1017                if (err)
1018                        goto out;
1019        }
1020
1021        if (changed & BSS_CHANGED_BASIC_RATES) {
1022                err = carl9170_set_mac_rates(ar);
1023                if (err)
1024                        goto out;
1025        }
1026
1027out:
1028        WARN_ON_ONCE(err && IS_STARTED(ar));
1029        mutex_unlock(&ar->mutex);
1030}
1031
1032static u64 carl9170_op_get_tsf(struct ieee80211_hw *hw)
1033{
1034        struct ar9170 *ar = hw->priv;
1035        struct carl9170_tsf_rsp tsf;
1036        int err;
1037
1038        mutex_lock(&ar->mutex);
1039        err = carl9170_exec_cmd(ar, CARL9170_CMD_READ_TSF,
1040                                0, NULL, sizeof(tsf), &tsf);
1041        mutex_unlock(&ar->mutex);
1042        if (WARN_ON(err))
1043                return 0;
1044
1045        return le64_to_cpu(tsf.tsf_64);
1046}
1047
1048static int carl9170_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1049                               struct ieee80211_vif *vif,
1050                               struct ieee80211_sta *sta,
1051                               struct ieee80211_key_conf *key)
1052{
1053        struct ar9170 *ar = hw->priv;
1054        int err = 0, i;
1055        u8 ktype;
1056
1057        if (ar->disable_offload || !vif)
1058                return -EOPNOTSUPP;
1059
1060        /*
1061         * We have to fall back to software encryption, whenever
1062         * the user choose to participates in an IBSS or is connected
1063         * to more than one network.
1064         *
1065         * This is very unfortunate, because some machines cannot handle
1066         * the high througput speed in 802.11n networks.
1067         */
1068
1069        if (!is_main_vif(ar, vif))
1070                goto err_softw;
1071
1072        /*
1073         * While the hardware supports *catch-all* key, for offloading
1074         * group-key en-/de-cryption. The way of how the hardware
1075         * decides which keyId maps to which key, remains a mystery...
1076         */
1077        if ((vif->type != NL80211_IFTYPE_STATION &&
1078             vif->type != NL80211_IFTYPE_ADHOC) &&
1079            !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
1080                return -EOPNOTSUPP;
1081
1082        switch (key->cipher) {
1083        case WLAN_CIPHER_SUITE_WEP40:
1084                ktype = AR9170_ENC_ALG_WEP64;
1085                break;
1086        case WLAN_CIPHER_SUITE_WEP104:
1087                ktype = AR9170_ENC_ALG_WEP128;
1088                break;
1089        case WLAN_CIPHER_SUITE_TKIP:
1090                ktype = AR9170_ENC_ALG_TKIP;
1091                break;
1092        case WLAN_CIPHER_SUITE_CCMP:
1093                ktype = AR9170_ENC_ALG_AESCCMP;
1094                break;
1095        default:
1096                return -EOPNOTSUPP;
1097        }
1098
1099        mutex_lock(&ar->mutex);
1100        if (cmd == SET_KEY) {
1101                if (!IS_STARTED(ar)) {
1102                        err = -EOPNOTSUPP;
1103                        goto out;
1104                }
1105
1106                if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
1107                        sta = NULL;
1108
1109                        i = 64 + key->keyidx;
1110                } else {
1111                        for (i = 0; i < 64; i++)
1112                                if (!(ar->usedkeys & BIT(i)))
1113                                        break;
1114                        if (i == 64)
1115                                goto err_softw;
1116                }
1117
1118                key->hw_key_idx = i;
1119
1120                err = carl9170_upload_key(ar, i, sta ? sta->addr : NULL,
1121                                          ktype, 0, key->key,
1122                                          min_t(u8, 16, key->keylen));
1123                if (err)
1124                        goto out;
1125
1126                if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
1127                        err = carl9170_upload_key(ar, i, sta ? sta->addr :
1128                                                  NULL, ktype, 1,
1129                                                  key->key + 16, 16);
1130                        if (err)
1131                                goto out;
1132
1133                        /*
1134                         * hardware is not capable generating MMIC
1135                         * of fragmented frames!
1136                         */
1137                        key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
1138                }
1139
1140                if (i < 64)
1141                        ar->usedkeys |= BIT(i);
1142
1143                key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1144        } else {
1145                if (!IS_STARTED(ar)) {
1146                        /* The device is gone... together with the key ;-) */
1147                        err = 0;
1148                        goto out;
1149                }
1150
1151                if (key->hw_key_idx < 64) {
1152                        ar->usedkeys &= ~BIT(key->hw_key_idx);
1153                } else {
1154                        err = carl9170_upload_key(ar, key->hw_key_idx, NULL,
1155                                                  AR9170_ENC_ALG_NONE, 0,
1156                                                  NULL, 0);
1157                        if (err)
1158                                goto out;
1159
1160                        if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
1161                                err = carl9170_upload_key(ar, key->hw_key_idx,
1162                                                          NULL,
1163                                                          AR9170_ENC_ALG_NONE,
1164                                                          1, NULL, 0);
1165                                if (err)
1166                                        goto out;
1167                        }
1168
1169                }
1170
1171                err = carl9170_disable_key(ar, key->hw_key_idx);
1172                if (err)
1173                        goto out;
1174        }
1175
1176out:
1177        mutex_unlock(&ar->mutex);
1178        return err;
1179
1180err_softw:
1181        if (!ar->rx_software_decryption) {
1182                ar->rx_software_decryption = true;
1183                carl9170_set_operating_mode(ar);
1184        }
1185        mutex_unlock(&ar->mutex);
1186        return -ENOSPC;
1187}
1188
1189static int carl9170_op_sta_add(struct ieee80211_hw *hw,
1190                               struct ieee80211_vif *vif,
1191                               struct ieee80211_sta *sta)
1192{
1193        struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1194        unsigned int i;
1195
1196        if (sta->ht_cap.ht_supported) {
1197                if (sta->ht_cap.ampdu_density > 6) {
1198                        /*
1199                         * HW does support 16us AMPDU density.
1200                         * No HT-Xmit for station.
1201                         */
1202
1203                        return 0;
1204                }
1205
1206                for (i = 0; i < CARL9170_NUM_TID; i++)
1207                        rcu_assign_pointer(sta_info->agg[i], NULL);
1208
1209                sta_info->ampdu_max_len = 1 << (3 + sta->ht_cap.ampdu_factor);
1210                sta_info->ht_sta = true;
1211        }
1212
1213        return 0;
1214}
1215
1216static int carl9170_op_sta_remove(struct ieee80211_hw *hw,
1217                                struct ieee80211_vif *vif,
1218                                struct ieee80211_sta *sta)
1219{
1220        struct ar9170 *ar = hw->priv;
1221        struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1222        unsigned int i;
1223        bool cleanup = false;
1224
1225        if (sta->ht_cap.ht_supported) {
1226
1227                sta_info->ht_sta = false;
1228
1229                rcu_read_lock();
1230                for (i = 0; i < CARL9170_NUM_TID; i++) {
1231                        struct carl9170_sta_tid *tid_info;
1232
1233                        tid_info = rcu_dereference(sta_info->agg[i]);
1234                        rcu_assign_pointer(sta_info->agg[i], NULL);
1235
1236                        if (!tid_info)
1237                                continue;
1238
1239                        spin_lock_bh(&ar->tx_ampdu_list_lock);
1240                        if (tid_info->state > CARL9170_TID_STATE_SHUTDOWN)
1241                                tid_info->state = CARL9170_TID_STATE_SHUTDOWN;
1242                        spin_unlock_bh(&ar->tx_ampdu_list_lock);
1243                        cleanup = true;
1244                }
1245                rcu_read_unlock();
1246
1247                if (cleanup)
1248                        carl9170_ampdu_gc(ar);
1249        }
1250
1251        return 0;
1252}
1253
1254static int carl9170_op_conf_tx(struct ieee80211_hw *hw, u16 queue,
1255                               const struct ieee80211_tx_queue_params *param)
1256{
1257        struct ar9170 *ar = hw->priv;
1258        int ret;
1259
1260        mutex_lock(&ar->mutex);
1261        if (queue < ar->hw->queues) {
1262                memcpy(&ar->edcf[ar9170_qmap[queue]], param, sizeof(*param));
1263                ret = carl9170_set_qos(ar);
1264        } else {
1265                ret = -EINVAL;
1266        }
1267
1268        mutex_unlock(&ar->mutex);
1269        return ret;
1270}
1271
1272static void carl9170_ampdu_work(struct work_struct *work)
1273{
1274        struct ar9170 *ar = container_of(work, struct ar9170,
1275                                         ampdu_work);
1276
1277        if (!IS_STARTED(ar))
1278                return;
1279
1280        mutex_lock(&ar->mutex);
1281        carl9170_ampdu_gc(ar);
1282        mutex_unlock(&ar->mutex);
1283}
1284
1285static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
1286                                    struct ieee80211_vif *vif,
1287                                    enum ieee80211_ampdu_mlme_action action,
1288                                    struct ieee80211_sta *sta,
1289                                    u16 tid, u16 *ssn, u8 buf_size)
1290{
1291        struct ar9170 *ar = hw->priv;
1292        struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1293        struct carl9170_sta_tid *tid_info;
1294
1295        if (modparam_noht)
1296                return -EOPNOTSUPP;
1297
1298        switch (action) {
1299        case IEEE80211_AMPDU_TX_START:
1300                if (!sta_info->ht_sta)
1301                        return -EOPNOTSUPP;
1302
1303                rcu_read_lock();
1304                if (rcu_dereference(sta_info->agg[tid])) {
1305                        rcu_read_unlock();
1306                        return -EBUSY;
1307                }
1308
1309                tid_info = kzalloc(sizeof(struct carl9170_sta_tid),
1310                                   GFP_ATOMIC);
1311                if (!tid_info) {
1312                        rcu_read_unlock();
1313                        return -ENOMEM;
1314                }
1315
1316                tid_info->hsn = tid_info->bsn = tid_info->snx = (*ssn);
1317                tid_info->state = CARL9170_TID_STATE_PROGRESS;
1318                tid_info->tid = tid;
1319                tid_info->max = sta_info->ampdu_max_len;
1320
1321                INIT_LIST_HEAD(&tid_info->list);
1322                INIT_LIST_HEAD(&tid_info->tmp_list);
1323                skb_queue_head_init(&tid_info->queue);
1324                spin_lock_init(&tid_info->lock);
1325
1326                spin_lock_bh(&ar->tx_ampdu_list_lock);
1327                ar->tx_ampdu_list_len++;
1328                list_add_tail_rcu(&tid_info->list, &ar->tx_ampdu_list);
1329                rcu_assign_pointer(sta_info->agg[tid], tid_info);
1330                spin_unlock_bh(&ar->tx_ampdu_list_lock);
1331                rcu_read_unlock();
1332
1333                ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1334                break;
1335
1336        case IEEE80211_AMPDU_TX_STOP:
1337                rcu_read_lock();
1338                tid_info = rcu_dereference(sta_info->agg[tid]);
1339                if (tid_info) {
1340                        spin_lock_bh(&ar->tx_ampdu_list_lock);
1341                        if (tid_info->state > CARL9170_TID_STATE_SHUTDOWN)
1342                                tid_info->state = CARL9170_TID_STATE_SHUTDOWN;
1343                        spin_unlock_bh(&ar->tx_ampdu_list_lock);
1344                }
1345
1346                rcu_assign_pointer(sta_info->agg[tid], NULL);
1347                rcu_read_unlock();
1348
1349                ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1350                ieee80211_queue_work(ar->hw, &ar->ampdu_work);
1351                break;
1352
1353        case IEEE80211_AMPDU_TX_OPERATIONAL:
1354                rcu_read_lock();
1355                tid_info = rcu_dereference(sta_info->agg[tid]);
1356
1357                sta_info->stats[tid].clear = true;
1358                sta_info->stats[tid].req = false;
1359
1360                if (tid_info) {
1361                        bitmap_zero(tid_info->bitmap, CARL9170_BAW_SIZE);
1362                        tid_info->state = CARL9170_TID_STATE_IDLE;
1363                }
1364                rcu_read_unlock();
1365
1366                if (WARN_ON_ONCE(!tid_info))
1367                        return -EFAULT;
1368
1369                break;
1370
1371        case IEEE80211_AMPDU_RX_START:
1372        case IEEE80211_AMPDU_RX_STOP:
1373                /* Handled by hardware */
1374                break;
1375
1376        default:
1377                return -EOPNOTSUPP;
1378        }
1379
1380        return 0;
1381}
1382
1383#ifdef CONFIG_CARL9170_WPC
1384static int carl9170_register_wps_button(struct ar9170 *ar)
1385{
1386        struct input_dev *input;
1387        int err;
1388
1389        if (!(ar->features & CARL9170_WPS_BUTTON))
1390                return 0;
1391
1392        input = input_allocate_device();
1393        if (!input)
1394                return -ENOMEM;
1395
1396        snprintf(ar->wps.name, sizeof(ar->wps.name), "%s WPS Button",
1397                 wiphy_name(ar->hw->wiphy));
1398
1399        snprintf(ar->wps.phys, sizeof(ar->wps.phys),
1400                 "ieee80211/%s/input0", wiphy_name(ar->hw->wiphy));
1401
1402        input->name = ar->wps.name;
1403        input->phys = ar->wps.phys;
1404        input->id.bustype = BUS_USB;
1405        input->dev.parent = &ar->hw->wiphy->dev;
1406
1407        input_set_capability(input, EV_KEY, KEY_WPS_BUTTON);
1408
1409        err = input_register_device(input);
1410        if (err) {
1411                input_free_device(input);
1412                return err;
1413        }
1414
1415        ar->wps.pbc = input;
1416        return 0;
1417}
1418#endif /* CONFIG_CARL9170_WPC */
1419
1420static int carl9170_op_get_survey(struct ieee80211_hw *hw, int idx,
1421                                struct survey_info *survey)
1422{
1423        struct ar9170 *ar = hw->priv;
1424        int err;
1425
1426        if (idx != 0)
1427                return -ENOENT;
1428
1429        mutex_lock(&ar->mutex);
1430        err = carl9170_get_noisefloor(ar);
1431        mutex_unlock(&ar->mutex);
1432        if (err)
1433                return err;
1434
1435        survey->channel = ar->channel;
1436        survey->filled = SURVEY_INFO_NOISE_DBM;
1437        survey->noise = ar->noise[0];
1438        return 0;
1439}
1440
1441static void carl9170_op_flush(struct ieee80211_hw *hw, bool drop)
1442{
1443        struct ar9170 *ar = hw->priv;
1444        unsigned int vid;
1445
1446        mutex_lock(&ar->mutex);
1447        for_each_set_bit(vid, &ar->vif_bitmap, ar->fw.vif_num)
1448                carl9170_flush_cab(ar, vid);
1449
1450        carl9170_flush(ar, drop);
1451        mutex_unlock(&ar->mutex);
1452}
1453
1454static int carl9170_op_get_stats(struct ieee80211_hw *hw,
1455                                 struct ieee80211_low_level_stats *stats)
1456{
1457        struct ar9170 *ar = hw->priv;
1458
1459        memset(stats, 0, sizeof(*stats));
1460        stats->dot11ACKFailureCount = ar->tx_ack_failures;
1461        stats->dot11FCSErrorCount = ar->tx_fcs_errors;
1462        return 0;
1463}
1464
1465static void carl9170_op_sta_notify(struct ieee80211_hw *hw,
1466                                   struct ieee80211_vif *vif,
1467                                   enum sta_notify_cmd cmd,
1468                                   struct ieee80211_sta *sta)
1469{
1470        struct ar9170 *ar = hw->priv;
1471        struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1472        struct sk_buff *skb, *tmp;
1473        struct sk_buff_head free;
1474        int i;
1475
1476        switch (cmd) {
1477        case STA_NOTIFY_SLEEP:
1478                /*
1479                 * Since the peer is no longer listening, we have to return
1480                 * as many SKBs as possible back to the mac80211 stack.
1481                 * It will deal with the retry procedure, once the peer
1482                 * has become available again.
1483                 *
1484                 * NB: Ideally, the driver should return the all frames in
1485                 * the correct, ascending order. However, I think that this
1486                 * functionality should be implemented in the stack and not
1487                 * here...
1488                 */
1489
1490                __skb_queue_head_init(&free);
1491
1492                if (sta->ht_cap.ht_supported) {
1493                        rcu_read_lock();
1494                        for (i = 0; i < CARL9170_NUM_TID; i++) {
1495                                struct carl9170_sta_tid *tid_info;
1496
1497                                tid_info = rcu_dereference(sta_info->agg[i]);
1498
1499                                if (!tid_info)
1500                                        continue;
1501
1502                                spin_lock_bh(&ar->tx_ampdu_list_lock);
1503                                if (tid_info->state >
1504                                    CARL9170_TID_STATE_SUSPEND)
1505                                        tid_info->state =
1506                                                CARL9170_TID_STATE_SUSPEND;
1507                                spin_unlock_bh(&ar->tx_ampdu_list_lock);
1508
1509                                spin_lock_bh(&tid_info->lock);
1510                                while ((skb = __skb_dequeue(&tid_info->queue)))
1511                                        __skb_queue_tail(&free, skb);
1512                                spin_unlock_bh(&tid_info->lock);
1513                        }
1514                        rcu_read_unlock();
1515                }
1516
1517                for (i = 0; i < ar->hw->queues; i++) {
1518                        spin_lock_bh(&ar->tx_pending[i].lock);
1519                        skb_queue_walk_safe(&ar->tx_pending[i], skb, tmp) {
1520                                struct _carl9170_tx_superframe *super;
1521                                struct ieee80211_hdr *hdr;
1522                                struct ieee80211_tx_info *info;
1523
1524                                super = (void *) skb->data;
1525                                hdr = (void *) super->frame_data;
1526
1527                                if (compare_ether_addr(hdr->addr1, sta->addr))
1528                                        continue;
1529
1530                                __skb_unlink(skb, &ar->tx_pending[i]);
1531
1532                                info = IEEE80211_SKB_CB(skb);
1533                                if (info->flags & IEEE80211_TX_CTL_AMPDU)
1534                                        atomic_dec(&ar->tx_ampdu_upload);
1535
1536                                carl9170_tx_status(ar, skb, false);
1537                        }
1538                        spin_unlock_bh(&ar->tx_pending[i].lock);
1539                }
1540
1541                while ((skb = __skb_dequeue(&free)))
1542                        carl9170_tx_status(ar, skb, false);
1543
1544                break;
1545
1546        case STA_NOTIFY_AWAKE:
1547                if (!sta->ht_cap.ht_supported)
1548                        return;
1549
1550                rcu_read_lock();
1551                for (i = 0; i < CARL9170_NUM_TID; i++) {
1552                        struct carl9170_sta_tid *tid_info;
1553
1554                        tid_info = rcu_dereference(sta_info->agg[i]);
1555
1556                        if (!tid_info)
1557                                continue;
1558
1559                        if ((tid_info->state == CARL9170_TID_STATE_SUSPEND))
1560                                tid_info->state = CARL9170_TID_STATE_IDLE;
1561                }
1562                rcu_read_unlock();
1563                break;
1564        }
1565}
1566
1567static const struct ieee80211_ops carl9170_ops = {
1568        .start                  = carl9170_op_start,
1569        .stop                   = carl9170_op_stop,
1570        .tx                     = carl9170_op_tx,
1571        .flush                  = carl9170_op_flush,
1572        .add_interface          = carl9170_op_add_interface,
1573        .remove_interface       = carl9170_op_remove_interface,
1574        .config                 = carl9170_op_config,
1575        .prepare_multicast      = carl9170_op_prepare_multicast,
1576        .configure_filter       = carl9170_op_configure_filter,
1577        .conf_tx                = carl9170_op_conf_tx,
1578        .bss_info_changed       = carl9170_op_bss_info_changed,
1579        .get_tsf                = carl9170_op_get_tsf,
1580        .set_key                = carl9170_op_set_key,
1581        .sta_add                = carl9170_op_sta_add,
1582        .sta_remove             = carl9170_op_sta_remove,
1583        .sta_notify             = carl9170_op_sta_notify,
1584        .get_survey             = carl9170_op_get_survey,
1585        .get_stats              = carl9170_op_get_stats,
1586        .ampdu_action           = carl9170_op_ampdu_action,
1587};
1588
1589void *carl9170_alloc(size_t priv_size)
1590{
1591        struct ieee80211_hw *hw;
1592        struct ar9170 *ar;
1593        struct sk_buff *skb;
1594        int i;
1595
1596        /*
1597         * this buffer is used for rx stream reconstruction.
1598         * Under heavy load this device (or the transport layer?)
1599         * tends to split the streams into separate rx descriptors.
1600         */
1601
1602        skb = __dev_alloc_skb(AR9170_RX_STREAM_MAX_SIZE, GFP_KERNEL);
1603        if (!skb)
1604                goto err_nomem;
1605
1606        hw = ieee80211_alloc_hw(priv_size, &carl9170_ops);
1607        if (!hw)
1608                goto err_nomem;
1609
1610        ar = hw->priv;
1611        ar->hw = hw;
1612        ar->rx_failover = skb;
1613
1614        memset(&ar->rx_plcp, 0, sizeof(struct ar9170_rx_head));
1615        ar->rx_has_plcp = false;
1616
1617        /*
1618         * Here's a hidden pitfall!
1619         *
1620         * All 4 AC queues work perfectly well under _legacy_ operation.
1621         * However as soon as aggregation is enabled, the traffic flow
1622         * gets very bumpy. Therefore we have to _switch_ to a
1623         * software AC with a single HW queue.
1624         */
1625        hw->queues = __AR9170_NUM_TXQ;
1626
1627        mutex_init(&ar->mutex);
1628        spin_lock_init(&ar->beacon_lock);
1629        spin_lock_init(&ar->cmd_lock);
1630        spin_lock_init(&ar->tx_stats_lock);
1631        spin_lock_init(&ar->tx_ampdu_list_lock);
1632        spin_lock_init(&ar->mem_lock);
1633        spin_lock_init(&ar->state_lock);
1634        atomic_set(&ar->pending_restarts, 0);
1635        ar->vifs = 0;
1636        for (i = 0; i < ar->hw->queues; i++) {
1637                skb_queue_head_init(&ar->tx_status[i]);
1638                skb_queue_head_init(&ar->tx_pending[i]);
1639        }
1640        INIT_WORK(&ar->ps_work, carl9170_ps_work);
1641        INIT_WORK(&ar->ping_work, carl9170_ping_work);
1642        INIT_WORK(&ar->restart_work, carl9170_restart_work);
1643        INIT_WORK(&ar->ampdu_work, carl9170_ampdu_work);
1644        INIT_DELAYED_WORK(&ar->tx_janitor, carl9170_tx_janitor);
1645        INIT_LIST_HEAD(&ar->tx_ampdu_list);
1646        rcu_assign_pointer(ar->tx_ampdu_iter,
1647                           (struct carl9170_sta_tid *) &ar->tx_ampdu_list);
1648
1649        bitmap_zero(&ar->vif_bitmap, ar->fw.vif_num);
1650        INIT_LIST_HEAD(&ar->vif_list);
1651        init_completion(&ar->tx_flush);
1652
1653        /*
1654         * Note:
1655         * IBSS/ADHOC and AP mode are only enabled, if the firmware
1656         * supports these modes. The code which will add the
1657         * additional interface_modes is in fw.c.
1658         */
1659        hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
1660                                     BIT(NL80211_IFTYPE_P2P_CLIENT);
1661
1662        hw->flags |= IEEE80211_HW_RX_INCLUDES_FCS |
1663                     IEEE80211_HW_REPORTS_TX_ACK_STATUS |
1664                     IEEE80211_HW_SUPPORTS_PS |
1665                     IEEE80211_HW_PS_NULLFUNC_STACK |
1666                     IEEE80211_HW_SIGNAL_DBM;
1667
1668        if (!modparam_noht) {
1669                /*
1670                 * see the comment above, why we allow the user
1671                 * to disable HT by a module parameter.
1672                 */
1673                hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
1674        }
1675
1676        hw->extra_tx_headroom = sizeof(struct _carl9170_tx_superframe);
1677        hw->sta_data_size = sizeof(struct carl9170_sta_info);
1678        hw->vif_data_size = sizeof(struct carl9170_vif_info);
1679
1680        hw->max_rates = CARL9170_TX_MAX_RATES;
1681        hw->max_rate_tries = CARL9170_TX_USER_RATE_TRIES;
1682
1683        for (i = 0; i < ARRAY_SIZE(ar->noise); i++)
1684                ar->noise[i] = -95; /* ATH_DEFAULT_NOISE_FLOOR */
1685
1686        hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
1687        return ar;
1688
1689err_nomem:
1690        kfree_skb(skb);
1691        return ERR_PTR(-ENOMEM);
1692}
1693
1694static int carl9170_read_eeprom(struct ar9170 *ar)
1695{
1696#define RW      8       /* number of words to read at once */
1697#define RB      (sizeof(u32) * RW)
1698        u8 *eeprom = (void *)&ar->eeprom;
1699        __le32 offsets[RW];
1700        int i, j, err;
1701
1702        BUILD_BUG_ON(sizeof(ar->eeprom) & 3);
1703
1704        BUILD_BUG_ON(RB > CARL9170_MAX_CMD_LEN - 4);
1705#ifndef __CHECKER__
1706        /* don't want to handle trailing remains */
1707        BUILD_BUG_ON(sizeof(ar->eeprom) % RB);
1708#endif
1709
1710        for (i = 0; i < sizeof(ar->eeprom)/RB; i++) {
1711                for (j = 0; j < RW; j++)
1712                        offsets[j] = cpu_to_le32(AR9170_EEPROM_START +
1713                                                 RB * i + 4 * j);
1714
1715                err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG,
1716                                        RB, (u8 *) &offsets,
1717                                        RB, eeprom + RB * i);
1718                if (err)
1719                        return err;
1720        }
1721
1722#undef RW
1723#undef RB
1724        return 0;
1725}
1726
1727static int carl9170_parse_eeprom(struct ar9170 *ar)
1728{
1729        struct ath_regulatory *regulatory = &ar->common.regulatory;
1730        unsigned int rx_streams, tx_streams, tx_params = 0;
1731        int bands = 0;
1732
1733        if (ar->eeprom.length == cpu_to_le16(0xffff))
1734                return -ENODATA;
1735
1736        rx_streams = hweight8(ar->eeprom.rx_mask);
1737        tx_streams = hweight8(ar->eeprom.tx_mask);
1738
1739        if (rx_streams != tx_streams) {
1740                tx_params = IEEE80211_HT_MCS_TX_RX_DIFF;
1741
1742                WARN_ON(!(tx_streams >= 1 && tx_streams <=
1743                        IEEE80211_HT_MCS_TX_MAX_STREAMS));
1744
1745                tx_params = (tx_streams - 1) <<
1746                            IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT;
1747
1748                carl9170_band_2GHz.ht_cap.mcs.tx_params |= tx_params;
1749                carl9170_band_5GHz.ht_cap.mcs.tx_params |= tx_params;
1750        }
1751
1752        if (ar->eeprom.operating_flags & AR9170_OPFLAG_2GHZ) {
1753                ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
1754                        &carl9170_band_2GHz;
1755                bands++;
1756        }
1757        if (ar->eeprom.operating_flags & AR9170_OPFLAG_5GHZ) {
1758                ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
1759                        &carl9170_band_5GHz;
1760                bands++;
1761        }
1762
1763        /*
1764         * I measured this, a bandswitch takes roughly
1765         * 135 ms and a frequency switch about 80.
1766         *
1767         * FIXME: measure these values again once EEPROM settings
1768         *        are used, that will influence them!
1769         */
1770        if (bands == 2)
1771                ar->hw->channel_change_time = 135 * 1000;
1772        else
1773                ar->hw->channel_change_time = 80 * 1000;
1774
1775        regulatory->current_rd = le16_to_cpu(ar->eeprom.reg_domain[0]);
1776        regulatory->current_rd_ext = le16_to_cpu(ar->eeprom.reg_domain[1]);
1777
1778        /* second part of wiphy init */
1779        SET_IEEE80211_PERM_ADDR(ar->hw, ar->eeprom.mac_address);
1780
1781        return bands ? 0 : -EINVAL;
1782}
1783
1784static int carl9170_reg_notifier(struct wiphy *wiphy,
1785                                 struct regulatory_request *request)
1786{
1787        struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1788        struct ar9170 *ar = hw->priv;
1789
1790        return ath_reg_notifier_apply(wiphy, request, &ar->common.regulatory);
1791}
1792
1793int carl9170_register(struct ar9170 *ar)
1794{
1795        struct ath_regulatory *regulatory = &ar->common.regulatory;
1796        int err = 0, i;
1797
1798        if (WARN_ON(ar->mem_bitmap))
1799                return -EINVAL;
1800
1801        ar->mem_bitmap = kzalloc(roundup(ar->fw.mem_blocks, BITS_PER_LONG) *
1802                                 sizeof(unsigned long), GFP_KERNEL);
1803
1804        if (!ar->mem_bitmap)
1805                return -ENOMEM;
1806
1807        /* try to read EEPROM, init MAC addr */
1808        err = carl9170_read_eeprom(ar);
1809        if (err)
1810                return err;
1811
1812        err = carl9170_fw_fix_eeprom(ar);
1813        if (err)
1814                return err;
1815
1816        err = carl9170_parse_eeprom(ar);
1817        if (err)
1818                return err;
1819
1820        err = ath_regd_init(regulatory, ar->hw->wiphy,
1821                            carl9170_reg_notifier);
1822        if (err)
1823                return err;
1824
1825        if (modparam_noht) {
1826                carl9170_band_2GHz.ht_cap.ht_supported = false;
1827                carl9170_band_5GHz.ht_cap.ht_supported = false;
1828        }
1829
1830        for (i = 0; i < ar->fw.vif_num; i++) {
1831                ar->vif_priv[i].id = i;
1832                ar->vif_priv[i].vif = NULL;
1833        }
1834
1835        err = ieee80211_register_hw(ar->hw);
1836        if (err)
1837                return err;
1838
1839        /* mac80211 interface is now registered */
1840        ar->registered = true;
1841
1842        if (!ath_is_world_regd(regulatory))
1843                regulatory_hint(ar->hw->wiphy, regulatory->alpha2);
1844
1845#ifdef CONFIG_CARL9170_DEBUGFS
1846        carl9170_debugfs_register(ar);
1847#endif /* CONFIG_CARL9170_DEBUGFS */
1848
1849        err = carl9170_led_init(ar);
1850        if (err)
1851                goto err_unreg;
1852
1853#ifdef CONFIG_CARL9170_LEDS
1854        err = carl9170_led_register(ar);
1855        if (err)
1856                goto err_unreg;
1857#endif /* CONFIG_CARL9170_LEDS */
1858
1859#ifdef CONFIG_CARL9170_WPC
1860        err = carl9170_register_wps_button(ar);
1861        if (err)
1862                goto err_unreg;
1863#endif /* CONFIG_CARL9170_WPC */
1864
1865        dev_info(&ar->udev->dev, "Atheros AR9170 is registered as '%s'\n",
1866                 wiphy_name(ar->hw->wiphy));
1867
1868        return 0;
1869
1870err_unreg:
1871        carl9170_unregister(ar);
1872        return err;
1873}
1874
1875void carl9170_unregister(struct ar9170 *ar)
1876{
1877        if (!ar->registered)
1878                return;
1879
1880        ar->registered = false;
1881
1882#ifdef CONFIG_CARL9170_LEDS
1883        carl9170_led_unregister(ar);
1884#endif /* CONFIG_CARL9170_LEDS */
1885
1886#ifdef CONFIG_CARL9170_DEBUGFS
1887        carl9170_debugfs_unregister(ar);
1888#endif /* CONFIG_CARL9170_DEBUGFS */
1889
1890#ifdef CONFIG_CARL9170_WPC
1891        if (ar->wps.pbc) {
1892                input_unregister_device(ar->wps.pbc);
1893                ar->wps.pbc = NULL;
1894        }
1895#endif /* CONFIG_CARL9170_WPC */
1896
1897        carl9170_cancel_worker(ar);
1898        cancel_work_sync(&ar->restart_work);
1899
1900        ieee80211_unregister_hw(ar->hw);
1901}
1902
1903void carl9170_free(struct ar9170 *ar)
1904{
1905        WARN_ON(ar->registered);
1906        WARN_ON(IS_INITIALIZED(ar));
1907
1908        kfree_skb(ar->rx_failover);
1909        ar->rx_failover = NULL;
1910
1911        kfree(ar->mem_bitmap);
1912        ar->mem_bitmap = NULL;
1913
1914        mutex_destroy(&ar->mutex);
1915
1916        ieee80211_free_hw(ar->hw);
1917}
1918