diff options
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 222 |
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 | ||
88 | struct ieee80211_bss { | 88 | struct 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 | ||
156 | static 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 | |||
164 | static 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 | |||
172 | static 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 | |||
181 | typedef unsigned __bitwise__ ieee80211_tx_result; | 144 | typedef 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 | */ |
663 | enum ieee80211_sdata_state_bits { | 644 | enum 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 */ |
1185 | struct ieee802_11_elems { | 1168 | struct 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); | |||
1296 | int ieee80211_max_network_latency(struct notifier_block *nb, | 1279 | int ieee80211_max_network_latency(struct notifier_block *nb, |
1297 | unsigned long data, void *dummy); | 1280 | unsigned long data, void *dummy); |
1298 | int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata); | 1281 | int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata); |
1299 | void ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata, | 1282 | void |
1300 | struct ieee80211_channel_sw_ie *sw_elem, | 1283 | ieee80211_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); |
1303 | void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata); | 1286 | void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata); |
1304 | void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); | 1287 | void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); |
1305 | void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata); | 1288 | void 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, | |||
1308 | void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata); | 1291 | void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata); |
1309 | void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata); | 1292 | void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata); |
1310 | void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata); | 1293 | void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata); |
1294 | void ieee80211_mgd_conn_tx_status(struct ieee80211_sub_if_data *sdata, | ||
1295 | __le16 fc, bool acked); | ||
1311 | 1296 | ||
1312 | /* IBSS code */ | 1297 | /* IBSS code */ |
1313 | void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local); | 1298 | void 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); | ||
1351 | void ieee80211_rx_bss_put(struct ieee80211_local *local, | 1335 | void 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 */ |
1405 | void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, | 1389 | void 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); |
1407 | void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_sub_if_data *sdata, | 1391 | bool 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); |
1411 | void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, | 1395 | void 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); |
1421 | void __ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, | 1405 | void __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); |
1423 | void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta, bool tx); | 1407 | void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta, |
1408 | enum ieee80211_agg_stop_reason reason); | ||
1424 | void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata, | 1409 | void 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 | ||
1436 | int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, | 1421 | int __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); | ||
1439 | int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, | 1423 | int ___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); | ||
1442 | void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid); | 1425 | void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid); |
1443 | void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid); | 1426 | void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid); |
1444 | void ieee80211_ba_session_work(struct work_struct *work); | 1427 | void ieee80211_ba_session_work(struct work_struct *work); |
@@ -1448,10 +1431,17 @@ void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid); | |||
1448 | u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs); | 1431 | u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs); |
1449 | 1432 | ||
1450 | /* VHT */ | 1433 | /* VHT */ |
1451 | void ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, | 1434 | void |
1452 | struct ieee80211_supported_band *sband, | 1435 | ieee80211_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); | ||
1439 | enum ieee80211_sta_rx_bandwidth ieee80211_sta_cur_vht_bw(struct sta_info *sta); | ||
1440 | void ieee80211_sta_set_rx_nss(struct sta_info *sta); | ||
1441 | void 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 */ |
1456 | void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, | 1446 | void 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 | ||
1570 | void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, | 1560 | void 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); | ||
1574 | void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata, | 1565 | void 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, | |||
1587 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, | 1578 | void 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 | ||
1593 | void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata, | 1584 | void 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 */ |
1621 | void ieee80211_ht_oper_to_chandef(struct ieee80211_channel *control_chan, | 1612 | void 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 | ||
1625 | int __must_check | 1616 | int __must_check |
1626 | ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata, | 1617 | ieee80211_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); |
1620 | int __must_check | ||
1621 | ieee80211_vif_change_bandwidth(struct ieee80211_sub_if_data *sdata, | ||
1622 | const struct cfg80211_chan_def *chandef, | ||
1623 | u32 *changed); | ||
1629 | void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata); | 1624 | void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata); |
1630 | void ieee80211_vif_vlan_copy_chanctx(struct ieee80211_sub_if_data *sdata); | 1625 | void ieee80211_vif_vlan_copy_chanctx(struct ieee80211_sub_if_data *sdata); |
1626 | void ieee80211_vif_copy_chanctx_to_vlans(struct ieee80211_sub_if_data *sdata, | ||
1627 | bool clear); | ||
1631 | 1628 | ||
1632 | void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local, | 1629 | void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local, |
1633 | struct ieee80211_chanctx *chanctx); | 1630 | struct ieee80211_chanctx *chanctx); |
1631 | void ieee80211_recalc_radar_chanctx(struct ieee80211_local *local, | ||
1632 | struct ieee80211_chanctx *chanctx); | ||
1633 | |||
1634 | void ieee80211_dfs_cac_timer(unsigned long data); | ||
1635 | void ieee80211_dfs_cac_timer_work(struct work_struct *work); | ||
1636 | void ieee80211_dfs_cac_cancel(struct ieee80211_local *local); | ||
1637 | void 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 |