0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040 #include <linux/slab.h>
0041 #include <linux/module.h>
0042 #include <linux/etherdevice.h>
0043 #include <linux/random.h>
0044 #include <net/mac80211.h>
0045 #include <net/cfg80211.h>
0046 #include "hw.h"
0047 #include "carl9170.h"
0048 #include "cmd.h"
0049
0050 static bool modparam_nohwcrypt;
0051 module_param_named(nohwcrypt, modparam_nohwcrypt, bool, 0444);
0052 MODULE_PARM_DESC(nohwcrypt, "Disable hardware crypto offload.");
0053
0054 int modparam_noht;
0055 module_param_named(noht, modparam_noht, int, 0444);
0056 MODULE_PARM_DESC(noht, "Disable MPDU aggregation.");
0057
0058 #define RATE(_bitrate, _hw_rate, _txpidx, _flags) { \
0059 .bitrate = (_bitrate), \
0060 .flags = (_flags), \
0061 .hw_value = (_hw_rate) | (_txpidx) << 4, \
0062 }
0063
0064 struct ieee80211_rate __carl9170_ratetable[] = {
0065 RATE(10, 0, 0, 0),
0066 RATE(20, 1, 1, IEEE80211_RATE_SHORT_PREAMBLE),
0067 RATE(55, 2, 2, IEEE80211_RATE_SHORT_PREAMBLE),
0068 RATE(110, 3, 3, IEEE80211_RATE_SHORT_PREAMBLE),
0069 RATE(60, 0xb, 0, 0),
0070 RATE(90, 0xf, 0, 0),
0071 RATE(120, 0xa, 0, 0),
0072 RATE(180, 0xe, 0, 0),
0073 RATE(240, 0x9, 0, 0),
0074 RATE(360, 0xd, 1, 0),
0075 RATE(480, 0x8, 2, 0),
0076 RATE(540, 0xc, 3, 0),
0077 };
0078 #undef RATE
0079
0080 #define carl9170_g_ratetable (__carl9170_ratetable + 0)
0081 #define carl9170_g_ratetable_size 12
0082 #define carl9170_a_ratetable (__carl9170_ratetable + 4)
0083 #define carl9170_a_ratetable_size 8
0084
0085
0086
0087
0088
0089 #define CHAN(_freq, _idx) { \
0090 .center_freq = (_freq), \
0091 .hw_value = (_idx), \
0092 .max_power = 18, \
0093 }
0094
0095 static struct ieee80211_channel carl9170_2ghz_chantable[] = {
0096 CHAN(2412, 0),
0097 CHAN(2417, 1),
0098 CHAN(2422, 2),
0099 CHAN(2427, 3),
0100 CHAN(2432, 4),
0101 CHAN(2437, 5),
0102 CHAN(2442, 6),
0103 CHAN(2447, 7),
0104 CHAN(2452, 8),
0105 CHAN(2457, 9),
0106 CHAN(2462, 10),
0107 CHAN(2467, 11),
0108 CHAN(2472, 12),
0109 CHAN(2484, 13),
0110 };
0111
0112 static struct ieee80211_channel carl9170_5ghz_chantable[] = {
0113 CHAN(4920, 14),
0114 CHAN(4940, 15),
0115 CHAN(4960, 16),
0116 CHAN(4980, 17),
0117 CHAN(5040, 18),
0118 CHAN(5060, 19),
0119 CHAN(5080, 20),
0120 CHAN(5180, 21),
0121 CHAN(5200, 22),
0122 CHAN(5220, 23),
0123 CHAN(5240, 24),
0124 CHAN(5260, 25),
0125 CHAN(5280, 26),
0126 CHAN(5300, 27),
0127 CHAN(5320, 28),
0128 CHAN(5500, 29),
0129 CHAN(5520, 30),
0130 CHAN(5540, 31),
0131 CHAN(5560, 32),
0132 CHAN(5580, 33),
0133 CHAN(5600, 34),
0134 CHAN(5620, 35),
0135 CHAN(5640, 36),
0136 CHAN(5660, 37),
0137 CHAN(5680, 38),
0138 CHAN(5700, 39),
0139 CHAN(5745, 40),
0140 CHAN(5765, 41),
0141 CHAN(5785, 42),
0142 CHAN(5805, 43),
0143 CHAN(5825, 44),
0144 CHAN(5170, 45),
0145 CHAN(5190, 46),
0146 CHAN(5210, 47),
0147 CHAN(5230, 48),
0148 };
0149 #undef CHAN
0150
0151 #define CARL9170_HT_CAP \
0152 { \
0153 .ht_supported = true, \
0154 .cap = IEEE80211_HT_CAP_MAX_AMSDU | \
0155 IEEE80211_HT_CAP_SUP_WIDTH_20_40 | \
0156 IEEE80211_HT_CAP_SGI_40 | \
0157 IEEE80211_HT_CAP_DSSSCCK40 | \
0158 IEEE80211_HT_CAP_SM_PS, \
0159 .ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K, \
0160 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_8, \
0161 .mcs = { \
0162 .rx_mask = { 0xff, 0xff, 0, 0, 0x1, 0, 0, 0, 0, 0, }, \
0163 .rx_highest = cpu_to_le16(300), \
0164 .tx_params = IEEE80211_HT_MCS_TX_DEFINED, \
0165 }, \
0166 }
0167
0168 static struct ieee80211_supported_band carl9170_band_2GHz = {
0169 .channels = carl9170_2ghz_chantable,
0170 .n_channels = ARRAY_SIZE(carl9170_2ghz_chantable),
0171 .bitrates = carl9170_g_ratetable,
0172 .n_bitrates = carl9170_g_ratetable_size,
0173 .ht_cap = CARL9170_HT_CAP,
0174 };
0175
0176 static struct ieee80211_supported_band carl9170_band_5GHz = {
0177 .channels = carl9170_5ghz_chantable,
0178 .n_channels = ARRAY_SIZE(carl9170_5ghz_chantable),
0179 .bitrates = carl9170_a_ratetable,
0180 .n_bitrates = carl9170_a_ratetable_size,
0181 .ht_cap = CARL9170_HT_CAP,
0182 };
0183
0184 static void carl9170_ampdu_gc(struct ar9170 *ar)
0185 {
0186 struct carl9170_sta_tid *tid_info;
0187 LIST_HEAD(tid_gc);
0188
0189 rcu_read_lock();
0190 list_for_each_entry_rcu(tid_info, &ar->tx_ampdu_list, list) {
0191 spin_lock_bh(&ar->tx_ampdu_list_lock);
0192 if (tid_info->state == CARL9170_TID_STATE_SHUTDOWN) {
0193 tid_info->state = CARL9170_TID_STATE_KILLED;
0194 list_del_rcu(&tid_info->list);
0195 ar->tx_ampdu_list_len--;
0196 list_add_tail(&tid_info->tmp_list, &tid_gc);
0197 }
0198 spin_unlock_bh(&ar->tx_ampdu_list_lock);
0199
0200 }
0201 rcu_assign_pointer(ar->tx_ampdu_iter, tid_info);
0202 rcu_read_unlock();
0203
0204 synchronize_rcu();
0205
0206 while (!list_empty(&tid_gc)) {
0207 struct sk_buff *skb;
0208 tid_info = list_first_entry(&tid_gc, struct carl9170_sta_tid,
0209 tmp_list);
0210
0211 while ((skb = __skb_dequeue(&tid_info->queue)))
0212 carl9170_tx_status(ar, skb, false);
0213
0214 list_del_init(&tid_info->tmp_list);
0215 kfree(tid_info);
0216 }
0217 }
0218
0219 static void carl9170_flush(struct ar9170 *ar, bool drop_queued)
0220 {
0221 if (drop_queued) {
0222 int i;
0223
0224
0225
0226
0227
0228
0229 for (i = 0; i < ar->hw->queues; i++) {
0230 struct sk_buff *skb;
0231
0232 while ((skb = skb_dequeue(&ar->tx_pending[i]))) {
0233 struct ieee80211_tx_info *info;
0234
0235 info = IEEE80211_SKB_CB(skb);
0236 if (info->flags & IEEE80211_TX_CTL_AMPDU)
0237 atomic_dec(&ar->tx_ampdu_upload);
0238
0239 carl9170_tx_status(ar, skb, false);
0240 }
0241 }
0242 }
0243
0244
0245 if (atomic_read(&ar->tx_total_queued))
0246 WARN_ON(wait_for_completion_timeout(&ar->tx_flush, HZ) == 0);
0247 }
0248
0249 static void carl9170_flush_ba(struct ar9170 *ar)
0250 {
0251 struct sk_buff_head free;
0252 struct carl9170_sta_tid *tid_info;
0253 struct sk_buff *skb;
0254
0255 __skb_queue_head_init(&free);
0256
0257 rcu_read_lock();
0258 spin_lock_bh(&ar->tx_ampdu_list_lock);
0259 list_for_each_entry_rcu(tid_info, &ar->tx_ampdu_list, list) {
0260 if (tid_info->state > CARL9170_TID_STATE_SUSPEND) {
0261 tid_info->state = CARL9170_TID_STATE_SUSPEND;
0262
0263 spin_lock(&tid_info->lock);
0264 while ((skb = __skb_dequeue(&tid_info->queue)))
0265 __skb_queue_tail(&free, skb);
0266 spin_unlock(&tid_info->lock);
0267 }
0268 }
0269 spin_unlock_bh(&ar->tx_ampdu_list_lock);
0270 rcu_read_unlock();
0271
0272 while ((skb = __skb_dequeue(&free)))
0273 carl9170_tx_status(ar, skb, false);
0274 }
0275
0276 static void carl9170_zap_queues(struct ar9170 *ar)
0277 {
0278 struct carl9170_vif_info *cvif;
0279 unsigned int i;
0280
0281 carl9170_ampdu_gc(ar);
0282
0283 carl9170_flush_ba(ar);
0284 carl9170_flush(ar, true);
0285
0286 for (i = 0; i < ar->hw->queues; i++) {
0287 spin_lock_bh(&ar->tx_status[i].lock);
0288 while (!skb_queue_empty(&ar->tx_status[i])) {
0289 struct sk_buff *skb;
0290
0291 skb = skb_peek(&ar->tx_status[i]);
0292 carl9170_tx_get_skb(skb);
0293 spin_unlock_bh(&ar->tx_status[i].lock);
0294 carl9170_tx_drop(ar, skb);
0295 spin_lock_bh(&ar->tx_status[i].lock);
0296 carl9170_tx_put_skb(skb);
0297 }
0298 spin_unlock_bh(&ar->tx_status[i].lock);
0299 }
0300
0301 BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_SOFT < 1);
0302 BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_HARD < CARL9170_NUM_TX_LIMIT_SOFT);
0303 BUILD_BUG_ON(CARL9170_NUM_TX_LIMIT_HARD >= CARL9170_BAW_BITS);
0304
0305
0306 memset(&ar->tx_stats, 0, sizeof(ar->tx_stats));
0307 for (i = 0; i < ar->hw->queues; i++)
0308 ar->tx_stats[i].limit = CARL9170_NUM_TX_LIMIT_HARD;
0309
0310 bitmap_zero(ar->mem_bitmap, ar->fw.mem_blocks);
0311
0312 rcu_read_lock();
0313 list_for_each_entry_rcu(cvif, &ar->vif_list, list) {
0314 spin_lock_bh(&ar->beacon_lock);
0315 dev_kfree_skb_any(cvif->beacon);
0316 cvif->beacon = NULL;
0317 spin_unlock_bh(&ar->beacon_lock);
0318 }
0319 rcu_read_unlock();
0320
0321 atomic_set(&ar->tx_ampdu_upload, 0);
0322 atomic_set(&ar->tx_ampdu_scheduler, 0);
0323 atomic_set(&ar->tx_total_pending, 0);
0324 atomic_set(&ar->tx_total_queued, 0);
0325 atomic_set(&ar->mem_free_blocks, ar->fw.mem_blocks);
0326 }
0327
0328 #define CARL9170_FILL_QUEUE(queue, ai_fs, cwmin, cwmax, _txop) \
0329 do { \
0330 queue.aifs = ai_fs; \
0331 queue.cw_min = cwmin; \
0332 queue.cw_max = cwmax; \
0333 queue.txop = _txop; \
0334 } while (0)
0335
0336 static int carl9170_op_start(struct ieee80211_hw *hw)
0337 {
0338 struct ar9170 *ar = hw->priv;
0339 int err, i;
0340
0341 mutex_lock(&ar->mutex);
0342
0343 carl9170_zap_queues(ar);
0344
0345
0346 CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_VO], 2, 3, 7, 47);
0347 CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_VI], 2, 7, 15, 94);
0348 CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_BE], 3, 15, 1023, 0);
0349 CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_BK], 7, 15, 1023, 0);
0350 CARL9170_FILL_QUEUE(ar->edcf[AR9170_TXQ_SPECIAL], 2, 3, 7, 0);
0351
0352 ar->current_factor = ar->current_density = -1;
0353
0354 ar->usedkeys = 1;
0355 ar->filter_state = 0;
0356 ar->ps.last_action = jiffies;
0357 ar->ps.last_slept = jiffies;
0358 ar->erp_mode = CARL9170_ERP_AUTO;
0359
0360
0361
0362
0363 ar->disable_offload = modparam_nohwcrypt |
0364 ar->fw.disable_offload_fw;
0365 ar->rx_software_decryption = ar->disable_offload;
0366
0367 for (i = 0; i < ar->hw->queues; i++) {
0368 ar->queue_stop_timeout[i] = jiffies;
0369 ar->max_queue_stop_timeout[i] = 0;
0370 }
0371
0372 atomic_set(&ar->mem_allocs, 0);
0373
0374 err = carl9170_usb_open(ar);
0375 if (err)
0376 goto out;
0377
0378 err = carl9170_init_mac(ar);
0379 if (err)
0380 goto out;
0381
0382 err = carl9170_set_qos(ar);
0383 if (err)
0384 goto out;
0385
0386 if (ar->fw.rx_filter) {
0387 err = carl9170_rx_filter(ar, CARL9170_RX_FILTER_OTHER_RA |
0388 CARL9170_RX_FILTER_CTL_OTHER | CARL9170_RX_FILTER_BAD);
0389 if (err)
0390 goto out;
0391 }
0392
0393 err = carl9170_write_reg(ar, AR9170_MAC_REG_DMA_TRIGGER,
0394 AR9170_DMA_TRIGGER_RXQ);
0395 if (err)
0396 goto out;
0397
0398
0399 for (i = 0; i < AR9170_CAM_MAX_USER + 4; i++) {
0400 err = carl9170_upload_key(ar, i, NULL, AR9170_ENC_ALG_NONE,
0401 0, NULL, 0);
0402 if (err)
0403 goto out;
0404
0405 err = carl9170_upload_key(ar, i, NULL, AR9170_ENC_ALG_NONE,
0406 1, NULL, 0);
0407 if (err)
0408 goto out;
0409
0410 if (i < AR9170_CAM_MAX_USER) {
0411 err = carl9170_disable_key(ar, i);
0412 if (err)
0413 goto out;
0414 }
0415 }
0416
0417 carl9170_set_state_when(ar, CARL9170_IDLE, CARL9170_STARTED);
0418
0419 ieee80211_queue_delayed_work(ar->hw, &ar->stat_work,
0420 round_jiffies(msecs_to_jiffies(CARL9170_STAT_WORK)));
0421
0422 ieee80211_wake_queues(ar->hw);
0423 err = 0;
0424
0425 out:
0426 mutex_unlock(&ar->mutex);
0427 return err;
0428 }
0429
0430 static void carl9170_cancel_worker(struct ar9170 *ar)
0431 {
0432 cancel_delayed_work_sync(&ar->stat_work);
0433 cancel_delayed_work_sync(&ar->tx_janitor);
0434 #ifdef CONFIG_CARL9170_LEDS
0435 cancel_delayed_work_sync(&ar->led_work);
0436 #endif
0437 cancel_work_sync(&ar->ps_work);
0438 cancel_work_sync(&ar->ping_work);
0439 cancel_work_sync(&ar->ampdu_work);
0440 }
0441
0442 static void carl9170_op_stop(struct ieee80211_hw *hw)
0443 {
0444 struct ar9170 *ar = hw->priv;
0445
0446 carl9170_set_state_when(ar, CARL9170_STARTED, CARL9170_IDLE);
0447
0448 ieee80211_stop_queues(ar->hw);
0449
0450 mutex_lock(&ar->mutex);
0451 if (IS_ACCEPTING_CMD(ar)) {
0452 RCU_INIT_POINTER(ar->beacon_iter, NULL);
0453
0454 carl9170_led_set_state(ar, 0);
0455
0456
0457 carl9170_write_reg(ar, AR9170_MAC_REG_DMA_TRIGGER, 0);
0458 carl9170_usb_stop(ar);
0459 }
0460
0461 carl9170_zap_queues(ar);
0462 mutex_unlock(&ar->mutex);
0463
0464 carl9170_cancel_worker(ar);
0465 }
0466
0467 static void carl9170_restart_work(struct work_struct *work)
0468 {
0469 struct ar9170 *ar = container_of(work, struct ar9170,
0470 restart_work);
0471 int err = -EIO;
0472
0473 ar->usedkeys = 0;
0474 ar->filter_state = 0;
0475 carl9170_cancel_worker(ar);
0476
0477 mutex_lock(&ar->mutex);
0478 if (!ar->force_usb_reset) {
0479 err = carl9170_usb_restart(ar);
0480 if (net_ratelimit()) {
0481 if (err)
0482 dev_err(&ar->udev->dev, "Failed to restart device (%d).\n", err);
0483 else
0484 dev_info(&ar->udev->dev, "device restarted successfully.\n");
0485 }
0486 }
0487 carl9170_zap_queues(ar);
0488 mutex_unlock(&ar->mutex);
0489
0490 if (!err && !ar->force_usb_reset) {
0491 ar->restart_counter++;
0492 atomic_set(&ar->pending_restarts, 0);
0493
0494 ieee80211_restart_hw(ar->hw);
0495 } else {
0496
0497
0498
0499
0500
0501
0502 carl9170_usb_reset(ar);
0503 }
0504 }
0505
0506 void carl9170_restart(struct ar9170 *ar, const enum carl9170_restart_reasons r)
0507 {
0508 carl9170_set_state_when(ar, CARL9170_STARTED, CARL9170_IDLE);
0509
0510
0511
0512
0513
0514
0515 if (atomic_inc_return(&ar->pending_restarts) > 1) {
0516 dev_dbg(&ar->udev->dev, "ignoring restart (%d)\n", r);
0517 return;
0518 }
0519
0520 ieee80211_stop_queues(ar->hw);
0521
0522 dev_err(&ar->udev->dev, "restart device (%d)\n", r);
0523
0524 if (!WARN_ON(r == CARL9170_RR_NO_REASON) ||
0525 !WARN_ON(r >= __CARL9170_RR_LAST))
0526 ar->last_reason = r;
0527
0528 if (!ar->registered)
0529 return;
0530
0531 if (!IS_ACCEPTING_CMD(ar) || ar->needs_full_reset)
0532 ar->force_usb_reset = true;
0533
0534 ieee80211_queue_work(ar->hw, &ar->restart_work);
0535
0536
0537
0538
0539
0540
0541 }
0542
0543 static void carl9170_ping_work(struct work_struct *work)
0544 {
0545 struct ar9170 *ar = container_of(work, struct ar9170, ping_work);
0546 int err;
0547
0548 if (!IS_STARTED(ar))
0549 return;
0550
0551 mutex_lock(&ar->mutex);
0552 err = carl9170_echo_test(ar, 0xdeadbeef);
0553 if (err)
0554 carl9170_restart(ar, CARL9170_RR_UNRESPONSIVE_DEVICE);
0555 mutex_unlock(&ar->mutex);
0556 }
0557
0558 static int carl9170_init_interface(struct ar9170 *ar,
0559 struct ieee80211_vif *vif)
0560 {
0561 struct ath_common *common = &ar->common;
0562 int err;
0563
0564 if (!vif) {
0565 WARN_ON_ONCE(IS_STARTED(ar));
0566 return 0;
0567 }
0568
0569 memcpy(common->macaddr, vif->addr, ETH_ALEN);
0570
0571
0572
0573
0574
0575
0576
0577
0578
0579
0580
0581 ar->disable_offload |= ((vif->type != NL80211_IFTYPE_STATION) &&
0582 (vif->type != NL80211_IFTYPE_AP));
0583
0584
0585
0586
0587
0588
0589 ar->disable_offload |= vif->p2p;
0590
0591 ar->rx_software_decryption = ar->disable_offload;
0592
0593 err = carl9170_set_operating_mode(ar);
0594 return err;
0595 }
0596
0597 static int carl9170_op_add_interface(struct ieee80211_hw *hw,
0598 struct ieee80211_vif *vif)
0599 {
0600 struct carl9170_vif_info *vif_priv = (void *) vif->drv_priv;
0601 struct ieee80211_vif *main_vif, *old_main = NULL;
0602 struct ar9170 *ar = hw->priv;
0603 int vif_id = -1, err = 0;
0604
0605 mutex_lock(&ar->mutex);
0606 rcu_read_lock();
0607 if (vif_priv->active) {
0608
0609
0610
0611
0612 vif_id = vif_priv->id;
0613 vif_priv->enable_beacon = false;
0614
0615 spin_lock_bh(&ar->beacon_lock);
0616 dev_kfree_skb_any(vif_priv->beacon);
0617 vif_priv->beacon = NULL;
0618 spin_unlock_bh(&ar->beacon_lock);
0619
0620 goto init;
0621 }
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631
0632 main_vif = carl9170_get_main_vif(ar);
0633
0634 if (main_vif) {
0635 switch (main_vif->type) {
0636 case NL80211_IFTYPE_STATION:
0637 if (vif->type == NL80211_IFTYPE_STATION)
0638 break;
0639
0640 err = -EBUSY;
0641 rcu_read_unlock();
0642
0643 goto unlock;
0644
0645 case NL80211_IFTYPE_MESH_POINT:
0646 case NL80211_IFTYPE_AP:
0647 if ((vif->type == NL80211_IFTYPE_STATION) ||
0648 (vif->type == NL80211_IFTYPE_AP) ||
0649 (vif->type == NL80211_IFTYPE_MESH_POINT))
0650 break;
0651
0652 err = -EBUSY;
0653 rcu_read_unlock();
0654 goto unlock;
0655
0656 default:
0657 rcu_read_unlock();
0658 goto unlock;
0659 }
0660 }
0661
0662 vif_id = bitmap_find_free_region(&ar->vif_bitmap, ar->fw.vif_num, 0);
0663
0664 if (vif_id < 0) {
0665 rcu_read_unlock();
0666
0667 err = -ENOSPC;
0668 goto unlock;
0669 }
0670
0671 BUG_ON(ar->vif_priv[vif_id].id != vif_id);
0672
0673 vif_priv->active = true;
0674 vif_priv->id = vif_id;
0675 vif_priv->enable_beacon = false;
0676 ar->vifs++;
0677 if (old_main) {
0678
0679
0680
0681
0682 list_add_rcu(&vif_priv->list, &ar->vif_list);
0683 } else {
0684
0685
0686
0687 list_add_tail_rcu(&vif_priv->list, &ar->vif_list);
0688 }
0689 rcu_assign_pointer(ar->vif_priv[vif_id].vif, vif);
0690
0691 init:
0692 main_vif = carl9170_get_main_vif(ar);
0693
0694 if (main_vif == vif) {
0695 rcu_assign_pointer(ar->beacon_iter, vif_priv);
0696 rcu_read_unlock();
0697
0698 if (old_main) {
0699 struct carl9170_vif_info *old_main_priv =
0700 (void *) old_main->drv_priv;
0701
0702
0703
0704
0705
0706 err = carl9170_mod_virtual_mac(ar, old_main_priv->id,
0707 old_main->addr);
0708 if (err)
0709 goto unlock;
0710 }
0711
0712 err = carl9170_init_interface(ar, vif);
0713 if (err)
0714 goto unlock;
0715 } else {
0716 rcu_read_unlock();
0717 err = carl9170_mod_virtual_mac(ar, vif_id, vif->addr);
0718
0719 if (err)
0720 goto unlock;
0721 }
0722
0723 if (ar->fw.tx_seq_table) {
0724 err = carl9170_write_reg(ar, ar->fw.tx_seq_table + vif_id * 4,
0725 0);
0726 if (err)
0727 goto unlock;
0728 }
0729
0730 unlock:
0731 if (err && (vif_id >= 0)) {
0732 vif_priv->active = false;
0733 bitmap_release_region(&ar->vif_bitmap, vif_id, 0);
0734 ar->vifs--;
0735 RCU_INIT_POINTER(ar->vif_priv[vif_id].vif, NULL);
0736 list_del_rcu(&vif_priv->list);
0737 mutex_unlock(&ar->mutex);
0738 synchronize_rcu();
0739 } else {
0740 if (ar->vifs > 1)
0741 ar->ps.off_override |= PS_OFF_VIF;
0742
0743 mutex_unlock(&ar->mutex);
0744 }
0745
0746 return err;
0747 }
0748
0749 static void carl9170_op_remove_interface(struct ieee80211_hw *hw,
0750 struct ieee80211_vif *vif)
0751 {
0752 struct carl9170_vif_info *vif_priv = (void *) vif->drv_priv;
0753 struct ieee80211_vif *main_vif;
0754 struct ar9170 *ar = hw->priv;
0755 unsigned int id;
0756
0757 mutex_lock(&ar->mutex);
0758
0759 if (WARN_ON_ONCE(!vif_priv->active))
0760 goto unlock;
0761
0762 ar->vifs--;
0763
0764 rcu_read_lock();
0765 main_vif = carl9170_get_main_vif(ar);
0766
0767 id = vif_priv->id;
0768
0769 vif_priv->active = false;
0770 WARN_ON(vif_priv->enable_beacon);
0771 vif_priv->enable_beacon = false;
0772 list_del_rcu(&vif_priv->list);
0773 RCU_INIT_POINTER(ar->vif_priv[id].vif, NULL);
0774
0775 if (vif == main_vif) {
0776 rcu_read_unlock();
0777
0778 if (ar->vifs) {
0779 WARN_ON(carl9170_init_interface(ar,
0780 carl9170_get_main_vif(ar)));
0781 } else {
0782 carl9170_set_operating_mode(ar);
0783 }
0784 } else {
0785 rcu_read_unlock();
0786
0787 WARN_ON(carl9170_mod_virtual_mac(ar, id, NULL));
0788 }
0789
0790 carl9170_update_beacon(ar, false);
0791 carl9170_flush_cab(ar, id);
0792
0793 spin_lock_bh(&ar->beacon_lock);
0794 dev_kfree_skb_any(vif_priv->beacon);
0795 vif_priv->beacon = NULL;
0796 spin_unlock_bh(&ar->beacon_lock);
0797
0798 bitmap_release_region(&ar->vif_bitmap, id, 0);
0799
0800 carl9170_set_beacon_timers(ar);
0801
0802 if (ar->vifs == 1)
0803 ar->ps.off_override &= ~PS_OFF_VIF;
0804
0805 unlock:
0806 mutex_unlock(&ar->mutex);
0807
0808 synchronize_rcu();
0809 }
0810
0811 void carl9170_ps_check(struct ar9170 *ar)
0812 {
0813 ieee80211_queue_work(ar->hw, &ar->ps_work);
0814 }
0815
0816
0817 static int carl9170_ps_update(struct ar9170 *ar)
0818 {
0819 bool ps = false;
0820 int err = 0;
0821
0822 if (!ar->ps.off_override)
0823 ps = (ar->hw->conf.flags & IEEE80211_CONF_PS);
0824
0825 if (ps != ar->ps.state) {
0826 err = carl9170_powersave(ar, ps);
0827 if (err)
0828 return err;
0829
0830 if (ar->ps.state && !ps) {
0831 ar->ps.sleep_ms = jiffies_to_msecs(jiffies -
0832 ar->ps.last_action);
0833 }
0834
0835 if (ps)
0836 ar->ps.last_slept = jiffies;
0837
0838 ar->ps.last_action = jiffies;
0839 ar->ps.state = ps;
0840 }
0841
0842 return 0;
0843 }
0844
0845 static void carl9170_ps_work(struct work_struct *work)
0846 {
0847 struct ar9170 *ar = container_of(work, struct ar9170,
0848 ps_work);
0849 mutex_lock(&ar->mutex);
0850 if (IS_STARTED(ar))
0851 WARN_ON_ONCE(carl9170_ps_update(ar) != 0);
0852 mutex_unlock(&ar->mutex);
0853 }
0854
0855 static int carl9170_update_survey(struct ar9170 *ar, bool flush, bool noise)
0856 {
0857 int err;
0858
0859 if (noise) {
0860 err = carl9170_get_noisefloor(ar);
0861 if (err)
0862 return err;
0863 }
0864
0865 if (ar->fw.hw_counters) {
0866 err = carl9170_collect_tally(ar);
0867 if (err)
0868 return err;
0869 }
0870
0871 if (flush)
0872 memset(&ar->tally, 0, sizeof(ar->tally));
0873
0874 return 0;
0875 }
0876
0877 static void carl9170_stat_work(struct work_struct *work)
0878 {
0879 struct ar9170 *ar = container_of(work, struct ar9170, stat_work.work);
0880 int err;
0881
0882 mutex_lock(&ar->mutex);
0883 err = carl9170_update_survey(ar, false, true);
0884 mutex_unlock(&ar->mutex);
0885
0886 if (err)
0887 return;
0888
0889 ieee80211_queue_delayed_work(ar->hw, &ar->stat_work,
0890 round_jiffies(msecs_to_jiffies(CARL9170_STAT_WORK)));
0891 }
0892
0893 static int carl9170_op_config(struct ieee80211_hw *hw, u32 changed)
0894 {
0895 struct ar9170 *ar = hw->priv;
0896 int err = 0;
0897
0898 mutex_lock(&ar->mutex);
0899 if (changed & IEEE80211_CONF_CHANGE_LISTEN_INTERVAL) {
0900
0901 err = 0;
0902 }
0903
0904 if (changed & IEEE80211_CONF_CHANGE_PS) {
0905 err = carl9170_ps_update(ar);
0906 if (err)
0907 goto out;
0908 }
0909
0910 if (changed & IEEE80211_CONF_CHANGE_SMPS) {
0911
0912 err = 0;
0913 }
0914
0915 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
0916 enum nl80211_channel_type channel_type =
0917 cfg80211_get_chandef_type(&hw->conf.chandef);
0918
0919
0920 err = carl9170_set_slot_time(ar);
0921 if (err)
0922 goto out;
0923
0924 err = carl9170_update_survey(ar, true, false);
0925 if (err)
0926 goto out;
0927
0928 err = carl9170_set_channel(ar, hw->conf.chandef.chan,
0929 channel_type);
0930 if (err)
0931 goto out;
0932
0933 err = carl9170_update_survey(ar, false, true);
0934 if (err)
0935 goto out;
0936
0937 err = carl9170_set_dyn_sifs_ack(ar);
0938 if (err)
0939 goto out;
0940
0941 err = carl9170_set_rts_cts_rate(ar);
0942 if (err)
0943 goto out;
0944 }
0945
0946 if (changed & IEEE80211_CONF_CHANGE_POWER) {
0947 err = carl9170_set_mac_tpc(ar, ar->hw->conf.chandef.chan);
0948 if (err)
0949 goto out;
0950 }
0951
0952 out:
0953 mutex_unlock(&ar->mutex);
0954 return err;
0955 }
0956
0957 static u64 carl9170_op_prepare_multicast(struct ieee80211_hw *hw,
0958 struct netdev_hw_addr_list *mc_list)
0959 {
0960 struct netdev_hw_addr *ha;
0961 u64 mchash;
0962
0963
0964 mchash = 1ULL << (0xff >> 2);
0965
0966 netdev_hw_addr_list_for_each(ha, mc_list)
0967 mchash |= 1ULL << (ha->addr[5] >> 2);
0968
0969 return mchash;
0970 }
0971
0972 static void carl9170_op_configure_filter(struct ieee80211_hw *hw,
0973 unsigned int changed_flags,
0974 unsigned int *new_flags,
0975 u64 multicast)
0976 {
0977 struct ar9170 *ar = hw->priv;
0978
0979
0980 *new_flags &= FIF_ALLMULTI | ar->rx_filter_caps;
0981
0982 if (!IS_ACCEPTING_CMD(ar))
0983 return;
0984
0985 mutex_lock(&ar->mutex);
0986
0987 ar->filter_state = *new_flags;
0988
0989
0990
0991
0992
0993 if (*new_flags & FIF_ALLMULTI)
0994 multicast = ~0ULL;
0995
0996 if (multicast != ar->cur_mc_hash)
0997 WARN_ON(carl9170_update_multicast(ar, multicast));
0998
0999 if (changed_flags & FIF_OTHER_BSS) {
1000 ar->sniffer_enabled = !!(*new_flags & FIF_OTHER_BSS);
1001
1002 WARN_ON(carl9170_set_operating_mode(ar));
1003 }
1004
1005 if (ar->fw.rx_filter && changed_flags & ar->rx_filter_caps) {
1006 u32 rx_filter = 0;
1007
1008 if (!ar->fw.ba_filter)
1009 rx_filter |= CARL9170_RX_FILTER_CTL_OTHER;
1010
1011 if (!(*new_flags & (FIF_FCSFAIL | FIF_PLCPFAIL)))
1012 rx_filter |= CARL9170_RX_FILTER_BAD;
1013
1014 if (!(*new_flags & FIF_CONTROL))
1015 rx_filter |= CARL9170_RX_FILTER_CTL_OTHER;
1016
1017 if (!(*new_flags & FIF_PSPOLL))
1018 rx_filter |= CARL9170_RX_FILTER_CTL_PSPOLL;
1019
1020 if (!(*new_flags & FIF_OTHER_BSS)) {
1021 rx_filter |= CARL9170_RX_FILTER_OTHER_RA;
1022 rx_filter |= CARL9170_RX_FILTER_DECRY_FAIL;
1023 }
1024
1025 WARN_ON(carl9170_rx_filter(ar, rx_filter));
1026 }
1027
1028 mutex_unlock(&ar->mutex);
1029 }
1030
1031
1032 static void carl9170_op_bss_info_changed(struct ieee80211_hw *hw,
1033 struct ieee80211_vif *vif,
1034 struct ieee80211_bss_conf *bss_conf,
1035 u64 changed)
1036 {
1037 struct ar9170 *ar = hw->priv;
1038 struct ath_common *common = &ar->common;
1039 int err = 0;
1040 struct carl9170_vif_info *vif_priv;
1041 struct ieee80211_vif *main_vif;
1042
1043 mutex_lock(&ar->mutex);
1044 vif_priv = (void *) vif->drv_priv;
1045 main_vif = carl9170_get_main_vif(ar);
1046 if (WARN_ON(!main_vif))
1047 goto out;
1048
1049 if (changed & BSS_CHANGED_BEACON_ENABLED) {
1050 struct carl9170_vif_info *iter;
1051 int i = 0;
1052
1053 vif_priv->enable_beacon = bss_conf->enable_beacon;
1054 rcu_read_lock();
1055 list_for_each_entry_rcu(iter, &ar->vif_list, list) {
1056 if (iter->active && iter->enable_beacon)
1057 i++;
1058
1059 }
1060 rcu_read_unlock();
1061
1062 ar->beacon_enabled = i;
1063 }
1064
1065 if (changed & BSS_CHANGED_BEACON) {
1066 err = carl9170_update_beacon(ar, false);
1067 if (err)
1068 goto out;
1069 }
1070
1071 if (changed & (BSS_CHANGED_BEACON_ENABLED | BSS_CHANGED_BEACON |
1072 BSS_CHANGED_BEACON_INT)) {
1073
1074 if (main_vif != vif) {
1075 bss_conf->beacon_int = main_vif->bss_conf.beacon_int;
1076 bss_conf->dtim_period = main_vif->bss_conf.dtim_period;
1077 }
1078
1079
1080
1081
1082
1083 if (vif->type != NL80211_IFTYPE_STATION &&
1084 (bss_conf->beacon_int * bss_conf->dtim_period >=
1085 (CARL9170_QUEUE_STUCK_TIMEOUT / 2))) {
1086 err = -EINVAL;
1087 goto out;
1088 }
1089
1090 err = carl9170_set_beacon_timers(ar);
1091 if (err)
1092 goto out;
1093 }
1094
1095 if (changed & BSS_CHANGED_HT) {
1096
1097 err = 0;
1098 if (err)
1099 goto out;
1100 }
1101
1102 if (main_vif != vif)
1103 goto out;
1104
1105
1106
1107
1108
1109
1110 if (changed & BSS_CHANGED_BSSID) {
1111 memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1112 err = carl9170_set_operating_mode(ar);
1113 if (err)
1114 goto out;
1115 }
1116
1117 if (changed & BSS_CHANGED_ASSOC) {
1118 ar->common.curaid = vif->cfg.aid;
1119 err = carl9170_set_beacon_timers(ar);
1120 if (err)
1121 goto out;
1122 }
1123
1124 if (changed & BSS_CHANGED_ERP_SLOT) {
1125 err = carl9170_set_slot_time(ar);
1126 if (err)
1127 goto out;
1128 }
1129
1130 if (changed & BSS_CHANGED_BASIC_RATES) {
1131 err = carl9170_set_mac_rates(ar);
1132 if (err)
1133 goto out;
1134 }
1135
1136 out:
1137 WARN_ON_ONCE(err && IS_STARTED(ar));
1138 mutex_unlock(&ar->mutex);
1139 }
1140
1141 static u64 carl9170_op_get_tsf(struct ieee80211_hw *hw,
1142 struct ieee80211_vif *vif)
1143 {
1144 struct ar9170 *ar = hw->priv;
1145 struct carl9170_tsf_rsp tsf;
1146 int err;
1147
1148 mutex_lock(&ar->mutex);
1149 err = carl9170_exec_cmd(ar, CARL9170_CMD_READ_TSF,
1150 0, NULL, sizeof(tsf), &tsf);
1151 mutex_unlock(&ar->mutex);
1152 if (WARN_ON(err))
1153 return 0;
1154
1155 return le64_to_cpu(tsf.tsf_64);
1156 }
1157
1158 static int carl9170_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1159 struct ieee80211_vif *vif,
1160 struct ieee80211_sta *sta,
1161 struct ieee80211_key_conf *key)
1162 {
1163 struct ar9170 *ar = hw->priv;
1164 int err = 0, i;
1165 u8 ktype;
1166
1167 if (ar->disable_offload || !vif)
1168 return -EOPNOTSUPP;
1169
1170
1171
1172
1173
1174
1175
1176
1177 if (!is_main_vif(ar, vif)) {
1178 mutex_lock(&ar->mutex);
1179 goto err_softw;
1180 }
1181
1182
1183
1184
1185
1186
1187 if ((vif->type != NL80211_IFTYPE_STATION &&
1188 vif->type != NL80211_IFTYPE_ADHOC) &&
1189 !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
1190 return -EOPNOTSUPP;
1191
1192 switch (key->cipher) {
1193 case WLAN_CIPHER_SUITE_WEP40:
1194 ktype = AR9170_ENC_ALG_WEP64;
1195 break;
1196 case WLAN_CIPHER_SUITE_WEP104:
1197 ktype = AR9170_ENC_ALG_WEP128;
1198 break;
1199 case WLAN_CIPHER_SUITE_TKIP:
1200 ktype = AR9170_ENC_ALG_TKIP;
1201 break;
1202 case WLAN_CIPHER_SUITE_CCMP:
1203 ktype = AR9170_ENC_ALG_AESCCMP;
1204 key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
1205 break;
1206 default:
1207 return -EOPNOTSUPP;
1208 }
1209
1210 mutex_lock(&ar->mutex);
1211 if (cmd == SET_KEY) {
1212 if (!IS_STARTED(ar)) {
1213 err = -EOPNOTSUPP;
1214 goto out;
1215 }
1216
1217 if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
1218 sta = NULL;
1219
1220 i = 64 + key->keyidx;
1221 } else {
1222 for (i = 0; i < 64; i++)
1223 if (!(ar->usedkeys & BIT(i)))
1224 break;
1225 if (i == 64)
1226 goto err_softw;
1227 }
1228
1229 key->hw_key_idx = i;
1230
1231 err = carl9170_upload_key(ar, i, sta ? sta->addr : NULL,
1232 ktype, 0, key->key,
1233 min_t(u8, 16, key->keylen));
1234 if (err)
1235 goto out;
1236
1237 if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
1238 err = carl9170_upload_key(ar, i, sta ? sta->addr :
1239 NULL, ktype, 1,
1240 key->key + 16, 16);
1241 if (err)
1242 goto out;
1243
1244
1245
1246
1247
1248 key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
1249 }
1250
1251 if (i < 64)
1252 ar->usedkeys |= BIT(i);
1253
1254 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1255 } else {
1256 if (!IS_STARTED(ar)) {
1257
1258 err = 0;
1259 goto out;
1260 }
1261
1262 if (key->hw_key_idx < 64) {
1263 ar->usedkeys &= ~BIT(key->hw_key_idx);
1264 } else {
1265 err = carl9170_upload_key(ar, key->hw_key_idx, NULL,
1266 AR9170_ENC_ALG_NONE, 0,
1267 NULL, 0);
1268 if (err)
1269 goto out;
1270
1271 if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
1272 err = carl9170_upload_key(ar, key->hw_key_idx,
1273 NULL,
1274 AR9170_ENC_ALG_NONE,
1275 1, NULL, 0);
1276 if (err)
1277 goto out;
1278 }
1279
1280 }
1281
1282 err = carl9170_disable_key(ar, key->hw_key_idx);
1283 if (err)
1284 goto out;
1285 }
1286
1287 out:
1288 mutex_unlock(&ar->mutex);
1289 return err;
1290
1291 err_softw:
1292 if (!ar->rx_software_decryption) {
1293 ar->rx_software_decryption = true;
1294 carl9170_set_operating_mode(ar);
1295 }
1296 mutex_unlock(&ar->mutex);
1297 return -ENOSPC;
1298 }
1299
1300 static int carl9170_op_sta_add(struct ieee80211_hw *hw,
1301 struct ieee80211_vif *vif,
1302 struct ieee80211_sta *sta)
1303 {
1304 struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1305 unsigned int i;
1306
1307 atomic_set(&sta_info->pending_frames, 0);
1308
1309 if (sta->deflink.ht_cap.ht_supported) {
1310 if (sta->deflink.ht_cap.ampdu_density > 6) {
1311
1312
1313
1314
1315
1316 return 0;
1317 }
1318
1319 for (i = 0; i < ARRAY_SIZE(sta_info->agg); i++)
1320 RCU_INIT_POINTER(sta_info->agg[i], NULL);
1321
1322 sta_info->ampdu_max_len = 1 << (3 + sta->deflink.ht_cap.ampdu_factor);
1323 sta_info->ht_sta = true;
1324 }
1325
1326 return 0;
1327 }
1328
1329 static int carl9170_op_sta_remove(struct ieee80211_hw *hw,
1330 struct ieee80211_vif *vif,
1331 struct ieee80211_sta *sta)
1332 {
1333 struct ar9170 *ar = hw->priv;
1334 struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1335 unsigned int i;
1336 bool cleanup = false;
1337
1338 if (sta->deflink.ht_cap.ht_supported) {
1339
1340 sta_info->ht_sta = false;
1341
1342 rcu_read_lock();
1343 for (i = 0; i < ARRAY_SIZE(sta_info->agg); i++) {
1344 struct carl9170_sta_tid *tid_info;
1345
1346 tid_info = rcu_dereference(sta_info->agg[i]);
1347 RCU_INIT_POINTER(sta_info->agg[i], NULL);
1348
1349 if (!tid_info)
1350 continue;
1351
1352 spin_lock_bh(&ar->tx_ampdu_list_lock);
1353 if (tid_info->state > CARL9170_TID_STATE_SHUTDOWN)
1354 tid_info->state = CARL9170_TID_STATE_SHUTDOWN;
1355 spin_unlock_bh(&ar->tx_ampdu_list_lock);
1356 cleanup = true;
1357 }
1358 rcu_read_unlock();
1359
1360 if (cleanup)
1361 carl9170_ampdu_gc(ar);
1362 }
1363
1364 return 0;
1365 }
1366
1367 static int carl9170_op_conf_tx(struct ieee80211_hw *hw,
1368 struct ieee80211_vif *vif,
1369 unsigned int link_id, 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
1382 static 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
1395 static 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 = ¶ms->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_KERNEL);
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
1480 break;
1481
1482 default:
1483 return -EOPNOTSUPP;
1484 }
1485
1486 return 0;
1487 }
1488
1489 #ifdef CONFIG_CARL9170_WPC
1490 static 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 = devm_input_allocate_device(&ar->udev->dev);
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 return err;
1518
1519 ar->wps.pbc = input;
1520 return 0;
1521 }
1522 #endif
1523
1524 #ifdef CONFIG_CARL9170_HWRNG
1525 static int carl9170_rng_get(struct ar9170 *ar)
1526 {
1527
1528 #define RW (CARL9170_MAX_CMD_PAYLOAD_LEN / sizeof(u32))
1529 #define RB (CARL9170_MAX_CMD_PAYLOAD_LEN)
1530
1531 static const __le32 rng_load[RW] = {
1532 [0 ... (RW - 1)] = cpu_to_le32(AR9170_RAND_REG_NUM)};
1533
1534 u32 buf[RW];
1535
1536 unsigned int i, off = 0, transfer, count;
1537 int err;
1538
1539 BUILD_BUG_ON(RB > CARL9170_MAX_CMD_PAYLOAD_LEN);
1540
1541 if (!IS_ACCEPTING_CMD(ar))
1542 return -EAGAIN;
1543
1544 count = ARRAY_SIZE(ar->rng.cache);
1545 while (count) {
1546 err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG,
1547 RB, (u8 *) rng_load,
1548 RB, (u8 *) buf);
1549 if (err)
1550 return err;
1551
1552 transfer = min_t(unsigned int, count, RW);
1553 for (i = 0; i < transfer; i++)
1554 ar->rng.cache[off + i] = buf[i];
1555
1556 off += transfer;
1557 count -= transfer;
1558 }
1559
1560 ar->rng.cache_idx = 0;
1561
1562 #undef RW
1563 #undef RB
1564 return 0;
1565 }
1566
1567 static int carl9170_rng_read(struct hwrng *rng, u32 *data)
1568 {
1569 struct ar9170 *ar = (struct ar9170 *)rng->priv;
1570 int ret = -EIO;
1571
1572 mutex_lock(&ar->mutex);
1573 if (ar->rng.cache_idx >= ARRAY_SIZE(ar->rng.cache)) {
1574 ret = carl9170_rng_get(ar);
1575 if (ret) {
1576 mutex_unlock(&ar->mutex);
1577 return ret;
1578 }
1579 }
1580
1581 *data = ar->rng.cache[ar->rng.cache_idx++];
1582 mutex_unlock(&ar->mutex);
1583
1584 return sizeof(u16);
1585 }
1586
1587 static int carl9170_register_hwrng(struct ar9170 *ar)
1588 {
1589 int err;
1590
1591 snprintf(ar->rng.name, ARRAY_SIZE(ar->rng.name),
1592 "%s_%s", KBUILD_MODNAME, wiphy_name(ar->hw->wiphy));
1593 ar->rng.rng.name = ar->rng.name;
1594 ar->rng.rng.data_read = carl9170_rng_read;
1595 ar->rng.rng.priv = (unsigned long)ar;
1596
1597 err = devm_hwrng_register(&ar->udev->dev, &ar->rng.rng);
1598 if (err) {
1599 dev_err(&ar->udev->dev, "Failed to register the random "
1600 "number generator (%d)\n", err);
1601 return err;
1602 }
1603
1604 return carl9170_rng_get(ar);
1605 }
1606 #endif
1607
1608 static int carl9170_op_get_survey(struct ieee80211_hw *hw, int idx,
1609 struct survey_info *survey)
1610 {
1611 struct ar9170 *ar = hw->priv;
1612 struct ieee80211_channel *chan;
1613 struct ieee80211_supported_band *band;
1614 int err, b, i;
1615
1616 chan = ar->channel;
1617 if (!chan)
1618 return -ENODEV;
1619
1620 if (idx == chan->hw_value) {
1621 mutex_lock(&ar->mutex);
1622 err = carl9170_update_survey(ar, false, true);
1623 mutex_unlock(&ar->mutex);
1624 if (err)
1625 return err;
1626 }
1627
1628 for (b = 0; b < NUM_NL80211_BANDS; b++) {
1629 band = ar->hw->wiphy->bands[b];
1630
1631 if (!band)
1632 continue;
1633
1634 for (i = 0; i < band->n_channels; i++) {
1635 if (band->channels[i].hw_value == idx) {
1636 chan = &band->channels[i];
1637 goto found;
1638 }
1639 }
1640 }
1641 return -ENOENT;
1642
1643 found:
1644 memcpy(survey, &ar->survey[idx], sizeof(*survey));
1645
1646 survey->channel = chan;
1647 survey->filled = SURVEY_INFO_NOISE_DBM;
1648
1649 if (ar->channel == chan)
1650 survey->filled |= SURVEY_INFO_IN_USE;
1651
1652 if (ar->fw.hw_counters) {
1653 survey->filled |= SURVEY_INFO_TIME |
1654 SURVEY_INFO_TIME_BUSY |
1655 SURVEY_INFO_TIME_TX;
1656 }
1657
1658 return 0;
1659 }
1660
1661 static void carl9170_op_flush(struct ieee80211_hw *hw,
1662 struct ieee80211_vif *vif,
1663 u32 queues, bool drop)
1664 {
1665 struct ar9170 *ar = hw->priv;
1666 unsigned int vid;
1667
1668 mutex_lock(&ar->mutex);
1669 for_each_set_bit(vid, &ar->vif_bitmap, ar->fw.vif_num)
1670 carl9170_flush_cab(ar, vid);
1671
1672 carl9170_flush(ar, drop);
1673 mutex_unlock(&ar->mutex);
1674 }
1675
1676 static int carl9170_op_get_stats(struct ieee80211_hw *hw,
1677 struct ieee80211_low_level_stats *stats)
1678 {
1679 struct ar9170 *ar = hw->priv;
1680
1681 memset(stats, 0, sizeof(*stats));
1682 stats->dot11ACKFailureCount = ar->tx_ack_failures;
1683 stats->dot11FCSErrorCount = ar->tx_fcs_errors;
1684 return 0;
1685 }
1686
1687 static void carl9170_op_sta_notify(struct ieee80211_hw *hw,
1688 struct ieee80211_vif *vif,
1689 enum sta_notify_cmd cmd,
1690 struct ieee80211_sta *sta)
1691 {
1692 struct carl9170_sta_info *sta_info = (void *) sta->drv_priv;
1693
1694 switch (cmd) {
1695 case STA_NOTIFY_SLEEP:
1696 sta_info->sleeping = true;
1697 if (atomic_read(&sta_info->pending_frames))
1698 ieee80211_sta_block_awake(hw, sta, true);
1699 break;
1700
1701 case STA_NOTIFY_AWAKE:
1702 sta_info->sleeping = false;
1703 break;
1704 }
1705 }
1706
1707 static bool carl9170_tx_frames_pending(struct ieee80211_hw *hw)
1708 {
1709 struct ar9170 *ar = hw->priv;
1710
1711 return !!atomic_read(&ar->tx_total_queued);
1712 }
1713
1714 static const struct ieee80211_ops carl9170_ops = {
1715 .start = carl9170_op_start,
1716 .stop = carl9170_op_stop,
1717 .tx = carl9170_op_tx,
1718 .flush = carl9170_op_flush,
1719 .add_interface = carl9170_op_add_interface,
1720 .remove_interface = carl9170_op_remove_interface,
1721 .config = carl9170_op_config,
1722 .prepare_multicast = carl9170_op_prepare_multicast,
1723 .configure_filter = carl9170_op_configure_filter,
1724 .conf_tx = carl9170_op_conf_tx,
1725 .bss_info_changed = carl9170_op_bss_info_changed,
1726 .get_tsf = carl9170_op_get_tsf,
1727 .set_key = carl9170_op_set_key,
1728 .sta_add = carl9170_op_sta_add,
1729 .sta_remove = carl9170_op_sta_remove,
1730 .sta_notify = carl9170_op_sta_notify,
1731 .get_survey = carl9170_op_get_survey,
1732 .get_stats = carl9170_op_get_stats,
1733 .ampdu_action = carl9170_op_ampdu_action,
1734 .tx_frames_pending = carl9170_tx_frames_pending,
1735 };
1736
1737 void *carl9170_alloc(size_t priv_size)
1738 {
1739 struct ieee80211_hw *hw;
1740 struct ar9170 *ar;
1741 struct sk_buff *skb;
1742 int i;
1743
1744
1745
1746
1747
1748
1749
1750 skb = __dev_alloc_skb(AR9170_RX_STREAM_MAX_SIZE, GFP_KERNEL);
1751 if (!skb)
1752 goto err_nomem;
1753
1754 hw = ieee80211_alloc_hw(priv_size, &carl9170_ops);
1755 if (!hw)
1756 goto err_nomem;
1757
1758 ar = hw->priv;
1759 ar->hw = hw;
1760 ar->rx_failover = skb;
1761
1762 memset(&ar->rx_plcp, 0, sizeof(struct ar9170_rx_head));
1763 ar->rx_has_plcp = false;
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773 hw->queues = __AR9170_NUM_TXQ;
1774
1775 mutex_init(&ar->mutex);
1776 spin_lock_init(&ar->beacon_lock);
1777 spin_lock_init(&ar->cmd_lock);
1778 spin_lock_init(&ar->tx_stats_lock);
1779 spin_lock_init(&ar->tx_ampdu_list_lock);
1780 spin_lock_init(&ar->mem_lock);
1781 spin_lock_init(&ar->state_lock);
1782 atomic_set(&ar->pending_restarts, 0);
1783 ar->vifs = 0;
1784 for (i = 0; i < ar->hw->queues; i++) {
1785 skb_queue_head_init(&ar->tx_status[i]);
1786 skb_queue_head_init(&ar->tx_pending[i]);
1787
1788 INIT_LIST_HEAD(&ar->bar_list[i]);
1789 spin_lock_init(&ar->bar_list_lock[i]);
1790 }
1791 INIT_WORK(&ar->ps_work, carl9170_ps_work);
1792 INIT_WORK(&ar->ping_work, carl9170_ping_work);
1793 INIT_WORK(&ar->restart_work, carl9170_restart_work);
1794 INIT_WORK(&ar->ampdu_work, carl9170_ampdu_work);
1795 INIT_DELAYED_WORK(&ar->stat_work, carl9170_stat_work);
1796 INIT_DELAYED_WORK(&ar->tx_janitor, carl9170_tx_janitor);
1797 INIT_LIST_HEAD(&ar->tx_ampdu_list);
1798 rcu_assign_pointer(ar->tx_ampdu_iter,
1799 (struct carl9170_sta_tid *) &ar->tx_ampdu_list);
1800
1801 bitmap_zero(&ar->vif_bitmap, ar->fw.vif_num);
1802 INIT_LIST_HEAD(&ar->vif_list);
1803 init_completion(&ar->tx_flush);
1804
1805
1806 hw->wiphy->interface_modes = 0;
1807
1808 ieee80211_hw_set(hw, RX_INCLUDES_FCS);
1809 ieee80211_hw_set(hw, MFP_CAPABLE);
1810 ieee80211_hw_set(hw, REPORTS_TX_ACK_STATUS);
1811 ieee80211_hw_set(hw, SUPPORTS_PS);
1812 ieee80211_hw_set(hw, PS_NULLFUNC_STACK);
1813 ieee80211_hw_set(hw, NEED_DTIM_BEFORE_ASSOC);
1814 ieee80211_hw_set(hw, SUPPORTS_RC_TABLE);
1815 ieee80211_hw_set(hw, SIGNAL_DBM);
1816 ieee80211_hw_set(hw, SUPPORTS_HT_CCK_RATES);
1817
1818 if (!modparam_noht) {
1819
1820
1821
1822
1823 ieee80211_hw_set(hw, AMPDU_AGGREGATION);
1824 }
1825
1826 hw->extra_tx_headroom = sizeof(struct _carl9170_tx_superframe);
1827 hw->sta_data_size = sizeof(struct carl9170_sta_info);
1828 hw->vif_data_size = sizeof(struct carl9170_vif_info);
1829
1830 hw->max_rates = CARL9170_TX_MAX_RATES;
1831 hw->max_rate_tries = CARL9170_TX_USER_RATE_TRIES;
1832
1833 for (i = 0; i < ARRAY_SIZE(ar->noise); i++)
1834 ar->noise[i] = -95;
1835
1836 wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
1837
1838 return ar;
1839
1840 err_nomem:
1841 kfree_skb(skb);
1842 return ERR_PTR(-ENOMEM);
1843 }
1844
1845 static int carl9170_read_eeprom(struct ar9170 *ar)
1846 {
1847 #define RW 8
1848 #define RB (sizeof(u32) * RW)
1849 u8 *eeprom = (void *)&ar->eeprom;
1850 __le32 offsets[RW];
1851 int i, j, err;
1852
1853 BUILD_BUG_ON(sizeof(ar->eeprom) & 3);
1854
1855 BUILD_BUG_ON(RB > CARL9170_MAX_CMD_LEN - 4);
1856 #ifndef __CHECKER__
1857
1858 BUILD_BUG_ON(sizeof(ar->eeprom) % RB);
1859 #endif
1860
1861 for (i = 0; i < sizeof(ar->eeprom) / RB; i++) {
1862 for (j = 0; j < RW; j++)
1863 offsets[j] = cpu_to_le32(AR9170_EEPROM_START +
1864 RB * i + 4 * j);
1865
1866 err = carl9170_exec_cmd(ar, CARL9170_CMD_RREG,
1867 RB, (u8 *) &offsets,
1868 RB, eeprom + RB * i);
1869 if (err)
1870 return err;
1871 }
1872
1873 #undef RW
1874 #undef RB
1875 return 0;
1876 }
1877
1878 static int carl9170_parse_eeprom(struct ar9170 *ar)
1879 {
1880 struct ath_regulatory *regulatory = &ar->common.regulatory;
1881 unsigned int rx_streams, tx_streams, tx_params = 0;
1882 int bands = 0;
1883 int chans = 0;
1884
1885 if (ar->eeprom.length == cpu_to_le16(0xffff))
1886 return -ENODATA;
1887
1888 rx_streams = hweight8(ar->eeprom.rx_mask);
1889 tx_streams = hweight8(ar->eeprom.tx_mask);
1890
1891 if (rx_streams != tx_streams) {
1892 tx_params = IEEE80211_HT_MCS_TX_RX_DIFF;
1893
1894 WARN_ON(!(tx_streams >= 1 && tx_streams <=
1895 IEEE80211_HT_MCS_TX_MAX_STREAMS));
1896
1897 tx_params |= (tx_streams - 1) <<
1898 IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT;
1899
1900 carl9170_band_2GHz.ht_cap.mcs.tx_params |= tx_params;
1901 carl9170_band_5GHz.ht_cap.mcs.tx_params |= tx_params;
1902 }
1903
1904 if (ar->eeprom.operating_flags & AR9170_OPFLAG_2GHZ) {
1905 ar->hw->wiphy->bands[NL80211_BAND_2GHZ] =
1906 &carl9170_band_2GHz;
1907 chans += carl9170_band_2GHz.n_channels;
1908 bands++;
1909 }
1910 if (ar->eeprom.operating_flags & AR9170_OPFLAG_5GHZ) {
1911 ar->hw->wiphy->bands[NL80211_BAND_5GHZ] =
1912 &carl9170_band_5GHz;
1913 chans += carl9170_band_5GHz.n_channels;
1914 bands++;
1915 }
1916
1917 if (!bands)
1918 return -EINVAL;
1919
1920 ar->survey = devm_kcalloc(&ar->udev->dev, chans,
1921 sizeof(struct survey_info), GFP_KERNEL);
1922 if (!ar->survey)
1923 return -ENOMEM;
1924 ar->num_channels = chans;
1925
1926 regulatory->current_rd = le16_to_cpu(ar->eeprom.reg_domain[0]);
1927
1928
1929 SET_IEEE80211_PERM_ADDR(ar->hw, ar->eeprom.mac_address);
1930
1931 return 0;
1932 }
1933
1934 static void carl9170_reg_notifier(struct wiphy *wiphy,
1935 struct regulatory_request *request)
1936 {
1937 struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1938 struct ar9170 *ar = hw->priv;
1939
1940 ath_reg_notifier_apply(wiphy, request, &ar->common.regulatory);
1941 }
1942
1943 int carl9170_register(struct ar9170 *ar)
1944 {
1945 struct ath_regulatory *regulatory = &ar->common.regulatory;
1946 int err = 0, i;
1947
1948 ar->mem_bitmap = devm_bitmap_zalloc(&ar->udev->dev, ar->fw.mem_blocks, GFP_KERNEL);
1949 if (!ar->mem_bitmap)
1950 return -ENOMEM;
1951
1952
1953 err = carl9170_read_eeprom(ar);
1954 if (err)
1955 return err;
1956
1957 err = carl9170_parse_eeprom(ar);
1958 if (err)
1959 return err;
1960
1961 err = ath_regd_init(regulatory, ar->hw->wiphy,
1962 carl9170_reg_notifier);
1963 if (err)
1964 return err;
1965
1966 if (modparam_noht) {
1967 carl9170_band_2GHz.ht_cap.ht_supported = false;
1968 carl9170_band_5GHz.ht_cap.ht_supported = false;
1969 }
1970
1971 for (i = 0; i < ar->fw.vif_num; i++) {
1972 ar->vif_priv[i].id = i;
1973 ar->vif_priv[i].vif = NULL;
1974 }
1975
1976 err = ieee80211_register_hw(ar->hw);
1977 if (err)
1978 return err;
1979
1980
1981 ar->registered = true;
1982
1983 if (!ath_is_world_regd(regulatory))
1984 regulatory_hint(ar->hw->wiphy, regulatory->alpha2);
1985
1986 #ifdef CONFIG_CARL9170_DEBUGFS
1987 carl9170_debugfs_register(ar);
1988 #endif
1989
1990 err = carl9170_led_init(ar);
1991 if (err)
1992 goto err_unreg;
1993
1994 #ifdef CONFIG_CARL9170_LEDS
1995 err = carl9170_led_register(ar);
1996 if (err)
1997 goto err_unreg;
1998 #endif
1999
2000 #ifdef CONFIG_CARL9170_WPC
2001 err = carl9170_register_wps_button(ar);
2002 if (err)
2003 goto err_unreg;
2004 #endif
2005
2006 #ifdef CONFIG_CARL9170_HWRNG
2007 err = carl9170_register_hwrng(ar);
2008 if (err)
2009 goto err_unreg;
2010 #endif
2011
2012 dev_info(&ar->udev->dev, "Atheros AR9170 is registered as '%s'\n",
2013 wiphy_name(ar->hw->wiphy));
2014
2015 return 0;
2016
2017 err_unreg:
2018 carl9170_unregister(ar);
2019 return err;
2020 }
2021
2022 void carl9170_unregister(struct ar9170 *ar)
2023 {
2024 if (!ar->registered)
2025 return;
2026
2027 ar->registered = false;
2028
2029 #ifdef CONFIG_CARL9170_LEDS
2030 carl9170_led_unregister(ar);
2031 #endif
2032
2033 #ifdef CONFIG_CARL9170_DEBUGFS
2034 carl9170_debugfs_unregister(ar);
2035 #endif
2036
2037 carl9170_cancel_worker(ar);
2038 cancel_work_sync(&ar->restart_work);
2039
2040 ieee80211_unregister_hw(ar->hw);
2041 }
2042
2043 void carl9170_free(struct ar9170 *ar)
2044 {
2045 WARN_ON(ar->registered);
2046 WARN_ON(IS_INITIALIZED(ar));
2047
2048 kfree_skb(ar->rx_failover);
2049 ar->rx_failover = NULL;
2050
2051 mutex_destroy(&ar->mutex);
2052
2053 ieee80211_free_hw(ar->hw);
2054 }