Lines Matching defs:arvif
569 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
571 if (arvif->vdev_id == arvif_iter->vdev_id)
572 arvif_iter->arvif = arvif;
588 if (!arvif_iter.arvif) {
593 return arvif_iter.arvif;
601 struct ath11k_vif *arvif;
607 arvif = ath11k_mac_get_arvif(pdev->ar, vdev_id);
608 if (arvif)
609 return arvif;
662 struct ath11k_vif *arvif;
668 list_for_each_entry(arvif, &ar->arvifs, list) {
669 if (arvif->is_up)
670 return arvif;
684 u8 ath11k_mac_get_target_pdev_id_from_vif(struct ath11k_vif *arvif)
686 struct ath11k *ar = arvif->ar;
688 struct ieee80211_vif *vif = arvif->vif;
709 struct ath11k_vif *arvif;
711 arvif = ath11k_mac_get_vif_up(ar->ab);
713 if (arvif)
714 return ath11k_mac_get_target_pdev_id_from_vif(arvif);
740 struct ath11k_vif *arvif;
746 list_for_each_entry(arvif, &ar->arvifs, list) {
747 if (arvif->txpower <= 0)
751 txpower = arvif->txpower;
753 txpower = min(txpower, arvif->txpower);
794 static int ath11k_recalc_rtscts_prot(struct ath11k_vif *arvif)
796 struct ath11k *ar = arvif->ar;
810 if (arvif->num_legacy_stations > 0)
816 if (arvif->rtscts_prot_mode == rts_cts)
819 arvif->rtscts_prot_mode = rts_cts;
822 arvif->vdev_id, rts_cts);
824 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
828 arvif->vdev_id, ret);
833 static int ath11k_mac_set_kickout(struct ath11k_vif *arvif)
835 struct ath11k *ar = arvif->ar;
844 arvif->vdev_id, ret);
849 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param,
853 arvif->vdev_id, ret);
858 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param,
862 arvif->vdev_id, ret);
867 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param,
871 arvif->vdev_id, ret);
1218 static int ath11k_mac_vif_setup_ps(struct ath11k_vif *arvif)
1220 struct ath11k *ar = arvif->ar;
1221 struct ieee80211_vif *vif = arvif->vif;
1229 lockdep_assert_held(&arvif->ar->conf_mutex);
1231 if (arvif->vif->type != NL80211_IFTYPE_STATION)
1234 enable_ps = arvif->ps;
1236 if (!arvif->is_started) {
1253 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1257 arvif->vdev_id, ret);
1265 arvif->vdev_id, psmode ? "enable" : "disable");
1267 ret = ath11k_wmi_pdev_set_ps_mode(ar, arvif->vdev_id, psmode);
1270 psmode, arvif->vdev_id, ret);
1279 struct ath11k_vif *arvif;
1284 list_for_each_entry(arvif, &ar->arvifs, list) {
1285 ret = ath11k_mac_vif_setup_ps(arvif);
1357 static void ath11k_mac_setup_nontx_vif_rsnie(struct ath11k_vif *arvif,
1362 arvif->rsnie_present = true;
1375 arvif->rsnie_present = false;
1383 struct ath11k_vif *arvif,
1396 arvif->rsnie_present = tx_arvif->rsnie_present;
1417 if (profile[2] == arvif->vif->bss_conf.bssid_index) {
1420 ath11k_mac_setup_nontx_vif_rsnie(arvif,
1435 static void ath11k_mac_set_vif_params(struct ath11k_vif *arvif,
1446 arvif->rsnie_present = true;
1448 arvif->rsnie_present = false;
1453 arvif->wpaie_present = true;
1455 arvif->wpaie_present = false;
1458 static int ath11k_mac_setup_bcn_tmpl_ema(struct ath11k_vif *arvif)
1467 tx_arvif = ath11k_vif_to_arvif(arvif->vif->mbssid_tx_vif);
1472 ath11k_warn(arvif->ar->ab,
1477 if (tx_arvif == arvif)
1480 arvif->wpaie_present = tx_arvif->wpaie_present;
1483 if (tx_arvif != arvif && !nontx_vif_params_set)
1485 ath11k_mac_set_nontx_vif_params(tx_arvif, arvif,
1506 if (tx_arvif != arvif && !nontx_vif_params_set)
1512 static int ath11k_mac_setup_bcn_tmpl_mbssid(struct ath11k_vif *arvif)
1514 struct ath11k *ar = arvif->ar;
1516 struct ath11k_vif *tx_arvif = arvif;
1518 struct ieee80211_vif *vif = arvif->vif;
1525 if (tx_arvif != arvif) {
1539 if (tx_arvif == arvif)
1541 else if (!ath11k_mac_set_nontx_vif_params(tx_arvif, arvif, bcn))
1544 ret = ath11k_wmi_bcn_tmpl(ar, arvif->vdev_id, &offs, bcn, 0);
1554 static int ath11k_mac_setup_bcn_tmpl(struct ath11k_vif *arvif)
1556 struct ieee80211_vif *vif = arvif->vif;
1558 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1565 arvif != ath11k_vif_to_arvif(vif->mbssid_tx_vif) && arvif->is_up)
1569 return ath11k_mac_setup_bcn_tmpl_ema(arvif);
1571 return ath11k_mac_setup_bcn_tmpl_mbssid(arvif);
1574 void ath11k_mac_bcn_tx_event(struct ath11k_vif *arvif)
1576 struct ieee80211_vif *vif = arvif->vif;
1578 if (!vif->bss_conf.color_change_active && !arvif->bcca_zero_sent)
1583 arvif->bcca_zero_sent = true;
1588 arvif->bcca_zero_sent = false;
1592 ath11k_mac_setup_bcn_tmpl(arvif);
1595 static void ath11k_control_beaconing(struct ath11k_vif *arvif,
1598 struct ath11k *ar = arvif->ar;
1602 lockdep_assert_held(&arvif->ar->conf_mutex);
1605 ret = ath11k_wmi_vdev_down(ar, arvif->vdev_id);
1608 arvif->vdev_id, ret);
1610 arvif->is_up = false;
1615 ret = ath11k_mac_setup_bcn_tmpl(arvif);
1622 arvif->tx_seq_no = 0x1000;
1624 arvif->aid = 0;
1626 ether_addr_copy(arvif->bssid, info->bssid);
1628 if (arvif->vif->mbssid_tx_vif)
1629 tx_arvif = ath11k_vif_to_arvif(arvif->vif->mbssid_tx_vif);
1631 ret = ath11k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1632 arvif->bssid,
1638 arvif->vdev_id, ret);
1642 arvif->is_up = true;
1644 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev %d up\n", arvif->vdev_id);
1652 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
1660 cancel_delayed_work(&arvif->connection_loss_work);
1675 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
1676 struct ath11k *ar = arvif->ar;
1679 if (arvif->vdev_id != *vdev_id)
1682 if (!arvif->is_up)
1692 ieee80211_queue_delayed_work(hw, &arvif->connection_loss_work,
1706 struct ath11k_vif *arvif = container_of(work, struct ath11k_vif,
1708 struct ieee80211_vif *vif = arvif->vif;
1710 if (!arvif->is_up)
1721 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
1732 arg->vdev_id = arvif->vdev_id;
1749 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
1761 if (arvif->rsnie_present || arvif->wpaie_present) {
1763 if (arvif->wpaie_present)
1807 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
1825 ratemask &= arvif->bitrate_mask.control[band].legacy;
1870 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
1887 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
1915 if (arvif->bitrate_mask.control[band].gi == NL80211_TXRATE_DEFAULT_GI)
1919 if (arvif->bitrate_mask.control[band].gi != NL80211_TXRATE_FORCE_LGI) {
2067 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
2084 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2264 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
2285 memcpy(he_mcs_mask, arvif->bitrate_mask.control[band].he_mcs,
2591 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
2593 switch (arvif->vdev_type) {
2623 struct ath11k_vif *arvif,
2633 params.vdev_id = arvif->vdev_id;
2685 params.param, arvif->vdev_id, ret);
2754 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
2766 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2767 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2768 he_mcs_mask = arvif->bitrate_mask.control[band].he_mcs;
2861 static int ath11k_setup_peer_smps(struct ath11k *ar, struct ath11k_vif *arvif,
2881 return ath11k_wmi_set_peer_param(ar, addr, arvif->vdev_id,
2886 static bool ath11k_mac_set_he_txbf_conf(struct ath11k_vif *arvif)
2888 struct ath11k *ar = arvif->ar;
2892 if (!arvif->vif->bss_conf.he_support)
2897 if (arvif->vif->bss_conf.he_su_beamformer) {
2899 if (arvif->vif->bss_conf.he_mu_beamformer &&
2900 arvif->vdev_type == WMI_VDEV_TYPE_AP)
2904 if (arvif->vif->type != NL80211_IFTYPE_MESH_POINT) {
2908 if (arvif->vif->bss_conf.he_full_ul_mumimo)
2911 if (arvif->vif->bss_conf.he_su_beamformee)
2915 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, value);
2918 arvif->vdev_id, ret);
2926 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
2930 arvif->vdev_id, ret);
2940 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
2987 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, hemode);
3002 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
3013 arvif->vdev_id, arvif->bssid, arvif->aid);
3020 bss_conf->bssid, arvif->vdev_id);
3034 arvif->vdev_id, bss_conf->bssid);
3043 bss_conf->bssid, arvif->vdev_id, ret);
3049 bss_conf->bssid, arvif->vdev_id);
3053 ret = ath11k_setup_peer_smps(ar, arvif, bss_conf->bssid,
3058 arvif->vdev_id, ret);
3062 WARN_ON(arvif->is_up);
3064 arvif->aid = vif->cfg.aid;
3065 ether_addr_copy(arvif->bssid, bss_conf->bssid);
3067 ret = ath11k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid,
3071 arvif->vdev_id, ret);
3075 arvif->is_up = true;
3076 arvif->rekey_data.enable_offload = false;
3080 arvif->vdev_id, bss_conf->bssid, vif->cfg.aid);
3084 peer = ath11k_peer_find(ar->ab, arvif->vdev_id, arvif->bssid);
3091 ret = ath11k_wmi_set_peer_param(ar, arvif->bssid,
3092 arvif->vdev_id,
3099 ret = ath11k_wmi_send_obss_spr_cmd(ar, arvif->vdev_id,
3103 arvif->vdev_id, ret);
3105 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3110 arvif->vdev_id, ret);
3119 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
3125 arvif->vdev_id, arvif->bssid);
3127 ret = ath11k_wmi_vdev_down(ar, arvif->vdev_id);
3130 arvif->vdev_id, ret);
3132 arvif->is_up = false;
3134 memset(&arvif->rekey_data, 0, sizeof(arvif->rekey_data));
3136 cancel_delayed_work_sync(&arvif->connection_loss_work);
3168 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
3189 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, vdev_param,
3200 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, vdev_param,
3206 static int ath11k_mac_fils_discovery(struct ath11k_vif *arvif,
3209 struct ath11k *ar = arvif->ar;
3218 tmpl = ieee80211_get_fils_discovery_tmpl(ar->hw, arvif->vif);
3220 ret = ath11k_wmi_fils_discovery_tmpl(ar, arvif->vdev_id,
3227 arvif->vif);
3229 ret = ath11k_wmi_probe_resp_tmpl(ar, arvif->vdev_id,
3232 return ath11k_wmi_fils_discovery(ar, arvif->vdev_id, 0, false);
3238 arvif->vdev_id, (unsol_bcast_probe_resp_enabled ?
3246 ret = ath11k_wmi_fils_discovery(ar, arvif->vdev_id, interval,
3410 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
3427 arvif->beacon_interval = info->beacon_int;
3430 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3432 arvif->beacon_interval);
3435 arvif->vdev_id);
3439 arvif->beacon_interval, arvif->vdev_id);
3449 arvif->vdev_id);
3453 arvif->vdev_id);
3455 if (!arvif->do_not_send_tmpl || !arvif->bcca_zero_sent) {
3456 ret = ath11k_mac_setup_bcn_tmpl(arvif);
3462 if (arvif->bcca_zero_sent)
3463 arvif->do_not_send_tmpl = true;
3465 arvif->do_not_send_tmpl = false;
3468 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3474 arvif->vdev_id);
3478 arvif->vdev_id);
3483 arvif->dtim_period = info->dtim_period;
3486 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3488 arvif->dtim_period);
3492 arvif->vdev_id, ret);
3496 arvif->dtim_period, arvif->vdev_id);
3501 arvif->u.ap.ssid_len = vif->cfg.ssid_len;
3503 memcpy(arvif->u.ap.ssid, vif->cfg.ssid,
3505 arvif->u.ap.hidden_ssid = info->hidden_ssid;
3509 ether_addr_copy(arvif->bssid, info->bssid);
3513 ath11k_mac_set_he_txbf_conf(arvif);
3514 ath11k_control_beaconing(arvif, info);
3516 if (arvif->is_up && vif->bss_conf.he_support &&
3520 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3524 param_value, arvif->vdev_id);
3528 param_value, arvif->vdev_id, ret);
3538 if (arvif->is_started) {
3539 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3543 arvif->vdev_id);
3546 cts_prot, arvif->vdev_id);
3562 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3566 arvif->vdev_id);
3570 slottime, arvif->vdev_id);
3582 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3586 arvif->vdev_id);
3590 preamble, arvif->vdev_id);
3602 arvif->vdev_id, info->txpower);
3604 arvif->txpower = info->txpower;
3610 arvif->ps = vif->cfg.ps;
3615 arvif->vdev_id, ret);
3619 !ath11k_mac_vif_chan(arvif->vif, &def)) {
3643 arvif->vdev_id, rate);
3646 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3651 arvif->vdev_id, ret);
3654 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3659 arvif->vdev_id, ret);
3663 !ath11k_mac_vif_chan(arvif->vif, &def))
3684 ar, arvif->vdev_id, info->he_bss_color.color,
3689 arvif->vdev_id, ret);
3698 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
3704 arvif->vdev_id, ret);
3708 param_value, arvif->vdev_id);
3711 arvif->vdev_id,
3715 arvif->vdev_id, ret);
3717 ar, arvif->vdev_id, 0,
3721 arvif->vdev_id, ret);
3726 arvif->ftm_responder != info->ftm_responder &&
3730 arvif->ftm_responder = info->ftm_responder;
3732 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param,
3733 arvif->ftm_responder);
3736 arvif->vdev_id, ret);
3741 ath11k_mac_fils_discovery(arvif, info);
3745 memcpy(arvif->arp_ns_offload.ipv4_addr,
3748 memcpy(arvif->arp_ns_offload.mac_addr, vif->addr, ETH_ALEN);
3749 arvif->arp_ns_offload.ipv4_count = ipv4_cnt;
3753 vif->addr, arvif->arp_ns_offload.ipv4_addr);
3937 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
3954 ath11k_mac_11d_scan_start(ar, arvif->vdev_id);
3965 ar->scan.vdev_id = arvif->vdev_id;
3987 arg->vdev_id = arvif->vdev_id;
4092 ath11k_mac_11d_scan_start(ar, arvif->vdev_id);
4109 static int ath11k_install_key(struct ath11k_vif *arvif,
4115 struct ath11k *ar = arvif->ar;
4117 .vdev_id = arvif->vdev_id,
4125 lockdep_assert_held(&arvif->ar->conf_mutex);
4166 ret = ath11k_wmi_vdev_install_key(arvif->ar, &arg);
4177 static int ath11k_clear_peer_keys(struct ath11k_vif *arvif,
4180 struct ath11k *ar = arvif->ar;
4191 peer = ath11k_peer_find(ab, arvif->vdev_id, addr);
4202 ret = ath11k_install_key(arvif, peer->keys[i],
4225 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
4249 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
4260 peer = ath11k_peer_find(ab, arvif->vdev_id, peer_addr);
4288 ret = ath11k_install_key(arvif, key, cmd, peer_addr, flags);
4294 ret = ath11k_dp_peer_rx_pn_replay_config(arvif, peer_addr, cmd, key);
4301 peer = ath11k_peer_find(ab, arvif->vdev_id, peer_addr);
4391 ath11k_mac_set_peer_vht_fixed_rate(struct ath11k_vif *arvif,
4396 struct ath11k *ar = arvif->ar;
4429 arvif->vdev_id,
4441 ath11k_mac_set_peer_he_fixed_rate(struct ath11k_vif *arvif,
4446 struct ath11k *ar = arvif->ar;
4480 arvif->vdev_id,
4492 ath11k_mac_set_peer_ht_fixed_rate(struct ath11k_vif *arvif,
4497 struct ath11k *ar = arvif->ar;
4528 arvif->vdev_id,
4544 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
4558 mask = &arvif->bitrate_mask;
4566 sta->addr, arvif->vdev_id, ret);
4572 sta->addr, arvif->vdev_id);
4586 ret = ath11k_mac_set_peer_vht_fixed_rate(arvif, sta, mask,
4591 ret = ath11k_mac_set_peer_he_fixed_rate(arvif, sta, mask,
4596 ret = ath11k_mac_set_peer_ht_fixed_rate(arvif, sta, mask,
4608 ret = ath11k_setup_peer_smps(ar, arvif, sta->addr,
4613 arvif->vdev_id, ret);
4618 arvif->num_legacy_stations++;
4619 ret = ath11k_recalc_rtscts_prot(arvif);
4625 ret = ath11k_peer_assoc_qos_ap(ar, arvif, sta);
4628 sta->addr, arvif->vdev_id, ret);
4640 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
4646 arvif->num_legacy_stations--;
4647 ret = ath11k_recalc_rtscts_prot(arvif);
4652 ret = ath11k_clear_peer_keys(arvif, sta->addr);
4655 arvif->vdev_id, ret);
4664 struct ath11k_vif *arvif;
4680 arvif = arsta->arvif;
4681 ar = arvif->ar;
4683 if (WARN_ON(ath11k_mac_vif_chan(arvif->vif, &def)))
4687 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
4688 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
4689 he_mcs_mask = arvif->bitrate_mask.control[band].he_mcs;
4712 ath11k_peer_assoc_h_phymode(ar, arvif->vif, sta, &peer_arg);
4725 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
4734 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
4747 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
4756 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
4769 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
4780 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
4788 mask = &arvif->bitrate_mask;
4808 ath11k_mac_set_peer_vht_fixed_rate(arvif, sta, mask,
4811 ath11k_mac_set_peer_he_fixed_rate(arvif, sta, mask,
4814 ath11k_mac_set_peer_ht_fixed_rate(arvif, sta, mask,
4824 arvif->vdev_id,
4832 ath11k_peer_assoc_prepare(ar, arvif->vif, sta,
4839 sta->addr, arvif->vdev_id, err);
4843 sta->addr, arvif->vdev_id);
4854 struct ath11k_vif *arvif;
4861 arvif = arsta->arvif;
4862 ar = arvif->ar;
4868 arvif->vdev_id,
4876 static int ath11k_mac_inc_num_stations(struct ath11k_vif *arvif,
4879 struct ath11k *ar = arvif->ar;
4883 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
4894 static void ath11k_mac_dec_num_stations(struct ath11k_vif *arvif,
4897 struct ath11k *ar = arvif->ar;
4901 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
4912 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
4919 ret = ath11k_mac_inc_num_stations(arvif, sta);
4932 peer_param.vdev_id = arvif->vdev_id;
4936 ret = ath11k_peer_create(ar, arvif, sta, &peer_param);
4939 sta->addr, arvif->vdev_id);
4944 sta->addr, arvif->vdev_id);
4958 arvif->vdev_id,
4967 ret = ath11k_dp_peer_setup(ar, arvif->vdev_id, sta->addr);
4970 sta->addr, arvif->vdev_id, ret);
4975 !arvif->is_started &&
4976 arvif->vdev_type != WMI_VDEV_TYPE_AP) {
4991 ath11k_peer_delete(ar, arvif->vdev_id, sta->addr);
4996 ath11k_mac_dec_num_stations(arvif, sta);
5036 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
5053 arsta->arvif = arvif;
5061 sta->addr, arvif->vdev_id);
5067 ath11k_dp_peer_cleanup(ar, arvif->vdev_id, sta->addr);
5070 ret = ath11k_peer_delete(ar, arvif->vdev_id, sta->addr);
5074 sta->addr, arvif->vdev_id);
5079 sta->addr, arvif->vdev_id);
5082 ath11k_mac_dec_num_stations(arvif, sta);
5085 peer = ath11k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
5090 vif->addr, arvif->vdev_id);
5124 peer = ath11k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
5130 if (vif->type == NL80211_IFTYPE_STATION && arvif->is_up) {
5132 arvif->vdev_id,
5137 sta->addr, arvif->vdev_id, ret);
5143 peer = ath11k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
5168 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
5185 ret = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
5218 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
5224 peer = ath11k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
5228 sta->addr, arvif->vdev_id);
5285 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
5289 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
5312 arvif->u.sta.uapsd |= value;
5314 arvif->u.sta.uapsd &= ~value;
5316 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5318 arvif->u.sta.uapsd);
5324 if (arvif->u.sta.uapsd)
5329 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5345 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
5353 p = &arvif->wmm_params.ac_vo;
5356 p = &arvif->wmm_params.ac_vi;
5359 p = &arvif->wmm_params.ac_be;
5362 p = &arvif->wmm_params.ac_bk;
5376 ret = ath11k_wmi_send_wmm_update_cmd_tlv(ar, arvif->vdev_id,
5377 &arvif->wmm_params);
5459 static int ath11k_mac_set_txbf_conf(struct ath11k_vif *arvif)
5462 struct ath11k *ar = arvif->ar;
5492 arvif->vdev_type == WMI_VDEV_TYPE_AP)
5502 arvif->vdev_type == WMI_VDEV_TYPE_STA)
5506 return ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
6028 static int ath11k_mac_mgmt_tx_wmi(struct ath11k *ar, struct ath11k_vif *arvif,
6070 ret = ath11k_wmi_mgmt_send(ar, arvif->vdev_id, buf_id, skb);
6101 struct ath11k_vif *arvif;
6113 arvif = ath11k_vif_to_arvif(skb_cb->vif);
6115 if (ar->allocated_vdev_map & (1LL << arvif->vdev_id)) {
6116 ret = ath11k_mac_mgmt_tx_wmi(ar, arvif, skb);
6119 arvif->vdev_id, ret);
6124 arvif->vdev_id);
6129 arvif->vdev_id,
6130 arvif->is_started);
6177 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
6209 ret = ath11k_dp_tx(ar, arvif, arsta, skb);
6449 static int ath11k_mac_setup_vdev_params_mbssid(struct ath11k_vif *arvif,
6452 struct ath11k *ar = arvif->ar;
6457 tx_vif = arvif->vif->mbssid_tx_vif;
6465 if (arvif->vif->bss_conf.nontransmitted) {
6471 } else if (tx_arvif == arvif) {
6477 if (arvif->vif->bss_conf.ema_ap)
6483 static int ath11k_mac_setup_vdev_create_params(struct ath11k_vif *arvif,
6486 struct ath11k *ar = arvif->ar;
6490 params->if_id = arvif->vdev_id;
6491 params->type = arvif->vdev_type;
6492 params->subtype = arvif->vdev_subtype;
6499 ret = ath11k_mac_setup_vdev_params_mbssid(arvif,
6527 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
6545 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
6549 arvif->vdev_id, ret);
6561 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
6565 arvif->vdev_id, ret);
6574 struct ath11k_vif *arvif;
6580 list_for_each_entry(arvif, &ar->arvifs, list) {
6581 if (arvif->is_up && arvif->vdev_type == WMI_VDEV_TYPE_AP)
6688 static int ath11k_mac_vdev_delete(struct ath11k *ar, struct ath11k_vif *arvif)
6691 struct ieee80211_vif *vif = arvif->vif;
6698 ret = ath11k_wmi_vdev_delete(ar, arvif->vdev_id);
6701 arvif->vdev_id, ret);
6712 ar->ab->free_vdev_map |= 1LL << (arvif->vdev_id);
6713 ar->allocated_vdev_map &= ~(1LL << arvif->vdev_id);
6717 vif->addr, arvif->vdev_id);
6727 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
6759 ath11k_debugfs_remove_interface(arvif);
6761 memset(arvif, 0, sizeof(*arvif));
6763 arvif->ar = ar;
6764 arvif->vif = vif;
6766 INIT_LIST_HEAD(&arvif->list);
6767 INIT_DELAYED_WORK(&arvif->connection_loss_work,
6770 for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
6771 arvif->bitrate_mask.control[i].legacy = 0xffffffff;
6772 arvif->bitrate_mask.control[i].gi = NL80211_TXRATE_FORCE_SGI;
6773 memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff,
6774 sizeof(arvif->bitrate_mask.control[i].ht_mcs));
6775 memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff,
6776 sizeof(arvif->bitrate_mask.control[i].vht_mcs));
6777 memset(arvif->bitrate_mask.control[i].he_mcs, 0xff,
6778 sizeof(arvif->bitrate_mask.control[i].he_mcs));
6783 arvif->vdev_id = bit;
6784 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
6789 arvif->vdev_type = WMI_VDEV_TYPE_STA;
6792 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_MESH_11S;
6795 arvif->vdev_type = WMI_VDEV_TYPE_AP;
6798 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
6807 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
6810 vif->cab_queue = arvif->vdev_id % (ATH11K_HW_MAX_QUEUES - 1);
6814 ret = ath11k_mac_setup_vdev_create_params(arvif, &vdev_param);
6817 arvif->vdev_id, ret);
6824 arvif->vdev_id, ret);
6830 vif->addr, arvif->vdev_id);
6831 ar->allocated_vdev_map |= 1LL << arvif->vdev_id;
6832 ab->free_vdev_map &= ~(1LL << arvif->vdev_id);
6835 list_add(&arvif->list, &ar->arvifs);
6841 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
6845 arvif->vdev_id, ar->cfg_tx_chainmask, nss, ret);
6849 switch (arvif->vdev_type) {
6851 peer_param.vdev_id = arvif->vdev_id;
6854 ret = ath11k_peer_create(ar, arvif, NULL, &peer_param);
6857 arvif->vdev_id, ret);
6861 ret = ath11k_mac_set_kickout(arvif);
6864 arvif->vdev_id, ret);
6873 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
6877 arvif->vdev_id, ret);
6883 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
6887 arvif->vdev_id, ret);
6893 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
6897 arvif->vdev_id, ret);
6901 ret = ath11k_wmi_pdev_set_ps_mode(ar, arvif->vdev_id,
6905 arvif->vdev_id, ret);
6921 arvif->txpower = vif->bss_conf.txpower;
6928 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
6932 arvif->vdev_id, ret);
6935 ath11k_dp_vdev_tx_attach(ar, arvif);
6937 ath11k_debugfs_add_interface(arvif);
6952 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
6953 fbret = ath11k_peer_delete(ar, arvif->vdev_id, vif->addr);
6956 vif->addr, arvif->vdev_id, fbret);
6962 ath11k_mac_vdev_delete(ar, arvif);
6964 list_del(&arvif->list);
6988 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
6993 cancel_delayed_work_sync(&arvif->connection_loss_work);
6998 arvif->vdev_id);
7000 ret = ath11k_spectral_vif_stop(arvif);
7003 arvif->vdev_id, ret);
7005 if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
7008 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
7009 ret = ath11k_peer_delete(ar, arvif->vdev_id, vif->addr);
7012 arvif->vdev_id, ret);
7015 ret = ath11k_mac_vdev_delete(ar, arvif);
7018 arvif->vdev_id, ret);
7022 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
7036 list_del(&arvif->list);
7039 ath11k_peer_cleanup(ar, arvif->vdev_id);
7054 ath11k_debugfs_remove_interface(arvif);
7192 ath11k_mac_vdev_start_restart(struct ath11k_vif *arvif,
7196 struct ath11k *ar = arvif->ar;
7206 arg.vdev_id = arvif->vdev_id;
7207 arg.dtim_period = arvif->dtim_period;
7208 arg.bcn_intval = arvif->beacon_interval;
7228 ret = ath11k_mac_setup_vdev_params_mbssid(arvif,
7235 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
7236 arg.ssid = arvif->u.ap.ssid;
7237 arg.ssid_len = arvif->u.ap.ssid_len;
7238 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
7278 arvif->vif->addr, arvif->vdev_id);
7287 if (arvif->vdev_type == WMI_VDEV_TYPE_AP &&
7296 ret = ath11k_mac_set_txbf_conf(arvif);
7299 arvif->vdev_id, ret);
7304 static int ath11k_mac_vdev_stop(struct ath11k_vif *arvif)
7306 struct ath11k *ar = arvif->ar;
7313 ret = ath11k_wmi_vdev_stop(ar, arvif->vdev_id);
7316 arvif->vdev_id, ret);
7323 arvif->vdev_id, ret);
7331 arvif->vif->addr, arvif->vdev_id);
7336 arvif->vdev_id);
7344 static int ath11k_mac_vdev_start(struct ath11k_vif *arvif,
7347 return ath11k_mac_vdev_start_restart(arvif, ctx, false);
7350 static int ath11k_mac_vdev_restart(struct ath11k_vif *arvif,
7353 return ath11k_mac_vdev_start_restart(arvif, ctx, true);
7401 struct ath11k_vif *arvif, *tx_arvif = NULL;
7416 arvif = ath11k_vif_to_arvif(vifs[i].vif);
7418 if (WARN_ON(!arvif->is_started))
7428 if (arvif->is_up) {
7429 ret = ath11k_mac_vdev_restart(arvif, vifs[i].new_ctx);
7432 arvif->vdev_id, ret);
7436 ret = ath11k_mac_vdev_stop(arvif);
7439 arvif->vdev_id, ret);
7443 ret = ath11k_mac_vdev_start(arvif, vifs[i].new_ctx);
7446 arvif->vdev_id, ret);
7451 ret = ath11k_mac_setup_bcn_tmpl(arvif);
7456 mbssid_tx_vif = arvif->vif->mbssid_tx_vif;
7460 ret = ath11k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
7461 arvif->bssid,
7463 arvif->vif->bss_conf.bssid_index,
7464 1 << arvif->vif->bss_conf.bssid_indicator);
7467 arvif->vdev_id, ret);
7554 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
7557 if (WARN_ON(arvif->is_started))
7560 ret = ath11k_mac_vdev_start(arvif, &arvif->chanctx);
7563 arvif->vdev_id, vif->addr,
7564 arvif->chanctx.def.chan->center_freq, ret);
7573 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, vdev_param,
7581 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
7582 ret = ath11k_wmi_vdev_up(ar, arvif->vdev_id, 0, ar->mac_addr,
7590 arvif->is_started = true;
7604 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
7612 ctx, arvif->vdev_id);
7616 arvif->vdev_type != WMI_VDEV_TYPE_AP &&
7617 arvif->vdev_type != WMI_VDEV_TYPE_MONITOR &&
7618 !ath11k_peer_find_by_vdev_id(ab, arvif->vdev_id)) {
7619 memcpy(&arvif->chanctx, ctx, sizeof(*ctx));
7624 if (WARN_ON(arvif->is_started)) {
7630 arvif->vdev_type != WMI_VDEV_TYPE_AP &&
7631 arvif->vdev_type != WMI_VDEV_TYPE_MONITOR) {
7632 param.vdev_id = arvif->vdev_id;
7636 ret = ath11k_peer_create(ar, arvif, NULL, ¶m);
7644 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
7652 arvif->is_started = true;
7656 ret = ath11k_mac_vdev_start(arvif, ctx);
7659 arvif->vdev_id, vif->addr,
7664 arvif->is_started = true;
7666 if (arvif->vdev_type != WMI_VDEV_TYPE_MONITOR &&
7694 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
7702 ctx, arvif->vdev_id);
7704 WARN_ON(!arvif->is_started);
7707 arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
7712 ath11k_peer_delete(ar, arvif->vdev_id, ar->mac_addr);
7715 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
7724 arvif->is_started = false;
7729 ret = ath11k_mac_vdev_stop(arvif);
7732 arvif->vdev_id, ret);
7734 arvif->is_started = false;
7737 arvif->vdev_type == WMI_VDEV_TYPE_STA) {
7738 ret = ath11k_peer_delete(ar, arvif->vdev_id, arvif->bssid);
7742 arvif->bssid, arvif->vdev_id, ret);
7746 arvif->bssid, arvif->vdev_id);
7750 arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
7751 ath11k_wmi_vdev_down(ar, arvif->vdev_id);
7753 if (arvif->vdev_type != WMI_VDEV_TYPE_MONITOR &&
7763 if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
7764 ath11k_mac_11d_scan_start(ar, arvif->vdev_id);
7792 struct ath11k_vif *arvif;
7796 list_for_each_entry(arvif, &ar->arvifs, list) {
7798 param, arvif->vdev_id, value);
7800 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
7804 param, arvif->vdev_id, ret);
8015 ath11k_mac_set_fixed_rate_gi_ltf(struct ath11k_vif *arvif, u8 he_gi, u8 he_ltf)
8017 struct ath11k *ar = arvif->ar;
8024 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
8035 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
8047 ath11k_mac_set_auto_rate_gi_ltf(struct ath11k_vif *arvif, u16 he_gi, u8 he_ltf)
8049 struct ath11k *ar = arvif->ar;
8088 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
8101 static int ath11k_mac_set_rate_params(struct ath11k_vif *arvif,
8105 struct ath11k *ar = arvif->ar;
8113 arvif->vdev_id, rate, nss, sgi, ldpc, he_gi,
8116 if (!arvif->vif->bss_conf.he_support) {
8118 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
8128 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
8137 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
8145 if (arvif->vif->bss_conf.he_support) {
8147 ret = ath11k_mac_set_fixed_rate_gi_ltf(arvif, he_gi,
8155 ret = ath11k_mac_set_auto_rate_gi_ltf(arvif, he_gi,
8165 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
8230 struct ath11k_vif *arvif = data;
8232 struct ath11k *ar = arvif->ar;
8244 struct ath11k_vif *arvif = data;
8245 struct ath11k *ar = arvif->ar;
8249 arvif->vdev_id,
8315 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
8318 struct ath11k *ar = arvif->ar;
8364 arvif->vdev_id, ret);
8369 arvif);
8375 arvif->bitrate_mask = *mask;
8378 arvif);
8440 arvif);
8442 arvif->bitrate_mask = *mask;
8445 arvif);
8452 ret = ath11k_mac_set_rate_params(arvif, rate, nss, sgi, ldpc, he_gi,
8456 arvif->vdev_id, ret);
8471 struct ath11k_vif *arvif;
8508 list_for_each_entry(arvif, &ar->arvifs, list) {
8509 if (arvif->is_up && arvif->vdev_type == WMI_VDEV_TYPE_STA)
8510 ieee80211_hw_restart_disconnect(arvif->vif);
8606 struct ath11k *ar = arsta->arvif->ar;
8636 struct ath11k *ar = arsta->arvif->ar;
8665 arsta->arvif->vdev_type == WMI_VDEV_TYPE_STA &&
8674 arsta->arvif->vdev_type == WMI_VDEV_TYPE_STA &&
8722 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
8730 offload = &arvif->arp_ns_offload;
8796 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
8797 struct ath11k_rekey_data *rekey_data = &arvif->rekey_data;
8800 arvif->vdev_id);
8812 arvif->rekey_data.enable_offload = true;
8912 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
8927 ar->scan.vdev_id = arvif->vdev_id;
8955 arg.vdev_id = arvif->vdev_id;
9814 int ath11k_mac_vif_set_keepalive(struct ath11k_vif *arvif,
9818 struct ath11k *ar = arvif->ar;
9824 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
9830 arg.vdev_id = arvif->vdev_id;
9838 arvif->vdev_id, ret);