1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <linux/kernel.h>
26#include <linux/module.h>
27#include <linux/slab.h>
28#include <linux/log2.h>
29#include <linux/of.h>
30#include <linux/of_net.h>
31
32#include "rt2x00.h"
33#include "rt2x00lib.h"
34
35
36
37
38u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev,
39 struct ieee80211_vif *vif)
40{
41
42
43
44
45 if (rt2x00dev->intf_sta_count)
46 return 0;
47 return vif->addr[5] & (rt2x00dev->ops->max_ap_intf - 1);
48}
49EXPORT_SYMBOL_GPL(rt2x00lib_get_bssidx);
50
51
52
53
54int rt2x00lib_enable_radio(struct rt2x00_dev *rt2x00dev)
55{
56 int status;
57
58
59
60
61
62 if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
63 return 0;
64
65
66
67
68 rt2x00queue_init_queues(rt2x00dev);
69
70
71
72
73 status =
74 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_ON);
75 if (status)
76 return status;
77
78 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_ON);
79
80 rt2x00leds_led_radio(rt2x00dev, true);
81 rt2x00led_led_activity(rt2x00dev, true);
82
83 set_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags);
84
85
86
87
88 rt2x00queue_start_queues(rt2x00dev);
89 rt2x00link_start_tuner(rt2x00dev);
90
91
92
93
94 rt2x00link_start_watchdog(rt2x00dev);
95
96 return 0;
97}
98
99void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)
100{
101 if (!test_and_clear_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
102 return;
103
104
105
106
107 rt2x00link_stop_watchdog(rt2x00dev);
108
109
110
111
112 rt2x00link_stop_tuner(rt2x00dev);
113 rt2x00queue_stop_queues(rt2x00dev);
114 rt2x00queue_flush_queues(rt2x00dev, true);
115
116
117
118
119 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_OFF);
120 rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_IRQ_OFF);
121 rt2x00led_led_activity(rt2x00dev, false);
122 rt2x00leds_led_radio(rt2x00dev, false);
123}
124
125static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac,
126 struct ieee80211_vif *vif)
127{
128 struct rt2x00_dev *rt2x00dev = data;
129 struct rt2x00_intf *intf = vif_to_intf(vif);
130
131
132
133
134
135
136
137 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
138 return;
139
140 if (test_and_clear_bit(DELAYED_UPDATE_BEACON, &intf->delayed_flags)) {
141 mutex_lock(&intf->beacon_skb_mutex);
142 rt2x00queue_update_beacon(rt2x00dev, vif);
143 mutex_unlock(&intf->beacon_skb_mutex);
144 }
145}
146
147static void rt2x00lib_intf_scheduled(struct work_struct *work)
148{
149 struct rt2x00_dev *rt2x00dev =
150 container_of(work, struct rt2x00_dev, intf_work);
151
152
153
154
155
156 ieee80211_iterate_active_interfaces(rt2x00dev->hw,
157 IEEE80211_IFACE_ITER_RESUME_ALL,
158 rt2x00lib_intf_scheduled_iter,
159 rt2x00dev);
160}
161
162static void rt2x00lib_autowakeup(struct work_struct *work)
163{
164 struct rt2x00_dev *rt2x00dev =
165 container_of(work, struct rt2x00_dev, autowakeup_work.work);
166
167 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
168 return;
169
170 if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_AWAKE))
171 rt2x00_err(rt2x00dev, "Device failed to wakeup\n");
172 clear_bit(CONFIG_POWERSAVING, &rt2x00dev->flags);
173}
174
175
176
177
178static void rt2x00lib_bc_buffer_iter(void *data, u8 *mac,
179 struct ieee80211_vif *vif)
180{
181 struct ieee80211_tx_control control = {};
182 struct rt2x00_dev *rt2x00dev = data;
183 struct sk_buff *skb;
184
185
186
187
188 if (vif->type != NL80211_IFTYPE_AP)
189 return;
190
191
192
193
194 skb = ieee80211_get_buffered_bc(rt2x00dev->hw, vif);
195 while (skb) {
196 rt2x00mac_tx(rt2x00dev->hw, &control, skb);
197 skb = ieee80211_get_buffered_bc(rt2x00dev->hw, vif);
198 }
199}
200
201static void rt2x00lib_beaconupdate_iter(void *data, u8 *mac,
202 struct ieee80211_vif *vif)
203{
204 struct rt2x00_dev *rt2x00dev = data;
205
206 if (vif->type != NL80211_IFTYPE_AP &&
207 vif->type != NL80211_IFTYPE_ADHOC &&
208 vif->type != NL80211_IFTYPE_MESH_POINT &&
209 vif->type != NL80211_IFTYPE_WDS)
210 return;
211
212
213
214
215
216
217 WARN_ON(rt2x00_is_usb(rt2x00dev));
218 rt2x00queue_update_beacon(rt2x00dev, vif);
219}
220
221void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev)
222{
223 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
224 return;
225
226
227 ieee80211_iterate_active_interfaces_atomic(
228 rt2x00dev->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
229 rt2x00lib_bc_buffer_iter, rt2x00dev);
230
231
232
233
234
235 if (rt2x00_has_cap_pre_tbtt_interrupt(rt2x00dev))
236 return;
237
238
239 ieee80211_iterate_active_interfaces_atomic(
240 rt2x00dev->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
241 rt2x00lib_beaconupdate_iter, rt2x00dev);
242}
243EXPORT_SYMBOL_GPL(rt2x00lib_beacondone);
244
245void rt2x00lib_pretbtt(struct rt2x00_dev *rt2x00dev)
246{
247 if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
248 return;
249
250
251 ieee80211_iterate_active_interfaces_atomic(
252 rt2x00dev->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
253 rt2x00lib_beaconupdate_iter, rt2x00dev);
254}
255EXPORT_SYMBOL_GPL(rt2x00lib_pretbtt);
256
257void rt2x00lib_dmastart(struct queue_entry *entry)
258{
259 set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
260 rt2x00queue_index_inc(entry, Q_INDEX);
261}
262EXPORT_SYMBOL_GPL(rt2x00lib_dmastart);
263
264void rt2x00lib_dmadone(struct queue_entry *entry)
265{
266 set_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags);
267 clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
268 rt2x00queue_index_inc(entry, Q_INDEX_DMA_DONE);
269}
270EXPORT_SYMBOL_GPL(rt2x00lib_dmadone);
271
272static inline int rt2x00lib_txdone_bar_status(struct queue_entry *entry)
273{
274 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
275 struct ieee80211_bar *bar = (void *) entry->skb->data;
276 struct rt2x00_bar_list_entry *bar_entry;
277 int ret;
278
279 if (likely(!ieee80211_is_back_req(bar->frame_control)))
280 return 0;
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295 ret = 0;
296 rcu_read_lock();
297 list_for_each_entry_rcu(bar_entry, &rt2x00dev->bar_list, list) {
298 if (bar_entry->entry != entry)
299 continue;
300
301 spin_lock_bh(&rt2x00dev->bar_list_lock);
302
303 ret = bar_entry->block_acked;
304
305 list_del_rcu(&bar_entry->list);
306 spin_unlock_bh(&rt2x00dev->bar_list_lock);
307 kfree_rcu(bar_entry, head);
308
309 break;
310 }
311 rcu_read_unlock();
312
313 return ret;
314}
315
316void rt2x00lib_txdone(struct queue_entry *entry,
317 struct txdone_entry_desc *txdesc)
318{
319 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
320 struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb);
321 struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
322 unsigned int header_length, i;
323 u8 rate_idx, rate_flags, retry_rates;
324 u8 skbdesc_flags = skbdesc->flags;
325 bool success;
326
327
328
329
330 rt2x00queue_unmap_skb(entry);
331
332
333
334
335 skb_pull(entry->skb, rt2x00dev->extra_tx_headroom);
336
337
338
339
340 skbdesc->flags &= ~SKBDESC_DESC_IN_SKB;
341
342
343
344
345 header_length = ieee80211_get_hdrlen_from_skb(entry->skb);
346
347
348
349
350 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_L2PAD))
351 rt2x00queue_remove_l2pad(entry->skb, header_length);
352
353
354
355
356
357
358
359 if (rt2x00_has_cap_hw_crypto(rt2x00dev))
360 rt2x00crypto_tx_insert_iv(entry->skb, header_length);
361
362
363
364
365
366 rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_TXDONE, entry);
367
368
369
370
371
372
373 success =
374 rt2x00lib_txdone_bar_status(entry) ||
375 test_bit(TXDONE_SUCCESS, &txdesc->flags) ||
376 test_bit(TXDONE_UNKNOWN, &txdesc->flags);
377
378
379
380
381 rt2x00dev->link.qual.tx_success += success;
382 rt2x00dev->link.qual.tx_failed += !success;
383
384 rate_idx = skbdesc->tx_rate_idx;
385 rate_flags = skbdesc->tx_rate_flags;
386 retry_rates = test_bit(TXDONE_FALLBACK, &txdesc->flags) ?
387 (txdesc->retry + 1) : 1;
388
389
390
391
392 memset(&tx_info->status, 0, sizeof(tx_info->status));
393 tx_info->status.ack_signal = 0;
394
395
396
397
398
399
400
401 for (i = 0; i < retry_rates && i < IEEE80211_TX_MAX_RATES; i++) {
402 tx_info->status.rates[i].idx = rate_idx - i;
403 tx_info->status.rates[i].flags = rate_flags;
404
405 if (rate_idx - i == 0) {
406
407
408
409
410 tx_info->status.rates[i].count = retry_rates - i;
411 i++;
412 break;
413 }
414 tx_info->status.rates[i].count = 1;
415 }
416 if (i < (IEEE80211_TX_MAX_RATES - 1))
417 tx_info->status.rates[i].idx = -1;
418
419 if (!(tx_info->flags & IEEE80211_TX_CTL_NO_ACK)) {
420 if (success)
421 tx_info->flags |= IEEE80211_TX_STAT_ACK;
422 else
423 rt2x00dev->low_level_stats.dot11ACKFailureCount++;
424 }
425
426
427
428
429
430
431
432
433
434
435 if (test_bit(TXDONE_AMPDU, &txdesc->flags) ||
436 tx_info->flags & IEEE80211_TX_CTL_AMPDU) {
437 tx_info->flags |= IEEE80211_TX_STAT_AMPDU;
438 tx_info->status.ampdu_len = 1;
439 tx_info->status.ampdu_ack_len = success ? 1 : 0;
440
441 if (!success)
442 tx_info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
443 }
444
445 if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
446 if (success)
447 rt2x00dev->low_level_stats.dot11RTSSuccessCount++;
448 else
449 rt2x00dev->low_level_stats.dot11RTSFailureCount++;
450 }
451
452
453
454
455
456
457
458 if (!(skbdesc_flags & SKBDESC_NOT_MAC80211)) {
459 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_TASKLET_CONTEXT))
460 ieee80211_tx_status(rt2x00dev->hw, entry->skb);
461 else
462 ieee80211_tx_status_ni(rt2x00dev->hw, entry->skb);
463 } else
464 dev_kfree_skb_any(entry->skb);
465
466
467
468
469 entry->skb = NULL;
470 entry->flags = 0;
471
472 rt2x00dev->ops->lib->clear_entry(entry);
473
474 rt2x00queue_index_inc(entry, Q_INDEX_DONE);
475
476
477
478
479
480
481
482
483 spin_lock_bh(&entry->queue->tx_lock);
484 if (!rt2x00queue_threshold(entry->queue))
485 rt2x00queue_unpause_queue(entry->queue);
486 spin_unlock_bh(&entry->queue->tx_lock);
487}
488EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
489
490void rt2x00lib_txdone_noinfo(struct queue_entry *entry, u32 status)
491{
492 struct txdone_entry_desc txdesc;
493
494 txdesc.flags = 0;
495 __set_bit(status, &txdesc.flags);
496 txdesc.retry = 0;
497
498 rt2x00lib_txdone(entry, &txdesc);
499}
500EXPORT_SYMBOL_GPL(rt2x00lib_txdone_noinfo);
501
502static u8 *rt2x00lib_find_ie(u8 *data, unsigned int len, u8 ie)
503{
504 struct ieee80211_mgmt *mgmt = (void *)data;
505 u8 *pos, *end;
506
507 pos = (u8 *)mgmt->u.beacon.variable;
508 end = data + len;
509 while (pos < end) {
510 if (pos + 2 + pos[1] > end)
511 return NULL;
512
513 if (pos[0] == ie)
514 return pos;
515
516 pos += 2 + pos[1];
517 }
518
519 return NULL;
520}
521
522static void rt2x00lib_sleep(struct work_struct *work)
523{
524 struct rt2x00_dev *rt2x00dev =
525 container_of(work, struct rt2x00_dev, sleep_work);
526
527 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
528 return;
529
530
531
532
533
534 if (!test_bit(CONFIG_POWERSAVING, &rt2x00dev->flags))
535 rt2x00lib_config(rt2x00dev, &rt2x00dev->hw->conf,
536 IEEE80211_CONF_CHANGE_PS);
537}
538
539static void rt2x00lib_rxdone_check_ba(struct rt2x00_dev *rt2x00dev,
540 struct sk_buff *skb,
541 struct rxdone_entry_desc *rxdesc)
542{
543 struct rt2x00_bar_list_entry *entry;
544 struct ieee80211_bar *ba = (void *)skb->data;
545
546 if (likely(!ieee80211_is_back(ba->frame_control)))
547 return;
548
549 if (rxdesc->size < sizeof(*ba) + FCS_LEN)
550 return;
551
552 rcu_read_lock();
553 list_for_each_entry_rcu(entry, &rt2x00dev->bar_list, list) {
554
555 if (ba->start_seq_num != entry->start_seq_num)
556 continue;
557
558#define TID_CHECK(a, b) ( \
559 ((a) & cpu_to_le16(IEEE80211_BAR_CTRL_TID_INFO_MASK)) == \
560 ((b) & cpu_to_le16(IEEE80211_BAR_CTRL_TID_INFO_MASK))) \
561
562 if (!TID_CHECK(ba->control, entry->control))
563 continue;
564
565#undef TID_CHECK
566
567 if (!ether_addr_equal_64bits(ba->ra, entry->ta))
568 continue;
569
570 if (!ether_addr_equal_64bits(ba->ta, entry->ra))
571 continue;
572
573
574 spin_lock_bh(&rt2x00dev->bar_list_lock);
575 entry->block_acked = 1;
576 spin_unlock_bh(&rt2x00dev->bar_list_lock);
577 break;
578 }
579 rcu_read_unlock();
580
581}
582
583static void rt2x00lib_rxdone_check_ps(struct rt2x00_dev *rt2x00dev,
584 struct sk_buff *skb,
585 struct rxdone_entry_desc *rxdesc)
586{
587 struct ieee80211_hdr *hdr = (void *) skb->data;
588 struct ieee80211_tim_ie *tim_ie;
589 u8 *tim;
590 u8 tim_len;
591 bool cam;
592
593
594
595
596 if (likely(!ieee80211_is_beacon(hdr->frame_control) ||
597 !(rt2x00dev->hw->conf.flags & IEEE80211_CONF_PS)))
598 return;
599
600
601 if (skb->len <= 40 + FCS_LEN)
602 return;
603
604
605 if (!(rxdesc->dev_flags & RXDONE_MY_BSS) ||
606 !rt2x00dev->aid)
607 return;
608
609 rt2x00dev->last_beacon = jiffies;
610
611 tim = rt2x00lib_find_ie(skb->data, skb->len - FCS_LEN, WLAN_EID_TIM);
612 if (!tim)
613 return;
614
615 if (tim[1] < sizeof(*tim_ie))
616 return;
617
618 tim_len = tim[1];
619 tim_ie = (struct ieee80211_tim_ie *) &tim[2];
620
621
622
623
624 cam = ieee80211_check_tim(tim_ie, tim_len, rt2x00dev->aid);
625
626
627 cam |= (tim_ie->bitmap_ctrl & 0x01);
628
629 if (!cam && !test_bit(CONFIG_POWERSAVING, &rt2x00dev->flags))
630 queue_work(rt2x00dev->workqueue, &rt2x00dev->sleep_work);
631}
632
633static int rt2x00lib_rxdone_read_signal(struct rt2x00_dev *rt2x00dev,
634 struct rxdone_entry_desc *rxdesc)
635{
636 struct ieee80211_supported_band *sband;
637 const struct rt2x00_rate *rate;
638 unsigned int i;
639 int signal = rxdesc->signal;
640 int type = (rxdesc->dev_flags & RXDONE_SIGNAL_MASK);
641
642 switch (rxdesc->rate_mode) {
643 case RATE_MODE_CCK:
644 case RATE_MODE_OFDM:
645
646
647
648
649 if (rxdesc->dev_flags & RXDONE_SIGNAL_MCS)
650 signal = RATE_MCS(rxdesc->rate_mode, signal);
651
652 sband = &rt2x00dev->bands[rt2x00dev->curr_band];
653 for (i = 0; i < sband->n_bitrates; i++) {
654 rate = rt2x00_get_rate(sband->bitrates[i].hw_value);
655 if (((type == RXDONE_SIGNAL_PLCP) &&
656 (rate->plcp == signal)) ||
657 ((type == RXDONE_SIGNAL_BITRATE) &&
658 (rate->bitrate == signal)) ||
659 ((type == RXDONE_SIGNAL_MCS) &&
660 (rate->mcs == signal))) {
661 return i;
662 }
663 }
664 break;
665 case RATE_MODE_HT_MIX:
666 case RATE_MODE_HT_GREENFIELD:
667 if (signal >= 0 && signal <= 76)
668 return signal;
669 break;
670 default:
671 break;
672 }
673
674 rt2x00_warn(rt2x00dev, "Frame received with unrecognized signal, mode=0x%.4x, signal=0x%.4x, type=%d\n",
675 rxdesc->rate_mode, signal, type);
676 return 0;
677}
678
679void rt2x00lib_rxdone(struct queue_entry *entry, gfp_t gfp)
680{
681 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
682 struct rxdone_entry_desc rxdesc;
683 struct sk_buff *skb;
684 struct ieee80211_rx_status *rx_status;
685 unsigned int header_length;
686 int rate_idx;
687
688 if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) ||
689 !test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
690 goto submit_entry;
691
692 if (test_bit(ENTRY_DATA_IO_FAILED, &entry->flags))
693 goto submit_entry;
694
695
696
697
698
699 skb = rt2x00queue_alloc_rxskb(entry, gfp);
700 if (!skb)
701 goto submit_entry;
702
703
704
705
706 rt2x00queue_unmap_skb(entry);
707
708
709
710
711 memset(&rxdesc, 0, sizeof(rxdesc));
712 rt2x00dev->ops->lib->fill_rxdone(entry, &rxdesc);
713
714
715
716
717
718 if (unlikely(rxdesc.size == 0 ||
719 rxdesc.size > entry->queue->data_size)) {
720 rt2x00_err(rt2x00dev, "Wrong frame size %d max %d\n",
721 rxdesc.size, entry->queue->data_size);
722 dev_kfree_skb(entry->skb);
723 goto renew_skb;
724 }
725
726
727
728
729
730 header_length = ieee80211_get_hdrlen_from_skb(entry->skb);
731
732
733
734
735
736
737
738 if ((rxdesc.dev_flags & RXDONE_CRYPTO_IV) &&
739 (rxdesc.flags & RX_FLAG_IV_STRIPPED))
740 rt2x00crypto_rx_insert_iv(entry->skb, header_length,
741 &rxdesc);
742 else if (header_length &&
743 (rxdesc.size > header_length) &&
744 (rxdesc.dev_flags & RXDONE_L2PAD))
745 rt2x00queue_remove_l2pad(entry->skb, header_length);
746
747
748 skb_trim(entry->skb, rxdesc.size);
749
750
751
752
753 rate_idx = rt2x00lib_rxdone_read_signal(rt2x00dev, &rxdesc);
754 if (rxdesc.rate_mode == RATE_MODE_HT_MIX ||
755 rxdesc.rate_mode == RATE_MODE_HT_GREENFIELD)
756 rxdesc.flags |= RX_FLAG_HT;
757
758
759
760
761
762 rt2x00lib_rxdone_check_ps(rt2x00dev, entry->skb, &rxdesc);
763
764
765
766
767
768 rt2x00lib_rxdone_check_ba(rt2x00dev, entry->skb, &rxdesc);
769
770
771
772
773 rt2x00link_update_stats(rt2x00dev, entry->skb, &rxdesc);
774 rt2x00debug_update_crypto(rt2x00dev, &rxdesc);
775 rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_RXDONE, entry);
776
777
778
779
780
781 rx_status = IEEE80211_SKB_RXCB(entry->skb);
782
783
784
785
786
787
788 memset(rx_status, 0, sizeof(*rx_status));
789
790 rx_status->mactime = rxdesc.timestamp;
791 rx_status->band = rt2x00dev->curr_band;
792 rx_status->freq = rt2x00dev->curr_freq;
793 rx_status->rate_idx = rate_idx;
794 rx_status->signal = rxdesc.rssi;
795 rx_status->flag = rxdesc.flags;
796 rx_status->antenna = rt2x00dev->link.ant.active.rx;
797
798 ieee80211_rx_ni(rt2x00dev->hw, entry->skb);
799
800renew_skb:
801
802
803
804 entry->skb = skb;
805
806submit_entry:
807 entry->flags = 0;
808 rt2x00queue_index_inc(entry, Q_INDEX_DONE);
809 if (test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) &&
810 test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
811 rt2x00dev->ops->lib->clear_entry(entry);
812}
813EXPORT_SYMBOL_GPL(rt2x00lib_rxdone);
814
815
816
817
818const struct rt2x00_rate rt2x00_supported_rates[12] = {
819 {
820 .flags = DEV_RATE_CCK,
821 .bitrate = 10,
822 .ratemask = BIT(0),
823 .plcp = 0x00,
824 .mcs = RATE_MCS(RATE_MODE_CCK, 0),
825 },
826 {
827 .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
828 .bitrate = 20,
829 .ratemask = BIT(1),
830 .plcp = 0x01,
831 .mcs = RATE_MCS(RATE_MODE_CCK, 1),
832 },
833 {
834 .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
835 .bitrate = 55,
836 .ratemask = BIT(2),
837 .plcp = 0x02,
838 .mcs = RATE_MCS(RATE_MODE_CCK, 2),
839 },
840 {
841 .flags = DEV_RATE_CCK | DEV_RATE_SHORT_PREAMBLE,
842 .bitrate = 110,
843 .ratemask = BIT(3),
844 .plcp = 0x03,
845 .mcs = RATE_MCS(RATE_MODE_CCK, 3),
846 },
847 {
848 .flags = DEV_RATE_OFDM,
849 .bitrate = 60,
850 .ratemask = BIT(4),
851 .plcp = 0x0b,
852 .mcs = RATE_MCS(RATE_MODE_OFDM, 0),
853 },
854 {
855 .flags = DEV_RATE_OFDM,
856 .bitrate = 90,
857 .ratemask = BIT(5),
858 .plcp = 0x0f,
859 .mcs = RATE_MCS(RATE_MODE_OFDM, 1),
860 },
861 {
862 .flags = DEV_RATE_OFDM,
863 .bitrate = 120,
864 .ratemask = BIT(6),
865 .plcp = 0x0a,
866 .mcs = RATE_MCS(RATE_MODE_OFDM, 2),
867 },
868 {
869 .flags = DEV_RATE_OFDM,
870 .bitrate = 180,
871 .ratemask = BIT(7),
872 .plcp = 0x0e,
873 .mcs = RATE_MCS(RATE_MODE_OFDM, 3),
874 },
875 {
876 .flags = DEV_RATE_OFDM,
877 .bitrate = 240,
878 .ratemask = BIT(8),
879 .plcp = 0x09,
880 .mcs = RATE_MCS(RATE_MODE_OFDM, 4),
881 },
882 {
883 .flags = DEV_RATE_OFDM,
884 .bitrate = 360,
885 .ratemask = BIT(9),
886 .plcp = 0x0d,
887 .mcs = RATE_MCS(RATE_MODE_OFDM, 5),
888 },
889 {
890 .flags = DEV_RATE_OFDM,
891 .bitrate = 480,
892 .ratemask = BIT(10),
893 .plcp = 0x08,
894 .mcs = RATE_MCS(RATE_MODE_OFDM, 6),
895 },
896 {
897 .flags = DEV_RATE_OFDM,
898 .bitrate = 540,
899 .ratemask = BIT(11),
900 .plcp = 0x0c,
901 .mcs = RATE_MCS(RATE_MODE_OFDM, 7),
902 },
903};
904
905static void rt2x00lib_channel(struct ieee80211_channel *entry,
906 const int channel, const int tx_power,
907 const int value)
908{
909
910 entry->band = channel <= 14 ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ;
911 entry->center_freq = ieee80211_channel_to_frequency(channel,
912 entry->band);
913 entry->hw_value = value;
914 entry->max_power = tx_power;
915 entry->max_antenna_gain = 0xff;
916}
917
918static void rt2x00lib_rate(struct ieee80211_rate *entry,
919 const u16 index, const struct rt2x00_rate *rate)
920{
921 entry->flags = 0;
922 entry->bitrate = rate->bitrate;
923 entry->hw_value = index;
924 entry->hw_value_short = index;
925
926 if (rate->flags & DEV_RATE_SHORT_PREAMBLE)
927 entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE;
928}
929
930void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
931{
932 const char *mac_addr;
933
934 mac_addr = of_get_mac_address(rt2x00dev->dev->of_node);
935 if (mac_addr)
936 ether_addr_copy(eeprom_mac_addr, mac_addr);
937
938 if (!is_valid_ether_addr(eeprom_mac_addr)) {
939 eth_random_addr(eeprom_mac_addr);
940 rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", eeprom_mac_addr);
941 }
942}
943EXPORT_SYMBOL_GPL(rt2x00lib_set_mac_address);
944
945static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev,
946 struct hw_mode_spec *spec)
947{
948 struct ieee80211_hw *hw = rt2x00dev->hw;
949 struct ieee80211_channel *channels;
950 struct ieee80211_rate *rates;
951 unsigned int num_rates;
952 unsigned int i;
953
954 num_rates = 0;
955 if (spec->supported_rates & SUPPORT_RATE_CCK)
956 num_rates += 4;
957 if (spec->supported_rates & SUPPORT_RATE_OFDM)
958 num_rates += 8;
959
960 channels = kcalloc(spec->num_channels, sizeof(*channels), GFP_KERNEL);
961 if (!channels)
962 return -ENOMEM;
963
964 rates = kcalloc(num_rates, sizeof(*rates), GFP_KERNEL);
965 if (!rates)
966 goto exit_free_channels;
967
968
969
970
971 for (i = 0; i < num_rates; i++)
972 rt2x00lib_rate(&rates[i], i, rt2x00_get_rate(i));
973
974
975
976
977 for (i = 0; i < spec->num_channels; i++) {
978 rt2x00lib_channel(&channels[i],
979 spec->channels[i].channel,
980 spec->channels_info[i].max_power, i);
981 }
982
983
984
985
986
987
988 if (spec->supported_bands & SUPPORT_BAND_2GHZ) {
989 rt2x00dev->bands[NL80211_BAND_2GHZ].n_channels = 14;
990 rt2x00dev->bands[NL80211_BAND_2GHZ].n_bitrates = num_rates;
991 rt2x00dev->bands[NL80211_BAND_2GHZ].channels = channels;
992 rt2x00dev->bands[NL80211_BAND_2GHZ].bitrates = rates;
993 hw->wiphy->bands[NL80211_BAND_2GHZ] =
994 &rt2x00dev->bands[NL80211_BAND_2GHZ];
995 memcpy(&rt2x00dev->bands[NL80211_BAND_2GHZ].ht_cap,
996 &spec->ht, sizeof(spec->ht));
997 }
998
999
1000
1001
1002
1003
1004 if (spec->supported_bands & SUPPORT_BAND_5GHZ) {
1005 rt2x00dev->bands[NL80211_BAND_5GHZ].n_channels =
1006 spec->num_channels - 14;
1007 rt2x00dev->bands[NL80211_BAND_5GHZ].n_bitrates =
1008 num_rates - 4;
1009 rt2x00dev->bands[NL80211_BAND_5GHZ].channels = &channels[14];
1010 rt2x00dev->bands[NL80211_BAND_5GHZ].bitrates = &rates[4];
1011 hw->wiphy->bands[NL80211_BAND_5GHZ] =
1012 &rt2x00dev->bands[NL80211_BAND_5GHZ];
1013 memcpy(&rt2x00dev->bands[NL80211_BAND_5GHZ].ht_cap,
1014 &spec->ht, sizeof(spec->ht));
1015 }
1016
1017 return 0;
1018
1019 exit_free_channels:
1020 kfree(channels);
1021 rt2x00_err(rt2x00dev, "Allocation ieee80211 modes failed\n");
1022 return -ENOMEM;
1023}
1024
1025static void rt2x00lib_remove_hw(struct rt2x00_dev *rt2x00dev)
1026{
1027 if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags))
1028 ieee80211_unregister_hw(rt2x00dev->hw);
1029
1030 if (likely(rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ])) {
1031 kfree(rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ]->channels);
1032 kfree(rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ]->bitrates);
1033 rt2x00dev->hw->wiphy->bands[NL80211_BAND_2GHZ] = NULL;
1034 rt2x00dev->hw->wiphy->bands[NL80211_BAND_5GHZ] = NULL;
1035 }
1036
1037 kfree(rt2x00dev->spec.channels_info);
1038}
1039
1040static int rt2x00lib_probe_hw(struct rt2x00_dev *rt2x00dev)
1041{
1042 struct hw_mode_spec *spec = &rt2x00dev->spec;
1043 int status;
1044
1045 if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags))
1046 return 0;
1047
1048
1049
1050
1051 status = rt2x00lib_probe_hw_modes(rt2x00dev, spec);
1052 if (status)
1053 return status;
1054
1055
1056
1057
1058 rt2x00dev->hw->queues = rt2x00dev->ops->tx_queues;
1059
1060
1061
1062
1063 rt2x00dev->hw->extra_tx_headroom =
1064 max_t(unsigned int, IEEE80211_TX_STATUS_HEADROOM,
1065 rt2x00dev->extra_tx_headroom);
1066
1067
1068
1069
1070 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_L2PAD))
1071 rt2x00dev->hw->extra_tx_headroom += RT2X00_L2PAD_SIZE;
1072 else if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DMA))
1073 rt2x00dev->hw->extra_tx_headroom += RT2X00_ALIGN_SIZE;
1074
1075
1076
1077
1078 rt2x00dev->hw->sta_data_size = sizeof(struct rt2x00_sta);
1079
1080
1081
1082
1083 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_TXSTATUS_FIFO)) {
1084
1085
1086
1087
1088
1089
1090
1091 int kfifo_size =
1092 roundup_pow_of_two(rt2x00dev->ops->tx_queues *
1093 rt2x00dev->tx->limit *
1094 sizeof(u32));
1095
1096 status = kfifo_alloc(&rt2x00dev->txstatus_fifo, kfifo_size,
1097 GFP_KERNEL);
1098 if (status)
1099 return status;
1100 }
1101
1102
1103
1104
1105
1106
1107#define RT2X00_TASKLET_INIT(taskletname) \
1108 if (rt2x00dev->ops->lib->taskletname) { \
1109 tasklet_init(&rt2x00dev->taskletname, \
1110 rt2x00dev->ops->lib->taskletname, \
1111 (unsigned long)rt2x00dev); \
1112 }
1113
1114 RT2X00_TASKLET_INIT(txstatus_tasklet);
1115 RT2X00_TASKLET_INIT(pretbtt_tasklet);
1116 RT2X00_TASKLET_INIT(tbtt_tasklet);
1117 RT2X00_TASKLET_INIT(rxdone_tasklet);
1118 RT2X00_TASKLET_INIT(autowake_tasklet);
1119
1120#undef RT2X00_TASKLET_INIT
1121
1122
1123
1124
1125 status = ieee80211_register_hw(rt2x00dev->hw);
1126 if (status)
1127 return status;
1128
1129 set_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags);
1130
1131 return 0;
1132}
1133
1134
1135
1136
1137static void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev)
1138{
1139 if (!test_and_clear_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags))
1140 return;
1141
1142
1143
1144
1145 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1146 rt2x00rfkill_unregister(rt2x00dev);
1147
1148
1149
1150
1151 rt2x00dev->ops->lib->uninitialize(rt2x00dev);
1152
1153
1154
1155
1156 rt2x00queue_uninitialize(rt2x00dev);
1157}
1158
1159static int rt2x00lib_initialize(struct rt2x00_dev *rt2x00dev)
1160{
1161 int status;
1162
1163 if (test_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags))
1164 return 0;
1165
1166
1167
1168
1169 status = rt2x00queue_initialize(rt2x00dev);
1170 if (status)
1171 return status;
1172
1173
1174
1175
1176 status = rt2x00dev->ops->lib->initialize(rt2x00dev);
1177 if (status) {
1178 rt2x00queue_uninitialize(rt2x00dev);
1179 return status;
1180 }
1181
1182 set_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags);
1183
1184
1185
1186
1187 if (rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1188 rt2x00rfkill_register(rt2x00dev);
1189
1190 return 0;
1191}
1192
1193int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
1194{
1195 int retval;
1196
1197 if (test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
1198 return 0;
1199
1200
1201
1202
1203
1204 retval = rt2x00lib_load_firmware(rt2x00dev);
1205 if (retval)
1206 return retval;
1207
1208
1209
1210
1211 retval = rt2x00lib_initialize(rt2x00dev);
1212 if (retval)
1213 return retval;
1214
1215 rt2x00dev->intf_ap_count = 0;
1216 rt2x00dev->intf_sta_count = 0;
1217 rt2x00dev->intf_associated = 0;
1218
1219
1220 retval = rt2x00lib_enable_radio(rt2x00dev);
1221 if (retval)
1222 return retval;
1223
1224 set_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags);
1225
1226 return 0;
1227}
1228
1229void rt2x00lib_stop(struct rt2x00_dev *rt2x00dev)
1230{
1231 if (!test_and_clear_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
1232 return;
1233
1234
1235
1236
1237
1238 rt2x00lib_disable_radio(rt2x00dev);
1239
1240 rt2x00dev->intf_ap_count = 0;
1241 rt2x00dev->intf_sta_count = 0;
1242 rt2x00dev->intf_associated = 0;
1243}
1244
1245static inline void rt2x00lib_set_if_combinations(struct rt2x00_dev *rt2x00dev)
1246{
1247 struct ieee80211_iface_limit *if_limit;
1248 struct ieee80211_iface_combination *if_combination;
1249
1250 if (rt2x00dev->ops->max_ap_intf < 2)
1251 return;
1252
1253
1254
1255
1256 if_limit = &rt2x00dev->if_limits_ap;
1257 if_limit->max = rt2x00dev->ops->max_ap_intf;
1258 if_limit->types = BIT(NL80211_IFTYPE_AP);
1259#ifdef CONFIG_MAC80211_MESH
1260 if_limit->types |= BIT(NL80211_IFTYPE_MESH_POINT);
1261#endif
1262
1263
1264
1265
1266 if_combination = &rt2x00dev->if_combinations[IF_COMB_AP];
1267 if_combination->limits = if_limit;
1268 if_combination->n_limits = 1;
1269 if_combination->max_interfaces = if_limit->max;
1270 if_combination->num_different_channels = 1;
1271
1272
1273
1274
1275 rt2x00dev->hw->wiphy->iface_combinations = rt2x00dev->if_combinations;
1276 rt2x00dev->hw->wiphy->n_iface_combinations = 1;
1277}
1278
1279static unsigned int rt2x00dev_extra_tx_headroom(struct rt2x00_dev *rt2x00dev)
1280{
1281 if (WARN_ON(!rt2x00dev->tx))
1282 return 0;
1283
1284 if (rt2x00_is_usb(rt2x00dev))
1285 return rt2x00dev->tx[0].winfo_size + rt2x00dev->tx[0].desc_size;
1286
1287 return rt2x00dev->tx[0].winfo_size;
1288}
1289
1290
1291
1292
1293int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
1294{
1295 int retval = -ENOMEM;
1296
1297
1298
1299
1300 rt2x00lib_set_if_combinations(rt2x00dev);
1301
1302
1303
1304
1305 if (rt2x00dev->ops->drv_data_size > 0) {
1306 rt2x00dev->drv_data = kzalloc(rt2x00dev->ops->drv_data_size,
1307 GFP_KERNEL);
1308 if (!rt2x00dev->drv_data) {
1309 retval = -ENOMEM;
1310 goto exit;
1311 }
1312 }
1313
1314 spin_lock_init(&rt2x00dev->irqmask_lock);
1315 mutex_init(&rt2x00dev->csr_mutex);
1316 mutex_init(&rt2x00dev->conf_mutex);
1317 INIT_LIST_HEAD(&rt2x00dev->bar_list);
1318 spin_lock_init(&rt2x00dev->bar_list_lock);
1319
1320 set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1321
1322
1323
1324
1325
1326 rt2x00dev->hw->vif_data_size = sizeof(struct rt2x00_intf);
1327
1328
1329
1330
1331
1332 rt2x00dev->hw->wiphy->addr_mask[ETH_ALEN - 1] =
1333 (rt2x00dev->ops->max_ap_intf - 1);
1334
1335
1336
1337
1338 rt2x00dev->workqueue =
1339 alloc_ordered_workqueue("%s", 0, wiphy_name(rt2x00dev->hw->wiphy));
1340 if (!rt2x00dev->workqueue) {
1341 retval = -ENOMEM;
1342 goto exit;
1343 }
1344
1345 INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled);
1346 INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup);
1347 INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep);
1348
1349
1350
1351
1352 retval = rt2x00dev->ops->lib->probe_hw(rt2x00dev);
1353 if (retval) {
1354 rt2x00_err(rt2x00dev, "Failed to allocate device\n");
1355 goto exit;
1356 }
1357
1358
1359
1360
1361 retval = rt2x00queue_allocate(rt2x00dev);
1362 if (retval)
1363 goto exit;
1364
1365
1366 rt2x00dev->extra_tx_headroom = rt2x00dev_extra_tx_headroom(rt2x00dev);
1367
1368
1369
1370
1371
1372
1373 rt2x00dev->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
1374 if (rt2x00dev->bcn->limit > 0)
1375 rt2x00dev->hw->wiphy->interface_modes |=
1376 BIT(NL80211_IFTYPE_ADHOC) |
1377#ifdef CONFIG_MAC80211_MESH
1378 BIT(NL80211_IFTYPE_MESH_POINT) |
1379#endif
1380#ifdef CONFIG_WIRELESS_WDS
1381 BIT(NL80211_IFTYPE_WDS) |
1382#endif
1383 BIT(NL80211_IFTYPE_AP);
1384
1385 rt2x00dev->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
1386
1387
1388
1389
1390 retval = rt2x00lib_probe_hw(rt2x00dev);
1391 if (retval) {
1392 rt2x00_err(rt2x00dev, "Failed to initialize hw\n");
1393 goto exit;
1394 }
1395
1396
1397
1398
1399 rt2x00link_register(rt2x00dev);
1400 rt2x00leds_register(rt2x00dev);
1401 rt2x00debug_register(rt2x00dev);
1402
1403
1404
1405
1406 if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1407 rt2x00rfkill_register(rt2x00dev);
1408
1409 return 0;
1410
1411exit:
1412 rt2x00lib_remove_dev(rt2x00dev);
1413
1414 return retval;
1415}
1416EXPORT_SYMBOL_GPL(rt2x00lib_probe_dev);
1417
1418void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
1419{
1420 clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1421
1422
1423
1424
1425 if (!rt2x00_has_cap_flag(rt2x00dev, REQUIRE_DELAYED_RFKILL))
1426 rt2x00rfkill_unregister(rt2x00dev);
1427
1428
1429
1430
1431 rt2x00lib_disable_radio(rt2x00dev);
1432
1433
1434
1435
1436 cancel_work_sync(&rt2x00dev->intf_work);
1437 cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
1438 cancel_work_sync(&rt2x00dev->sleep_work);
1439
1440
1441
1442
1443 tasklet_kill(&rt2x00dev->txstatus_tasklet);
1444 tasklet_kill(&rt2x00dev->pretbtt_tasklet);
1445 tasklet_kill(&rt2x00dev->tbtt_tasklet);
1446 tasklet_kill(&rt2x00dev->rxdone_tasklet);
1447 tasklet_kill(&rt2x00dev->autowake_tasklet);
1448
1449
1450
1451
1452 rt2x00lib_uninitialize(rt2x00dev);
1453
1454 if (rt2x00dev->workqueue)
1455 destroy_workqueue(rt2x00dev->workqueue);
1456
1457
1458
1459
1460 kfifo_free(&rt2x00dev->txstatus_fifo);
1461
1462
1463
1464
1465 rt2x00debug_deregister(rt2x00dev);
1466 rt2x00leds_unregister(rt2x00dev);
1467
1468
1469
1470
1471 rt2x00lib_remove_hw(rt2x00dev);
1472
1473
1474
1475
1476 rt2x00lib_free_firmware(rt2x00dev);
1477
1478
1479
1480
1481 rt2x00queue_free(rt2x00dev);
1482
1483
1484
1485
1486 kfree(rt2x00dev->drv_data);
1487}
1488EXPORT_SYMBOL_GPL(rt2x00lib_remove_dev);
1489
1490
1491
1492
1493#ifdef CONFIG_PM
1494int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state)
1495{
1496 rt2x00_dbg(rt2x00dev, "Going to sleep\n");
1497
1498
1499
1500
1501 if (!test_and_clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
1502 return 0;
1503
1504
1505
1506
1507 rt2x00lib_uninitialize(rt2x00dev);
1508
1509
1510
1511
1512 rt2x00leds_suspend(rt2x00dev);
1513 rt2x00debug_deregister(rt2x00dev);
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526 if (rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_SLEEP))
1527 rt2x00_warn(rt2x00dev, "Device failed to enter sleep state, continue suspending\n");
1528
1529 return 0;
1530}
1531EXPORT_SYMBOL_GPL(rt2x00lib_suspend);
1532
1533int rt2x00lib_resume(struct rt2x00_dev *rt2x00dev)
1534{
1535 rt2x00_dbg(rt2x00dev, "Waking up\n");
1536
1537
1538
1539
1540 rt2x00debug_register(rt2x00dev);
1541 rt2x00leds_resume(rt2x00dev);
1542
1543
1544
1545
1546 set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
1547
1548 return 0;
1549}
1550EXPORT_SYMBOL_GPL(rt2x00lib_resume);
1551#endif
1552
1553
1554
1555
1556MODULE_AUTHOR(DRV_PROJECT);
1557MODULE_VERSION(DRV_VERSION);
1558MODULE_DESCRIPTION("rt2x00 library");
1559MODULE_LICENSE("GPL");
1560