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.h121
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 */
1156struct ieee802_11_elems { 1168struct 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);
1268int ieee80211_max_network_latency(struct notifier_block *nb, 1279int ieee80211_max_network_latency(struct notifier_block *nb,
1269 unsigned long data, void *dummy); 1280 unsigned long data, void *dummy);
1270int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata); 1281int ieee80211_set_arp_filter(struct ieee80211_sub_if_data *sdata);
1271void ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata, 1282void
1272 struct ieee80211_channel_sw_ie *sw_elem, 1283ieee80211_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);
1275void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata); 1286void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata);
1276void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); 1287void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata);
1277void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata); 1288void 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 */
1378void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, 1389void 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);
1380void 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,
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);
1384void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, 1395void 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);
1420u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs); 1431u8 ieee80211_mcs_to_chains(const struct ieee80211_mcs_info *mcs);
1421 1432
1422/* VHT */ 1433/* VHT */
1423void ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata, 1434void
1424 struct ieee80211_supported_band *sband, 1435ieee80211_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);
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
1427/* Spectrum management */ 1445/* Spectrum management */
1428void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, 1446void 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
1542void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, 1560void 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);
1547void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata, 1565void 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 */
1594void ieee80211_ht_oper_to_chandef(struct ieee80211_channel *control_chan, 1612void 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
1598int __must_check 1616int __must_check
1599ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata, 1617ieee80211_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);
1620int __must_check
1621ieee80211_vif_change_bandwidth(struct ieee80211_sub_if_data *sdata,
1622 const struct cfg80211_chan_def *chandef,
1623 u32 *changed);
1602void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata); 1624void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata);
1603void ieee80211_vif_vlan_copy_chanctx(struct ieee80211_sub_if_data *sdata); 1625void ieee80211_vif_vlan_copy_chanctx(struct ieee80211_sub_if_data *sdata);
1604void ieee80211_vif_copy_chanctx_to_vlans(struct ieee80211_sub_if_data *sdata, 1626void 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
1607void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local, 1629void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local,
1608 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);
1609 1638
1610#ifdef CONFIG_MAC80211_NOINLINE 1639#ifdef CONFIG_MAC80211_NOINLINE
1611#define debug_noinline noinline 1640#define debug_noinline noinline