Lines Matching refs:link

30 	struct ieee80211_link_data *link;  in ieee80211_link_or_deflink()  local
44 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_link_or_deflink()
45 if (!link) in ieee80211_link_or_deflink()
47 return link; in ieee80211_link_or_deflink()
503 struct ieee80211_link_data *link = in ieee80211_add_key() local
515 if (IS_ERR(link)) in ieee80211_add_key()
516 return PTR_ERR(link); in ieee80211_add_key()
547 key->conf.link_id = link->link_id; in ieee80211_add_key()
605 err = ieee80211_key_link(key, link, sta); in ieee80211_add_key()
618 struct ieee80211_link_data *link = &sdata->deflink; in ieee80211_lookup_key() local
622 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_lookup_key()
623 if (!link) in ieee80211_lookup_key()
636 link_sta = rcu_dereference_check(sta->link[link_id], in ieee80211_lookup_key()
661 key = wiphy_dereference(local->hw.wiphy, link->gtk[key_idx]); in ieee80211_lookup_key()
799 struct ieee80211_link_data *link = in ieee80211_config_default_key() local
802 if (IS_ERR(link)) in ieee80211_config_default_key()
803 return PTR_ERR(link); in ieee80211_config_default_key()
805 ieee80211_set_default_key(link, key_idx, uni, multi); in ieee80211_config_default_key()
815 struct ieee80211_link_data *link = in ieee80211_config_default_mgmt_key() local
818 if (IS_ERR(link)) in ieee80211_config_default_mgmt_key()
819 return PTR_ERR(link); in ieee80211_config_default_mgmt_key()
821 ieee80211_set_default_mgmt_key(link, key_idx); in ieee80211_config_default_mgmt_key()
831 struct ieee80211_link_data *link = in ieee80211_config_default_beacon_key() local
834 if (IS_ERR(link)) in ieee80211_config_default_beacon_key()
835 return PTR_ERR(link); in ieee80211_config_default_beacon_key()
837 ieee80211_set_default_beacon_key(link, key_idx); in ieee80211_config_default_beacon_key()
976 struct ieee80211_link_data *link) in ieee80211_set_probe_resp() argument
983 old = sdata_dereference(link->u.ap.probe_resp, sdata); in ieee80211_set_probe_resp()
999 rcu_assign_pointer(link->u.ap.probe_resp, new); in ieee80211_set_probe_resp()
1008 struct ieee80211_link_data *link, in ieee80211_set_fils_discovery() argument
1022 old = sdata_dereference(link->u.ap.fils_discovery, sdata); in ieee80211_set_fils_discovery()
1032 rcu_assign_pointer(link->u.ap.fils_discovery, new); in ieee80211_set_fils_discovery()
1034 RCU_INIT_POINTER(link->u.ap.fils_discovery, NULL); in ieee80211_set_fils_discovery()
1044 struct ieee80211_link_data *link, in ieee80211_set_unsol_bcast_probe_resp() argument
1055 old = sdata_dereference(link->u.ap.unsol_bcast_probe_resp, sdata); in ieee80211_set_unsol_bcast_probe_resp()
1065 rcu_assign_pointer(link->u.ap.unsol_bcast_probe_resp, new); in ieee80211_set_unsol_bcast_probe_resp()
1067 RCU_INIT_POINTER(link->u.ap.unsol_bcast_probe_resp, NULL); in ieee80211_set_unsol_bcast_probe_resp()
1076 struct ieee80211_link_data *link, in ieee80211_set_s1g_short_beacon() argument
1081 sdata_dereference(link->u.ap.s1g_short_beacon, sdata); in ieee80211_set_s1g_short_beacon()
1107 rcu_assign_pointer(link->u.ap.s1g_short_beacon, new); in ieee80211_set_s1g_short_beacon()
1192 struct ieee80211_link_data *link, in ieee80211_assign_beacon() argument
1204 struct ieee80211_bss_conf *link_conf = link->conf; in ieee80211_assign_beacon()
1206 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_assign_beacon()
1307 params->probe_resp_len, csa, cca, link); in ieee80211_assign_beacon()
1332 rcu_assign_pointer(link->u.ap.beacon, new); in ieee80211_assign_beacon()
1344 struct ieee80211_link_data *link; in ieee80211_num_beaconing_links() local
1355 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_num_beaconing_links()
1356 if (!link) in ieee80211_num_beaconing_links()
1359 if (sdata_dereference(link->u.ap.beacon, sdata)) in ieee80211_num_beaconing_links()
1382 struct ieee80211_link_data *link; in ieee80211_start_ap() local
1389 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_start_ap()
1390 if (!link) in ieee80211_start_ap()
1393 link_conf = link->conf; in ieee80211_start_ap()
1395 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_start_ap()
1399 link->smps_mode = IEEE80211_SMPS_OFF; in ieee80211_start_ap()
1401 link->needed_rx_chains = sdata->local->rx_chains; in ieee80211_start_ap()
1501 err = ieee80211_link_use_channel(link, &chanreq, in ieee80211_start_ap()
1504 ieee80211_link_copy_chanctx_to_vlans(link, false); in ieee80211_start_ap()
1570 err = ieee80211_assign_beacon(sdata, link, &params->beacon, NULL, NULL, in ieee80211_start_ap()
1576 link, link_conf, &changed); in ieee80211_start_ap()
1582 link, link_conf, &changed); in ieee80211_start_ap()
1587 err = ieee80211_set_s1g_short_beacon(sdata, link, in ieee80211_start_ap()
1595 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_start_ap()
1599 RCU_INIT_POINTER(link->u.ap.beacon, NULL); in ieee80211_start_ap()
1610 if (link->u.ap.s1g_short_beacon) in ieee80211_start_ap()
1614 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_start_ap()
1625 ieee80211_link_release_channel(link); in ieee80211_start_ap()
1635 struct ieee80211_link_data *link; in ieee80211_change_beacon() local
1644 link = sdata_dereference(sdata->link[beacon->link_id], sdata); in ieee80211_change_beacon()
1645 if (!link) in ieee80211_change_beacon()
1648 link_conf = link->conf; in ieee80211_change_beacon()
1656 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_change_beacon()
1660 err = ieee80211_assign_beacon(sdata, link, beacon, NULL, NULL, in ieee80211_change_beacon()
1666 link, link_conf, &changed); in ieee80211_change_beacon()
1672 link, link_conf, &changed); in ieee80211_change_beacon()
1676 if (link->u.ap.s1g_short_beacon) { in ieee80211_change_beacon()
1677 err = ieee80211_set_s1g_short_beacon(sdata, link, in ieee80211_change_beacon()
1689 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_change_beacon()
1693 static void ieee80211_free_next_beacon(struct ieee80211_link_data *link) in ieee80211_free_next_beacon() argument
1695 if (!link->u.ap.next_beacon) in ieee80211_free_next_beacon()
1698 kfree(link->u.ap.next_beacon->mbssid_ies); in ieee80211_free_next_beacon()
1699 kfree(link->u.ap.next_beacon->rnr_ies); in ieee80211_free_next_beacon()
1700 kfree(link->u.ap.next_beacon); in ieee80211_free_next_beacon()
1701 link->u.ap.next_beacon = NULL; in ieee80211_free_next_beacon()
1716 struct ieee80211_link_data *link = in ieee80211_stop_ap() local
1717 sdata_dereference(sdata->link[link_id], sdata); in ieee80211_stop_ap()
1718 struct ieee80211_bss_conf *link_conf = link->conf; in ieee80211_stop_ap()
1723 old_beacon = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_stop_ap()
1726 old_probe_resp = sdata_dereference(link->u.ap.probe_resp, in ieee80211_stop_ap()
1728 old_fils_discovery = sdata_dereference(link->u.ap.fils_discovery, in ieee80211_stop_ap()
1731 sdata_dereference(link->u.ap.unsol_bcast_probe_resp, in ieee80211_stop_ap()
1734 sdata_dereference(link->u.ap.s1g_short_beacon, sdata); in ieee80211_stop_ap()
1741 ieee80211_free_next_beacon(link); in ieee80211_stop_ap()
1753 RCU_INIT_POINTER(link->u.ap.beacon, NULL); in ieee80211_stop_ap()
1754 RCU_INIT_POINTER(link->u.ap.probe_resp, NULL); in ieee80211_stop_ap()
1755 RCU_INIT_POINTER(link->u.ap.fils_discovery, NULL); in ieee80211_stop_ap()
1756 RCU_INIT_POINTER(link->u.ap.unsol_bcast_probe_resp, NULL); in ieee80211_stop_ap()
1757 RCU_INIT_POINTER(link->u.ap.s1g_short_beacon, NULL); in ieee80211_stop_ap()
1778 ieee80211_remove_link_keys(link, &keys); in ieee80211_stop_ap()
1792 ieee80211_link_info_change_notify(sdata, link, in ieee80211_stop_ap()
1797 wiphy_delayed_work_cancel(wiphy, &link->dfs_cac_timer_work); in ieee80211_stop_ap()
1809 ieee80211_link_copy_chanctx_to_vlans(link, true); in ieee80211_stop_ap()
1810 ieee80211_link_release_channel(link); in ieee80211_stop_ap()
1954 struct ieee80211_link_data *link = in sta_link_apply_parameters() local
1955 sdata_dereference(sdata->link[link_id], sdata); in sta_link_apply_parameters()
1957 rcu_dereference_protected(sta->link[link_id], in sta_link_apply_parameters()
1984 if (!link || !link_sta) in sta_link_apply_parameters()
1987 sband = ieee80211_get_link_sband(link); in sta_link_apply_parameters()
2014 !ieee80211_parse_bitrates(link->conf->chanreq.oper.width, in sta_link_apply_parameters()
2052 enum nl80211_chan_width width = link->conf->chanreq.oper.width; in sta_link_apply_parameters()
2854 struct ieee80211_link_data *link; in ieee80211_change_bss() local
2858 link = ieee80211_link_or_deflink(sdata, params->link_id, true); in ieee80211_change_bss()
2859 if (IS_ERR(link)) in ieee80211_change_bss()
2860 return PTR_ERR(link); in ieee80211_change_bss()
2862 if (!sdata_dereference(link->u.ap.beacon, sdata)) in ieee80211_change_bss()
2865 sband = ieee80211_get_link_sband(link); in ieee80211_change_bss()
2870 if (!ieee80211_parse_bitrates(link->conf->chanreq.oper.width, in ieee80211_change_bss()
2874 &link->conf->basic_rates)) in ieee80211_change_bss()
2877 ieee80211_check_rate_mask(link); in ieee80211_change_bss()
2881 link->conf->use_cts_prot = params->use_cts_prot; in ieee80211_change_bss()
2885 link->conf->use_short_preamble = params->use_short_preamble; in ieee80211_change_bss()
2889 if (!link->conf->use_short_slot && in ieee80211_change_bss()
2892 link->conf->use_short_slot = true; in ieee80211_change_bss()
2897 link->conf->use_short_slot = params->use_short_slot_time; in ieee80211_change_bss()
2910 link->conf->ht_operation_mode = (u16)params->ht_opmode; in ieee80211_change_bss()
2915 link->conf->p2p_noa_attr.oppps_ctwindow &= in ieee80211_change_bss()
2917 link->conf->p2p_noa_attr.oppps_ctwindow |= in ieee80211_change_bss()
2923 link->conf->p2p_noa_attr.oppps_ctwindow |= in ieee80211_change_bss()
2927 link->conf->p2p_noa_attr.oppps_ctwindow &= in ieee80211_change_bss()
2932 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_change_bss()
2943 struct ieee80211_link_data *link = in ieee80211_set_txq_params() local
2953 if (IS_ERR(link)) in ieee80211_set_txq_params()
2954 return PTR_ERR(link); in ieee80211_set_txq_params()
2970 link->tx_conf[params->ac] = p; in ieee80211_set_txq_params()
2971 if (drv_conf_tx(local, link, params->ac, &p)) { in ieee80211_set_txq_params()
2978 ieee80211_link_info_change_notify(sdata, link, in ieee80211_set_txq_params()
3248 link_id < ARRAY_SIZE(sdata->link); in ieee80211_set_tx_power()
3250 struct ieee80211_link_data *link = in ieee80211_set_tx_power() local
3251 wiphy_dereference(wiphy, sdata->link[link_id]); in ieee80211_set_tx_power()
3253 if (!link) in ieee80211_set_tx_power()
3256 link->user_power_level = user_power_level; in ieee80211_set_tx_power()
3258 if (txp_type != link->conf->txpower_type) { in ieee80211_set_tx_power()
3260 link->conf->txpower_type = txp_type; in ieee80211_set_tx_power()
3263 ieee80211_recalc_txpower(link, update_txp_type); in ieee80211_set_tx_power()
3278 link_id < ARRAY_SIZE(sdata->link); in ieee80211_set_tx_power()
3280 struct ieee80211_link_data *link = in ieee80211_set_tx_power() local
3281 wiphy_dereference(wiphy, sdata->link[link_id]); in ieee80211_set_tx_power()
3283 if (!link) in ieee80211_set_tx_power()
3286 link->user_power_level = local->user_power_level; in ieee80211_set_tx_power()
3287 if (txp_type != link->conf->txpower_type) in ieee80211_set_tx_power()
3289 link->conf->txpower_type = txp_type; in ieee80211_set_tx_power()
3298 link_id < ARRAY_SIZE(sdata->link); in ieee80211_set_tx_power()
3300 struct ieee80211_link_data *link = in ieee80211_set_tx_power() local
3301 wiphy_dereference(wiphy, sdata->link[link_id]); in ieee80211_set_tx_power()
3303 if (!link) in ieee80211_set_tx_power()
3306 ieee80211_recalc_txpower(link, update_txp_type); in ieee80211_set_tx_power()
3348 link_data = wiphy_dereference(wiphy, sdata->link[link_id]); in ieee80211_get_tx_power()
3407 struct ieee80211_link_data *link, in __ieee80211_request_smps_mgd() argument
3421 if (!ieee80211_vif_link_active(&sdata->vif, link->link_id)) in __ieee80211_request_smps_mgd()
3424 old_req = link->u.mgd.req_smps; in __ieee80211_request_smps_mgd()
3425 link->u.mgd.req_smps = smps_mode; in __ieee80211_request_smps_mgd()
3443 link->conf->chanreq.oper.width == NL80211_CHAN_WIDTH_20_NOHT) in __ieee80211_request_smps_mgd()
3470 link->link_id : -1); in __ieee80211_request_smps_mgd()
3472 link->u.mgd.req_smps = old_req; in __ieee80211_request_smps_mgd()
3474 ieee80211_teardown_tdls_peers(link); in __ieee80211_request_smps_mgd()
3500 for (link_id = 0; link_id < ARRAY_SIZE(sdata->link); link_id++) { in ieee80211_set_power_mgmt()
3501 struct ieee80211_link_data *link; in ieee80211_set_power_mgmt() local
3503 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_set_power_mgmt()
3505 if (!link) in ieee80211_set_power_mgmt()
3507 __ieee80211_request_smps_mgd(sdata, link, in ieee80211_set_power_mgmt()
3508 link->u.mgd.req_smps); in ieee80211_set_power_mgmt()
3522 struct ieee80211_link_data *link, in ieee80211_set_cqm_rssi_link() argument
3528 if (!link || !link->conf) in ieee80211_set_cqm_rssi_link()
3531 conf = link->conf; in ieee80211_set_cqm_rssi_link()
3542 link->u.mgd.last_cqm_event_signal = 0; in ieee80211_set_cqm_rssi_link()
3544 if (!ieee80211_vif_link_active(&sdata->vif, link->link_id)) in ieee80211_set_cqm_rssi_link()
3549 ieee80211_link_info_change_notify(sdata, link, BSS_CHANGED_CQM); in ieee80211_set_cqm_rssi_link()
3566 struct ieee80211_link_data *link = in ieee80211_set_cqm_rssi_config() local
3567 sdata_dereference(sdata->link[link_id], sdata); in ieee80211_set_cqm_rssi_config()
3569 ieee80211_set_cqm_rssi_link(sdata, link, rssi_thold, rssi_hyst, in ieee80211_set_cqm_rssi_config()
3589 struct ieee80211_link_data *link = in ieee80211_set_cqm_rssi_range_config() local
3590 sdata_dereference(sdata->link[link_id], sdata); in ieee80211_set_cqm_rssi_range_config()
3592 ieee80211_set_cqm_rssi_link(sdata, link, 0, 0, in ieee80211_set_cqm_rssi_range_config()
3735 link_data = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_start_radar_detection()
3764 link_data = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_end_cac()
3898 link_data = rcu_dereference(sdata->link[link_id]); in ieee80211_csa_finish()
4045 struct ieee80211_link_data *link = in ieee80211_csa_finalize_work() local
4047 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_csa_finalize_work()
4053 if (!link->conf->csa_active) in ieee80211_csa_finalize_work()
4059 ieee80211_csa_finalize(link); in ieee80211_csa_finalize_work()
4195 static void ieee80211_color_change_abort(struct ieee80211_link_data *link) in ieee80211_color_change_abort() argument
4197 link->conf->color_change_active = false; in ieee80211_color_change_abort()
4199 ieee80211_free_next_beacon(link); in ieee80211_color_change_abort()
4201 cfg80211_color_change_aborted_notify(link->sdata->dev, link->link_id); in ieee80211_color_change_abort()
4233 link_data = wiphy_dereference(wiphy, sdata->link[link_id]); in __ieee80211_channel_switch()
4554 struct ieee80211_link_data *link; in ieee80211_cfg_get_channel() local
4558 link = rcu_dereference(sdata->link[link_id]); in ieee80211_cfg_get_channel()
4559 if (!link) { in ieee80211_cfg_get_channel()
4564 chanctx_conf = rcu_dereference(link->conf->chanctx_conf); in ieee80211_cfg_get_channel()
4566 *chandef = link->conf->chanreq.oper; in ieee80211_cfg_get_channel()
4618 struct ieee80211_link_data *link; in ieee80211_set_ap_chanwidth() local
4623 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_set_ap_chanwidth()
4625 ret = ieee80211_link_change_chanreq(link, &chanreq, &changed); in ieee80211_set_ap_chanwidth()
4627 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_set_ap_chanwidth()
4947 ieee80211_set_after_color_change_beacon(struct ieee80211_link_data *link, in ieee80211_set_after_color_change_beacon() argument
4950 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_set_after_color_change_beacon()
4956 if (!link->u.ap.next_beacon) in ieee80211_set_after_color_change_beacon()
4959 ret = ieee80211_assign_beacon(sdata, link, in ieee80211_set_after_color_change_beacon()
4960 link->u.ap.next_beacon, in ieee80211_set_after_color_change_beacon()
4962 ieee80211_free_next_beacon(link); in ieee80211_set_after_color_change_beacon()
4978 ieee80211_set_color_change_beacon(struct ieee80211_link_data *link, in ieee80211_set_color_change_beacon() argument
4982 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_set_color_change_beacon()
4988 link->u.ap.next_beacon = in ieee80211_set_color_change_beacon()
4990 if (!link->u.ap.next_beacon) in ieee80211_set_color_change_beacon()
5002 err = ieee80211_assign_beacon(sdata, link, in ieee80211_set_color_change_beacon()
5006 ieee80211_free_next_beacon(link); in ieee80211_set_color_change_beacon()
5018 ieee80211_color_change_bss_config_notify(struct ieee80211_link_data *link, in ieee80211_color_change_bss_config_notify() argument
5021 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_color_change_bss_config_notify()
5025 link->conf->he_bss_color.color = color; in ieee80211_color_change_bss_config_notify()
5026 link->conf->he_bss_color.enabled = enable; in ieee80211_color_change_bss_config_notify()
5029 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_color_change_bss_config_notify()
5031 if (!link->conf->nontransmitted && in ieee80211_color_change_bss_config_notify()
5032 rcu_access_pointer(link->conf->tx_bss_conf)) { in ieee80211_color_change_bss_config_notify()
5037 rcu_access_pointer(tmp->conf->tx_bss_conf) != link->conf) in ieee80211_color_change_bss_config_notify()
5048 static int ieee80211_color_change_finalize(struct ieee80211_link_data *link) in ieee80211_color_change_finalize() argument
5050 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_color_change_finalize()
5057 link->conf->color_change_active = false; in ieee80211_color_change_finalize()
5059 err = ieee80211_set_after_color_change_beacon(link, &changed); in ieee80211_color_change_finalize()
5061 cfg80211_color_change_aborted_notify(sdata->dev, link->link_id); in ieee80211_color_change_finalize()
5065 ieee80211_color_change_bss_config_notify(link, in ieee80211_color_change_finalize()
5066 link->conf->color_change_color, in ieee80211_color_change_finalize()
5068 cfg80211_color_change_notify(sdata->dev, link->link_id); in ieee80211_color_change_finalize()
5076 struct ieee80211_link_data *link = in ieee80211_color_change_finalize_work() local
5079 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_color_change_finalize_work()
5080 struct ieee80211_bss_conf *link_conf = link->conf; in ieee80211_color_change_finalize_work()
5092 ieee80211_color_change_finalize(link); in ieee80211_color_change_finalize_work()
5098 struct ieee80211_link_data *link = in ieee80211_color_collision_detection_work() local
5101 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_color_collision_detection_work()
5103 cfg80211_obss_color_collision_notify(sdata->dev, link->color_bitmap, in ieee80211_color_collision_detection_work()
5104 link->link_id); in ieee80211_color_collision_detection_work()
5110 struct ieee80211_link_data *link; in ieee80211_color_change_finish() local
5117 link = rcu_dereference(sdata->link[link_id]); in ieee80211_color_change_finish()
5118 if (WARN_ON(!link)) { in ieee80211_color_change_finish()
5124 &link->color_change_finalize_work); in ieee80211_color_change_finish()
5135 struct ieee80211_link_data *link; in ieee80211_obss_color_collision_notify() local
5142 link = rcu_dereference(sdata->link[link_id]); in ieee80211_obss_color_collision_notify()
5143 if (WARN_ON(!link)) { in ieee80211_obss_color_collision_notify()
5148 if (link->conf->color_change_active || link->conf->csa_active) { in ieee80211_obss_color_collision_notify()
5154 &link->color_collision_detect_work)) { in ieee80211_obss_color_collision_notify()
5159 link->color_bitmap = color_bitmap; in ieee80211_obss_color_collision_notify()
5164 &link->color_collision_detect_work, in ieee80211_obss_color_collision_notify()
5178 struct ieee80211_link_data *link; in ieee80211_color_change() local
5188 link = wiphy_dereference(wiphy, sdata->link[link_id]); in ieee80211_color_change()
5189 if (!link) in ieee80211_color_change()
5192 link_conf = link->conf; in ieee80211_color_change()
5207 link, link_conf, &changed); in ieee80211_color_change()
5211 err = ieee80211_set_color_change_beacon(link, params, &changed); in ieee80211_color_change()
5221 ieee80211_color_change_bss_config_notify(link, 0, 0, changed); in ieee80211_color_change()
5224 ieee80211_color_change_finalize(link); in ieee80211_color_change()
5308 link_sta = sdata_dereference(sta->link[params->link_id], sdata); in ieee80211_add_link_station()