1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef IEEE80211_I_H
14#define IEEE80211_I_H
15
16#include <linux/kernel.h>
17#include <linux/device.h>
18#include <linux/if_ether.h>
19#include <linux/interrupt.h>
20#include <linux/list.h>
21#include <linux/netdevice.h>
22#include <linux/skbuff.h>
23#include <linux/workqueue.h>
24#include <linux/types.h>
25#include <linux/spinlock.h>
26#include <linux/etherdevice.h>
27#include <linux/leds.h>
28#include <linux/idr.h>
29#include <linux/rhashtable.h>
30#include <net/ieee80211_radiotap.h>
31#include <net/cfg80211.h>
32#include <net/mac80211.h>
33#include <net/fq.h>
34#include "key.h"
35#include "sta_info.h"
36#include "debug.h"
37
38extern const struct cfg80211_ops mac80211_config_ops;
39
40struct ieee80211_local;
41
42
43
44#define AP_MAX_BC_BUFFER 128
45
46
47
48
49#define TOTAL_MAX_TX_BUFFER 512
50
51
52#define IEEE80211_ENCRYPT_HEADROOM 8
53#define IEEE80211_ENCRYPT_TAILROOM 18
54
55
56
57
58
59#define IEEE80211_FRAGMENT_MAX 4
60
61
62#define IEEE80211_UNSET_POWER_LEVEL INT_MIN
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82#define IEEE80211_DEFAULT_UAPSD_QUEUES 0
83
84#define IEEE80211_DEFAULT_MAX_SP_LEN \
85 IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL
86
87extern const u8 ieee80211_ac_to_qos_mask[IEEE80211_NUM_ACS];
88
89#define IEEE80211_DEAUTH_FRAME_LEN (24 + 2 )
90
91#define IEEE80211_MAX_NAN_INSTANCE_ID 255
92
93struct ieee80211_fragment_entry {
94 struct sk_buff_head skb_list;
95 unsigned long first_frag_time;
96 u16 seq;
97 u16 extra_len;
98 u16 last_frag;
99 u8 rx_queue;
100 bool check_sequential_pn;
101 u8 last_pn[6];
102};
103
104
105struct ieee80211_bss {
106 u32 device_ts_beacon, device_ts_presp;
107
108 bool wmm_used;
109 bool uapsd_supported;
110
111#define IEEE80211_MAX_SUPP_RATES 32
112 u8 supp_rates[IEEE80211_MAX_SUPP_RATES];
113 size_t supp_rates_len;
114 struct ieee80211_rate *beacon_rate;
115
116
117
118
119
120
121
122 bool has_erp_value;
123 u8 erp_value;
124
125
126 u8 corrupt_data;
127
128
129 u8 valid_data;
130};
131
132
133
134
135
136
137
138
139
140enum ieee80211_bss_corrupt_data_flags {
141 IEEE80211_BSS_CORRUPT_BEACON = BIT(0),
142 IEEE80211_BSS_CORRUPT_PROBE_RESP = BIT(1)
143};
144
145
146
147
148
149
150
151
152
153
154
155
156enum ieee80211_bss_valid_data_flags {
157 IEEE80211_BSS_VALID_WMM = BIT(1),
158 IEEE80211_BSS_VALID_RATES = BIT(2),
159 IEEE80211_BSS_VALID_ERP = BIT(3)
160};
161
162typedef unsigned __bitwise ieee80211_tx_result;
163#define TX_CONTINUE ((__force ieee80211_tx_result) 0u)
164#define TX_DROP ((__force ieee80211_tx_result) 1u)
165#define TX_QUEUED ((__force ieee80211_tx_result) 2u)
166
167#define IEEE80211_TX_UNICAST BIT(1)
168#define IEEE80211_TX_PS_BUFFERED BIT(2)
169
170struct ieee80211_tx_data {
171 struct sk_buff *skb;
172 struct sk_buff_head skbs;
173 struct ieee80211_local *local;
174 struct ieee80211_sub_if_data *sdata;
175 struct sta_info *sta;
176 struct ieee80211_key *key;
177 struct ieee80211_tx_rate rate;
178
179 unsigned int flags;
180};
181
182
183typedef unsigned __bitwise ieee80211_rx_result;
184#define RX_CONTINUE ((__force ieee80211_rx_result) 0u)
185#define RX_DROP_UNUSABLE ((__force ieee80211_rx_result) 1u)
186#define RX_DROP_MONITOR ((__force ieee80211_rx_result) 2u)
187#define RX_QUEUED ((__force ieee80211_rx_result) 3u)
188
189
190
191
192
193
194
195
196
197
198enum ieee80211_packet_rx_flags {
199 IEEE80211_RX_AMSDU = BIT(3),
200 IEEE80211_RX_MALFORMED_ACTION_FRM = BIT(4),
201 IEEE80211_RX_DEFERRED_RELEASE = BIT(5),
202};
203
204
205
206
207
208
209
210
211
212
213
214enum ieee80211_rx_flags {
215 IEEE80211_RX_CMNTR = BIT(0),
216 IEEE80211_RX_BEACON_REPORTED = BIT(1),
217};
218
219struct ieee80211_rx_data {
220 struct napi_struct *napi;
221 struct sk_buff *skb;
222 struct ieee80211_local *local;
223 struct ieee80211_sub_if_data *sdata;
224 struct sta_info *sta;
225 struct ieee80211_key *key;
226
227 unsigned int flags;
228
229
230
231
232
233
234 int seqno_idx;
235
236
237
238
239
240
241
242 int security_idx;
243
244 u32 tkip_iv32;
245 u16 tkip_iv16;
246};
247
248struct ieee80211_csa_settings {
249 const u16 *counter_offsets_beacon;
250 const u16 *counter_offsets_presp;
251
252 int n_counter_offsets_beacon;
253 int n_counter_offsets_presp;
254
255 u8 count;
256};
257
258struct beacon_data {
259 u8 *head, *tail;
260 int head_len, tail_len;
261 struct ieee80211_meshconf_ie *meshconf;
262 u16 csa_counter_offsets[IEEE80211_MAX_CSA_COUNTERS_NUM];
263 u8 csa_current_counter;
264 struct rcu_head rcu_head;
265};
266
267struct probe_resp {
268 struct rcu_head rcu_head;
269 int len;
270 u16 csa_counter_offsets[IEEE80211_MAX_CSA_COUNTERS_NUM];
271 u8 data[0];
272};
273
274struct ps_data {
275
276
277
278 u8 tim[sizeof(unsigned long) * BITS_TO_LONGS(IEEE80211_MAX_AID + 1)]
279 __aligned(__alignof__(unsigned long));
280 struct sk_buff_head bc_buf;
281 atomic_t num_sta_ps;
282 int dtim_count;
283 bool dtim_bc_mc;
284};
285
286struct ieee80211_if_ap {
287 struct beacon_data __rcu *beacon;
288 struct probe_resp __rcu *probe_resp;
289
290
291 struct cfg80211_beacon_data *next_beacon;
292 struct list_head vlans;
293
294 struct ps_data ps;
295 atomic_t num_mcast_sta;
296 enum ieee80211_smps_mode req_smps,
297 driver_smps_mode;
298
299 struct work_struct request_smps_work;
300 bool multicast_to_unicast;
301};
302
303struct ieee80211_if_wds {
304 struct sta_info *sta;
305 u8 remote_addr[ETH_ALEN];
306};
307
308struct ieee80211_if_vlan {
309 struct list_head list;
310
311
312 struct sta_info __rcu *sta;
313 atomic_t num_mcast_sta;
314};
315
316struct mesh_stats {
317 __u32 fwded_mcast;
318 __u32 fwded_unicast;
319 __u32 fwded_frames;
320 __u32 dropped_frames_ttl;
321 __u32 dropped_frames_no_route;
322 __u32 dropped_frames_congestion;
323};
324
325#define PREQ_Q_F_START 0x1
326#define PREQ_Q_F_REFRESH 0x2
327struct mesh_preq_queue {
328 struct list_head list;
329 u8 dst[ETH_ALEN];
330 u8 flags;
331};
332
333struct ieee80211_roc_work {
334 struct list_head list;
335
336 struct ieee80211_sub_if_data *sdata;
337
338 struct ieee80211_channel *chan;
339
340 bool started, abort, hw_begun, notified;
341 bool on_channel;
342
343 unsigned long start_time;
344
345 u32 duration, req_duration;
346 struct sk_buff *frame;
347 u64 cookie, mgmt_tx_cookie;
348 enum ieee80211_roc_type type;
349};
350
351
352enum ieee80211_sta_flags {
353 IEEE80211_STA_CONNECTION_POLL = BIT(1),
354 IEEE80211_STA_CONTROL_PORT = BIT(2),
355 IEEE80211_STA_DISABLE_HT = BIT(4),
356 IEEE80211_STA_MFP_ENABLED = BIT(6),
357 IEEE80211_STA_UAPSD_ENABLED = BIT(7),
358 IEEE80211_STA_NULLFUNC_ACKED = BIT(8),
359 IEEE80211_STA_RESET_SIGNAL_AVE = BIT(9),
360 IEEE80211_STA_DISABLE_40MHZ = BIT(10),
361 IEEE80211_STA_DISABLE_VHT = BIT(11),
362 IEEE80211_STA_DISABLE_80P80MHZ = BIT(12),
363 IEEE80211_STA_DISABLE_160MHZ = BIT(13),
364 IEEE80211_STA_DISABLE_WMM = BIT(14),
365 IEEE80211_STA_ENABLE_RRM = BIT(15),
366};
367
368struct ieee80211_mgd_auth_data {
369 struct cfg80211_bss *bss;
370 unsigned long timeout;
371 int tries;
372 u16 algorithm, expected_transaction;
373
374 u8 key[WLAN_KEY_LEN_WEP104];
375 u8 key_len, key_idx;
376 bool done;
377 bool timeout_started;
378
379 u16 sae_trans, sae_status;
380 size_t data_len;
381 u8 data[];
382};
383
384struct ieee80211_mgd_assoc_data {
385 struct cfg80211_bss *bss;
386 const u8 *supp_rates;
387
388 unsigned long timeout;
389 int tries;
390
391 u16 capability;
392 u8 prev_bssid[ETH_ALEN];
393 u8 ssid[IEEE80211_MAX_SSID_LEN];
394 u8 ssid_len;
395 u8 supp_rates_len;
396 bool wmm, uapsd;
397 bool need_beacon;
398 bool synced;
399 bool timeout_started;
400
401 u8 ap_ht_param;
402
403 struct ieee80211_vht_cap ap_vht_cap;
404
405 size_t ie_len;
406 u8 ie[];
407};
408
409struct ieee80211_sta_tx_tspec {
410
411 unsigned long time_slice_start;
412
413 u32 admitted_time;
414 u8 tsid;
415 s8 up;
416
417
418 u32 consumed_tx_time;
419 enum {
420 TX_TSPEC_ACTION_NONE = 0,
421 TX_TSPEC_ACTION_DOWNGRADE,
422 TX_TSPEC_ACTION_STOP_DOWNGRADE,
423 } action;
424 bool downgraded;
425};
426
427DECLARE_EWMA(beacon_signal, 16, 4)
428
429struct ieee80211_if_managed {
430 struct timer_list timer;
431 struct timer_list conn_mon_timer;
432 struct timer_list bcn_mon_timer;
433 struct timer_list chswitch_timer;
434 struct work_struct monitor_work;
435 struct work_struct chswitch_work;
436 struct work_struct beacon_connection_loss_work;
437 struct work_struct csa_connection_drop_work;
438
439 unsigned long beacon_timeout;
440 unsigned long probe_timeout;
441 int probe_send_count;
442 bool nullfunc_failed;
443 bool connection_loss;
444
445 struct cfg80211_bss *associated;
446 struct ieee80211_mgd_auth_data *auth_data;
447 struct ieee80211_mgd_assoc_data *assoc_data;
448
449 u8 bssid[ETH_ALEN] __aligned(2);
450
451 u16 aid;
452
453 bool powersave;
454 bool broken_ap;
455 bool have_beacon;
456 u8 dtim_period;
457 enum ieee80211_smps_mode req_smps,
458 driver_smps_mode;
459
460 struct work_struct request_smps_work;
461
462 unsigned int flags;
463
464 bool csa_waiting_bcn;
465 bool csa_ignored_same_chan;
466
467 bool beacon_crc_valid;
468 u32 beacon_crc;
469
470 bool status_acked;
471 bool status_received;
472 __le16 status_fc;
473
474 enum {
475 IEEE80211_MFP_DISABLED,
476 IEEE80211_MFP_OPTIONAL,
477 IEEE80211_MFP_REQUIRED
478 } mfp;
479
480
481
482
483
484
485 unsigned int uapsd_queues;
486
487
488
489
490
491
492 unsigned int uapsd_max_sp_len;
493
494 int wmm_last_param_set;
495
496 u8 use_4addr;
497
498 s16 p2p_noa_index;
499
500 struct ewma_beacon_signal ave_beacon_signal;
501
502
503
504
505
506
507 unsigned int count_beacon_signal;
508
509
510 unsigned int beacon_loss_count;
511
512
513
514
515
516
517 int last_cqm_event_signal;
518
519
520
521
522
523
524 int rssi_min_thold, rssi_max_thold;
525 int last_ave_beacon_signal;
526
527 struct ieee80211_ht_cap ht_capa;
528 struct ieee80211_ht_cap ht_capa_mask;
529 struct ieee80211_vht_cap vht_capa;
530 struct ieee80211_vht_cap vht_capa_mask;
531
532
533 u8 tdls_peer[ETH_ALEN] __aligned(2);
534 struct delayed_work tdls_peer_del_work;
535 struct sk_buff *orig_teardown_skb;
536 struct sk_buff *teardown_skb;
537 spinlock_t teardown_lock;
538 bool tdls_chan_switch_prohibited;
539 bool tdls_wider_bw_prohibited;
540
541
542 struct ieee80211_sta_tx_tspec tx_tspec[IEEE80211_NUM_ACS];
543
544
545
546
547
548
549 struct delayed_work tx_tspec_wk;
550};
551
552struct ieee80211_if_ibss {
553 struct timer_list timer;
554 struct work_struct csa_connection_drop_work;
555
556 unsigned long last_scan_completed;
557
558 u32 basic_rates;
559
560 bool fixed_bssid;
561 bool fixed_channel;
562 bool privacy;
563
564 bool control_port;
565 bool userspace_handles_dfs;
566
567 u8 bssid[ETH_ALEN] __aligned(2);
568 u8 ssid[IEEE80211_MAX_SSID_LEN];
569 u8 ssid_len, ie_len;
570 u8 *ie;
571 struct cfg80211_chan_def chandef;
572
573 unsigned long ibss_join_req;
574
575 struct beacon_data __rcu *presp;
576
577 struct ieee80211_ht_cap ht_capa;
578 struct ieee80211_ht_cap ht_capa_mask;
579
580 spinlock_t incomplete_lock;
581 struct list_head incomplete_stations;
582
583 enum {
584 IEEE80211_IBSS_MLME_SEARCH,
585 IEEE80211_IBSS_MLME_JOINED,
586 } state;
587};
588
589
590
591
592
593
594
595
596
597
598struct ieee80211_if_ocb {
599 struct timer_list housekeeping_timer;
600 unsigned long wrkq_flags;
601
602 spinlock_t incomplete_lock;
603 struct list_head incomplete_stations;
604
605 bool joined;
606};
607
608
609
610
611
612
613
614
615struct ieee802_11_elems;
616struct ieee80211_mesh_sync_ops {
617 void (*rx_bcn_presp)(struct ieee80211_sub_if_data *sdata,
618 u16 stype,
619 struct ieee80211_mgmt *mgmt,
620 struct ieee802_11_elems *elems,
621 struct ieee80211_rx_status *rx_status);
622
623
624 void (*adjust_tsf)(struct ieee80211_sub_if_data *sdata,
625 struct beacon_data *beacon);
626
627};
628
629struct mesh_csa_settings {
630 struct rcu_head rcu_head;
631 struct cfg80211_csa_settings settings;
632};
633
634struct ieee80211_if_mesh {
635 struct timer_list housekeeping_timer;
636 struct timer_list mesh_path_timer;
637 struct timer_list mesh_path_root_timer;
638
639 unsigned long wrkq_flags;
640 unsigned long mbss_changed;
641
642 u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN];
643 size_t mesh_id_len;
644
645 u8 mesh_pp_id;
646
647 u8 mesh_pm_id;
648
649 u8 mesh_cc_id;
650
651 u8 mesh_sp_id;
652
653 u8 mesh_auth_id;
654
655 u32 sn;
656
657 u32 preq_id;
658 atomic_t mpaths;
659
660 unsigned long last_sn_update;
661
662 unsigned long next_perr;
663
664 unsigned long last_preq;
665 struct mesh_rmc *rmc;
666 spinlock_t mesh_preq_queue_lock;
667 struct mesh_preq_queue preq_queue;
668 int preq_queue_len;
669 struct mesh_stats mshstats;
670 struct mesh_config mshcfg;
671 atomic_t estab_plinks;
672 u32 mesh_seqnum;
673 bool accepting_plinks;
674 int num_gates;
675 struct beacon_data __rcu *beacon;
676 const u8 *ie;
677 u8 ie_len;
678 enum {
679 IEEE80211_MESH_SEC_NONE = 0x0,
680 IEEE80211_MESH_SEC_AUTHED = 0x1,
681 IEEE80211_MESH_SEC_SECURED = 0x2,
682 } security;
683 bool user_mpm;
684
685 const struct ieee80211_mesh_sync_ops *sync_ops;
686 s64 sync_offset_clockdrift_max;
687 spinlock_t sync_offset_lock;
688
689 enum nl80211_mesh_power_mode nonpeer_pm;
690 int ps_peers_light_sleep;
691 int ps_peers_deep_sleep;
692 struct ps_data ps;
693
694 struct mesh_csa_settings __rcu *csa;
695 enum {
696 IEEE80211_MESH_CSA_ROLE_NONE,
697 IEEE80211_MESH_CSA_ROLE_INIT,
698 IEEE80211_MESH_CSA_ROLE_REPEATER,
699 } csa_role;
700 u8 chsw_ttl;
701 u16 pre_value;
702
703
704 int meshconf_offset;
705
706 struct mesh_table *mesh_paths;
707 struct mesh_table *mpp_paths;
708 int mesh_paths_generation;
709 int mpp_paths_generation;
710};
711
712#ifdef CONFIG_MAC80211_MESH
713#define IEEE80211_IFSTA_MESH_CTR_INC(msh, name) \
714 do { (msh)->mshstats.name++; } while (0)
715#else
716#define IEEE80211_IFSTA_MESH_CTR_INC(msh, name) \
717 do { } while (0)
718#endif
719
720
721
722
723
724
725
726
727
728
729
730
731enum ieee80211_sub_if_data_flags {
732 IEEE80211_SDATA_ALLMULTI = BIT(0),
733 IEEE80211_SDATA_OPERATING_GMODE = BIT(2),
734 IEEE80211_SDATA_DONT_BRIDGE_PACKETS = BIT(3),
735 IEEE80211_SDATA_DISCONNECT_RESUME = BIT(4),
736 IEEE80211_SDATA_IN_DRIVER = BIT(5),
737};
738
739
740
741
742
743
744
745
746
747
748
749enum ieee80211_sdata_state_bits {
750 SDATA_STATE_RUNNING,
751 SDATA_STATE_OFFCHANNEL,
752 SDATA_STATE_OFFCHANNEL_BEACON_STOPPED,
753};
754
755
756
757
758
759
760
761
762
763
764enum ieee80211_chanctx_mode {
765 IEEE80211_CHANCTX_SHARED,
766 IEEE80211_CHANCTX_EXCLUSIVE
767};
768
769
770
771
772
773
774
775
776
777
778
779
780
781enum ieee80211_chanctx_replace_state {
782 IEEE80211_CHANCTX_REPLACE_NONE,
783 IEEE80211_CHANCTX_WILL_BE_REPLACED,
784 IEEE80211_CHANCTX_REPLACES_OTHER,
785};
786
787struct ieee80211_chanctx {
788 struct list_head list;
789 struct rcu_head rcu_head;
790
791 struct list_head assigned_vifs;
792 struct list_head reserved_vifs;
793
794 enum ieee80211_chanctx_replace_state replace_state;
795 struct ieee80211_chanctx *replace_ctx;
796
797 enum ieee80211_chanctx_mode mode;
798 bool driver_present;
799
800 struct ieee80211_chanctx_conf conf;
801};
802
803struct mac80211_qos_map {
804 struct cfg80211_qos_map qos_map;
805 struct rcu_head rcu_head;
806};
807
808enum txq_info_flags {
809 IEEE80211_TXQ_STOP,
810 IEEE80211_TXQ_AMPDU,
811 IEEE80211_TXQ_NO_AMSDU,
812};
813
814
815
816
817
818
819
820
821
822
823struct txq_info {
824 struct fq_tin tin;
825 struct fq_flow def_flow;
826 struct codel_vars def_cvars;
827 struct codel_stats cstats;
828 struct sk_buff_head frags;
829 unsigned long flags;
830
831
832 struct ieee80211_txq txq;
833};
834
835struct ieee80211_if_mntr {
836 u32 flags;
837 u8 mu_follow_addr[ETH_ALEN] __aligned(2);
838};
839
840
841
842
843
844
845
846struct ieee80211_if_nan {
847 struct cfg80211_nan_conf conf;
848
849
850 spinlock_t func_lock;
851 struct idr function_inst_ids;
852};
853
854struct ieee80211_sub_if_data {
855 struct list_head list;
856
857 struct wireless_dev wdev;
858
859
860 struct list_head key_list;
861
862
863 int crypto_tx_tailroom_needed_cnt;
864 int crypto_tx_tailroom_pending_dec;
865 struct delayed_work dec_tailroom_needed_wk;
866
867 struct net_device *dev;
868 struct ieee80211_local *local;
869
870 unsigned int flags;
871
872 unsigned long state;
873
874 char name[IFNAMSIZ];
875
876
877 struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX];
878 unsigned int fragment_next;
879
880
881 u16 noack_map;
882
883
884 u8 wmm_acm;
885
886 struct ieee80211_key __rcu *keys[NUM_DEFAULT_KEYS + NUM_DEFAULT_MGMT_KEYS];
887 struct ieee80211_key __rcu *default_unicast_key;
888 struct ieee80211_key __rcu *default_multicast_key;
889 struct ieee80211_key __rcu *default_mgmt_key;
890
891 u16 sequence_number;
892 __be16 control_port_protocol;
893 bool control_port_no_encrypt;
894 int encrypt_headroom;
895
896 atomic_t num_tx_queued;
897 struct ieee80211_tx_queue_params tx_conf[IEEE80211_NUM_ACS];
898 struct mac80211_qos_map __rcu *qos_map;
899
900 struct work_struct csa_finalize_work;
901 bool csa_block_tx;
902 struct cfg80211_chan_def csa_chandef;
903
904 struct list_head assigned_chanctx_list;
905 struct list_head reserved_chanctx_list;
906
907
908 struct ieee80211_chanctx *reserved_chanctx;
909 struct cfg80211_chan_def reserved_chandef;
910 bool reserved_radar_required;
911 bool reserved_ready;
912
913
914 struct work_struct recalc_smps;
915
916 struct work_struct work;
917 struct sk_buff_head skb_queue;
918
919 u8 needed_rx_chains;
920 enum ieee80211_smps_mode smps_mode;
921
922 int user_power_level;
923 int ap_power_level;
924
925 bool radar_required;
926 struct delayed_work dfs_cac_timer_work;
927
928
929
930
931
932
933 struct ieee80211_if_ap *bss;
934
935
936 u32 rc_rateidx_mask[NUM_NL80211_BANDS];
937
938 bool rc_has_mcs_mask[NUM_NL80211_BANDS];
939 u8 rc_rateidx_mcs_mask[NUM_NL80211_BANDS][IEEE80211_HT_MCS_MASK_LEN];
940
941 bool rc_has_vht_mcs_mask[NUM_NL80211_BANDS];
942 u16 rc_rateidx_vht_mcs_mask[NUM_NL80211_BANDS][NL80211_VHT_NSS_MAX];
943
944 union {
945 struct ieee80211_if_ap ap;
946 struct ieee80211_if_wds wds;
947 struct ieee80211_if_vlan vlan;
948 struct ieee80211_if_managed mgd;
949 struct ieee80211_if_ibss ibss;
950 struct ieee80211_if_mesh mesh;
951 struct ieee80211_if_ocb ocb;
952 struct ieee80211_if_mntr mntr;
953 struct ieee80211_if_nan nan;
954 } u;
955
956#ifdef CONFIG_MAC80211_DEBUGFS
957 struct {
958 struct dentry *subdir_stations;
959 struct dentry *default_unicast_key;
960 struct dentry *default_multicast_key;
961 struct dentry *default_mgmt_key;
962 } debugfs;
963#endif
964
965
966 struct ieee80211_vif vif;
967};
968
969static inline
970struct ieee80211_sub_if_data *vif_to_sdata(struct ieee80211_vif *p)
971{
972 return container_of(p, struct ieee80211_sub_if_data, vif);
973}
974
975static inline void sdata_lock(struct ieee80211_sub_if_data *sdata)
976 __acquires(&sdata->wdev.mtx)
977{
978 mutex_lock(&sdata->wdev.mtx);
979 __acquire(&sdata->wdev.mtx);
980}
981
982static inline void sdata_unlock(struct ieee80211_sub_if_data *sdata)
983 __releases(&sdata->wdev.mtx)
984{
985 mutex_unlock(&sdata->wdev.mtx);
986 __release(&sdata->wdev.mtx);
987}
988
989#define sdata_dereference(p, sdata) \
990 rcu_dereference_protected(p, lockdep_is_held(&sdata->wdev.mtx))
991
992static inline void
993sdata_assert_lock(struct ieee80211_sub_if_data *sdata)
994{
995 lockdep_assert_held(&sdata->wdev.mtx);
996}
997
998static inline enum nl80211_band
999ieee80211_get_sdata_band(struct ieee80211_sub_if_data *sdata)
1000{
1001 enum nl80211_band band = NL80211_BAND_2GHZ;
1002 struct ieee80211_chanctx_conf *chanctx_conf;
1003
1004 rcu_read_lock();
1005 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
1006 if (!WARN_ON(!chanctx_conf))
1007 band = chanctx_conf->def.chan->band;
1008 rcu_read_unlock();
1009
1010 return band;
1011}
1012
1013static inline int
1014ieee80211_chandef_get_shift(struct cfg80211_chan_def *chandef)
1015{
1016 switch (chandef->width) {
1017 case NL80211_CHAN_WIDTH_5:
1018 return 2;
1019 case NL80211_CHAN_WIDTH_10:
1020 return 1;
1021 default:
1022 return 0;
1023 }
1024}
1025
1026static inline int
1027ieee80211_vif_get_shift(struct ieee80211_vif *vif)
1028{
1029 struct ieee80211_chanctx_conf *chanctx_conf;
1030 int shift = 0;
1031
1032 rcu_read_lock();
1033 chanctx_conf = rcu_dereference(vif->chanctx_conf);
1034 if (chanctx_conf)
1035 shift = ieee80211_chandef_get_shift(&chanctx_conf->def);
1036 rcu_read_unlock();
1037
1038 return shift;
1039}
1040
1041struct ieee80211_rx_agg {
1042 u8 addr[ETH_ALEN];
1043 u16 tid;
1044};
1045
1046enum sdata_queue_type {
1047 IEEE80211_SDATA_QUEUE_TYPE_FRAME = 0,
1048 IEEE80211_SDATA_QUEUE_AGG_START = 1,
1049 IEEE80211_SDATA_QUEUE_AGG_STOP = 2,
1050 IEEE80211_SDATA_QUEUE_RX_AGG_START = 3,
1051 IEEE80211_SDATA_QUEUE_RX_AGG_STOP = 4,
1052};
1053
1054enum {
1055 IEEE80211_RX_MSG = 1,
1056 IEEE80211_TX_STATUS_MSG = 2,
1057};
1058
1059enum queue_stop_reason {
1060 IEEE80211_QUEUE_STOP_REASON_DRIVER,
1061 IEEE80211_QUEUE_STOP_REASON_PS,
1062 IEEE80211_QUEUE_STOP_REASON_CSA,
1063 IEEE80211_QUEUE_STOP_REASON_AGGREGATION,
1064 IEEE80211_QUEUE_STOP_REASON_SUSPEND,
1065 IEEE80211_QUEUE_STOP_REASON_SKB_ADD,
1066 IEEE80211_QUEUE_STOP_REASON_OFFCHANNEL,
1067 IEEE80211_QUEUE_STOP_REASON_FLUSH,
1068 IEEE80211_QUEUE_STOP_REASON_TDLS_TEARDOWN,
1069 IEEE80211_QUEUE_STOP_REASON_RESERVE_TID,
1070
1071 IEEE80211_QUEUE_STOP_REASONS,
1072};
1073
1074#ifdef CONFIG_MAC80211_LEDS
1075struct tpt_led_trigger {
1076 char name[32];
1077 const struct ieee80211_tpt_blink *blink_table;
1078 unsigned int blink_table_len;
1079 struct timer_list timer;
1080 unsigned long prev_traffic;
1081 unsigned long tx_bytes, rx_bytes;
1082 unsigned int active, want;
1083 bool running;
1084};
1085#endif
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103enum {
1104 SCAN_SW_SCANNING,
1105 SCAN_HW_SCANNING,
1106 SCAN_ONCHANNEL_SCANNING,
1107 SCAN_COMPLETED,
1108 SCAN_ABORTED,
1109 SCAN_HW_CANCELLED,
1110};
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125enum mac80211_scan_state {
1126 SCAN_DECISION,
1127 SCAN_SET_CHANNEL,
1128 SCAN_SEND_PROBE,
1129 SCAN_SUSPEND,
1130 SCAN_RESUME,
1131 SCAN_ABORT,
1132};
1133
1134struct ieee80211_local {
1135
1136
1137
1138 struct ieee80211_hw hw;
1139
1140 struct fq fq;
1141 struct codel_vars *cvars;
1142 struct codel_params cparams;
1143
1144 const struct ieee80211_ops *ops;
1145
1146
1147
1148
1149
1150 struct workqueue_struct *workqueue;
1151
1152 unsigned long queue_stop_reasons[IEEE80211_MAX_QUEUES];
1153 int q_stop_reasons[IEEE80211_MAX_QUEUES][IEEE80211_QUEUE_STOP_REASONS];
1154
1155 spinlock_t queue_stop_reason_lock;
1156
1157 int open_count;
1158 int monitors, cooked_mntrs;
1159
1160 int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll,
1161 fif_probe_req;
1162 int probe_req_reg;
1163 unsigned int filter_flags;
1164
1165 bool wiphy_ciphers_allocated;
1166
1167 bool use_chanctx;
1168
1169
1170 spinlock_t filter_lock;
1171
1172
1173 struct work_struct reconfig_filter;
1174
1175
1176 struct netdev_hw_addr_list mc_list;
1177
1178 bool tim_in_locked_section;
1179
1180
1181
1182
1183
1184
1185
1186 bool suspended;
1187
1188
1189
1190
1191
1192
1193
1194 bool resuming;
1195
1196
1197
1198
1199
1200 bool quiescing;
1201
1202
1203 bool started;
1204
1205
1206 bool in_reconfig;
1207
1208
1209 bool wowlan;
1210
1211 struct work_struct radar_detected_work;
1212
1213
1214 u8 rx_chains;
1215
1216 int tx_headroom;
1217
1218
1219
1220
1221
1222#define IEEE80211_IRQSAFE_QUEUE_LIMIT 128
1223 struct tasklet_struct tasklet;
1224 struct sk_buff_head skb_queue;
1225 struct sk_buff_head skb_queue_unreliable;
1226
1227 spinlock_t rx_path_lock;
1228
1229
1230
1231
1232
1233
1234 struct mutex sta_mtx;
1235 spinlock_t tim_lock;
1236 unsigned long num_sta;
1237 struct list_head sta_list;
1238 struct rhltable sta_hash;
1239 struct timer_list sta_cleanup;
1240 int sta_generation;
1241
1242 struct sk_buff_head pending[IEEE80211_MAX_QUEUES];
1243 struct tasklet_struct tx_pending_tasklet;
1244
1245 atomic_t agg_queue_stop[IEEE80211_MAX_QUEUES];
1246
1247
1248 atomic_t iff_allmultis;
1249
1250 struct rate_control_ref *rate_ctrl;
1251
1252 struct crypto_cipher *wep_tx_tfm;
1253 struct crypto_cipher *wep_rx_tfm;
1254 u32 wep_iv;
1255
1256
1257 struct list_head interfaces;
1258 struct mutex iflist_mtx;
1259
1260
1261
1262
1263
1264 struct mutex key_mtx;
1265
1266
1267 struct mutex mtx;
1268
1269
1270 unsigned long scanning;
1271 struct cfg80211_ssid scan_ssid;
1272 struct cfg80211_scan_request *int_scan_req;
1273 struct cfg80211_scan_request __rcu *scan_req;
1274 struct ieee80211_scan_request *hw_scan_req;
1275 struct cfg80211_chan_def scan_chandef;
1276 enum nl80211_band hw_scan_band;
1277 int scan_channel_idx;
1278 int scan_ies_len;
1279 int hw_scan_ies_bufsize;
1280 struct cfg80211_scan_info scan_info;
1281
1282 struct work_struct sched_scan_stopped_work;
1283 struct ieee80211_sub_if_data __rcu *sched_scan_sdata;
1284 struct cfg80211_sched_scan_request __rcu *sched_scan_req;
1285 u8 scan_addr[ETH_ALEN];
1286
1287 unsigned long leave_oper_channel_time;
1288 enum mac80211_scan_state next_scan_state;
1289 struct delayed_work scan_work;
1290 struct ieee80211_sub_if_data __rcu *scan_sdata;
1291
1292 struct cfg80211_chan_def _oper_chandef;
1293
1294
1295 struct ieee80211_channel *tmp_channel;
1296
1297
1298 struct list_head chanctx_list;
1299 struct mutex chanctx_mtx;
1300
1301#ifdef CONFIG_MAC80211_LEDS
1302 struct led_trigger tx_led, rx_led, assoc_led, radio_led;
1303 struct led_trigger tpt_led;
1304 atomic_t tx_led_active, rx_led_active, assoc_led_active;
1305 atomic_t radio_led_active, tpt_led_active;
1306 struct tpt_led_trigger *tpt_led_trigger;
1307#endif
1308
1309#ifdef CONFIG_MAC80211_DEBUG_COUNTERS
1310
1311
1312 u32 dot11TransmittedFragmentCount;
1313 u32 dot11MulticastTransmittedFrameCount;
1314 u32 dot11FailedCount;
1315 u32 dot11RetryCount;
1316 u32 dot11MultipleRetryCount;
1317 u32 dot11FrameDuplicateCount;
1318 u32 dot11ReceivedFragmentCount;
1319 u32 dot11MulticastReceivedFrameCount;
1320 u32 dot11TransmittedFrameCount;
1321
1322
1323 unsigned int tx_handlers_drop;
1324 unsigned int tx_handlers_queued;
1325 unsigned int tx_handlers_drop_wep;
1326 unsigned int tx_handlers_drop_not_assoc;
1327 unsigned int tx_handlers_drop_unauth_port;
1328 unsigned int rx_handlers_drop;
1329 unsigned int rx_handlers_queued;
1330 unsigned int rx_handlers_drop_nullfunc;
1331 unsigned int rx_handlers_drop_defrag;
1332 unsigned int tx_expand_skb_head;
1333 unsigned int tx_expand_skb_head_cloned;
1334 unsigned int rx_expand_skb_head_defrag;
1335 unsigned int rx_handlers_fragments;
1336 unsigned int tx_status_drop;
1337#define I802_DEBUG_INC(c) (c)++
1338#else
1339#define I802_DEBUG_INC(c) do { } while (0)
1340#endif
1341
1342
1343 int total_ps_buffered;
1344
1345
1346
1347 bool pspolling;
1348 bool offchannel_ps_enabled;
1349
1350
1351
1352
1353 struct ieee80211_sub_if_data *ps_sdata;
1354 struct work_struct dynamic_ps_enable_work;
1355 struct work_struct dynamic_ps_disable_work;
1356 struct timer_list dynamic_ps_timer;
1357 struct notifier_block ifa_notifier;
1358 struct notifier_block ifa6_notifier;
1359
1360
1361
1362
1363
1364 int dynamic_ps_forced_timeout;
1365
1366 int user_power_level;
1367
1368 enum ieee80211_smps_mode smps_mode;
1369
1370 struct work_struct restart_work;
1371
1372#ifdef CONFIG_MAC80211_DEBUGFS
1373 struct local_debugfsdentries {
1374 struct dentry *rcdir;
1375 struct dentry *keys;
1376 } debugfs;
1377#endif
1378
1379
1380
1381
1382 struct delayed_work roc_work;
1383 struct list_head roc_list;
1384 struct work_struct hw_roc_start, hw_roc_done;
1385 unsigned long hw_roc_start_time;
1386 u64 roc_cookie_counter;
1387
1388 struct idr ack_status_frames;
1389 spinlock_t ack_status_lock;
1390
1391 struct ieee80211_sub_if_data __rcu *p2p_sdata;
1392
1393
1394 struct ieee80211_sub_if_data __rcu *monitor_sdata;
1395 struct cfg80211_chan_def monitor_chandef;
1396
1397
1398 u8 ext_capa[8];
1399
1400
1401 struct work_struct tdls_chsw_work;
1402 struct sk_buff_head skb_queue_tdls_chsw;
1403};
1404
1405static inline struct ieee80211_sub_if_data *
1406IEEE80211_DEV_TO_SUB_IF(struct net_device *dev)
1407{
1408 return netdev_priv(dev);
1409}
1410
1411static inline struct ieee80211_sub_if_data *
1412IEEE80211_WDEV_TO_SUB_IF(struct wireless_dev *wdev)
1413{
1414 return container_of(wdev, struct ieee80211_sub_if_data, wdev);
1415}
1416
1417
1418struct ieee80211_ra_tid {
1419 u8 ra[ETH_ALEN];
1420 u16 tid;
1421};
1422
1423
1424struct ieee80211_csa_ie {
1425 struct cfg80211_chan_def chandef;
1426 u8 mode;
1427 u8 count;
1428 u8 ttl;
1429 u16 pre_value;
1430};
1431
1432
1433struct ieee802_11_elems {
1434 const u8 *ie_start;
1435 size_t total_len;
1436
1437
1438 const struct ieee80211_tdls_lnkie *lnk_id;
1439 const struct ieee80211_ch_switch_timing *ch_sw_timing;
1440 const u8 *ext_capab;
1441 const u8 *ssid;
1442 const u8 *supp_rates;
1443 const u8 *ds_params;
1444 const struct ieee80211_tim_ie *tim;
1445 const u8 *challenge;
1446 const u8 *rsn;
1447 const u8 *erp_info;
1448 const u8 *ext_supp_rates;
1449 const u8 *wmm_info;
1450 const u8 *wmm_param;
1451 const struct ieee80211_ht_cap *ht_cap_elem;
1452 const struct ieee80211_ht_operation *ht_operation;
1453 const struct ieee80211_vht_cap *vht_cap_elem;
1454 const struct ieee80211_vht_operation *vht_operation;
1455 const struct ieee80211_meshconf_ie *mesh_config;
1456 const u8 *mesh_id;
1457 const u8 *peering;
1458 const __le16 *awake_window;
1459 const u8 *preq;
1460 const u8 *prep;
1461 const u8 *perr;
1462 const struct ieee80211_rann_ie *rann;
1463 const struct ieee80211_channel_sw_ie *ch_switch_ie;
1464 const struct ieee80211_ext_chansw_ie *ext_chansw_ie;
1465 const struct ieee80211_wide_bw_chansw_ie *wide_bw_chansw_ie;
1466 const u8 *country_elem;
1467 const u8 *pwr_constr_elem;
1468 const u8 *cisco_dtpc_elem;
1469 const struct ieee80211_timeout_interval_ie *timeout_int;
1470 const u8 *opmode_notif;
1471 const struct ieee80211_sec_chan_offs_ie *sec_chan_offs;
1472 const struct ieee80211_mesh_chansw_params_ie *mesh_chansw_params_ie;
1473
1474
1475 u8 ext_capab_len;
1476 u8 ssid_len;
1477 u8 supp_rates_len;
1478 u8 tim_len;
1479 u8 challenge_len;
1480 u8 rsn_len;
1481 u8 ext_supp_rates_len;
1482 u8 wmm_info_len;
1483 u8 wmm_param_len;
1484 u8 mesh_id_len;
1485 u8 peering_len;
1486 u8 preq_len;
1487 u8 prep_len;
1488 u8 perr_len;
1489 u8 country_elem_len;
1490
1491
1492 bool parse_error;
1493};
1494
1495static inline struct ieee80211_local *hw_to_local(
1496 struct ieee80211_hw *hw)
1497{
1498 return container_of(hw, struct ieee80211_local, hw);
1499}
1500
1501static inline struct txq_info *to_txq_info(struct ieee80211_txq *txq)
1502{
1503 return container_of(txq, struct txq_info, txq);
1504}
1505
1506static inline bool txq_has_queue(struct ieee80211_txq *txq)
1507{
1508 struct txq_info *txqi = to_txq_info(txq);
1509
1510 return !(skb_queue_empty(&txqi->frags) && !txqi->tin.backlog_packets);
1511}
1512
1513static inline int ieee80211_bssid_match(const u8 *raddr, const u8 *addr)
1514{
1515 return ether_addr_equal(raddr, addr) ||
1516 is_broadcast_ether_addr(raddr);
1517}
1518
1519static inline bool
1520ieee80211_have_rx_timestamp(struct ieee80211_rx_status *status)
1521{
1522 WARN_ON_ONCE(status->flag & RX_FLAG_MACTIME_START &&
1523 status->flag & RX_FLAG_MACTIME_END);
1524 if (status->flag & (RX_FLAG_MACTIME_START | RX_FLAG_MACTIME_END))
1525 return true;
1526
1527 if (status->flag & RX_FLAG_MACTIME_PLCP_START &&
1528 !(status->flag & (RX_FLAG_HT | RX_FLAG_VHT)))
1529 return true;
1530 return false;
1531}
1532
1533void ieee80211_vif_inc_num_mcast(struct ieee80211_sub_if_data *sdata);
1534void ieee80211_vif_dec_num_mcast(struct ieee80211_sub_if_data *sdata);
1535
1536
1537
1538
1539
1540static inline int
1541ieee80211_vif_get_num_mcast_if(struct ieee80211_sub_if_data *sdata)
1542{
1543 if (sdata->vif.type == NL80211_IFTYPE_AP)
1544 return atomic_read(&sdata->u.ap.num_mcast_sta);
1545 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta)
1546 return atomic_read(&sdata->u.vlan.num_mcast_sta);
1547 return -1;
1548}
1549
1550u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local,
1551 struct ieee80211_rx_status *status,
1552 unsigned int mpdu_len,
1553 unsigned int mpdu_offset);
1554int ieee80211_hw_config(struct ieee80211_local *local, u32 changed);
1555void ieee80211_tx_set_protected(struct ieee80211_tx_data *tx);
1556void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
1557 u32 changed);
1558void ieee80211_configure_filter(struct ieee80211_local *local);
1559u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata);
1560
1561u64 ieee80211_mgmt_tx_cookie(struct ieee80211_local *local);
1562int ieee80211_attach_ack_skb(struct ieee80211_local *local, struct sk_buff *skb,
1563 u64 *cookie, gfp_t gfp);
1564
1565void ieee80211_check_fast_rx(struct sta_info *sta);
1566void __ieee80211_check_fast_rx_iface(struct ieee80211_sub_if_data *sdata);
1567void ieee80211_check_fast_rx_iface(struct ieee80211_sub_if_data *sdata);
1568void ieee80211_clear_fast_rx(struct sta_info *sta);
1569
1570
1571void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata);
1572int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata,
1573 struct cfg80211_auth_request *req);
1574int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
1575 struct cfg80211_assoc_request *req);
1576int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
1577 struct cfg80211_deauth_request *req);
1578int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata,
1579 struct cfg80211_disassoc_request *req);
1580void ieee80211_send_pspoll(struct ieee80211_local *local,
1581 struct ieee80211_sub_if_data *sdata);
1582void ieee80211_recalc_ps(struct ieee80211_local *local);
1583void ieee80211_recalc_ps_vif(struct ieee80211_sub_if_data *sdata);
1584int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata);
1585void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata);
1586void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
1587 struct sk_buff *skb);
1588void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata);
1589void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata);
1590void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata);
1591void ieee80211_mgd_conn_tx_status(struct ieee80211_sub_if_data *sdata,
1592 __le16 fc, bool acked);
1593void ieee80211_mgd_quiesce(struct ieee80211_sub_if_data *sdata);
1594void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata);
1595void ieee80211_sta_handle_tspec_ac_params(struct ieee80211_sub_if_data *sdata);
1596
1597
1598void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local);
1599void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata);
1600void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata,
1601 const u8 *bssid, const u8 *addr, u32 supp_rates);
1602int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
1603 struct cfg80211_ibss_params *params);
1604int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata);
1605void ieee80211_ibss_work(struct ieee80211_sub_if_data *sdata);
1606void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
1607 struct sk_buff *skb);
1608int ieee80211_ibss_csa_beacon(struct ieee80211_sub_if_data *sdata,
1609 struct cfg80211_csa_settings *csa_settings);
1610int ieee80211_ibss_finish_csa(struct ieee80211_sub_if_data *sdata);
1611void ieee80211_ibss_stop(struct ieee80211_sub_if_data *sdata);
1612
1613
1614void ieee80211_ocb_work(struct ieee80211_sub_if_data *sdata);
1615void ieee80211_ocb_rx_no_sta(struct ieee80211_sub_if_data *sdata,
1616 const u8 *bssid, const u8 *addr, u32 supp_rates);
1617void ieee80211_ocb_setup_sdata(struct ieee80211_sub_if_data *sdata);
1618int ieee80211_ocb_join(struct ieee80211_sub_if_data *sdata,
1619 struct ocb_setup *setup);
1620int ieee80211_ocb_leave(struct ieee80211_sub_if_data *sdata);
1621
1622
1623void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata);
1624void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
1625 struct sk_buff *skb);
1626int ieee80211_mesh_csa_beacon(struct ieee80211_sub_if_data *sdata,
1627 struct cfg80211_csa_settings *csa_settings);
1628int ieee80211_mesh_finish_csa(struct ieee80211_sub_if_data *sdata);
1629
1630
1631void ieee80211_scan_work(struct work_struct *work);
1632int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
1633 const u8 *ssid, u8 ssid_len,
1634 struct ieee80211_channel **channels,
1635 unsigned int n_channels,
1636 enum nl80211_bss_scan_width scan_width);
1637int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
1638 struct cfg80211_scan_request *req);
1639void ieee80211_scan_cancel(struct ieee80211_local *local);
1640void ieee80211_run_deferred_scan(struct ieee80211_local *local);
1641void ieee80211_scan_rx(struct ieee80211_local *local, struct sk_buff *skb);
1642
1643void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local);
1644struct ieee80211_bss *
1645ieee80211_bss_info_update(struct ieee80211_local *local,
1646 struct ieee80211_rx_status *rx_status,
1647 struct ieee80211_mgmt *mgmt,
1648 size_t len,
1649 struct ieee802_11_elems *elems,
1650 struct ieee80211_channel *channel);
1651void ieee80211_rx_bss_put(struct ieee80211_local *local,
1652 struct ieee80211_bss *bss);
1653
1654
1655int
1656__ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
1657 struct cfg80211_sched_scan_request *req);
1658int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
1659 struct cfg80211_sched_scan_request *req);
1660int ieee80211_request_sched_scan_stop(struct ieee80211_local *local);
1661void ieee80211_sched_scan_end(struct ieee80211_local *local);
1662void ieee80211_sched_scan_stopped_work(struct work_struct *work);
1663
1664
1665void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local);
1666void ieee80211_offchannel_return(struct ieee80211_local *local);
1667void ieee80211_roc_setup(struct ieee80211_local *local);
1668void ieee80211_start_next_roc(struct ieee80211_local *local);
1669void ieee80211_roc_purge(struct ieee80211_local *local,
1670 struct ieee80211_sub_if_data *sdata);
1671int ieee80211_remain_on_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
1672 struct ieee80211_channel *chan,
1673 unsigned int duration, u64 *cookie);
1674int ieee80211_cancel_remain_on_channel(struct wiphy *wiphy,
1675 struct wireless_dev *wdev, u64 cookie);
1676int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
1677 struct cfg80211_mgmt_tx_params *params, u64 *cookie);
1678int ieee80211_mgmt_tx_cancel_wait(struct wiphy *wiphy,
1679 struct wireless_dev *wdev, u64 cookie);
1680
1681
1682void ieee80211_csa_finalize_work(struct work_struct *work);
1683int ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
1684 struct cfg80211_csa_settings *params);
1685
1686
1687int ieee80211_iface_init(void);
1688void ieee80211_iface_exit(void);
1689int ieee80211_if_add(struct ieee80211_local *local, const char *name,
1690 unsigned char name_assign_type,
1691 struct wireless_dev **new_wdev, enum nl80211_iftype type,
1692 struct vif_params *params);
1693int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata,
1694 enum nl80211_iftype type);
1695void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata);
1696void ieee80211_remove_interfaces(struct ieee80211_local *local);
1697u32 ieee80211_idle_off(struct ieee80211_local *local);
1698void ieee80211_recalc_idle(struct ieee80211_local *local);
1699void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata,
1700 const int offset);
1701int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up);
1702void ieee80211_sdata_stop(struct ieee80211_sub_if_data *sdata);
1703int ieee80211_add_virtual_monitor(struct ieee80211_local *local);
1704void ieee80211_del_virtual_monitor(struct ieee80211_local *local);
1705
1706bool __ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata);
1707void ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata,
1708 bool update_bss);
1709
1710static inline bool ieee80211_sdata_running(struct ieee80211_sub_if_data *sdata)
1711{
1712 return test_bit(SDATA_STATE_RUNNING, &sdata->state);
1713}
1714
1715
1716void ieee80211_clear_tx_pending(struct ieee80211_local *local);
1717void ieee80211_tx_pending(unsigned long data);
1718netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
1719 struct net_device *dev);
1720netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
1721 struct net_device *dev);
1722void __ieee80211_subif_start_xmit(struct sk_buff *skb,
1723 struct net_device *dev,
1724 u32 info_flags);
1725void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
1726 struct sk_buff_head *skbs);
1727struct sk_buff *
1728ieee80211_build_data_template(struct ieee80211_sub_if_data *sdata,
1729 struct sk_buff *skb, u32 info_flags);
1730void ieee80211_tx_monitor(struct ieee80211_local *local, struct sk_buff *skb,
1731 struct ieee80211_supported_band *sband,
1732 int retry_count, int shift, bool send_to_cooked);
1733
1734void ieee80211_check_fast_xmit(struct sta_info *sta);
1735void ieee80211_check_fast_xmit_all(struct ieee80211_local *local);
1736void ieee80211_check_fast_xmit_iface(struct ieee80211_sub_if_data *sdata);
1737void ieee80211_clear_fast_xmit(struct sta_info *sta);
1738
1739
1740void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,
1741 struct ieee80211_sta_ht_cap *ht_cap);
1742bool ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_sub_if_data *sdata,
1743 struct ieee80211_supported_band *sband,
1744 const struct ieee80211_ht_cap *ht_cap_ie,
1745 struct sta_info *sta);
1746void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata,
1747 const u8 *da, u16 tid,
1748 u16 initiator, u16 reason_code);
1749int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata,
1750 enum ieee80211_smps_mode smps, const u8 *da,
1751 const u8 *bssid);
1752void ieee80211_request_smps_ap_work(struct work_struct *work);
1753void ieee80211_request_smps_mgd_work(struct work_struct *work);
1754bool ieee80211_smps_is_restrictive(enum ieee80211_smps_mode smps_mode_old,
1755 enum ieee80211_smps_mode smps_mode_new);
1756
1757void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
1758 u16 initiator, u16 reason, bool stop);
1759void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
1760 u16 initiator, u16 reason, bool stop);
1761void __ieee80211_start_rx_ba_session(struct sta_info *sta,
1762 u8 dialog_token, u16 timeout,
1763 u16 start_seq_num, u16 ba_policy, u16 tid,
1764 u16 buf_size, bool tx, bool auto_seq);
1765void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta,
1766 enum ieee80211_agg_stop_reason reason);
1767void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata,
1768 struct sta_info *sta,
1769 struct ieee80211_mgmt *mgmt, size_t len);
1770void ieee80211_process_addba_resp(struct ieee80211_local *local,
1771 struct sta_info *sta,
1772 struct ieee80211_mgmt *mgmt,
1773 size_t len);
1774void ieee80211_process_addba_request(struct ieee80211_local *local,
1775 struct sta_info *sta,
1776 struct ieee80211_mgmt *mgmt,
1777 size_t len);
1778
1779int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
1780 enum ieee80211_agg_stop_reason reason);
1781int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
1782 enum ieee80211_agg_stop_reason reason);
1783void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid);
1784void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid);
1785void ieee80211_ba_session_work(struct work_struct *work);
1786void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid);
1787void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid);
1788
1789u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs);
1790
1791
1792void
1793ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata,
1794 struct ieee80211_supported_band *sband,
1795 const struct ieee80211_vht_cap *vht_cap_ie,
1796 struct sta_info *sta);
1797enum ieee80211_sta_rx_bandwidth ieee80211_sta_cap_rx_bw(struct sta_info *sta);
1798enum ieee80211_sta_rx_bandwidth ieee80211_sta_cur_vht_bw(struct sta_info *sta);
1799void ieee80211_sta_set_rx_nss(struct sta_info *sta);
1800enum ieee80211_sta_rx_bandwidth
1801ieee80211_chan_width_to_rx_bw(enum nl80211_chan_width width);
1802enum nl80211_chan_width ieee80211_sta_cap_chan_bw(struct sta_info *sta);
1803void ieee80211_sta_set_rx_nss(struct sta_info *sta);
1804void ieee80211_process_mu_groups(struct ieee80211_sub_if_data *sdata,
1805 struct ieee80211_mgmt *mgmt);
1806u32 __ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
1807 struct sta_info *sta, u8 opmode,
1808 enum nl80211_band band);
1809void ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
1810 struct sta_info *sta, u8 opmode,
1811 enum nl80211_band band);
1812void ieee80211_apply_vhtcap_overrides(struct ieee80211_sub_if_data *sdata,
1813 struct ieee80211_sta_vht_cap *vht_cap);
1814void ieee80211_get_vht_mask_from_cap(__le16 vht_cap,
1815 u16 vht_mask[NL80211_VHT_NSS_MAX]);
1816
1817
1818void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
1819 struct ieee80211_mgmt *mgmt,
1820 size_t len);
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837int ieee80211_parse_ch_switch_ie(struct ieee80211_sub_if_data *sdata,
1838 struct ieee802_11_elems *elems,
1839 enum nl80211_band current_band,
1840 u32 sta_flags, u8 *bssid,
1841 struct ieee80211_csa_ie *csa_ie);
1842
1843
1844int ieee80211_reconfig(struct ieee80211_local *local);
1845void ieee80211_stop_device(struct ieee80211_local *local);
1846
1847int __ieee80211_suspend(struct ieee80211_hw *hw,
1848 struct cfg80211_wowlan *wowlan);
1849
1850static inline int __ieee80211_resume(struct ieee80211_hw *hw)
1851{
1852 struct ieee80211_local *local = hw_to_local(hw);
1853
1854 WARN(test_bit(SCAN_HW_SCANNING, &local->scanning) &&
1855 !test_bit(SCAN_COMPLETED, &local->scanning),
1856 "%s: resume with hardware scan still in progress\n",
1857 wiphy_name(hw->wiphy));
1858
1859 return ieee80211_reconfig(hw_to_local(hw));
1860}
1861
1862
1863extern const void *const mac80211_wiphy_privid;
1864int ieee80211_frame_duration(enum nl80211_band band, size_t len,
1865 int rate, int erp, int short_preamble,
1866 int shift);
1867void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata,
1868 bool bss_notify, bool enable_qos);
1869void ieee80211_xmit(struct ieee80211_sub_if_data *sdata,
1870 struct sta_info *sta, struct sk_buff *skb);
1871
1872void __ieee80211_tx_skb_tid_band(struct ieee80211_sub_if_data *sdata,
1873 struct sk_buff *skb, int tid,
1874 enum nl80211_band band);
1875
1876static inline void
1877ieee80211_tx_skb_tid_band(struct ieee80211_sub_if_data *sdata,
1878 struct sk_buff *skb, int tid,
1879 enum nl80211_band band)
1880{
1881 rcu_read_lock();
1882 __ieee80211_tx_skb_tid_band(sdata, skb, tid, band);
1883 rcu_read_unlock();
1884}
1885
1886static inline void ieee80211_tx_skb_tid(struct ieee80211_sub_if_data *sdata,
1887 struct sk_buff *skb, int tid)
1888{
1889 struct ieee80211_chanctx_conf *chanctx_conf;
1890
1891 rcu_read_lock();
1892 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
1893 if (WARN_ON(!chanctx_conf)) {
1894 rcu_read_unlock();
1895 kfree_skb(skb);
1896 return;
1897 }
1898
1899 __ieee80211_tx_skb_tid_band(sdata, skb, tid,
1900 chanctx_conf->def.chan->band);
1901 rcu_read_unlock();
1902}
1903
1904static inline void ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata,
1905 struct sk_buff *skb)
1906{
1907
1908 ieee80211_tx_skb_tid(sdata, skb, 7);
1909}
1910
1911u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
1912 struct ieee802_11_elems *elems,
1913 u64 filter, u32 crc);
1914static inline void ieee802_11_parse_elems(const u8 *start, size_t len,
1915 bool action,
1916 struct ieee802_11_elems *elems)
1917{
1918 ieee802_11_parse_elems_crc(start, len, action, elems, 0, 0);
1919}
1920
1921
1922extern const int ieee802_1d_to_ac[8];
1923
1924static inline int ieee80211_ac_from_tid(int tid)
1925{
1926 return ieee802_1d_to_ac[tid & 7];
1927}
1928
1929void ieee80211_dynamic_ps_enable_work(struct work_struct *work);
1930void ieee80211_dynamic_ps_disable_work(struct work_struct *work);
1931void ieee80211_dynamic_ps_timer(unsigned long data);
1932void ieee80211_send_nullfunc(struct ieee80211_local *local,
1933 struct ieee80211_sub_if_data *sdata,
1934 bool powersave);
1935void ieee80211_sta_rx_notify(struct ieee80211_sub_if_data *sdata,
1936 struct ieee80211_hdr *hdr);
1937void ieee80211_sta_tx_notify(struct ieee80211_sub_if_data *sdata,
1938 struct ieee80211_hdr *hdr, bool ack, u16 tx_time);
1939
1940void ieee80211_wake_queues_by_reason(struct ieee80211_hw *hw,
1941 unsigned long queues,
1942 enum queue_stop_reason reason,
1943 bool refcounted);
1944void ieee80211_stop_vif_queues(struct ieee80211_local *local,
1945 struct ieee80211_sub_if_data *sdata,
1946 enum queue_stop_reason reason);
1947void ieee80211_wake_vif_queues(struct ieee80211_local *local,
1948 struct ieee80211_sub_if_data *sdata,
1949 enum queue_stop_reason reason);
1950void ieee80211_stop_queues_by_reason(struct ieee80211_hw *hw,
1951 unsigned long queues,
1952 enum queue_stop_reason reason,
1953 bool refcounted);
1954void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue,
1955 enum queue_stop_reason reason,
1956 bool refcounted);
1957void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue,
1958 enum queue_stop_reason reason,
1959 bool refcounted);
1960void ieee80211_propagate_queue_wake(struct ieee80211_local *local, int queue);
1961void ieee80211_add_pending_skb(struct ieee80211_local *local,
1962 struct sk_buff *skb);
1963void ieee80211_add_pending_skbs(struct ieee80211_local *local,
1964 struct sk_buff_head *skbs);
1965void ieee80211_flush_queues(struct ieee80211_local *local,
1966 struct ieee80211_sub_if_data *sdata, bool drop);
1967void __ieee80211_flush_queues(struct ieee80211_local *local,
1968 struct ieee80211_sub_if_data *sdata,
1969 unsigned int queues, bool drop);
1970
1971static inline bool ieee80211_can_run_worker(struct ieee80211_local *local)
1972{
1973
1974
1975
1976
1977
1978
1979 if (local->quiescing)
1980 return false;
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995 if (local->suspended)
1996 return false;
1997
1998 return true;
1999}
2000
2001int ieee80211_txq_setup_flows(struct ieee80211_local *local);
2002void ieee80211_txq_teardown_flows(struct ieee80211_local *local);
2003void ieee80211_txq_init(struct ieee80211_sub_if_data *sdata,
2004 struct sta_info *sta,
2005 struct txq_info *txq, int tid);
2006void ieee80211_txq_purge(struct ieee80211_local *local,
2007 struct txq_info *txqi);
2008void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
2009 u16 transaction, u16 auth_alg, u16 status,
2010 const u8 *extra, size_t extra_len, const u8 *bssid,
2011 const u8 *da, const u8 *key, u8 key_len, u8 key_idx,
2012 u32 tx_flags);
2013void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
2014 const u8 *bssid, u16 stype, u16 reason,
2015 bool send_frame, u8 *frame_buf);
2016int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
2017 size_t buffer_len,
2018 struct ieee80211_scan_ies *ie_desc,
2019 const u8 *ie, size_t ie_len,
2020 u8 bands_used, u32 *rate_masks,
2021 struct cfg80211_chan_def *chandef);
2022struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata,
2023 const u8 *src, const u8 *dst,
2024 u32 ratemask,
2025 struct ieee80211_channel *chan,
2026 const u8 *ssid, size_t ssid_len,
2027 const u8 *ie, size_t ie_len,
2028 bool directed);
2029void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata,
2030 const u8 *src, const u8 *dst,
2031 const u8 *ssid, size_t ssid_len,
2032 const u8 *ie, size_t ie_len,
2033 u32 ratemask, bool directed, u32 tx_flags,
2034 struct ieee80211_channel *channel, bool scan);
2035
2036u32 ieee80211_sta_get_rates(struct ieee80211_sub_if_data *sdata,
2037 struct ieee802_11_elems *elems,
2038 enum nl80211_band band, u32 *basic_rates);
2039int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata,
2040 enum ieee80211_smps_mode smps_mode);
2041int __ieee80211_request_smps_ap(struct ieee80211_sub_if_data *sdata,
2042 enum ieee80211_smps_mode smps_mode);
2043void ieee80211_recalc_smps(struct ieee80211_sub_if_data *sdata);
2044void ieee80211_recalc_min_chandef(struct ieee80211_sub_if_data *sdata);
2045
2046size_t ieee80211_ie_split_vendor(const u8 *ies, size_t ielen, size_t offset);
2047u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
2048 u16 cap);
2049u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
2050 const struct cfg80211_chan_def *chandef,
2051 u16 prot_mode, bool rifs_mode);
2052u8 *ieee80211_ie_build_vht_cap(u8 *pos, struct ieee80211_sta_vht_cap *vht_cap,
2053 u32 cap);
2054u8 *ieee80211_ie_build_vht_oper(u8 *pos, struct ieee80211_sta_vht_cap *vht_cap,
2055 const struct cfg80211_chan_def *chandef);
2056int ieee80211_parse_bitrates(struct cfg80211_chan_def *chandef,
2057 const struct ieee80211_supported_band *sband,
2058 const u8 *srates, int srates_len, u32 *rates);
2059int ieee80211_add_srates_ie(struct ieee80211_sub_if_data *sdata,
2060 struct sk_buff *skb, bool need_basic,
2061 enum nl80211_band band);
2062int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata,
2063 struct sk_buff *skb, bool need_basic,
2064 enum nl80211_band band);
2065u8 *ieee80211_add_wmm_info_ie(u8 *buf, u8 qosinfo);
2066
2067
2068bool ieee80211_chandef_ht_oper(const struct ieee80211_ht_operation *ht_oper,
2069 struct cfg80211_chan_def *chandef);
2070bool ieee80211_chandef_vht_oper(const struct ieee80211_vht_operation *oper,
2071 struct cfg80211_chan_def *chandef);
2072u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c);
2073
2074int __must_check
2075ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata,
2076 const struct cfg80211_chan_def *chandef,
2077 enum ieee80211_chanctx_mode mode);
2078int __must_check
2079ieee80211_vif_reserve_chanctx(struct ieee80211_sub_if_data *sdata,
2080 const struct cfg80211_chan_def *chandef,
2081 enum ieee80211_chanctx_mode mode,
2082 bool radar_required);
2083int __must_check
2084ieee80211_vif_use_reserved_context(struct ieee80211_sub_if_data *sdata);
2085int ieee80211_vif_unreserve_chanctx(struct ieee80211_sub_if_data *sdata);
2086
2087int __must_check
2088ieee80211_vif_change_bandwidth(struct ieee80211_sub_if_data *sdata,
2089 const struct cfg80211_chan_def *chandef,
2090 u32 *changed);
2091void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata);
2092void ieee80211_vif_vlan_copy_chanctx(struct ieee80211_sub_if_data *sdata);
2093void ieee80211_vif_copy_chanctx_to_vlans(struct ieee80211_sub_if_data *sdata,
2094 bool clear);
2095int ieee80211_chanctx_refcount(struct ieee80211_local *local,
2096 struct ieee80211_chanctx *ctx);
2097
2098void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local,
2099 struct ieee80211_chanctx *chanctx);
2100void ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
2101 struct ieee80211_chanctx *ctx);
2102bool ieee80211_is_radar_required(struct ieee80211_local *local);
2103
2104void ieee80211_dfs_cac_timer(unsigned long data);
2105void ieee80211_dfs_cac_timer_work(struct work_struct *work);
2106void ieee80211_dfs_cac_cancel(struct ieee80211_local *local);
2107void ieee80211_dfs_radar_detected_work(struct work_struct *work);
2108int ieee80211_send_action_csa(struct ieee80211_sub_if_data *sdata,
2109 struct cfg80211_csa_settings *csa_settings);
2110
2111bool ieee80211_cs_valid(const struct ieee80211_cipher_scheme *cs);
2112bool ieee80211_cs_list_valid(const struct ieee80211_cipher_scheme *cs, int n);
2113const struct ieee80211_cipher_scheme *
2114ieee80211_cs_get(struct ieee80211_local *local, u32 cipher,
2115 enum nl80211_iftype iftype);
2116int ieee80211_cs_headroom(struct ieee80211_local *local,
2117 struct cfg80211_crypto_settings *crypto,
2118 enum nl80211_iftype iftype);
2119void ieee80211_recalc_dtim(struct ieee80211_local *local,
2120 struct ieee80211_sub_if_data *sdata);
2121int ieee80211_check_combinations(struct ieee80211_sub_if_data *sdata,
2122 const struct cfg80211_chan_def *chandef,
2123 enum ieee80211_chanctx_mode chanmode,
2124 u8 radar_detect);
2125int ieee80211_max_num_channels(struct ieee80211_local *local);
2126enum nl80211_chan_width ieee80211_get_sta_bw(struct ieee80211_sta *sta);
2127void ieee80211_recalc_chanctx_chantype(struct ieee80211_local *local,
2128 struct ieee80211_chanctx *ctx);
2129
2130
2131int ieee80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev,
2132 const u8 *peer, u8 action_code, u8 dialog_token,
2133 u16 status_code, u32 peer_capability,
2134 bool initiator, const u8 *extra_ies,
2135 size_t extra_ies_len);
2136int ieee80211_tdls_oper(struct wiphy *wiphy, struct net_device *dev,
2137 const u8 *peer, enum nl80211_tdls_operation oper);
2138void ieee80211_tdls_peer_del_work(struct work_struct *wk);
2139int ieee80211_tdls_channel_switch(struct wiphy *wiphy, struct net_device *dev,
2140 const u8 *addr, u8 oper_class,
2141 struct cfg80211_chan_def *chandef);
2142void ieee80211_tdls_cancel_channel_switch(struct wiphy *wiphy,
2143 struct net_device *dev,
2144 const u8 *addr);
2145void ieee80211_teardown_tdls_peers(struct ieee80211_sub_if_data *sdata);
2146void ieee80211_tdls_chsw_work(struct work_struct *wk);
2147
2148extern const struct ethtool_ops ieee80211_ethtool_ops;
2149
2150#ifdef CONFIG_MAC80211_NOINLINE
2151#define debug_noinline noinline
2152#else
2153#define debug_noinline
2154#endif
2155
2156#endif
2157