aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/ieee80211_i.h
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r--net/mac80211/ieee80211_i.h222
1 files changed, 113 insertions, 109 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 2ed065c09562..388580a1bada 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -86,23 +86,11 @@ struct ieee80211_fragment_entry {
86 86
87 87
88struct ieee80211_bss { 88struct ieee80211_bss {
89 /* don't want to look up all the time */ 89 u32 device_ts_beacon, device_ts_presp;
90 size_t ssid_len;
91 u8 ssid[IEEE80211_MAX_SSID_LEN];
92
93 u32 device_ts;
94 90
95 bool wmm_used; 91 bool wmm_used;
96 bool uapsd_supported; 92 bool uapsd_supported;
97 93
98 unsigned long last_probe_resp;
99
100#ifdef CONFIG_MAC80211_MESH
101 u8 *mesh_id;
102 size_t mesh_id_len;
103 u8 *mesh_cfg;
104#endif
105
106#define IEEE80211_MAX_SUPP_RATES 32 94#define IEEE80211_MAX_SUPP_RATES 32
107 u8 supp_rates[IEEE80211_MAX_SUPP_RATES]; 95 u8 supp_rates[IEEE80211_MAX_SUPP_RATES];
108 size_t supp_rates_len; 96 size_t supp_rates_len;
@@ -153,31 +141,6 @@ enum ieee80211_bss_valid_data_flags {
153 IEEE80211_BSS_VALID_ERP = BIT(3) 141 IEEE80211_BSS_VALID_ERP = BIT(3)
154}; 142};
155 143
156static inline u8 *bss_mesh_cfg(struct ieee80211_bss *bss)
157{
158#ifdef CONFIG_MAC80211_MESH
159 return bss->mesh_cfg;
160#endif
161 return NULL;
162}
163
164static inline u8 *bss_mesh_id(struct ieee80211_bss *bss)
165{
166#ifdef CONFIG_MAC80211_MESH
167 return bss->mesh_id;
168#endif
169 return NULL;
170}
171
172static inline u8 bss_mesh_id_len(struct ieee80211_bss *bss)
173{
174#ifdef CONFIG_MAC80211_MESH
175 return bss->mesh_id_len;
176#endif
177 return 0;
178}
179
180
181typedef unsigned __bitwise__ ieee80211_tx_result; 144typedef unsigned __bitwise__ ieee80211_tx_result;
182#define TX_CONTINUE ((__force ieee80211_tx_result) 0u) 145#define TX_CONTINUE ((__force ieee80211_tx_result) 0u)
183#define TX_DROP ((__force ieee80211_tx_result) 1u) 146#define TX_DROP ((__force ieee80211_tx_result) 1u)
@@ -380,6 +343,7 @@ struct ieee80211_mgd_auth_data {
380 u8 key[WLAN_KEY_LEN_WEP104]; 343 u8 key[WLAN_KEY_LEN_WEP104];
381 u8 key_len, key_idx; 344 u8 key_len, key_idx;
382 bool done; 345 bool done;
346 bool timeout_started;
383 347
384 u16 sae_trans, sae_status; 348 u16 sae_trans, sae_status;
385 size_t data_len; 349 size_t data_len;
@@ -399,12 +363,14 @@ struct ieee80211_mgd_assoc_data {
399 u8 ssid_len; 363 u8 ssid_len;
400 u8 supp_rates_len; 364 u8 supp_rates_len;
401 bool wmm, uapsd; 365 bool wmm, uapsd;
402 bool have_beacon; 366 bool have_beacon, need_beacon;
403 bool sent_assoc;
404 bool synced; 367 bool synced;
368 bool timeout_started;
405 369
406 u8 ap_ht_param; 370 u8 ap_ht_param;
407 371
372 struct ieee80211_vht_cap ap_vht_cap;
373
408 size_t ie_len; 374 size_t ie_len;
409 u8 ie[]; 375 u8 ie[];
410}; 376};
@@ -423,6 +389,7 @@ struct ieee80211_if_managed {
423 unsigned long probe_timeout; 389 unsigned long probe_timeout;
424 int probe_send_count; 390 int probe_send_count;
425 bool nullfunc_failed; 391 bool nullfunc_failed;
392 bool connection_loss;
426 393
427 struct mutex mtx; 394 struct mutex mtx;
428 struct cfg80211_bss *associated; 395 struct cfg80211_bss *associated;
@@ -447,6 +414,10 @@ struct ieee80211_if_managed {
447 bool beacon_crc_valid; 414 bool beacon_crc_valid;
448 u32 beacon_crc; 415 u32 beacon_crc;
449 416
417 bool status_acked;
418 bool status_received;
419 __le16 status_fc;
420
450 enum { 421 enum {
451 IEEE80211_MFP_DISABLED, 422 IEEE80211_MFP_DISABLED,
452 IEEE80211_MFP_OPTIONAL, 423 IEEE80211_MFP_OPTIONAL,
@@ -609,6 +580,9 @@ struct ieee80211_if_mesh {
609 u32 mesh_seqnum; 580 u32 mesh_seqnum;
610 bool accepting_plinks; 581 bool accepting_plinks;
611 int num_gates; 582 int num_gates;
583 struct beacon_data __rcu *beacon;
584 /* just protects beacon updates for now */
585 struct mutex mtx;
612 const u8 *ie; 586 const u8 *ie;
613 u8 ie_len; 587 u8 ie_len;
614 enum { 588 enum {
@@ -621,6 +595,11 @@ struct ieee80211_if_mesh {
621 s64 sync_offset_clockdrift_max; 595 s64 sync_offset_clockdrift_max;
622 spinlock_t sync_offset_lock; 596 spinlock_t sync_offset_lock;
623 bool adjusting_tbtt; 597 bool adjusting_tbtt;
598 /* mesh power save */
599 enum nl80211_mesh_power_mode nonpeer_pm;
600 int ps_peers_light_sleep;
601 int ps_peers_deep_sleep;
602 struct ps_data ps;
624}; 603};
625 604
626#ifdef CONFIG_MAC80211_MESH 605#ifdef CONFIG_MAC80211_MESH
@@ -659,10 +638,13 @@ enum ieee80211_sub_if_data_flags {
659 * change handling while the interface is up 638 * change handling while the interface is up
660 * @SDATA_STATE_OFFCHANNEL: This interface is currently in offchannel 639 * @SDATA_STATE_OFFCHANNEL: This interface is currently in offchannel
661 * mode, so queues are stopped 640 * mode, so queues are stopped
641 * @SDATA_STATE_OFFCHANNEL_BEACON_STOPPED: Beaconing was stopped due
642 * to offchannel, reset when offchannel returns
662 */ 643 */
663enum ieee80211_sdata_state_bits { 644enum ieee80211_sdata_state_bits {
664 SDATA_STATE_RUNNING, 645 SDATA_STATE_RUNNING,
665 SDATA_STATE_OFFCHANNEL, 646 SDATA_STATE_OFFCHANNEL,
647 SDATA_STATE_OFFCHANNEL_BEACON_STOPPED,
666}; 648};
667 649
668/** 650/**
@@ -685,6 +667,7 @@ struct ieee80211_chanctx {
685 667
686 enum ieee80211_chanctx_mode mode; 668 enum ieee80211_chanctx_mode mode;
687 int refcount; 669 int refcount;
670 bool driver_present;
688 671
689 struct ieee80211_chanctx_conf conf; 672 struct ieee80211_chanctx_conf conf;
690}; 673};
@@ -711,9 +694,6 @@ struct ieee80211_sub_if_data {
711 694
712 char name[IFNAMSIZ]; 695 char name[IFNAMSIZ];
713 696
714 /* to detect idle changes */
715 bool old_idle;
716
717 /* Fragment table for host-based reassembly */ 697 /* Fragment table for host-based reassembly */
718 struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX]; 698 struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX];
719 unsigned int fragment_next; 699 unsigned int fragment_next;
@@ -741,14 +721,15 @@ struct ieee80211_sub_if_data {
741 struct work_struct work; 721 struct work_struct work;
742 struct sk_buff_head skb_queue; 722 struct sk_buff_head skb_queue;
743 723
744 bool arp_filter_state;
745
746 u8 needed_rx_chains; 724 u8 needed_rx_chains;
747 enum ieee80211_smps_mode smps_mode; 725 enum ieee80211_smps_mode smps_mode;
748 726
749 int user_power_level; /* in dBm */ 727 int user_power_level; /* in dBm */
750 int ap_power_level; /* in dBm */ 728 int ap_power_level; /* in dBm */
751 729
730 bool radar_required;
731 struct delayed_work dfs_cac_timer_work;
732
752 /* 733 /*
753 * AP this belongs to: self in AP mode and 734 * AP this belongs to: self in AP mode and
754 * corresponding AP in VLAN mode, NULL for 735 * corresponding AP in VLAN mode, NULL for
@@ -783,6 +764,11 @@ struct ieee80211_sub_if_data {
783 struct dentry *default_mgmt_key; 764 struct dentry *default_mgmt_key;
784 } debugfs; 765 } debugfs;
785#endif 766#endif
767
768#ifdef CONFIG_PM
769 struct ieee80211_bss_conf suspend_bss_conf;
770#endif
771
786 /* must be last, dynamically sized area in this! */ 772 /* must be last, dynamically sized area in this! */
787 struct ieee80211_vif vif; 773 struct ieee80211_vif vif;
788}; 774};
@@ -831,6 +817,7 @@ enum queue_stop_reason {
831 IEEE80211_QUEUE_STOP_REASON_AGGREGATION, 817 IEEE80211_QUEUE_STOP_REASON_AGGREGATION,
832 IEEE80211_QUEUE_STOP_REASON_SUSPEND, 818 IEEE80211_QUEUE_STOP_REASON_SUSPEND,
833 IEEE80211_QUEUE_STOP_REASON_SKB_ADD, 819 IEEE80211_QUEUE_STOP_REASON_SKB_ADD,
820 IEEE80211_QUEUE_STOP_REASON_OFFCHANNEL,
834}; 821};
835 822
836#ifdef CONFIG_MAC80211_LEDS 823#ifdef CONFIG_MAC80211_LEDS
@@ -963,6 +950,10 @@ struct ieee80211_local {
963 /* wowlan is enabled -- don't reconfig on resume */ 950 /* wowlan is enabled -- don't reconfig on resume */
964 bool wowlan; 951 bool wowlan;
965 952
953 /* DFS/radar detection is enabled */
954 bool radar_detect_enabled;
955 struct work_struct radar_detected_work;
956
966 /* number of RX chains the hardware has */ 957 /* number of RX chains the hardware has */
967 u8 rx_chains; 958 u8 rx_chains;
968 959
@@ -977,14 +968,7 @@ struct ieee80211_local {
977 struct sk_buff_head skb_queue; 968 struct sk_buff_head skb_queue;
978 struct sk_buff_head skb_queue_unreliable; 969 struct sk_buff_head skb_queue_unreliable;
979 970
980 /* 971 spinlock_t rx_path_lock;
981 * Internal FIFO queue which is shared between multiple rx path
982 * stages. Its main task is to provide a serialization mechanism,
983 * so all rx handlers can enjoy having exclusive access to their
984 * private data structures.
985 */
986 struct sk_buff_head rx_skb_queue;
987 bool running_rx_handler; /* protected by rx_skb_queue.lock */
988 972
989 /* Station data */ 973 /* Station data */
990 /* 974 /*
@@ -1118,14 +1102,13 @@ struct ieee80211_local {
1118 struct timer_list dynamic_ps_timer; 1102 struct timer_list dynamic_ps_timer;
1119 struct notifier_block network_latency_notifier; 1103 struct notifier_block network_latency_notifier;
1120 struct notifier_block ifa_notifier; 1104 struct notifier_block ifa_notifier;
1105 struct notifier_block ifa6_notifier;
1121 1106
1122 /* 1107 /*
1123 * The dynamic ps timeout configured from user space via WEXT - 1108 * The dynamic ps timeout configured from user space via WEXT -
1124 * this will override whatever chosen by mac80211 internally. 1109 * this will override whatever chosen by mac80211 internally.
1125 */ 1110 */
1126 int dynamic_ps_forced_timeout; 1111 int dynamic_ps_forced_timeout;
1127 int dynamic_ps_user_timeout;
1128 bool disable_dynamic_ps;
1129 1112
1130 int user_power_level; /* in dBm, for all interfaces */ 1113 int user_power_level; /* in dBm, for all interfaces */
1131 1114
@@ -1183,40 +1166,41 @@ struct ieee80211_ra_tid {
1183 1166
1184/* Parsed Information Elements */ 1167/* Parsed Information Elements */
1185struct ieee802_11_elems { 1168struct ieee802_11_elems {
1186 u8 *ie_start; 1169 const u8 *ie_start;
1187 size_t total_len; 1170 size_t total_len;
1188 1171
1189 /* pointers to IEs */ 1172 /* pointers to IEs */
1190 u8 *ssid; 1173 const u8 *ssid;
1191 u8 *supp_rates; 1174 const u8 *supp_rates;
1192 u8 *fh_params; 1175 const u8 *fh_params;
1193 u8 *ds_params; 1176 const u8 *ds_params;
1194 u8 *cf_params; 1177 const u8 *cf_params;
1195 struct ieee80211_tim_ie *tim; 1178 const struct ieee80211_tim_ie *tim;
1196 u8 *ibss_params; 1179 const u8 *ibss_params;
1197 u8 *challenge; 1180 const u8 *challenge;
1198 u8 *wpa; 1181 const u8 *rsn;
1199 u8 *rsn; 1182 const u8 *erp_info;
1200 u8 *erp_info; 1183 const u8 *ext_supp_rates;
1201 u8 *ext_supp_rates; 1184 const u8 *wmm_info;
1202 u8 *wmm_info; 1185 const u8 *wmm_param;
1203 u8 *wmm_param; 1186 const struct ieee80211_ht_cap *ht_cap_elem;
1204 struct ieee80211_ht_cap *ht_cap_elem; 1187 const struct ieee80211_ht_operation *ht_operation;
1205 struct ieee80211_ht_operation *ht_operation; 1188 const struct ieee80211_vht_cap *vht_cap_elem;
1206 struct ieee80211_vht_cap *vht_cap_elem; 1189 const struct ieee80211_vht_operation *vht_operation;
1207 struct ieee80211_vht_operation *vht_operation; 1190 const struct ieee80211_meshconf_ie *mesh_config;
1208 struct ieee80211_meshconf_ie *mesh_config; 1191 const u8 *mesh_id;
1209 u8 *mesh_id; 1192 const u8 *peering;
1210 u8 *peering; 1193 const __le16 *awake_window;
1211 u8 *preq; 1194 const u8 *preq;
1212 u8 *prep; 1195 const u8 *prep;
1213 u8 *perr; 1196 const u8 *perr;
1214 struct ieee80211_rann_ie *rann; 1197 const struct ieee80211_rann_ie *rann;
1215 struct ieee80211_channel_sw_ie *ch_switch_ie; 1198 const struct ieee80211_channel_sw_ie *ch_switch_ie;
1216 u8 *country_elem; 1199 const u8 *country_elem;
1217 u8 *pwr_constr_elem; 1200 const u8 *pwr_constr_elem;
1218 u8 *quiet_elem; /* first quite element */ 1201 const u8 *quiet_elem; /* first quite element */
1219 u8 *timeout_int; 1202 const u8 *timeout_int;
1203 const u8 *opmode_notif;
1220 1204
1221 /* length of them, respectively */ 1205 /* length of them, respectively */
1222 u8 ssid_len; 1206 u8 ssid_len;
@@ -1227,7 +1211,6 @@ struct ieee802_11_elems {
1227 u8 tim_len; 1211 u8 tim_len;
1228 u8 ibss_params_len; 1212 u8 ibss_params_len;
1229 u8 challenge_len; 1213 u8 challenge_len;
1230 u8 wpa_len;
1231 u8 rsn_len; 1214 u8 rsn_len;
1232 u8 erp_info_len; 1215 u8 erp_info_len;
1233 u8 ext_supp_rates_len; 1216 u8 ext_supp_rates_len;
@@ -1296,10 +1279,10 @@ void ieee80211_recalc_ps_vif(struct ieee80211_sub_if_data *sdata);
1296int ieee80211_max_network_latency(struct notifier_block *nb, 1279int ieee80211_max_network_latency(struct notifier_block *nb,
1297 unsigned long data, void *dummy); 1280 unsigned long data, void *dummy);
1298int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata); 1281int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata);
1299void ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata, 1282void
1300 struct ieee80211_channel_sw_ie *sw_elem, 1283ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
1301 struct ieee80211_bss *bss, 1284 const struct ieee80211_channel_sw_ie *sw_elem,
1302 u64 timestamp); 1285 struct ieee80211_bss *bss, u64 timestamp);
1303void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata); 1286void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata);
1304void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); 1287void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata);
1305void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata); 1288void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata);
@@ -1308,6 +1291,8 @@ void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
1308void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata); 1291void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata);
1309void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata); 1292void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata);
1310void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata); 1293void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata);
1294void ieee80211_mgd_conn_tx_status(struct ieee80211_sub_if_data *sdata,
1295 __le16 fc, bool acked);
1311 1296
1312/* IBSS code */ 1297/* IBSS code */
1313void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local); 1298void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local);
@@ -1346,8 +1331,7 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
1346 struct ieee80211_mgmt *mgmt, 1331 struct ieee80211_mgmt *mgmt,
1347 size_t len, 1332 size_t len,
1348 struct ieee802_11_elems *elems, 1333 struct ieee802_11_elems *elems,
1349 struct ieee80211_channel *channel, 1334 struct ieee80211_channel *channel);
1350 bool beacon);
1351void ieee80211_rx_bss_put(struct ieee80211_local *local, 1335void ieee80211_rx_bss_put(struct ieee80211_local *local,
1352 struct ieee80211_bss *bss); 1336 struct ieee80211_bss *bss);
1353 1337
@@ -1404,10 +1388,10 @@ void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
1404/* HT */ 1388/* HT */
1405void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, 1389void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,
1406 struct ieee80211_sta_ht_cap *ht_cap); 1390 struct ieee80211_sta_ht_cap *ht_cap);
1407void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_sub_if_data *sdata, 1391bool ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_sub_if_data *sdata,
1408 struct ieee80211_supported_band *sband, 1392 struct ieee80211_supported_band *sband,
1409 struct ieee80211_ht_cap *ht_cap_ie, 1393 const struct ieee80211_ht_cap *ht_cap_ie,
1410 struct ieee80211_sta_ht_cap *ht_cap); 1394 struct sta_info *sta);
1411void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, 1395void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata,
1412 const u8 *da, u16 tid, 1396 const u8 *da, u16 tid,
1413 u16 initiator, u16 reason_code); 1397 u16 initiator, u16 reason_code);
@@ -1420,7 +1404,8 @@ void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
1420 u16 initiator, u16 reason, bool stop); 1404 u16 initiator, u16 reason, bool stop);
1421void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, 1405void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid,
1422 u16 initiator, u16 reason, bool stop); 1406 u16 initiator, u16 reason, bool stop);
1423void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta, bool tx); 1407void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta,
1408 enum ieee80211_agg_stop_reason reason);
1424void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata, 1409void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata,
1425 struct sta_info *sta, 1410 struct sta_info *sta,
1426 struct ieee80211_mgmt *mgmt, size_t len); 1411 struct ieee80211_mgmt *mgmt, size_t len);
@@ -1434,11 +1419,9 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
1434 size_t len); 1419 size_t len);
1435 1420
1436int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, 1421int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
1437 enum ieee80211_back_parties initiator, 1422 enum ieee80211_agg_stop_reason reason);
1438 bool tx);
1439int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, 1423int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
1440 enum ieee80211_back_parties initiator, 1424 enum ieee80211_agg_stop_reason reason);
1441 bool tx);
1442void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid); 1425void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid);
1443void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid); 1426void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid);
1444void ieee80211_ba_session_work(struct work_struct *work); 1427void ieee80211_ba_session_work(struct work_struct *work);
@@ -1448,10 +1431,17 @@ void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid);
1448u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs); 1431u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs);
1449 1432
1450/* VHT */ 1433/* VHT */
1451void ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, 1434void
1452 struct ieee80211_supported_band *sband, 1435ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata,
1453 struct ieee80211_vht_cap *vht_cap_ie, 1436 struct ieee80211_supported_band *sband,
1454 struct ieee80211_sta_vht_cap *vht_cap); 1437 const struct ieee80211_vht_cap *vht_cap_ie,
1438 struct sta_info *sta);
1439enum ieee80211_sta_rx_bandwidth ieee80211_sta_cur_vht_bw(struct sta_info *sta);
1440void ieee80211_sta_set_rx_nss(struct sta_info *sta);
1441void ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
1442 struct sta_info *sta, u8 opmode,
1443 enum ieee80211_band band, bool nss_only);
1444
1455/* Spectrum management */ 1445/* Spectrum management */
1456void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, 1446void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
1457 struct ieee80211_mgmt *mgmt, 1447 struct ieee80211_mgmt *mgmt,
@@ -1569,8 +1559,9 @@ static inline void ieee80211_add_pending_skbs(struct ieee80211_local *local,
1569 1559
1570void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, 1560void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
1571 u16 transaction, u16 auth_alg, u16 status, 1561 u16 transaction, u16 auth_alg, u16 status,
1572 u8 *extra, size_t extra_len, const u8 *bssid, 1562 const u8 *extra, size_t extra_len, const u8 *bssid,
1573 const u8 *da, const u8 *key, u8 key_len, u8 key_idx); 1563 const u8 *da, const u8 *key, u8 key_len, u8 key_idx,
1564 u32 tx_flags);
1574void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata, 1565void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
1575 const u8 *bssid, u16 stype, u16 reason, 1566 const u8 *bssid, u16 stype, u16 reason,
1576 bool send_frame, u8 *frame_buf); 1567 bool send_frame, u8 *frame_buf);
@@ -1587,7 +1578,7 @@ struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata,
1587void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, 1578void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst,
1588 const u8 *ssid, size_t ssid_len, 1579 const u8 *ssid, size_t ssid_len,
1589 const u8 *ie, size_t ie_len, 1580 const u8 *ie, size_t ie_len,
1590 u32 ratemask, bool directed, bool no_cck, 1581 u32 ratemask, bool directed, u32 tx_flags,
1591 struct ieee80211_channel *channel, bool scan); 1582 struct ieee80211_channel *channel, bool scan);
1592 1583
1593void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata, 1584void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata,
@@ -1619,18 +1610,31 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata,
1619 1610
1620/* channel management */ 1611/* channel management */
1621void ieee80211_ht_oper_to_chandef(struct ieee80211_channel *control_chan, 1612void ieee80211_ht_oper_to_chandef(struct ieee80211_channel *control_chan,
1622 struct ieee80211_ht_operation *ht_oper, 1613 const struct ieee80211_ht_operation *ht_oper,
1623 struct cfg80211_chan_def *chandef); 1614 struct cfg80211_chan_def *chandef);
1624 1615
1625int __must_check 1616int __must_check
1626ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata, 1617ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata,
1627 const struct cfg80211_chan_def *chandef, 1618 const struct cfg80211_chan_def *chandef,
1628 enum ieee80211_chanctx_mode mode); 1619 enum ieee80211_chanctx_mode mode);
1620int __must_check
1621ieee80211_vif_change_bandwidth(struct ieee80211_sub_if_data *sdata,
1622 const struct cfg80211_chan_def *chandef,
1623 u32 *changed);
1629void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata); 1624void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata);
1630void ieee80211_vif_vlan_copy_chanctx(struct ieee80211_sub_if_data *sdata); 1625void ieee80211_vif_vlan_copy_chanctx(struct ieee80211_sub_if_data *sdata);
1626void ieee80211_vif_copy_chanctx_to_vlans(struct ieee80211_sub_if_data *sdata,
1627 bool clear);
1631 1628
1632void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local, 1629void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local,
1633 struct ieee80211_chanctx *chanctx); 1630 struct ieee80211_chanctx *chanctx);
1631void ieee80211_recalc_radar_chanctx(struct ieee80211_local *local,
1632 struct ieee80211_chanctx *chanctx);
1633
1634void ieee80211_dfs_cac_timer(unsigned long data);
1635void ieee80211_dfs_cac_timer_work(struct work_struct *work);
1636void ieee80211_dfs_cac_cancel(struct ieee80211_local *local);
1637void ieee80211_dfs_radar_detected_work(struct work_struct *work);
1634 1638
1635#ifdef CONFIG_MAC80211_NOINLINE 1639#ifdef CONFIG_MAC80211_NOINLINE
1636#define debug_noinline noinline 1640#define debug_noinline noinline