1
2
3
4
5
6
7
8
9
10
11#include <net/mac80211.h>
12#include <net/ieee80211_radiotap.h>
13#include <linux/module.h>
14#include <linux/init.h>
15#include <linux/netdevice.h>
16#include <linux/types.h>
17#include <linux/slab.h>
18#include <linux/skbuff.h>
19#include <linux/etherdevice.h>
20#include <linux/if_arp.h>
21#include <linux/wireless.h>
22#include <linux/rtnetlink.h>
23#include <linux/bitmap.h>
24#include <linux/pm_qos_params.h>
25#include <net/net_namespace.h>
26#include <net/cfg80211.h>
27
28#include "ieee80211_i.h"
29#include "driver-ops.h"
30#include "rate.h"
31#include "mesh.h"
32#include "wep.h"
33#include "wme.h"
34#include "aes_ccm.h"
35#include "led.h"
36#include "cfg.h"
37#include "debugfs.h"
38#include "debugfs_netdev.h"
39
40
41
42
43
44struct ieee80211_tx_status_rtap_hdr {
45 struct ieee80211_radiotap_header hdr;
46 u8 rate;
47 u8 padding_for_rate;
48 __le16 tx_flags;
49 u8 data_retries;
50} __attribute__ ((packed));
51
52
53void ieee80211_configure_filter(struct ieee80211_local *local)
54{
55 u64 mc;
56 unsigned int changed_flags;
57 unsigned int new_flags = 0;
58
59 if (atomic_read(&local->iff_promiscs))
60 new_flags |= FIF_PROMISC_IN_BSS;
61
62 if (atomic_read(&local->iff_allmultis))
63 new_flags |= FIF_ALLMULTI;
64
65 if (local->monitors || local->scanning)
66 new_flags |= FIF_BCN_PRBRESP_PROMISC;
67
68 if (local->fif_fcsfail)
69 new_flags |= FIF_FCSFAIL;
70
71 if (local->fif_plcpfail)
72 new_flags |= FIF_PLCPFAIL;
73
74 if (local->fif_control)
75 new_flags |= FIF_CONTROL;
76
77 if (local->fif_other_bss)
78 new_flags |= FIF_OTHER_BSS;
79
80 if (local->fif_pspoll)
81 new_flags |= FIF_PSPOLL;
82
83 spin_lock_bh(&local->filter_lock);
84 changed_flags = local->filter_flags ^ new_flags;
85
86 mc = drv_prepare_multicast(local, local->mc_count, local->mc_list);
87 spin_unlock_bh(&local->filter_lock);
88
89
90 new_flags |= (1<<31);
91
92 drv_configure_filter(local, changed_flags, &new_flags, mc);
93
94 WARN_ON(new_flags & (1<<31));
95
96 local->filter_flags = new_flags & ~(1<<31);
97}
98
99static void ieee80211_reconfig_filter(struct work_struct *work)
100{
101 struct ieee80211_local *local =
102 container_of(work, struct ieee80211_local, reconfig_filter);
103
104 ieee80211_configure_filter(local);
105}
106
107int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
108{
109 struct ieee80211_channel *chan, *scan_chan;
110 int ret = 0;
111 int power;
112 enum nl80211_channel_type channel_type;
113
114 might_sleep();
115
116 scan_chan = local->scan_channel;
117
118 if (scan_chan) {
119 chan = scan_chan;
120 channel_type = NL80211_CHAN_NO_HT;
121 } else {
122 chan = local->oper_channel;
123 channel_type = local->oper_channel_type;
124 }
125
126 if (chan != local->hw.conf.channel ||
127 channel_type != local->hw.conf.channel_type) {
128 local->hw.conf.channel = chan;
129 local->hw.conf.channel_type = channel_type;
130 changed |= IEEE80211_CONF_CHANGE_CHANNEL;
131 }
132
133 if (scan_chan)
134 power = chan->max_power;
135 else
136 power = local->power_constr_level ?
137 (chan->max_power - local->power_constr_level) :
138 chan->max_power;
139
140 if (local->user_power_level >= 0)
141 power = min(power, local->user_power_level);
142
143 if (local->hw.conf.power_level != power) {
144 changed |= IEEE80211_CONF_CHANGE_POWER;
145 local->hw.conf.power_level = power;
146 }
147
148 if (changed && local->open_count) {
149 ret = drv_config(local, changed);
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165 }
166
167 return ret;
168}
169
170void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
171 u32 changed)
172{
173 struct ieee80211_local *local = sdata->local;
174 static const u8 zero[ETH_ALEN] = { 0 };
175
176 if (!changed)
177 return;
178
179 if (sdata->vif.type == NL80211_IFTYPE_STATION) {
180
181
182
183
184
185 if (sdata->vif.bss_conf.assoc)
186 sdata->vif.bss_conf.bssid = sdata->u.mgd.bssid;
187 else
188 sdata->vif.bss_conf.bssid = zero;
189 } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC)
190 sdata->vif.bss_conf.bssid = sdata->u.ibss.bssid;
191 else if (sdata->vif.type == NL80211_IFTYPE_AP)
192 sdata->vif.bss_conf.bssid = sdata->dev->dev_addr;
193 else if (ieee80211_vif_is_mesh(&sdata->vif)) {
194 sdata->vif.bss_conf.bssid = zero;
195 } else {
196 WARN_ON(1);
197 return;
198 }
199
200 switch (sdata->vif.type) {
201 case NL80211_IFTYPE_AP:
202 case NL80211_IFTYPE_ADHOC:
203 case NL80211_IFTYPE_MESH_POINT:
204 break;
205 default:
206
207 changed &= ~BSS_CHANGED_BEACON_ENABLED;
208 if (WARN_ON(changed & BSS_CHANGED_BEACON))
209 return;
210 break;
211 }
212
213 if (changed & BSS_CHANGED_BEACON_ENABLED) {
214 if (local->quiescing || !netif_running(sdata->dev) ||
215 test_bit(SCAN_SW_SCANNING, &local->scanning)) {
216 sdata->vif.bss_conf.enable_beacon = false;
217 } else {
218
219
220
221
222 switch (sdata->vif.type) {
223 case NL80211_IFTYPE_AP:
224 sdata->vif.bss_conf.enable_beacon =
225 !!rcu_dereference(sdata->u.ap.beacon);
226 break;
227 case NL80211_IFTYPE_ADHOC:
228 sdata->vif.bss_conf.enable_beacon =
229 !!rcu_dereference(sdata->u.ibss.presp);
230 break;
231 case NL80211_IFTYPE_MESH_POINT:
232 sdata->vif.bss_conf.enable_beacon = true;
233 break;
234 default:
235
236 WARN_ON(1);
237 break;
238 }
239 }
240 }
241
242 drv_bss_info_changed(local, &sdata->vif,
243 &sdata->vif.bss_conf, changed);
244}
245
246u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata)
247{
248 sdata->vif.bss_conf.use_cts_prot = false;
249 sdata->vif.bss_conf.use_short_preamble = false;
250 sdata->vif.bss_conf.use_short_slot = false;
251 return BSS_CHANGED_ERP_CTS_PROT |
252 BSS_CHANGED_ERP_PREAMBLE |
253 BSS_CHANGED_ERP_SLOT;
254}
255
256void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
257 struct sk_buff *skb)
258{
259 struct ieee80211_local *local = hw_to_local(hw);
260 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
261 int tmp;
262
263 skb->pkt_type = IEEE80211_TX_STATUS_MSG;
264 skb_queue_tail(info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS ?
265 &local->skb_queue : &local->skb_queue_unreliable, skb);
266 tmp = skb_queue_len(&local->skb_queue) +
267 skb_queue_len(&local->skb_queue_unreliable);
268 while (tmp > IEEE80211_IRQSAFE_QUEUE_LIMIT &&
269 (skb = skb_dequeue(&local->skb_queue_unreliable))) {
270 dev_kfree_skb_irq(skb);
271 tmp--;
272 I802_DEBUG_INC(local->tx_status_drop);
273 }
274 tasklet_schedule(&local->tasklet);
275}
276EXPORT_SYMBOL(ieee80211_tx_status_irqsafe);
277
278static void ieee80211_tasklet_handler(unsigned long data)
279{
280 struct ieee80211_local *local = (struct ieee80211_local *) data;
281 struct sk_buff *skb;
282 struct ieee80211_ra_tid *ra_tid;
283
284 while ((skb = skb_dequeue(&local->skb_queue)) ||
285 (skb = skb_dequeue(&local->skb_queue_unreliable))) {
286 switch (skb->pkt_type) {
287 case IEEE80211_RX_MSG:
288
289
290 skb->pkt_type = 0;
291 ieee80211_rx(local_to_hw(local), skb);
292 break;
293 case IEEE80211_TX_STATUS_MSG:
294 skb->pkt_type = 0;
295 ieee80211_tx_status(local_to_hw(local), skb);
296 break;
297 case IEEE80211_DELBA_MSG:
298 ra_tid = (struct ieee80211_ra_tid *) &skb->cb;
299 ieee80211_stop_tx_ba_cb(local_to_hw(local),
300 ra_tid->ra, ra_tid->tid);
301 dev_kfree_skb(skb);
302 break;
303 case IEEE80211_ADDBA_MSG:
304 ra_tid = (struct ieee80211_ra_tid *) &skb->cb;
305 ieee80211_start_tx_ba_cb(local_to_hw(local),
306 ra_tid->ra, ra_tid->tid);
307 dev_kfree_skb(skb);
308 break ;
309 default:
310 WARN(1, "mac80211: Packet is of unknown type %d\n",
311 skb->pkt_type);
312 dev_kfree_skb(skb);
313 break;
314 }
315 }
316}
317
318static void ieee80211_handle_filtered_frame(struct ieee80211_local *local,
319 struct sta_info *sta,
320 struct sk_buff *skb)
321{
322 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347 goto drop;
348
349 sta->tx_filtered_count++;
350
351
352
353
354
355
356 set_sta_flags(sta, WLAN_STA_CLEAR_PS_FILT);
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388 if (test_sta_flags(sta, WLAN_STA_PS) &&
389 skb_queue_len(&sta->tx_filtered) < STA_MAX_TX_BUFFER) {
390 skb_queue_tail(&sta->tx_filtered, skb);
391 return;
392 }
393
394 if (!test_sta_flags(sta, WLAN_STA_PS) &&
395 !(info->flags & IEEE80211_TX_INTFL_RETRIED)) {
396
397 info->flags |= IEEE80211_TX_INTFL_RETRIED;
398 ieee80211_add_pending_skb(local, skb);
399 return;
400 }
401
402 drop:
403#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
404 if (net_ratelimit())
405 printk(KERN_DEBUG "%s: dropped TX filtered frame, "
406 "queue_len=%d PS=%d @%lu\n",
407 wiphy_name(local->hw.wiphy),
408 skb_queue_len(&sta->tx_filtered),
409 !!test_sta_flags(sta, WLAN_STA_PS), jiffies);
410#endif
411 dev_kfree_skb(skb);
412}
413
414void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
415{
416 struct sk_buff *skb2;
417 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
418 struct ieee80211_local *local = hw_to_local(hw);
419 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
420 u16 frag, type;
421 __le16 fc;
422 struct ieee80211_supported_band *sband;
423 struct ieee80211_tx_status_rtap_hdr *rthdr;
424 struct ieee80211_sub_if_data *sdata;
425 struct net_device *prev_dev = NULL;
426 struct sta_info *sta;
427 int retry_count = -1, i;
428
429 for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
430
431 if (i >= hw->max_rates) {
432 info->status.rates[i].idx = -1;
433 info->status.rates[i].count = 0;
434 }
435
436 retry_count += info->status.rates[i].count;
437 }
438 if (retry_count < 0)
439 retry_count = 0;
440
441 rcu_read_lock();
442
443 sband = local->hw.wiphy->bands[info->band];
444
445 sta = sta_info_get(local, hdr->addr1);
446
447 if (sta) {
448 if (!(info->flags & IEEE80211_TX_STAT_ACK) &&
449 test_sta_flags(sta, WLAN_STA_PS)) {
450
451
452
453
454 ieee80211_handle_filtered_frame(local, sta, skb);
455 rcu_read_unlock();
456 return;
457 }
458
459 fc = hdr->frame_control;
460
461 if ((info->flags & IEEE80211_TX_STAT_AMPDU_NO_BACK) &&
462 (ieee80211_is_data_qos(fc))) {
463 u16 tid, ssn;
464 u8 *qc;
465
466 qc = ieee80211_get_qos_ctl(hdr);
467 tid = qc[0] & 0xf;
468 ssn = ((le16_to_cpu(hdr->seq_ctrl) + 0x10)
469 & IEEE80211_SCTL_SEQ);
470 ieee80211_send_bar(sta->sdata, hdr->addr1,
471 tid, ssn);
472 }
473
474 if (info->flags & IEEE80211_TX_STAT_TX_FILTERED) {
475 ieee80211_handle_filtered_frame(local, sta, skb);
476 rcu_read_unlock();
477 return;
478 } else {
479 if (!(info->flags & IEEE80211_TX_STAT_ACK))
480 sta->tx_retry_failed++;
481 sta->tx_retry_count += retry_count;
482 }
483
484 rate_control_tx_status(local, sband, sta, skb);
485 if (ieee80211_vif_is_mesh(&sta->sdata->vif))
486 ieee80211s_update_metric(local, sta, skb);
487 }
488
489 rcu_read_unlock();
490
491 ieee80211_led_tx(local, 0);
492
493
494
495
496
497
498 frag = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG;
499 type = le16_to_cpu(hdr->frame_control) & IEEE80211_FCTL_FTYPE;
500
501 if (info->flags & IEEE80211_TX_STAT_ACK) {
502 if (frag == 0) {
503 local->dot11TransmittedFrameCount++;
504 if (is_multicast_ether_addr(hdr->addr1))
505 local->dot11MulticastTransmittedFrameCount++;
506 if (retry_count > 0)
507 local->dot11RetryCount++;
508 if (retry_count > 1)
509 local->dot11MultipleRetryCount++;
510 }
511
512
513
514
515
516 if (!is_multicast_ether_addr(hdr->addr1) ||
517 type == IEEE80211_FTYPE_DATA ||
518 type == IEEE80211_FTYPE_MGMT)
519 local->dot11TransmittedFragmentCount++;
520 } else {
521 if (frag == 0)
522 local->dot11FailedCount++;
523 }
524
525
526 skb_orphan(skb);
527
528
529
530
531
532 if (!local->monitors && !local->cooked_mntrs) {
533 dev_kfree_skb(skb);
534 return;
535 }
536
537
538
539 if (skb_headroom(skb) < sizeof(*rthdr)) {
540 printk(KERN_ERR "ieee80211_tx_status: headroom too small\n");
541 dev_kfree_skb(skb);
542 return;
543 }
544
545 rthdr = (struct ieee80211_tx_status_rtap_hdr *)
546 skb_push(skb, sizeof(*rthdr));
547
548 memset(rthdr, 0, sizeof(*rthdr));
549 rthdr->hdr.it_len = cpu_to_le16(sizeof(*rthdr));
550 rthdr->hdr.it_present =
551 cpu_to_le32((1 << IEEE80211_RADIOTAP_TX_FLAGS) |
552 (1 << IEEE80211_RADIOTAP_DATA_RETRIES) |
553 (1 << IEEE80211_RADIOTAP_RATE));
554
555 if (!(info->flags & IEEE80211_TX_STAT_ACK) &&
556 !is_multicast_ether_addr(hdr->addr1))
557 rthdr->tx_flags |= cpu_to_le16(IEEE80211_RADIOTAP_F_TX_FAIL);
558
559
560
561
562
563
564 if ((info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) ||
565 (info->status.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT))
566 rthdr->tx_flags |= cpu_to_le16(IEEE80211_RADIOTAP_F_TX_CTS);
567 else if (info->status.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS)
568 rthdr->tx_flags |= cpu_to_le16(IEEE80211_RADIOTAP_F_TX_RTS);
569 if (info->status.rates[0].idx >= 0 &&
570 !(info->status.rates[0].flags & IEEE80211_TX_RC_MCS))
571 rthdr->rate = sband->bitrates[
572 info->status.rates[0].idx].bitrate / 5;
573
574
575 rthdr->data_retries = retry_count;
576
577
578 skb_set_mac_header(skb, 0);
579 skb->ip_summed = CHECKSUM_UNNECESSARY;
580 skb->pkt_type = PACKET_OTHERHOST;
581 skb->protocol = htons(ETH_P_802_2);
582 memset(skb->cb, 0, sizeof(skb->cb));
583
584 rcu_read_lock();
585 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
586 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
587 if (!netif_running(sdata->dev))
588 continue;
589
590 if (prev_dev) {
591 skb2 = skb_clone(skb, GFP_ATOMIC);
592 if (skb2) {
593 skb2->dev = prev_dev;
594 netif_rx(skb2);
595 }
596 }
597
598 prev_dev = sdata->dev;
599 }
600 }
601 if (prev_dev) {
602 skb->dev = prev_dev;
603 netif_rx(skb);
604 skb = NULL;
605 }
606 rcu_read_unlock();
607 dev_kfree_skb(skb);
608}
609EXPORT_SYMBOL(ieee80211_tx_status);
610
611static void ieee80211_restart_work(struct work_struct *work)
612{
613 struct ieee80211_local *local =
614 container_of(work, struct ieee80211_local, restart_work);
615
616 rtnl_lock();
617 ieee80211_reconfig(local);
618 rtnl_unlock();
619}
620
621void ieee80211_restart_hw(struct ieee80211_hw *hw)
622{
623 struct ieee80211_local *local = hw_to_local(hw);
624
625
626 ieee80211_stop_queues_by_reason(hw,
627 IEEE80211_QUEUE_STOP_REASON_SUSPEND);
628
629 schedule_work(&local->restart_work);
630}
631EXPORT_SYMBOL(ieee80211_restart_hw);
632
633struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
634 const struct ieee80211_ops *ops)
635{
636 struct ieee80211_local *local;
637 int priv_size, i;
638 struct wiphy *wiphy;
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655 priv_size = ALIGN(sizeof(*local), NETDEV_ALIGN) + priv_data_len;
656
657 wiphy = wiphy_new(&mac80211_config_ops, priv_size);
658
659 if (!wiphy)
660 return NULL;
661
662 wiphy->netnsok = true;
663 wiphy->privid = mac80211_wiphy_privid;
664
665
666 wiphy->bss_priv_size = sizeof(struct ieee80211_bss) -
667 sizeof(struct cfg80211_bss);
668
669 local = wiphy_priv(wiphy);
670
671 local->hw.wiphy = wiphy;
672
673 local->hw.priv = (char *)local + ALIGN(sizeof(*local), NETDEV_ALIGN);
674
675 BUG_ON(!ops->tx);
676 BUG_ON(!ops->start);
677 BUG_ON(!ops->stop);
678 BUG_ON(!ops->config);
679 BUG_ON(!ops->add_interface);
680 BUG_ON(!ops->remove_interface);
681 BUG_ON(!ops->configure_filter);
682 local->ops = ops;
683
684
685 local->hw.queues = 1;
686 local->hw.max_rates = 1;
687 local->hw.conf.long_frame_max_tx_count = wiphy->retry_long;
688 local->hw.conf.short_frame_max_tx_count = wiphy->retry_short;
689 local->user_power_level = -1;
690
691 INIT_LIST_HEAD(&local->interfaces);
692 mutex_init(&local->iflist_mtx);
693 mutex_init(&local->scan_mtx);
694
695 spin_lock_init(&local->key_lock);
696 spin_lock_init(&local->filter_lock);
697 spin_lock_init(&local->queue_stop_reason_lock);
698
699 INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work);
700
701 INIT_WORK(&local->restart_work, ieee80211_restart_work);
702
703 INIT_WORK(&local->reconfig_filter, ieee80211_reconfig_filter);
704
705 INIT_WORK(&local->dynamic_ps_enable_work,
706 ieee80211_dynamic_ps_enable_work);
707 INIT_WORK(&local->dynamic_ps_disable_work,
708 ieee80211_dynamic_ps_disable_work);
709 setup_timer(&local->dynamic_ps_timer,
710 ieee80211_dynamic_ps_timer, (unsigned long) local);
711
712 sta_info_init(local);
713
714 for (i = 0; i < IEEE80211_MAX_QUEUES; i++)
715 skb_queue_head_init(&local->pending[i]);
716 tasklet_init(&local->tx_pending_tasklet, ieee80211_tx_pending,
717 (unsigned long)local);
718
719 tasklet_init(&local->tasklet,
720 ieee80211_tasklet_handler,
721 (unsigned long) local);
722
723 skb_queue_head_init(&local->skb_queue);
724 skb_queue_head_init(&local->skb_queue_unreliable);
725
726 spin_lock_init(&local->ampdu_lock);
727
728 return local_to_hw(local);
729}
730EXPORT_SYMBOL(ieee80211_alloc_hw);
731
732int ieee80211_register_hw(struct ieee80211_hw *hw)
733{
734 struct ieee80211_local *local = hw_to_local(hw);
735 int result;
736 enum ieee80211_band band;
737 int channels, i, j, max_bitrates;
738 bool supp_ht;
739 static const u32 cipher_suites[] = {
740 WLAN_CIPHER_SUITE_WEP40,
741 WLAN_CIPHER_SUITE_WEP104,
742 WLAN_CIPHER_SUITE_TKIP,
743 WLAN_CIPHER_SUITE_CCMP,
744
745
746 WLAN_CIPHER_SUITE_AES_CMAC
747 };
748
749
750
751
752
753
754 channels = 0;
755 max_bitrates = 0;
756 supp_ht = false;
757 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
758 struct ieee80211_supported_band *sband;
759
760 sband = local->hw.wiphy->bands[band];
761 if (!sband)
762 continue;
763 if (!local->oper_channel) {
764
765 local->hw.conf.channel =
766 local->oper_channel = &sband->channels[0];
767 local->hw.conf.channel_type = NL80211_CHAN_NO_HT;
768 }
769 channels += sband->n_channels;
770
771 if (max_bitrates < sband->n_bitrates)
772 max_bitrates = sband->n_bitrates;
773 supp_ht = supp_ht || sband->ht_cap.ht_supported;
774 }
775
776 local->int_scan_req = kzalloc(sizeof(*local->int_scan_req) +
777 sizeof(void *) * channels, GFP_KERNEL);
778 if (!local->int_scan_req)
779 return -ENOMEM;
780
781
782 if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_AP))
783 local->hw.wiphy->interface_modes |= BIT(NL80211_IFTYPE_AP_VLAN);
784
785
786 local->hw.wiphy->interface_modes |= BIT(NL80211_IFTYPE_MONITOR);
787
788 if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
789 local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
790 else if (local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)
791 local->hw.wiphy->signal_type = CFG80211_SIGNAL_TYPE_UNSPEC;
792
793
794
795
796
797
798
799 local->scan_ies_len = 4 + max_bitrates;
800 if (supp_ht)
801 local->scan_ies_len += 2 + sizeof(struct ieee80211_ht_cap);
802
803 if (!local->ops->hw_scan) {
804
805 local->hw.wiphy->max_scan_ssids = 4;
806 local->hw.wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN;
807 }
808
809
810
811
812
813
814
815
816 if (local->hw.wiphy->max_scan_ie_len)
817 local->hw.wiphy->max_scan_ie_len -= local->scan_ies_len;
818
819 local->hw.wiphy->cipher_suites = cipher_suites;
820 local->hw.wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
821 if (!(local->hw.flags & IEEE80211_HW_MFP_CAPABLE))
822 local->hw.wiphy->n_cipher_suites--;
823
824 result = wiphy_register(local->hw.wiphy);
825 if (result < 0)
826 goto fail_wiphy_register;
827
828
829
830
831
832 if (hw->queues > IEEE80211_MAX_QUEUES)
833 hw->queues = IEEE80211_MAX_QUEUES;
834
835 local->workqueue =
836 create_singlethread_workqueue(wiphy_name(local->hw.wiphy));
837 if (!local->workqueue) {
838 result = -ENOMEM;
839 goto fail_workqueue;
840 }
841
842
843
844
845
846
847 local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom,
848 sizeof(struct ieee80211_tx_status_rtap_hdr));
849
850 debugfs_hw_add(local);
851
852 if (local->hw.max_listen_interval == 0)
853 local->hw.max_listen_interval = 1;
854
855 local->hw.conf.listen_interval = local->hw.max_listen_interval;
856
857 result = sta_info_start(local);
858 if (result < 0)
859 goto fail_sta_info;
860
861 result = ieee80211_wep_init(local);
862 if (result < 0) {
863 printk(KERN_DEBUG "%s: Failed to initialize wep: %d\n",
864 wiphy_name(local->hw.wiphy), result);
865 goto fail_wep;
866 }
867
868 rtnl_lock();
869
870 result = ieee80211_init_rate_ctrl_alg(local,
871 hw->rate_control_algorithm);
872 if (result < 0) {
873 printk(KERN_DEBUG "%s: Failed to initialize rate control "
874 "algorithm\n", wiphy_name(local->hw.wiphy));
875 goto fail_rate;
876 }
877
878
879 if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION)) {
880 result = ieee80211_if_add(local, "wlan%d", NULL,
881 NL80211_IFTYPE_STATION, NULL);
882 if (result)
883 printk(KERN_WARNING "%s: Failed to add default virtual iface\n",
884 wiphy_name(local->hw.wiphy));
885 }
886
887 rtnl_unlock();
888
889 ieee80211_led_init(local);
890
891
892 i = 0;
893 local->int_scan_req->ssids = &local->scan_ssid;
894 local->int_scan_req->n_ssids = 1;
895 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
896 if (!hw->wiphy->bands[band])
897 continue;
898 for (j = 0; j < hw->wiphy->bands[band]->n_channels; j++) {
899 local->int_scan_req->channels[i] =
900 &hw->wiphy->bands[band]->channels[j];
901 i++;
902 }
903 }
904
905 local->network_latency_notifier.notifier_call =
906 ieee80211_max_network_latency;
907 result = pm_qos_add_notifier(PM_QOS_NETWORK_LATENCY,
908 &local->network_latency_notifier);
909
910 if (result) {
911 rtnl_lock();
912 goto fail_pm_qos;
913 }
914
915 return 0;
916
917 fail_pm_qos:
918 ieee80211_led_exit(local);
919 ieee80211_remove_interfaces(local);
920 fail_rate:
921 rtnl_unlock();
922 ieee80211_wep_free(local);
923 fail_wep:
924 sta_info_stop(local);
925 fail_sta_info:
926 debugfs_hw_del(local);
927 destroy_workqueue(local->workqueue);
928 fail_workqueue:
929 wiphy_unregister(local->hw.wiphy);
930 fail_wiphy_register:
931 kfree(local->int_scan_req);
932 return result;
933}
934EXPORT_SYMBOL(ieee80211_register_hw);
935
936void ieee80211_unregister_hw(struct ieee80211_hw *hw)
937{
938 struct ieee80211_local *local = hw_to_local(hw);
939
940 tasklet_kill(&local->tx_pending_tasklet);
941 tasklet_kill(&local->tasklet);
942
943 pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY,
944 &local->network_latency_notifier);
945
946 rtnl_lock();
947
948
949
950
951
952
953 ieee80211_remove_interfaces(local);
954
955 rtnl_unlock();
956
957 cancel_work_sync(&local->reconfig_filter);
958
959 ieee80211_clear_tx_pending(local);
960 sta_info_stop(local);
961 rate_control_deinitialize(local);
962 debugfs_hw_del(local);
963
964 if (skb_queue_len(&local->skb_queue)
965 || skb_queue_len(&local->skb_queue_unreliable))
966 printk(KERN_WARNING "%s: skb_queue not empty\n",
967 wiphy_name(local->hw.wiphy));
968 skb_queue_purge(&local->skb_queue);
969 skb_queue_purge(&local->skb_queue_unreliable);
970
971 destroy_workqueue(local->workqueue);
972 wiphy_unregister(local->hw.wiphy);
973 ieee80211_wep_free(local);
974 ieee80211_led_exit(local);
975 kfree(local->int_scan_req);
976}
977EXPORT_SYMBOL(ieee80211_unregister_hw);
978
979void ieee80211_free_hw(struct ieee80211_hw *hw)
980{
981 struct ieee80211_local *local = hw_to_local(hw);
982
983 mutex_destroy(&local->iflist_mtx);
984 mutex_destroy(&local->scan_mtx);
985
986 wiphy_free(local->hw.wiphy);
987}
988EXPORT_SYMBOL(ieee80211_free_hw);
989
990static int __init ieee80211_init(void)
991{
992 struct sk_buff *skb;
993 int ret;
994
995 BUILD_BUG_ON(sizeof(struct ieee80211_tx_info) > sizeof(skb->cb));
996 BUILD_BUG_ON(offsetof(struct ieee80211_tx_info, driver_data) +
997 IEEE80211_TX_INFO_DRIVER_DATA_SIZE > sizeof(skb->cb));
998
999 ret = rc80211_minstrel_init();
1000 if (ret)
1001 return ret;
1002
1003 ret = rc80211_pid_init();
1004 if (ret)
1005 return ret;
1006
1007 ieee80211_debugfs_netdev_init();
1008
1009 return 0;
1010}
1011
1012static void __exit ieee80211_exit(void)
1013{
1014 rc80211_pid_exit();
1015 rc80211_minstrel_exit();
1016
1017
1018
1019
1020
1021 flush_scheduled_work();
1022
1023 if (mesh_allocated)
1024 ieee80211s_stop();
1025
1026 ieee80211_debugfs_netdev_exit();
1027}
1028
1029
1030subsys_initcall(ieee80211_init);
1031module_exit(ieee80211_exit);
1032
1033MODULE_DESCRIPTION("IEEE 802.11 subsystem");
1034MODULE_LICENSE("GPL");
1035