diff options
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 121 |
1 files changed, 75 insertions, 46 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 76cdcfcd614c..388580a1bada 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -343,6 +343,7 @@ struct ieee80211_mgd_auth_data { | |||
343 | u8 key[WLAN_KEY_LEN_WEP104]; | 343 | u8 key[WLAN_KEY_LEN_WEP104]; |
344 | u8 key_len, key_idx; | 344 | u8 key_len, key_idx; |
345 | bool done; | 345 | bool done; |
346 | bool timeout_started; | ||
346 | 347 | ||
347 | u16 sae_trans, sae_status; | 348 | u16 sae_trans, sae_status; |
348 | size_t data_len; | 349 | size_t data_len; |
@@ -364,6 +365,7 @@ struct ieee80211_mgd_assoc_data { | |||
364 | bool wmm, uapsd; | 365 | bool wmm, uapsd; |
365 | bool have_beacon, need_beacon; | 366 | bool have_beacon, need_beacon; |
366 | bool synced; | 367 | bool synced; |
368 | bool timeout_started; | ||
367 | 369 | ||
368 | u8 ap_ht_param; | 370 | u8 ap_ht_param; |
369 | 371 | ||
@@ -578,6 +580,9 @@ struct ieee80211_if_mesh { | |||
578 | u32 mesh_seqnum; | 580 | u32 mesh_seqnum; |
579 | bool accepting_plinks; | 581 | bool accepting_plinks; |
580 | int num_gates; | 582 | int num_gates; |
583 | struct beacon_data __rcu *beacon; | ||
584 | /* just protects beacon updates for now */ | ||
585 | struct mutex mtx; | ||
581 | const u8 *ie; | 586 | const u8 *ie; |
582 | u8 ie_len; | 587 | u8 ie_len; |
583 | enum { | 588 | enum { |
@@ -722,6 +727,9 @@ struct ieee80211_sub_if_data { | |||
722 | int user_power_level; /* in dBm */ | 727 | int user_power_level; /* in dBm */ |
723 | int ap_power_level; /* in dBm */ | 728 | int ap_power_level; /* in dBm */ |
724 | 729 | ||
730 | bool radar_required; | ||
731 | struct delayed_work dfs_cac_timer_work; | ||
732 | |||
725 | /* | 733 | /* |
726 | * AP this belongs to: self in AP mode and | 734 | * AP this belongs to: self in AP mode and |
727 | * corresponding AP in VLAN mode, NULL for | 735 | * corresponding AP in VLAN mode, NULL for |
@@ -942,6 +950,10 @@ struct ieee80211_local { | |||
942 | /* wowlan is enabled -- don't reconfig on resume */ | 950 | /* wowlan is enabled -- don't reconfig on resume */ |
943 | bool wowlan; | 951 | bool wowlan; |
944 | 952 | ||
953 | /* DFS/radar detection is enabled */ | ||
954 | bool radar_detect_enabled; | ||
955 | struct work_struct radar_detected_work; | ||
956 | |||
945 | /* number of RX chains the hardware has */ | 957 | /* number of RX chains the hardware has */ |
946 | u8 rx_chains; | 958 | u8 rx_chains; |
947 | 959 | ||
@@ -1154,41 +1166,41 @@ struct ieee80211_ra_tid { | |||
1154 | 1166 | ||
1155 | /* Parsed Information Elements */ | 1167 | /* Parsed Information Elements */ |
1156 | struct ieee802_11_elems { | 1168 | struct ieee802_11_elems { |
1157 | u8 *ie_start; | 1169 | const u8 *ie_start; |
1158 | size_t total_len; | 1170 | size_t total_len; |
1159 | 1171 | ||
1160 | /* pointers to IEs */ | 1172 | /* pointers to IEs */ |
1161 | u8 *ssid; | 1173 | const u8 *ssid; |
1162 | u8 *supp_rates; | 1174 | const u8 *supp_rates; |
1163 | u8 *fh_params; | 1175 | const u8 *fh_params; |
1164 | u8 *ds_params; | 1176 | const u8 *ds_params; |
1165 | u8 *cf_params; | 1177 | const u8 *cf_params; |
1166 | struct ieee80211_tim_ie *tim; | 1178 | const struct ieee80211_tim_ie *tim; |
1167 | u8 *ibss_params; | 1179 | const u8 *ibss_params; |
1168 | u8 *challenge; | 1180 | const u8 *challenge; |
1169 | u8 *wpa; | 1181 | const u8 *rsn; |
1170 | u8 *rsn; | 1182 | const u8 *erp_info; |
1171 | u8 *erp_info; | 1183 | const u8 *ext_supp_rates; |
1172 | u8 *ext_supp_rates; | 1184 | const u8 *wmm_info; |
1173 | u8 *wmm_info; | 1185 | const u8 *wmm_param; |
1174 | u8 *wmm_param; | 1186 | const struct ieee80211_ht_cap *ht_cap_elem; |
1175 | struct ieee80211_ht_cap *ht_cap_elem; | 1187 | const struct ieee80211_ht_operation *ht_operation; |
1176 | struct ieee80211_ht_operation *ht_operation; | 1188 | const struct ieee80211_vht_cap *vht_cap_elem; |
1177 | struct ieee80211_vht_cap *vht_cap_elem; | 1189 | const struct ieee80211_vht_operation *vht_operation; |
1178 | struct ieee80211_vht_operation *vht_operation; | 1190 | const struct ieee80211_meshconf_ie *mesh_config; |
1179 | struct ieee80211_meshconf_ie *mesh_config; | 1191 | const u8 *mesh_id; |
1180 | u8 *mesh_id; | 1192 | const u8 *peering; |
1181 | u8 *peering; | 1193 | const __le16 *awake_window; |
1182 | __le16 *awake_window; | 1194 | const u8 *preq; |
1183 | u8 *preq; | 1195 | const u8 *prep; |
1184 | u8 *prep; | 1196 | const u8 *perr; |
1185 | u8 *perr; | 1197 | const struct ieee80211_rann_ie *rann; |
1186 | struct ieee80211_rann_ie *rann; | 1198 | const struct ieee80211_channel_sw_ie *ch_switch_ie; |
1187 | struct ieee80211_channel_sw_ie *ch_switch_ie; | 1199 | const u8 *country_elem; |
1188 | u8 *country_elem; | 1200 | const u8 *pwr_constr_elem; |
1189 | u8 *pwr_constr_elem; | 1201 | const u8 *quiet_elem; /* first quite element */ |
1190 | u8 *quiet_elem; /* first quite element */ | 1202 | const u8 *timeout_int; |
1191 | u8 *timeout_int; | 1203 | const u8 *opmode_notif; |
1192 | 1204 | ||
1193 | /* length of them, respectively */ | 1205 | /* length of them, respectively */ |
1194 | u8 ssid_len; | 1206 | u8 ssid_len; |
@@ -1199,7 +1211,6 @@ struct ieee802_11_elems { | |||
1199 | u8 tim_len; | 1211 | u8 tim_len; |
1200 | u8 ibss_params_len; | 1212 | u8 ibss_params_len; |
1201 | u8 challenge_len; | 1213 | u8 challenge_len; |
1202 | u8 wpa_len; | ||
1203 | u8 rsn_len; | 1214 | u8 rsn_len; |
1204 | u8 erp_info_len; | 1215 | u8 erp_info_len; |
1205 | u8 ext_supp_rates_len; | 1216 | u8 ext_supp_rates_len; |
@@ -1268,10 +1279,10 @@ void ieee80211_recalc_ps_vif(struct ieee80211_sub_if_data *sdata); | |||
1268 | int ieee80211_max_network_latency(struct notifier_block *nb, | 1279 | int ieee80211_max_network_latency(struct notifier_block *nb, |
1269 | unsigned long data, void *dummy); | 1280 | unsigned long data, void *dummy); |
1270 | int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata); | 1281 | int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata); |
1271 | void ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata, | 1282 | void |
1272 | struct ieee80211_channel_sw_ie *sw_elem, | 1283 | ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata, |
1273 | struct ieee80211_bss *bss, | 1284 | const struct ieee80211_channel_sw_ie *sw_elem, |
1274 | u64 timestamp); | 1285 | struct ieee80211_bss *bss, u64 timestamp); |
1275 | void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata); | 1286 | void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata); |
1276 | void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); | 1287 | void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); |
1277 | void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata); | 1288 | void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata); |
@@ -1377,10 +1388,10 @@ void ieee80211_purge_tx_queue(struct ieee80211_hw *hw, | |||
1377 | /* HT */ | 1388 | /* HT */ |
1378 | void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, | 1389 | void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, |
1379 | struct ieee80211_sta_ht_cap *ht_cap); | 1390 | struct ieee80211_sta_ht_cap *ht_cap); |
1380 | 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, |
1381 | struct ieee80211_supported_band *sband, | 1392 | struct ieee80211_supported_band *sband, |
1382 | struct ieee80211_ht_cap *ht_cap_ie, | 1393 | const struct ieee80211_ht_cap *ht_cap_ie, |
1383 | struct ieee80211_sta_ht_cap *ht_cap); | 1394 | struct sta_info *sta); |
1384 | void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, | 1395 | void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, |
1385 | const u8 *da, u16 tid, | 1396 | const u8 *da, u16 tid, |
1386 | u16 initiator, u16 reason_code); | 1397 | u16 initiator, u16 reason_code); |
@@ -1420,10 +1431,17 @@ void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid); | |||
1420 | u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs); | 1431 | u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs); |
1421 | 1432 | ||
1422 | /* VHT */ | 1433 | /* VHT */ |
1423 | void ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, | 1434 | void |
1424 | struct ieee80211_supported_band *sband, | 1435 | ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, |
1425 | struct ieee80211_vht_cap *vht_cap_ie, | 1436 | struct ieee80211_supported_band *sband, |
1426 | 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 | |||
1427 | /* Spectrum management */ | 1445 | /* Spectrum management */ |
1428 | void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, | 1446 | void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, |
1429 | struct ieee80211_mgmt *mgmt, | 1447 | struct ieee80211_mgmt *mgmt, |
@@ -1541,7 +1559,7 @@ static inline void ieee80211_add_pending_skbs(struct ieee80211_local *local, | |||
1541 | 1559 | ||
1542 | void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, | 1560 | void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, |
1543 | u16 transaction, u16 auth_alg, u16 status, | 1561 | u16 transaction, u16 auth_alg, u16 status, |
1544 | u8 *extra, size_t extra_len, const u8 *bssid, | 1562 | const u8 *extra, size_t extra_len, const u8 *bssid, |
1545 | 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, |
1546 | u32 tx_flags); | 1564 | u32 tx_flags); |
1547 | void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata, | 1565 | void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata, |
@@ -1592,13 +1610,17 @@ int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata, | |||
1592 | 1610 | ||
1593 | /* channel management */ | 1611 | /* channel management */ |
1594 | void ieee80211_ht_oper_to_chandef(struct ieee80211_channel *control_chan, | 1612 | void ieee80211_ht_oper_to_chandef(struct ieee80211_channel *control_chan, |
1595 | struct ieee80211_ht_operation *ht_oper, | 1613 | const struct ieee80211_ht_operation *ht_oper, |
1596 | struct cfg80211_chan_def *chandef); | 1614 | struct cfg80211_chan_def *chandef); |
1597 | 1615 | ||
1598 | int __must_check | 1616 | int __must_check |
1599 | ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata, | 1617 | ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata, |
1600 | const struct cfg80211_chan_def *chandef, | 1618 | const struct cfg80211_chan_def *chandef, |
1601 | 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); | ||
1602 | void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata); | 1624 | void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata); |
1603 | 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); |
1604 | void ieee80211_vif_copy_chanctx_to_vlans(struct ieee80211_sub_if_data *sdata, | 1626 | void ieee80211_vif_copy_chanctx_to_vlans(struct ieee80211_sub_if_data *sdata, |
@@ -1606,6 +1628,13 @@ void ieee80211_vif_copy_chanctx_to_vlans(struct ieee80211_sub_if_data *sdata, | |||
1606 | 1628 | ||
1607 | void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local, | 1629 | void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local, |
1608 | 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); | ||
1609 | 1638 | ||
1610 | #ifdef CONFIG_MAC80211_NOINLINE | 1639 | #ifdef CONFIG_MAC80211_NOINLINE |
1611 | #define debug_noinline noinline | 1640 | #define debug_noinline noinline |