0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #include <linux/kernel.h>
0015 #include <linux/module.h>
0016 #include <linux/slab.h>
0017 #include <linux/log2.h>
0018 #include <linux/of.h>
0019 #include <linux/of_net.h>
0020
0021 #include "rt2x00.h"
0022 #include "rt2x00lib.h"
0023
0024
0025
0026
0027 u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev,
0028 struct ieee80211_vif *vif)
0029 {
0030
0031
0032
0033
0034 if (rt2x00dev->intf_sta_count)
0035 return 0;
0036 return vif->addr[5] & (rt2x00dev->ops->max_ap_intf - 1);
0037 }
0038 EXPORT_SYMBOL_GPL(rt2x00lib_get_bssidx);
0039
0040
0041
0042
0043 int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev)
0044 {
0045 int status;
0046
0047
0048
0049
0050
0051 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
0052 return 0;
0053
0054
0055
0056
0057 rt2x00queue_init_queues(rt2x00dev);
0058
0059
0060
0061
0062 status =
0063 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_ON);
0064 if (status)
0065 return status;
0066
0067 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_ON);
0068
0069 rt2x00leds_led_radio(rt2x00dev, true);
0070 rt2x00led_led_activity(rt2x00dev, true);
0071
0072 set_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags);
0073
0074
0075
0076
0077 rt2x00queue_start_queues(rt2x00dev);
0078 rt2x00link_start_tuner(rt2x00dev);
0079
0080
0081
0082
0083 rt2x00link_start_watchdog(rt2x00dev);
0084
0085 return 0;
0086 }
0087
0088 void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)
0089 {
0090 if (!test_and_clear_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
0091 return;
0092
0093
0094
0095
0096 rt2x00link_stop_watchdog(rt2x00dev);
0097
0098
0099
0100
0101 rt2x00link_stop_tuner(rt2x00dev);
0102 rt2x00queue_stop_queues(rt2x00dev);
0103 rt2x00queue_flush_queues(rt2x00dev, true);
0104
0105
0106
0107
0108 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_OFF);
0109 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_OFF);
0110 rt2x00led_led_activity(rt2x00dev, false);
0111 rt2x00leds_led_radio(rt2x00dev, false);
0112 }
0113
0114 static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac,
0115 struct ieee80211_vif *vif)
0116 {
0117 struct rt2x00_dev *rt2x00dev = data;
0118 struct rt2x00_intf *intf = vif_to_intf(vif);
0119
0120
0121
0122
0123
0124
0125
0126 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
0127 return;
0128
0129 if (test_and_clear_bit(DELAYED_UPDATE_BEACON, &intf->delayed_flags)) {
0130 mutex_lock(&intf->beacon_skb_mutex);
0131 rt2x00queue_update_beacon(rt2x00dev, vif);
0132 mutex_unlock(&intf->beacon_skb_mutex);
0133 }
0134 }
0135
0136 static void rt2x00lib_intf_scheduled(struct work_struct *work)
0137 {
0138 struct rt2x00_dev *rt2x00dev =
0139 container_of(work, struct rt2x00_dev, intf_work);
0140
0141
0142
0143
0144
0145 ieee80211_iterate_active_interfaces(rt2x00dev->hw,
0146 IEEE80211_IFACE_ITER_RESUME_ALL,
0147 rt2x00lib_intf_scheduled_iter,
0148 rt2x00dev);
0149 }
0150
0151 static void rt2x00lib_autowakeup(struct work_struct *work)
0152 {
0153 struct rt2x00_dev *rt2x00dev =
0154 container_of(work, struct rt2x00_dev, autowakeup_work.work);
0155
0156 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
0157 return;
0158
0159 if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_AWAKE))
0160 rt2x00_err(rt2x00dev, "Device failed to wakeup\n");
0161 clear_bit(CONFIG_POWERSAVING, &rt2x00dev->flags);
0162 }
0163
0164
0165
0166
0167 static void rt2x00lib_bc_buffer_iter(void *data, u8 *mac,
0168 struct ieee80211_vif *vif)
0169 {
0170 struct ieee80211_tx_control control = {};
0171 struct rt2x00_dev *rt2x00dev = data;
0172 struct sk_buff *skb;
0173
0174
0175
0176
0177 if (vif->type != NL80211_IFTYPE_AP)
0178 return;
0179
0180
0181
0182
0183 skb = ieee80211_get_buffered_bc(rt2x00dev->hw, vif);
0184 while (skb) {
0185 rt2x00mac_tx(rt2x00dev->hw, &control, skb);
0186 skb = ieee80211_get_buffered_bc(rt2x00dev->hw, vif);
0187 }
0188 }
0189
0190 static void rt2x00lib_beaconupdate_iter(void *data, u8 *mac,
0191 struct ieee80211_vif *vif)
0192 {
0193 struct rt2x00_dev *rt2x00dev = data;
0194
0195 if (vif->type != NL80211_IFTYPE_AP &&
0196 vif->type != NL80211_IFTYPE_ADHOC &&
0197 vif->type != NL80211_IFTYPE_MESH_POINT)
0198 return;
0199
0200
0201
0202
0203
0204
0205 WARN_ON(rt2x00_is_usb(rt2x00dev));
0206 rt2x00queue_update_beacon(rt2x00dev, vif);
0207 }
0208
0209 void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev)
0210 {
0211 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
0212 return;
0213
0214
0215 ieee80211_iterate_active_interfaces_atomic(
0216 rt2x00dev->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
0217 rt2x00lib_bc_buffer_iter, rt2x00dev);
0218
0219
0220
0221
0222
0223 if (rt2x00_has_cap_pre_tbtt_interrupt(rt2x00dev))
0224 return;
0225
0226
0227 ieee80211_iterate_active_interfaces_atomic(
0228 rt2x00dev->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
0229 rt2x00lib_beaconupdate_iter, rt2x00dev);
0230 }
0231 EXPORT_SYMBOL_GPL(rt2x00lib_beacondone);
0232
0233 void rt2x00lib_pretbtt(struct rt2x00_dev *rt2x00dev)
0234 {
0235 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
0236 return;
0237
0238
0239 ieee80211_iterate_active_interfaces_atomic(
0240 rt2x00dev->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
0241 rt2x00lib_beaconupdate_iter, rt2x00dev);
0242 }
0243 EXPORT_SYMBOL_GPL(rt2x00lib_pretbtt);
0244
0245 void rt2x00lib_dmastart(struct queue_entry *entry)
0246 {
0247 set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
0248 rt2x00queue_index_inc(entry, Q_INDEX);
0249 }
0250 EXPORT_SYMBOL_GPL(rt2x00lib_dmastart);
0251
0252 void rt2x00lib_dmadone(struct queue_entry *entry)
0253 {
0254 set_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags);
0255 clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
0256 rt2x00queue_index_inc(entry, Q_INDEX_DMA_DONE);
0257 }
0258 EXPORT_SYMBOL_GPL(rt2x00lib_dmadone);
0259
0260 static inline int rt2x00lib_txdone_bar_status(struct queue_entry *entry)
0261 {
0262 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
0263 struct ieee80211_bar *bar = (void *) entry->skb->data;
0264 struct rt2x00_bar_list_entry *bar_entry;
0265 int ret;
0266
0267 if (likely(!ieee80211_is_back_req(bar->frame_control)))
0268 return 0;
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283 ret = 0;
0284 rcu_read_lock();
0285 list_for_each_entry_rcu(bar_entry, &rt2x00dev->bar_list, list) {
0286 if (bar_entry->entry != entry)
0287 continue;
0288
0289 spin_lock_bh(&rt2x00dev->bar_list_lock);
0290
0291 ret = bar_entry->block_acked;
0292
0293 list_del_rcu(&bar_entry->list);
0294 spin_unlock_bh(&rt2x00dev->bar_list_lock);
0295 kfree_rcu(bar_entry, head);
0296
0297 break;
0298 }
0299 rcu_read_unlock();
0300
0301 return ret;
0302 }
0303
0304 static void rt2x00lib_fill_tx_status(struct rt2x00_dev *rt2x00dev,
0305 struct ieee80211_tx_info *tx_info,
0306 struct skb_frame_desc *skbdesc,
0307 struct txdone_entry_desc *txdesc,
0308 bool success)
0309 {
0310 u8 rate_idx, rate_flags, retry_rates;
0311 int i;
0312
0313 rate_idx = skbdesc->tx_rate_idx;
0314 rate_flags = skbdesc->tx_rate_flags;
0315 retry_rates = test_bit(TXDONE_FALLBACK, &txdesc->flags) ?
0316 (txdesc->retry + 1) : 1;
0317
0318
0319
0320
0321 memset(&tx_info->status, 0, sizeof(tx_info->status));
0322 tx_info->status.ack_signal = 0;
0323
0324
0325
0326
0327
0328
0329
0330 for (i = 0; i < retry_rates && i < IEEE80211_TX_MAX_RATES; i++) {
0331 tx_info->status.rates[i].idx = rate_idx - i;
0332 tx_info->status.rates[i].flags = rate_flags;
0333
0334 if (rate_idx - i == 0) {
0335
0336
0337
0338
0339 tx_info->status.rates[i].count = retry_rates - i;
0340 i++;
0341 break;
0342 }
0343 tx_info->status.rates[i].count = 1;
0344 }
0345 if (i < (IEEE80211_TX_MAX_RATES - 1))
0346 tx_info->status.rates[i].idx = -1;
0347
0348 if (test_bit(TXDONE_NO_ACK_REQ, &txdesc->flags))
0349 tx_info->flags |= IEEE80211_TX_CTL_NO_ACK;
0350
0351 if (!(tx_info->flags & IEEE80211_TX_CTL_NO_ACK)) {
0352 if (success)
0353 tx_info->flags |= IEEE80211_TX_STAT_ACK;
0354 else
0355 rt2x00dev->low_level_stats.dot11ACKFailureCount++;
0356 }
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367 if (test_bit(TXDONE_AMPDU, &txdesc->flags) ||
0368 tx_info->flags & IEEE80211_TX_CTL_AMPDU) {
0369 tx_info->flags |= IEEE80211_TX_STAT_AMPDU |
0370 IEEE80211_TX_CTL_AMPDU;
0371 tx_info->status.ampdu_len = 1;
0372 tx_info->status.ampdu_ack_len = success ? 1 : 0;
0373 }
0374
0375 if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
0376 if (success)
0377 rt2x00dev->low_level_stats.dot11RTSSuccessCount++;
0378 else
0379 rt2x00dev->low_level_stats.dot11RTSFailureCount++;
0380 }
0381 }
0382
0383 static void rt2x00lib_clear_entry(struct rt2x00_dev *rt2x00dev,
0384 struct queue_entry *entry)
0385 {
0386
0387
0388
0389 entry->skb = NULL;
0390 entry->flags = 0;
0391
0392 rt2x00dev->ops->lib->clear_entry(entry);
0393
0394 rt2x00queue_index_inc(entry, Q_INDEX_DONE);
0395
0396
0397
0398
0399
0400
0401
0402
0403 spin_lock_bh(&entry->queue->tx_lock);
0404 if (!rt2x00queue_threshold(entry->queue))
0405 rt2x00queue_unpause_queue(entry->queue);
0406 spin_unlock_bh(&entry->queue->tx_lock);
0407 }
0408
0409 void rt2x00lib_txdone_nomatch(struct queue_entry *entry,
0410 struct txdone_entry_desc *txdesc)
0411 {
0412 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
0413 struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
0414 struct ieee80211_tx_info txinfo = {};
0415 bool success;
0416
0417
0418
0419
0420 rt2x00queue_unmap_skb(entry);
0421
0422
0423
0424
0425 skbdesc->flags &= ~SKBDESC_DESC_IN_SKB;
0426
0427
0428
0429
0430
0431 rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_TXDONE, entry);
0432
0433
0434
0435
0436
0437
0438 success =
0439 rt2x00lib_txdone_bar_status(entry) ||
0440 test_bit(TXDONE_SUCCESS, &txdesc->flags);
0441
0442 if (!test_bit(TXDONE_UNKNOWN, &txdesc->flags)) {
0443
0444
0445
0446 rt2x00dev->link.qual.tx_success += success;
0447 rt2x00dev->link.qual.tx_failed += !success;
0448
0449 rt2x00lib_fill_tx_status(rt2x00dev, &txinfo, skbdesc, txdesc,
0450 success);
0451 ieee80211_tx_status_noskb(rt2x00dev->hw, skbdesc->sta, &txinfo);
0452 }
0453
0454 dev_kfree_skb_any(entry->skb);
0455 rt2x00lib_clear_entry(rt2x00dev, entry);
0456 }
0457 EXPORT_SYMBOL_GPL(rt2x00lib_txdone_nomatch);
0458
0459 void rt2x00lib_txdone(struct queue_entry *entry,
0460 struct txdone_entry_desc *txdesc)
0461 {
0462 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
0463 struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb);
0464 struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
0465 u8 skbdesc_flags = skbdesc->flags;
0466 unsigned int header_length;
0467 bool success;
0468
0469
0470
0471
0472 rt2x00queue_unmap_skb(entry);
0473
0474
0475
0476
0477 skb_pull(entry->skb, rt2x00dev->extra_tx_headroom);
0478
0479
0480
0481
0482 skbdesc->flags &= ~SKBDESC_DESC_IN_SKB;
0483
0484
0485
0486
0487 header_length = ieee80211_get_hdrlen_from_skb(entry->skb);
0488
0489
0490
0491
0492 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_L2PAD))
0493 rt2x00queue_remove_l2pad(entry->skb, header_length);
0494
0495
0496
0497
0498
0499
0500
0501 if (rt2x00_has_cap_hw_crypto(rt2x00dev))
0502 rt2x00crypto_tx_insert_iv(entry->skb, header_length);
0503
0504
0505
0506
0507
0508 rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_TXDONE, entry);
0509
0510
0511
0512
0513
0514
0515 success =
0516 rt2x00lib_txdone_bar_status(entry) ||
0517 test_bit(TXDONE_SUCCESS, &txdesc->flags) ||
0518 test_bit(TXDONE_UNKNOWN, &txdesc->flags);
0519
0520
0521
0522
0523 rt2x00dev->link.qual.tx_success += success;
0524 rt2x00dev->link.qual.tx_failed += !success;
0525
0526 rt2x00lib_fill_tx_status(rt2x00dev, tx_info, skbdesc, txdesc, success);
0527
0528
0529
0530
0531
0532
0533
0534 if (!(skbdesc_flags & SKBDESC_NOT_MAC80211)) {
0535 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_TASKLET_CONTEXT))
0536 ieee80211_tx_status(rt2x00dev->hw, entry->skb);
0537 else
0538 ieee80211_tx_status_ni(rt2x00dev->hw, entry->skb);
0539 } else {
0540 dev_kfree_skb_any(entry->skb);
0541 }
0542
0543 rt2x00lib_clear_entry(rt2x00dev, entry);
0544 }
0545 EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
0546
0547 void rt2x00lib_txdone_noinfo(struct queue_entry *entry, u32 status)
0548 {
0549 struct txdone_entry_desc txdesc;
0550
0551 txdesc.flags = 0;
0552 __set_bit(status, &txdesc.flags);
0553 txdesc.retry = 0;
0554
0555 rt2x00lib_txdone(entry, &txdesc);
0556 }
0557 EXPORT_SYMBOL_GPL(rt2x00lib_txdone_noinfo);
0558
0559 static u8 *rt2x00lib_find_ie(u8 *data, unsigned int len, u8 ie)
0560 {
0561 struct ieee80211_mgmt *mgmt = (void *)data;
0562 u8 *pos, *end;
0563
0564 pos = (u8 *)mgmt->u.beacon.variable;
0565 end = data + len;
0566 while (pos < end) {
0567 if (pos + 2 + pos[1] > end)
0568 return NULL;
0569
0570 if (pos[0] == ie)
0571 return pos;
0572
0573 pos += 2 + pos[1];
0574 }
0575
0576 return NULL;
0577 }
0578
0579 static void rt2x00lib_sleep(struct work_struct *work)
0580 {
0581 struct rt2x00_dev *rt2x00dev =
0582 container_of(work, struct rt2x00_dev, sleep_work);
0583
0584 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
0585 return;
0586
0587
0588
0589
0590
0591 if (!test_bit(CONFIG_POWERSAVING, &rt2x00dev->flags))
0592 rt2x00lib_config(rt2x00dev, &rt2x00dev->hw->conf,
0593 IEEE80211_CONF_CHANGE_PS);
0594 }
0595
0596 static void rt2x00lib_rxdone_check_ba(struct rt2x00_dev *rt2x00dev,
0597 struct sk_buff *skb,
0598 struct rxdone_entry_desc *rxdesc)
0599 {
0600 struct rt2x00_bar_list_entry *entry;
0601 struct ieee80211_bar *ba = (void *)skb->data;
0602
0603 if (likely(!ieee80211_is_back(ba->frame_control)))
0604 return;
0605
0606 if (rxdesc->size < sizeof(*ba) + FCS_LEN)
0607 return;
0608
0609 rcu_read_lock();
0610 list_for_each_entry_rcu(entry, &rt2x00dev->bar_list, list) {
0611
0612 if (ba->start_seq_num != entry->start_seq_num)
0613 continue;
0614
0615 #define TID_CHECK(a, b) ( \
0616 ((a) & cpu_to_le16(IEEE80211_BAR_CTRL_TID_INFO_MASK)) == \
0617 ((b) & cpu_to_le16(IEEE80211_BAR_CTRL_TID_INFO_MASK))) \
0618
0619 if (!TID_CHECK(ba->control, entry->control))
0620 continue;
0621
0622 #undef TID_CHECK
0623
0624 if (!ether_addr_equal_64bits(ba->ra, entry->ta))
0625 continue;
0626
0627 if (!ether_addr_equal_64bits(ba->ta, entry->ra))
0628 continue;
0629
0630
0631 spin_lock_bh(&rt2x00dev->bar_list_lock);
0632 entry->block_acked = 1;
0633 spin_unlock_bh(&rt2x00dev->bar_list_lock);
0634 break;
0635 }
0636 rcu_read_unlock();
0637
0638 }
0639
0640 static void rt2x00lib_rxdone_check_ps(struct rt2x00_dev *rt2x00dev,
0641 struct sk_buff *skb,
0642 struct rxdone_entry_desc *rxdesc)
0643 {
0644 struct ieee80211_hdr *hdr = (void *) skb->data;
0645 struct ieee80211_tim_ie *tim_ie;
0646 u8 *tim;
0647 u8 tim_len;
0648 bool cam;
0649
0650
0651
0652
0653 if (likely(!ieee80211_is_beacon(hdr->frame_control) ||
0654 !(rt2x00dev->hw->conf.flags & IEEE80211_CONF_PS)))
0655 return;
0656
0657
0658 if (skb->len <= 40 + FCS_LEN)
0659 return;
0660
0661
0662 if (!(rxdesc->dev_flags & RXDONE_MY_BSS) ||
0663 !rt2x00dev->aid)
0664 return;
0665
0666 rt2x00dev->last_beacon = jiffies;
0667
0668 tim = rt2x00lib_find_ie(skb->data, skb->len - FCS_LEN, WLAN_EID_TIM);
0669 if (!tim)
0670 return;
0671
0672 if (tim[1] < sizeof(*tim_ie))
0673 return;
0674
0675 tim_len = tim[1];
0676 tim_ie = (struct ieee80211_tim_ie *) &tim[2];
0677
0678
0679
0680
0681 cam = ieee80211_check_tim(tim_ie, tim_len, rt2x00dev->aid);
0682
0683
0684 cam |= (tim_ie->bitmap_ctrl & 0x01);
0685
0686 if (!cam && !test_bit(CONFIG_POWERSAVING, &rt2x00dev->flags))
0687 queue_work(rt2x00dev->workqueue, &rt2x00dev->sleep_work);
0688 }
0689
0690 static int rt2x00lib_rxdone_read_signal(struct rt2x00_dev *rt2x00dev,
0691 struct rxdone_entry_desc *rxdesc)
0692 {
0693 struct ieee80211_supported_band *sband;
0694 const struct rt2x00_rate *rate;
0695 unsigned int i;
0696 int signal = rxdesc->signal;
0697 int type = (rxdesc->dev_flags & RXDONE_SIGNAL_MASK);
0698
0699 switch (rxdesc->rate_mode) {
0700 case RATE_MODE_CCK:
0701 case RATE_MODE_OFDM:
0702
0703
0704
0705
0706 if (rxdesc->dev_flags & RXDONE_SIGNAL_MCS)
0707 signal = RATE_MCS(rxdesc->rate_mode, signal);
0708
0709 sband = &rt2x00dev->bands[rt2x00dev->curr_band];
0710 for (i = 0; i < sband->n_bitrates; i++) {
0711 rate = rt2x00_get_rate(sband->bitrates[i].hw_value);
0712 if (((type == RXDONE_SIGNAL_PLCP) &&
0713 (rate->plcp == signal)) ||
0714 ((type == RXDONE_SIGNAL_BITRATE) &&
0715 (rate->bitrate == signal)) ||
0716 ((type == RXDONE_SIGNAL_MCS) &&
0717 (rate->mcs == signal))) {
0718 return i;
0719 }
0720 }
0721 break;
0722 case RATE_MODE_HT_MIX:
0723 case RATE_MODE_HT_GREENFIELD:
0724 if (signal >= 0 && signal <= 76)
0725 return signal;
0726 break;
0727 default:
0728 break;
0729 }
0730
0731 rt2x00_warn(rt2x00dev, "Frame received with unrecognized signal, mode=0x%.4x, signal=0x%.4x, type=%d\n",
0732 rxdesc->rate_mode, signal, type);
0733 return 0;
0734 }
0735
0736 void rt2x00lib_rxdone(struct queue_entry *entry, gfp_t gfp)
0737 {
0738 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
0739 struct rxdone_entry_desc rxdesc;
0740 struct sk_buff *skb;
0741 struct ieee80211_rx_status *rx_status;
0742 unsigned int header_length;
0743 int rate_idx;
0744
0745 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) ||
0746 !test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
0747 goto submit_entry;
0748
0749 if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
0750 goto submit_entry;
0751
0752
0753
0754
0755
0756 skb = rt2x00queue_alloc_rxskb(entry, gfp);
0757 if (!skb)
0758 goto submit_entry;
0759
0760
0761
0762
0763 rt2x00queue_unmap_skb(entry);
0764
0765
0766
0767
0768 memset(&rxdesc, 0, sizeof(rxdesc));
0769 rt2x00dev->ops->lib->fill_rxdone(entry, &rxdesc);
0770
0771
0772
0773
0774
0775 if (unlikely(rxdesc.size == 0 ||
0776 rxdesc.size > entry->queue->data_size)) {
0777 rt2x00_err(rt2x00dev, "Wrong frame size %d max %d\n",
0778 rxdesc.size, entry->queue->data_size);
0779 dev_kfree_skb(entry->skb);
0780 goto renew_skb;
0781 }
0782
0783
0784
0785
0786
0787 header_length = ieee80211_get_hdrlen_from_skb(entry->skb);
0788
0789
0790
0791
0792
0793
0794
0795 if ((rxdesc.dev_flags & RXDONE_CRYPTO_IV) &&
0796 (rxdesc.flags & RX_FLAG_IV_STRIPPED))
0797 rt2x00crypto_rx_insert_iv(entry->skb, header_length,
0798 &rxdesc);
0799 else if (header_length &&
0800 (rxdesc.size > header_length) &&
0801 (rxdesc.dev_flags & RXDONE_L2PAD))
0802 rt2x00queue_remove_l2pad(entry->skb, header_length);
0803
0804
0805 skb_trim(entry->skb, rxdesc.size);
0806
0807
0808
0809
0810 rate_idx = rt2x00lib_rxdone_read_signal(rt2x00dev, &rxdesc);
0811 if (rxdesc.rate_mode == RATE_MODE_HT_MIX ||
0812 rxdesc.rate_mode == RATE_MODE_HT_GREENFIELD)
0813 rxdesc.encoding = RX_ENC_HT;
0814
0815
0816
0817
0818
0819 rt2x00lib_rxdone_check_ps(rt2x00dev, entry->skb, &rxdesc);
0820
0821
0822
0823
0824
0825 rt2x00lib_rxdone_check_ba(rt2x00dev, entry->skb, &rxdesc);
0826
0827
0828
0829
0830 rt2x00link_update_stats(rt2x00dev, entry->skb, &rxdesc);
0831 rt2x00debug_update_crypto(rt2x00dev, &rxdesc);
0832 rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_RXDONE, entry);
0833
0834
0835
0836
0837
0838 rx_status = IEEE80211_SKB_RXCB(entry->skb);
0839
0840
0841
0842
0843
0844
0845 memset(rx_status, 0, sizeof(*rx_status));
0846
0847 rx_status->mactime = rxdesc.timestamp;
0848 rx_status->band = rt2x00dev->curr_band;
0849 rx_status->freq = rt2x00dev->curr_freq;
0850 rx_status->rate_idx = rate_idx;
0851 rx_status->signal = rxdesc.rssi;
0852 rx_status->flag = rxdesc.flags;
0853 rx_status->enc_flags = rxdesc.enc_flags;
0854 rx_status->encoding = rxdesc.encoding;
0855 rx_status->bw = rxdesc.bw;
0856 rx_status->antenna = rt2x00dev->link.ant.active.rx;
0857
0858 ieee80211_rx_ni(rt2x00dev->hw, entry->skb);
0859
0860 renew_skb:
0861
0862
0863
0864 entry->skb = skb;
0865
0866 submit_entry:
0867 entry->flags = 0;
0868 rt2x00queue_index_inc(entry, Q_INDEX_DONE);
0869 if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) &&
0870 test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
0871 rt2x00dev->ops->lib->clear_entry(entry);
0872 }
0873 EXPORT_SYMBOL_GPL(rt2x00lib_rxdone);
0874
0875
0876
0877
0878 const struct rt2x00_rate rt2x00_supported_rates[12] = {
0879 {
0880 .flags = DEV_RATE_CCK,
0881 .bitrate = 10,
0882 .ratemask = BIT(0),
0883 .plcp = 0x00,
0884 .mcs = RATE_MCS(RATE_MODE_CCK, 0),
0885 },
0886 {
0887 .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
0888 .bitrate = 20,
0889 .ratemask = BIT(1),
0890 .plcp = 0x01,
0891 .mcs = RATE_MCS(RATE_MODE_CCK, 1),
0892 },
0893 {
0894 .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
0895 .bitrate = 55,
0896 .ratemask = BIT(2),
0897 .plcp = 0x02,
0898 .mcs = RATE_MCS(RATE_MODE_CCK, 2),
0899 },
0900 {
0901 .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
0902 .bitrate = 110,
0903 .ratemask = BIT(3),
0904 .plcp = 0x03,
0905 .mcs = RATE_MCS(RATE_MODE_CCK, 3),
0906 },
0907 {
0908 .flags = DEV_RATE_OFDM,
0909 .bitrate = 60,
0910 .ratemask = BIT(4),
0911 .plcp = 0x0b,
0912 .mcs = RATE_MCS(RATE_MODE_OFDM, 0),
0913 },
0914 {
0915 .flags = DEV_RATE_OFDM,
0916 .bitrate = 90,
0917 .ratemask = BIT(5),
0918 .plcp = 0x0f,
0919 .mcs = RATE_MCS(RATE_MODE_OFDM, 1),
0920 },
0921 {
0922 .flags = DEV_RATE_OFDM,
0923 .bitrate = 120,
0924 .ratemask = BIT(6),
0925 .plcp = 0x0a,
0926 .mcs = RATE_MCS(RATE_MODE_OFDM, 2),
0927 },
0928 {
0929 .flags = DEV_RATE_OFDM,
0930 .bitrate = 180,
0931 .ratemask = BIT(7),
0932 .plcp = 0x0e,
0933 .mcs = RATE_MCS(RATE_MODE_OFDM, 3),
0934 },
0935 {
0936 .flags = DEV_RATE_OFDM,
0937 .bitrate = 240,
0938 .ratemask = BIT(8),
0939 .plcp = 0x09,
0940 .mcs = RATE_MCS(RATE_MODE_OFDM, 4),
0941 },
0942 {
0943 .flags = DEV_RATE_OFDM,
0944 .bitrate = 360,
0945 .ratemask = BIT(9),
0946 .plcp = 0x0d,
0947 .mcs = RATE_MCS(RATE_MODE_OFDM, 5),
0948 },
0949 {
0950 .flags = DEV_RATE_OFDM,
0951 .bitrate = 480,
0952 .ratemask = BIT(10),
0953 .plcp = 0x08,
0954 .mcs = RATE_MCS(RATE_MODE_OFDM, 6),
0955 },
0956 {
0957 .flags = DEV_RATE_OFDM,
0958 .bitrate = 540,
0959 .ratemask = BIT(11),
0960 .plcp = 0x0c,
0961 .mcs = RATE_MCS(RATE_MODE_OFDM, 7),
0962 },
0963 };
0964
0965 static void rt2x00lib_channel(struct ieee80211_channel *entry,
0966 const int channel, const int tx_power,
0967 const int value)
0968 {
0969
0970 entry->band = channel <= 14 ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ;
0971 entry->center_freq = ieee80211_channel_to_frequency(channel,
0972 entry->band);
0973 entry->hw_value = value;
0974 entry->max_power = tx_power;
0975 entry->max_antenna_gain = 0xff;
0976 }
0977
0978 static void rt2x00lib_rate(struct ieee80211_rate *entry,
0979 const u16 index, const struct rt2x00_rate *rate)
0980 {
0981 entry->flags = 0;
0982 entry->bitrate = rate->bitrate;
0983 entry->hw_value = index;
0984 entry->hw_value_short = index;
0985
0986 if (rate->flags & DEV_RATE_SHORT_PREAMBLE)
0987 entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE;
0988 }
0989
0990 void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
0991 {
0992 of_get_mac_address(rt2x00dev->dev->of_node, eeprom_mac_addr);
0993
0994 if (!is_valid_ether_addr(eeprom_mac_addr)) {
0995 eth_random_addr(eeprom_mac_addr);
0996 rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", eeprom_mac_addr);
0997 }
0998 }
0999 EXPORT_SYMBOL_GPL(rt2x00lib_set_mac_address);
1000
1001 static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev,
1002 struct hw_mode_spec *spec)
1003 {
1004 struct ieee80211_hw *hw = rt2x00dev->hw;
1005 struct ieee80211_channel *channels;
1006 struct ieee80211_rate *rates;
1007 unsigned int num_rates;
1008 unsigned int i;
1009
1010 num_rates = 0;
1011 if (spec->supported_rates & SUPPORT_RATE_CCK)
1012 num_rates += 4;
1013 if (spec->supported_rates & SUPPORT_RATE_OFDM)
1014 num_rates += 8;
1015
1016 channels = kcalloc(spec->num_channels, sizeof(*channels), GFP_KERNEL);
1017 if (!channels)
1018 return -ENOMEM;
1019
1020 rates = kcalloc(num_rates, sizeof(*rates), GFP_KERNEL);
1021 if (!rates)
1022 goto exit_free_channels;
1023
1024
1025
1026
1027 for (i = 0; i < num_rates; i++)
1028 rt2x00lib_rate(&rates[i], i, rt2x00_get_rate(i));
1029
1030
1031
1032
1033 for (i = 0; i < spec->num_channels; i++) {
1034 rt2x00lib_channel(&channels[i],
1035 spec->channels[i].channel,
1036 spec->channels_info[i].max_power, i);
1037 }
1038
1039
1040
1041
1042
1043
1044 if (spec->supported_bands & SUPPORT_BAND_2GHZ) {
1045 rt2x00dev->bands[NL80211_BAND_2GHZ].n_channels = 14;
1046 rt2x00dev->bands[NL80211_BAND_2GHZ].n_bitrates = num_rates;
1047 rt2x00dev->bands[NL80211_BAND_2GHZ].channels = channels;
1048 rt2x00dev->bands[NL80211_BAND_2GHZ].bitrates = rates;
1049 hw->wiphy->bands[NL80211_BAND_2GHZ] =
1050 &rt2x00dev->bands[NL80211_BAND_2GHZ];
1051 memcpy(&rt2x00dev->bands[NL80211_BAND_2GHZ].ht_cap,
1052 &spec->ht, sizeof(spec->ht));
1053 }
1054
1055
1056
1057
1058
1059
1060 if (spec->supported_bands & SUPPORT_BAND_5GHZ) {
1061 rt2x00dev->bands[NL80211_BAND_5GHZ].n_channels =
1062 spec->num_channels - 14;
1063 rt2x00dev->bands[NL80211_BAND_5GHZ].n_bitrates =
1064 num_rates - 4;
1065 rt2x00dev->bands[NL80211_BAND_5GHZ].channels = &channels[14];
1066 rt2x00dev->bands[NL80211_BAND_5GHZ].bitrates = &rates[4];
1067 hw->wiphy->bands[NL80211_BAND_5GHZ] =
1068 &rt2x00dev->bands[NL80211_BAND_5GHZ];
1069 memcpy(&rt2x00dev->bands[NL80211_BAND_5GHZ].ht_cap,
1070 &spec->ht, sizeof(spec->ht));
1071 }
1072
1073 return 0;
1074
1075 exit_free_channels:
1076 kfree(channels);
1077 rt2x00_err(rt2x00dev, "Allocation ieee80211 modes failed\n");
1078 return -ENOMEM;
1079 }
1080
1081 static void rt2x00lib_remove_hw(struct rt2x00_dev *rt2x00dev)
1082 {
1083 if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags))
1084 ieee80211_unregister_hw(rt2x00dev->hw);
1085
1086 if (likely(rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ])) {
1087 kfree(rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ]->channels);
1088 kfree(rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ]->bitrates);
1089 rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ] = NULL;
1090 rt2x00dev->hw->wiphy->bands[NL80211_BAND_5GHZ] = NULL;
1091 }
1092
1093 kfree(rt2x00dev->spec.channels_info);
1094 }
1095
1096 static int rt2x00lib_probe_hw(struct rt2x00_dev *rt2x00dev)
1097 {
1098 struct hw_mode_spec *spec = &rt2x00dev->spec;
1099 int status;
1100
1101 if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags))
1102 return 0;
1103
1104
1105
1106
1107 status = rt2x00lib_probe_hw_modes(rt2x00dev, spec);
1108 if (status)
1109 return status;
1110
1111
1112
1113
1114 rt2x00dev->hw->queues = rt2x00dev->ops->tx_queues;
1115
1116
1117
1118
1119 rt2x00dev->hw->extra_tx_headroom =
1120 max_t(unsigned int, IEEE80211_TX_STATUS_HEADROOM,
1121 rt2x00dev->extra_tx_headroom);
1122
1123
1124
1125
1126 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_L2PAD))
1127 rt2x00dev->hw->extra_tx_headroom += RT2X00_L2PAD_SIZE;
1128 else if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DMA))
1129 rt2x00dev->hw->extra_tx_headroom += RT2X00_ALIGN_SIZE;
1130
1131
1132
1133
1134 rt2x00dev->hw->sta_data_size = sizeof(struct rt2x00_sta);
1135
1136
1137
1138
1139 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_TXSTATUS_FIFO)) {
1140
1141
1142
1143
1144
1145
1146
1147 int kfifo_size =
1148 roundup_pow_of_two(rt2x00dev->ops->tx_queues *
1149 rt2x00dev->tx->limit *
1150 sizeof(u32));
1151
1152 status = kfifo_alloc(&rt2x00dev->txstatus_fifo, kfifo_size,
1153 GFP_KERNEL);
1154 if (status)
1155 return status;
1156 }
1157
1158
1159
1160
1161
1162
1163 #define RT2X00_TASKLET_INIT(taskletname) \
1164 if (rt2x00dev->ops->lib->taskletname) { \
1165 tasklet_setup(&rt2x00dev->taskletname, \
1166 rt2x00dev->ops->lib->taskletname); \
1167 }
1168
1169 RT2X00_TASKLET_INIT(txstatus_tasklet);
1170 RT2X00_TASKLET_INIT(pretbtt_tasklet);
1171 RT2X00_TASKLET_INIT(tbtt_tasklet);
1172 RT2X00_TASKLET_INIT(rxdone_tasklet);
1173 RT2X00_TASKLET_INIT(autowake_tasklet);
1174
1175 #undef RT2X00_TASKLET_INIT
1176
1177
1178
1179
1180 status = ieee80211_register_hw(rt2x00dev->hw);
1181 if (status)
1182 return status;
1183
1184 set_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags);
1185
1186 return 0;
1187 }
1188
1189
1190
1191
1192 static void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev)
1193 {
1194 if (!test_and_clear_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags))
1195 return;
1196
1197
1198
1199
1200 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1201 rt2x00rfkill_unregister(rt2x00dev);
1202
1203
1204
1205
1206 rt2x00dev->ops->lib->uninitialize(rt2x00dev);
1207
1208
1209
1210
1211 rt2x00queue_uninitialize(rt2x00dev);
1212 }
1213
1214 static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
1215 {
1216 int status;
1217
1218 if (test_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags))
1219 return 0;
1220
1221
1222
1223
1224 status = rt2x00queue_initialize(rt2x00dev);
1225 if (status)
1226 return status;
1227
1228
1229
1230
1231 status = rt2x00dev->ops->lib->initialize(rt2x00dev);
1232 if (status) {
1233 rt2x00queue_uninitialize(rt2x00dev);
1234 return status;
1235 }
1236
1237 set_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags);
1238
1239
1240
1241
1242 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1243 rt2x00rfkill_register(rt2x00dev);
1244
1245 return 0;
1246 }
1247
1248 int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
1249 {
1250 int retval = 0;
1251
1252
1253
1254
1255
1256 retval = rt2x00lib_load_firmware(rt2x00dev);
1257 if (retval)
1258 goto out;
1259
1260
1261
1262
1263 retval = rt2x00lib_initialize(rt2x00dev);
1264 if (retval)
1265 goto out;
1266
1267 rt2x00dev->intf_ap_count = 0;
1268 rt2x00dev->intf_sta_count = 0;
1269 rt2x00dev->intf_associated = 0;
1270
1271
1272 retval = rt2x00lib_enable_radio(rt2x00dev);
1273 if (retval)
1274 goto out;
1275
1276 set_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags);
1277
1278 out:
1279 return retval;
1280 }
1281
1282 void rt2x00lib_stop(struct rt2x00_dev *rt2x00dev)
1283 {
1284 if (!test_and_clear_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
1285 return;
1286
1287
1288
1289
1290
1291 rt2x00lib_disable_radio(rt2x00dev);
1292
1293 rt2x00dev->intf_ap_count = 0;
1294 rt2x00dev->intf_sta_count = 0;
1295 rt2x00dev->intf_associated = 0;
1296 }
1297
1298 static inline void rt2x00lib_set_if_combinations(struct rt2x00_dev *rt2x00dev)
1299 {
1300 struct ieee80211_iface_limit *if_limit;
1301 struct ieee80211_iface_combination *if_combination;
1302
1303 if (rt2x00dev->ops->max_ap_intf < 2)
1304 return;
1305
1306
1307
1308
1309 if_limit = &rt2x00dev->if_limits_ap;
1310 if_limit->max = rt2x00dev->ops->max_ap_intf;
1311 if_limit->types = BIT(NL80211_IFTYPE_AP);
1312 #ifdef CONFIG_MAC80211_MESH
1313 if_limit->types |= BIT(NL80211_IFTYPE_MESH_POINT);
1314 #endif
1315
1316
1317
1318
1319 if_combination = &rt2x00dev->if_combinations[IF_COMB_AP];
1320 if_combination->limits = if_limit;
1321 if_combination->n_limits = 1;
1322 if_combination->max_interfaces = if_limit->max;
1323 if_combination->num_different_channels = 1;
1324
1325
1326
1327
1328 rt2x00dev->hw->wiphy->iface_combinations = rt2x00dev->if_combinations;
1329 rt2x00dev->hw->wiphy->n_iface_combinations = 1;
1330 }
1331
1332 static unsigned int rt2x00dev_extra_tx_headroom(struct rt2x00_dev *rt2x00dev)
1333 {
1334 if (WARN_ON(!rt2x00dev->tx))
1335 return 0;
1336
1337 if (rt2x00_is_usb(rt2x00dev))
1338 return rt2x00dev->tx[0].winfo_size + rt2x00dev->tx[0].desc_size;
1339
1340 return rt2x00dev->tx[0].winfo_size;
1341 }
1342
1343
1344
1345
1346 int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
1347 {
1348 int retval = -ENOMEM;
1349
1350
1351
1352
1353 rt2x00lib_set_if_combinations(rt2x00dev);
1354
1355
1356
1357
1358 if (rt2x00dev->ops->drv_data_size > 0) {
1359 rt2x00dev->drv_data = kzalloc(rt2x00dev->ops->drv_data_size,
1360 GFP_KERNEL);
1361 if (!rt2x00dev->drv_data) {
1362 retval = -ENOMEM;
1363 goto exit;
1364 }
1365 }
1366
1367 spin_lock_init(&rt2x00dev->irqmask_lock);
1368 mutex_init(&rt2x00dev->csr_mutex);
1369 mutex_init(&rt2x00dev->conf_mutex);
1370 INIT_LIST_HEAD(&rt2x00dev->bar_list);
1371 spin_lock_init(&rt2x00dev->bar_list_lock);
1372 hrtimer_init(&rt2x00dev->txstatus_timer, CLOCK_MONOTONIC,
1373 HRTIMER_MODE_REL);
1374
1375 set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1376
1377
1378
1379
1380
1381 rt2x00dev->hw->vif_data_size = sizeof(struct rt2x00_intf);
1382
1383
1384
1385
1386
1387 rt2x00dev->hw->wiphy->addr_mask[ETH_ALEN - 1] =
1388 (rt2x00dev->ops->max_ap_intf - 1);
1389
1390
1391
1392
1393 rt2x00dev->workqueue =
1394 alloc_ordered_workqueue("%s", 0, wiphy_name(rt2x00dev->hw->wiphy));
1395 if (!rt2x00dev->workqueue) {
1396 retval = -ENOMEM;
1397 goto exit;
1398 }
1399
1400 INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled);
1401 INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup);
1402 INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep);
1403
1404
1405
1406
1407 retval = rt2x00dev->ops->lib->probe_hw(rt2x00dev);
1408 if (retval) {
1409 rt2x00_err(rt2x00dev, "Failed to allocate device\n");
1410 goto exit;
1411 }
1412
1413
1414
1415
1416 retval = rt2x00queue_allocate(rt2x00dev);
1417 if (retval)
1418 goto exit;
1419
1420
1421 rt2x00dev->extra_tx_headroom = rt2x00dev_extra_tx_headroom(rt2x00dev);
1422
1423
1424
1425
1426
1427
1428 rt2x00dev->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
1429 if (rt2x00dev->bcn->limit > 0)
1430 rt2x00dev->hw->wiphy->interface_modes |=
1431 BIT(NL80211_IFTYPE_ADHOC) |
1432 #ifdef CONFIG_MAC80211_MESH
1433 BIT(NL80211_IFTYPE_MESH_POINT) |
1434 #endif
1435 BIT(NL80211_IFTYPE_AP);
1436
1437 rt2x00dev->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
1438
1439 wiphy_ext_feature_set(rt2x00dev->hw->wiphy,
1440 NL80211_EXT_FEATURE_CQM_RSSI_LIST);
1441
1442
1443
1444
1445 retval = rt2x00lib_probe_hw(rt2x00dev);
1446 if (retval) {
1447 rt2x00_err(rt2x00dev, "Failed to initialize hw\n");
1448 goto exit;
1449 }
1450
1451
1452
1453
1454 rt2x00link_register(rt2x00dev);
1455 rt2x00leds_register(rt2x00dev);
1456 rt2x00debug_register(rt2x00dev);
1457
1458
1459
1460
1461 if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1462 rt2x00rfkill_register(rt2x00dev);
1463
1464 return 0;
1465
1466 exit:
1467 rt2x00lib_remove_dev(rt2x00dev);
1468
1469 return retval;
1470 }
1471 EXPORT_SYMBOL_GPL(rt2x00lib_probe_dev);
1472
1473 void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
1474 {
1475 clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1476
1477
1478
1479
1480 if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1481 rt2x00rfkill_unregister(rt2x00dev);
1482
1483
1484
1485
1486 rt2x00lib_disable_radio(rt2x00dev);
1487
1488
1489
1490
1491 cancel_work_sync(&rt2x00dev->intf_work);
1492 cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
1493 cancel_work_sync(&rt2x00dev->sleep_work);
1494
1495 hrtimer_cancel(&rt2x00dev->txstatus_timer);
1496
1497
1498
1499
1500 tasklet_kill(&rt2x00dev->txstatus_tasklet);
1501 tasklet_kill(&rt2x00dev->pretbtt_tasklet);
1502 tasklet_kill(&rt2x00dev->tbtt_tasklet);
1503 tasklet_kill(&rt2x00dev->rxdone_tasklet);
1504 tasklet_kill(&rt2x00dev->autowake_tasklet);
1505
1506
1507
1508
1509 rt2x00lib_uninitialize(rt2x00dev);
1510
1511 if (rt2x00dev->workqueue)
1512 destroy_workqueue(rt2x00dev->workqueue);
1513
1514
1515
1516
1517 kfifo_free(&rt2x00dev->txstatus_fifo);
1518
1519
1520
1521
1522 rt2x00debug_deregister(rt2x00dev);
1523 rt2x00leds_unregister(rt2x00dev);
1524
1525
1526
1527
1528 rt2x00lib_remove_hw(rt2x00dev);
1529
1530
1531
1532
1533 rt2x00lib_free_firmware(rt2x00dev);
1534
1535
1536
1537
1538 rt2x00queue_free(rt2x00dev);
1539
1540
1541
1542
1543 kfree(rt2x00dev->drv_data);
1544 }
1545 EXPORT_SYMBOL_GPL(rt2x00lib_remove_dev);
1546
1547
1548
1549
1550 int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev)
1551 {
1552 rt2x00_dbg(rt2x00dev, "Going to sleep\n");
1553
1554
1555
1556
1557 if (!test_and_clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
1558 return 0;
1559
1560
1561
1562
1563 rt2x00lib_uninitialize(rt2x00dev);
1564
1565
1566
1567
1568 rt2x00leds_suspend(rt2x00dev);
1569 rt2x00debug_deregister(rt2x00dev);
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582 if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_SLEEP))
1583 rt2x00_warn(rt2x00dev, "Device failed to enter sleep state, continue suspending\n");
1584
1585 return 0;
1586 }
1587 EXPORT_SYMBOL_GPL(rt2x00lib_suspend);
1588
1589 int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev)
1590 {
1591 rt2x00_dbg(rt2x00dev, "Waking up\n");
1592
1593
1594
1595
1596 rt2x00debug_register(rt2x00dev);
1597 rt2x00leds_resume(rt2x00dev);
1598
1599
1600
1601
1602 set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1603
1604 return 0;
1605 }
1606 EXPORT_SYMBOL_GPL(rt2x00lib_resume);
1607
1608
1609
1610
1611 MODULE_AUTHOR(DRV_PROJECT);
1612 MODULE_VERSION(DRV_VERSION);
1613 MODULE_DESCRIPTION("rt2x00 library");
1614 MODULE_LICENSE("GPL");