Lines Matching defs:arvif

526 	struct ath12k_vif *arvif = (void *)vif->drv_priv;
528 if (arvif->vdev_id == arvif_iter->vdev_id)
529 arvif_iter->arvif = arvif;
544 if (!arvif_iter.arvif) {
549 return arvif_iter.arvif;
557 struct ath12k_vif *arvif;
562 arvif = ath12k_mac_get_arvif(pdev->ar, vdev_id);
563 if (arvif)
564 return arvif;
631 struct ath12k_vif *arvif;
637 list_for_each_entry(arvif, &ar->arvifs, list) {
638 if (arvif->txpower <= 0)
642 txpower = arvif->txpower;
644 txpower = min(txpower, arvif->txpower);
685 static int ath12k_recalc_rtscts_prot(struct ath12k_vif *arvif)
687 struct ath12k *ar = arvif->ar;
701 if (arvif->num_legacy_stations > 0)
707 if (arvif->rtscts_prot_mode == rts_cts)
710 arvif->rtscts_prot_mode = rts_cts;
713 arvif->vdev_id, rts_cts);
715 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
719 arvif->vdev_id, ret);
724 static int ath12k_mac_set_kickout(struct ath12k_vif *arvif)
726 struct ath12k *ar = arvif->ar;
735 arvif->vdev_id, ret);
740 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param,
744 arvif->vdev_id, ret);
749 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param,
753 arvif->vdev_id, ret);
758 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param,
762 arvif->vdev_id, ret);
1120 static int ath12k_mac_setup_bcn_tmpl(struct ath12k_vif *arvif)
1122 struct ath12k *ar = arvif->ar;
1125 struct ieee80211_vif *vif = arvif->vif;
1132 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1145 arvif->rsnie_present = true;
1150 arvif->wpaie_present = true;
1152 ret = ath12k_wmi_bcn_tmpl(ar, arvif->vdev_id, &offs, bcn);
1163 static void ath12k_control_beaconing(struct ath12k_vif *arvif,
1166 struct ath12k *ar = arvif->ar;
1169 lockdep_assert_held(&arvif->ar->conf_mutex);
1172 ret = ath12k_wmi_vdev_down(ar, arvif->vdev_id);
1175 arvif->vdev_id, ret);
1177 arvif->is_up = false;
1182 ret = ath12k_mac_setup_bcn_tmpl(arvif);
1189 arvif->aid = 0;
1191 ether_addr_copy(arvif->bssid, info->bssid);
1193 ret = ath12k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1194 arvif->bssid);
1197 arvif->vdev_id, ret);
1201 arvif->is_up = true;
1203 ath12k_dbg(ar->ab, ATH12K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
1211 struct ath12k_vif *arvif = (void *)vif->drv_priv;
1222 arg->vdev_id = arvif->vdev_id;
1239 struct ath12k_vif *arvif = (struct ath12k_vif *)vif->drv_priv;
1251 if (arvif->rsnie_present || arvif->wpaie_present) {
1253 if (arvif->wpaie_present)
1297 struct ath12k_vif *arvif = (void *)vif->drv_priv;
1315 ratemask &= arvif->bitrate_mask.control[band].legacy;
1360 struct ath12k_vif *arvif = (void *)vif->drv_priv;
1377 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
1401 if (arvif->bitrate_mask.control[band].gi != NL80211_TXRATE_FORCE_LGI) {
1521 struct ath12k_vif *arvif = (void *)vif->drv_priv;
1537 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
1796 struct ath12k_vif *arvif = (void *)vif->drv_priv;
1798 switch (arvif->vdev_type) {
1828 struct ath12k_vif *arvif,
1838 arg.vdev_id = arvif->vdev_id;
1890 arg.param, arvif->vdev_id, ret);
1994 struct ath12k_vif *arvif = (void *)vif->drv_priv;
2005 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2006 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2143 struct ath12k_vif *arvif = (struct ath12k_vif *)vif->drv_priv;
2214 arg->punct_bitmap = ~arvif->punct_bitmap;
2244 static int ath12k_setup_peer_smps(struct ath12k *ar, struct ath12k_vif *arvif,
2259 return ath12k_wmi_set_peer_param(ar, addr, arvif->vdev_id,
2269 struct ath12k_vif *arvif = (void *)vif->drv_priv;
2279 arvif->vdev_id, arvif->bssid, arvif->aid);
2286 bss_conf->bssid, arvif->vdev_id);
2298 bss_conf->bssid, arvif->vdev_id, ret);
2304 bss_conf->bssid, arvif->vdev_id);
2308 ret = ath12k_setup_peer_smps(ar, arvif, bss_conf->bssid,
2312 arvif->vdev_id, ret);
2316 WARN_ON(arvif->is_up);
2318 arvif->aid = vif->cfg.aid;
2319 ether_addr_copy(arvif->bssid, bss_conf->bssid);
2321 ret = ath12k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
2324 arvif->vdev_id, ret);
2328 arvif->is_up = true;
2332 arvif->vdev_id, bss_conf->bssid, vif->cfg.aid);
2336 peer = ath12k_peer_find(ar->ab, arvif->vdev_id, arvif->bssid);
2344 ret = ath12k_wmi_set_peer_param(ar, arvif->bssid,
2345 arvif->vdev_id,
2352 ret = ath12k_wmi_send_obss_spr_cmd(ar, arvif->vdev_id,
2356 arvif->vdev_id, ret);
2363 struct ath12k_vif *arvif = (void *)vif->drv_priv;
2369 arvif->vdev_id, arvif->bssid);
2371 ret = ath12k_wmi_vdev_down(ar, arvif->vdev_id);
2374 arvif->vdev_id, ret);
2376 arvif->is_up = false;
2410 struct ath12k_vif *arvif = (void *)vif->drv_priv;
2431 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, vdev_param,
2437 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, vdev_param,
2443 static int ath12k_mac_fils_discovery(struct ath12k_vif *arvif,
2446 struct ath12k *ar = arvif->ar;
2455 tmpl = ieee80211_get_fils_discovery_tmpl(ar->hw, arvif->vif);
2457 ret = ath12k_wmi_fils_discovery_tmpl(ar, arvif->vdev_id,
2464 arvif->vif);
2466 ret = ath12k_wmi_probe_resp_tmpl(ar, arvif->vdev_id,
2469 return ath12k_wmi_fils_discovery(ar, arvif->vdev_id, 0, false);
2475 arvif->vdev_id, (unsol_bcast_probe_resp_enabled ?
2483 ret = ath12k_wmi_fils_discovery(ar, arvif->vdev_id, interval,
2495 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
2511 arvif->beacon_interval = info->beacon_int;
2514 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
2516 arvif->beacon_interval);
2519 arvif->vdev_id);
2523 arvif->beacon_interval, arvif->vdev_id);
2533 arvif->vdev_id);
2537 arvif->vdev_id);
2539 ret = ath12k_mac_setup_bcn_tmpl(arvif);
2546 arvif->dtim_period = info->dtim_period;
2549 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
2551 arvif->dtim_period);
2555 arvif->vdev_id, ret);
2559 arvif->dtim_period, arvif->vdev_id);
2564 arvif->u.ap.ssid_len = vif->cfg.ssid_len;
2566 memcpy(arvif->u.ap.ssid, vif->cfg.ssid, vif->cfg.ssid_len);
2567 arvif->u.ap.hidden_ssid = info->hidden_ssid;
2571 ether_addr_copy(arvif->bssid, info->bssid);
2574 ath12k_control_beaconing(arvif, info);
2576 if (arvif->is_up && vif->bss_conf.he_support &&
2579 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
2585 arvif->vdev_id);
2589 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
2593 param_value, arvif->vdev_id);
2597 param_value, arvif->vdev_id, ret);
2607 if (arvif->is_started) {
2608 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
2612 arvif->vdev_id);
2615 cts_prot, arvif->vdev_id);
2631 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
2635 arvif->vdev_id);
2639 slottime, arvif->vdev_id);
2651 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
2655 arvif->vdev_id);
2659 preamble, arvif->vdev_id);
2671 arvif->vdev_id, info->txpower);
2673 arvif->txpower = info->txpower;
2678 !ath12k_mac_vif_chan(arvif->vif, &def)) {
2702 arvif->vdev_id, rate);
2705 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
2710 arvif->vdev_id, ret);
2713 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
2718 arvif->vdev_id, ret);
2722 !ath12k_mac_vif_chan(arvif->vif, &def))
2733 ath12k_wmi_send_obss_spr_cmd(ar, arvif->vdev_id,
2739 arvif->vdev_id,
2745 arvif->vdev_id, ret);
2748 arvif->vdev_id,
2752 arvif->vdev_id, ret);
2754 arvif->vdev_id,
2760 arvif->vdev_id, ret);
2766 ath12k_mac_fils_discovery(arvif, info);
2769 arvif->punct_bitmap = info->eht_puncturing;
2938 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
2953 ar->scan.vdev_id = arvif->vdev_id;
2968 arg.vdev_id = arvif->vdev_id;
3037 static int ath12k_install_key(struct ath12k_vif *arvif,
3043 struct ath12k *ar = arvif->ar;
3045 .vdev_id = arvif->vdev_id,
3053 lockdep_assert_held(&arvif->ar->conf_mutex);
3096 ret = ath12k_wmi_vdev_install_key(arvif->ar, &arg);
3104 if (ether_addr_equal(macaddr, arvif->vif->addr))
3105 arvif->key_cipher = key->cipher;
3110 static int ath12k_clear_peer_keys(struct ath12k_vif *arvif,
3113 struct ath12k *ar = arvif->ar;
3124 peer = ath12k_peer_find(ab, arvif->vdev_id, addr);
3135 ret = ath12k_install_key(arvif, peer->keys[i],
3158 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
3182 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
3193 peer = ath12k_peer_find(ab, arvif->vdev_id, peer_addr);
3215 ret = ath12k_install_key(arvif, key, cmd, peer_addr, flags);
3221 ret = ath12k_dp_rx_peer_pn_replay_config(arvif, peer_addr, cmd, key);
3228 peer = ath12k_peer_find(ab, arvif->vdev_id, peer_addr);
3290 ath12k_mac_set_peer_vht_fixed_rate(struct ath12k_vif *arvif,
3295 struct ath12k *ar = arvif->ar;
3324 arvif->vdev_id,
3340 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
3354 mask = &arvif->bitrate_mask;
3361 sta->addr, arvif->vdev_id, ret);
3367 sta->addr, arvif->vdev_id);
3379 ret = ath12k_mac_set_peer_vht_fixed_rate(arvif, sta, mask,
3391 ret = ath12k_setup_peer_smps(ar, arvif, sta->addr,
3395 arvif->vdev_id, ret);
3400 arvif->num_legacy_stations++;
3401 ret = ath12k_recalc_rtscts_prot(arvif);
3407 ret = ath12k_peer_assoc_qos_ap(ar, arvif, sta);
3410 sta->addr, arvif->vdev_id, ret);
3422 struct ath12k_vif *arvif = (void *)vif->drv_priv;
3428 arvif->num_legacy_stations--;
3429 ret = ath12k_recalc_rtscts_prot(arvif);
3434 ret = ath12k_clear_peer_keys(arvif, sta->addr);
3437 arvif->vdev_id, ret);
3446 struct ath12k_vif *arvif;
3461 arvif = arsta->arvif;
3462 ar = arvif->ar;
3464 if (WARN_ON(ath12k_mac_vif_chan(arvif->vif, &def)))
3468 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
3469 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
3490 ath12k_peer_assoc_h_phymode(ar, arvif->vif, sta, &peer_arg);
3502 arvif->vdev_id, WMI_PEER_PHYMODE,
3510 arvif->vdev_id, WMI_PEER_CHWIDTH,
3523 arvif->vdev_id, WMI_PEER_CHWIDTH,
3531 arvif->vdev_id, WMI_PEER_PHYMODE,
3543 err = ath12k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
3554 err = ath12k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
3562 mask = &arvif->bitrate_mask;
3578 ath12k_mac_set_peer_vht_fixed_rate(arvif, sta, mask,
3585 ath12k_peer_assoc_prepare(ar, arvif->vif, sta,
3591 sta->addr, arvif->vdev_id, err);
3595 sta->addr, arvif->vdev_id);
3602 static int ath12k_mac_inc_num_stations(struct ath12k_vif *arvif,
3605 struct ath12k *ar = arvif->ar;
3609 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
3620 static void ath12k_mac_dec_num_stations(struct ath12k_vif *arvif,
3623 struct ath12k *ar = arvif->ar;
3627 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
3638 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
3645 ret = ath12k_mac_inc_num_stations(arvif, sta);
3658 peer_param.vdev_id = arvif->vdev_id;
3662 ret = ath12k_peer_create(ar, arvif, sta, &peer_param);
3665 sta->addr, arvif->vdev_id);
3670 sta->addr, arvif->vdev_id);
3674 arvif->vdev_id,
3683 ret = ath12k_dp_peer_setup(ar, arvif->vdev_id, sta->addr);
3686 sta->addr, arvif->vdev_id, ret);
3691 !arvif->is_started &&
3692 arvif->vdev_type != WMI_VDEV_TYPE_AP) {
3703 ath12k_peer_delete(ar, arvif->vdev_id, sta->addr);
3705 ath12k_mac_dec_num_stations(arvif, sta);
3745 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
3760 arsta->arvif = arvif;
3766 sta->addr, arvif->vdev_id);
3769 ath12k_dp_peer_cleanup(ar, arvif->vdev_id, sta->addr);
3771 ret = ath12k_peer_delete(ar, arvif->vdev_id, sta->addr);
3774 sta->addr, arvif->vdev_id);
3777 sta->addr, arvif->vdev_id);
3779 ath12k_mac_dec_num_stations(arvif, sta);
3781 peer = ath12k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
3784 vif->addr, arvif->vdev_id);
3814 peer = ath12k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
3820 if (vif->type == NL80211_IFTYPE_STATION && arvif->is_up) {
3822 arvif->vdev_id,
3827 sta->addr, arvif->vdev_id, ret);
3833 peer = ath12k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
3858 struct ath12k_vif *arvif = (void *)vif->drv_priv;
3875 ret = ath12k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
3895 struct ath12k_vif *arvif = (void *)vif->drv_priv;
3901 peer = ath12k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
3905 sta->addr, arvif->vdev_id);
3961 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
3965 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
3988 arvif->u.sta.uapsd |= value;
3990 arvif->u.sta.uapsd &= ~value;
3992 ret = ath12k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3994 arvif->u.sta.uapsd);
4000 if (arvif->u.sta.uapsd)
4005 ret = ath12k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
4021 struct ath12k_vif *arvif = (void *)vif->drv_priv;
4029 p = &arvif->wmm_params.ac_vo;
4032 p = &arvif->wmm_params.ac_vi;
4035 p = &arvif->wmm_params.ac_be;
4038 p = &arvif->wmm_params.ac_bk;
4052 ret = ath12k_wmi_send_wmm_update_cmd(ar, arvif->vdev_id,
4053 &arvif->wmm_params);
4135 static int ath12k_mac_set_txbf_conf(struct ath12k_vif *arvif)
4138 struct ath12k *ar = arvif->ar;
4166 arvif->vdev_type == WMI_VDEV_TYPE_AP)
4174 arvif->vdev_type == WMI_VDEV_TYPE_STA)
4178 return ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
4777 static int ath12k_mac_mgmt_tx_wmi(struct ath12k *ar, struct ath12k_vif *arvif,
4814 ret = ath12k_wmi_mgmt_send(ar, arvif->vdev_id, buf_id, skb);
4845 struct ath12k_vif *arvif;
4857 arvif = ath12k_vif_to_arvif(skb_cb->vif);
4858 if (ar->allocated_vdev_map & (1LL << arvif->vdev_id) &&
4859 arvif->is_started) {
4860 ret = ath12k_mac_mgmt_tx_wmi(ar, arvif, skb);
4863 arvif->vdev_id, ret);
4869 arvif->vdev_id,
4870 arvif->is_started);
4916 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
4944 ret = ath12k_dp_tx(ar, arvif, skb);
5147 ath12k_mac_get_vdev_stats_id(struct ath12k_vif *arvif)
5149 struct ath12k_base *ab = arvif->ar->ab;
5165 arvif->vdev_stats_id = vdev_stats_id;
5169 static void ath12k_mac_setup_vdev_create_arg(struct ath12k_vif *arvif,
5172 struct ath12k *ar = arvif->ar;
5175 arg->if_id = arvif->vdev_id;
5176 arg->type = arvif->vdev_type;
5177 arg->subtype = arvif->vdev_subtype;
5194 arg->if_stats_id = ath12k_mac_get_vdev_stats_id(arvif);
5232 struct ath12k_vif *arvif)
5239 param_value = ath12k_mac_prepare_he_mode(ar->pdev, arvif->vif->type);
5240 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
5244 arvif->vdev_id, ret, param_value);
5252 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
5256 arvif->vdev_id, ret);
5267 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
5278 arvif->tx_encap_type = ATH12K_HW_TXRX_ETHERNET;
5280 arvif->tx_encap_type = ATH12K_HW_TXRX_RAW;
5282 arvif->tx_encap_type = ATH12K_HW_TXRX_NATIVE_WIFI;
5284 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
5285 param_id, arvif->tx_encap_type);
5288 arvif->vdev_id, ret);
5300 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
5304 arvif->vdev_id, ret);
5314 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
5341 memset(arvif, 0, sizeof(*arvif));
5343 arvif->ar = ar;
5344 arvif->vif = vif;
5346 INIT_LIST_HEAD(&arvif->list);
5352 for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
5353 arvif->bitrate_mask.control[i].legacy = 0xffffffff;
5354 memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff,
5355 sizeof(arvif->bitrate_mask.control[i].ht_mcs));
5356 memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff,
5357 sizeof(arvif->bitrate_mask.control[i].vht_mcs));
5362 arvif->vdev_id = bit;
5363 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
5368 arvif->vdev_type = WMI_VDEV_TYPE_STA;
5371 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_MESH_11S;
5374 arvif->vdev_type = WMI_VDEV_TYPE_AP;
5377 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
5386 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
5389 vif->cab_queue = arvif->vdev_id % (ATH12K_HW_MAX_QUEUES - 1);
5393 ath12k_mac_setup_vdev_create_arg(arvif, &vdev_arg);
5398 arvif->vdev_id, ret);
5404 vif->addr, arvif->vdev_id);
5405 ar->allocated_vdev_map |= 1LL << arvif->vdev_id;
5406 ab->free_vdev_map &= ~(1LL << arvif->vdev_id);
5409 list_add(&arvif->list, &ar->arvifs);
5415 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
5419 arvif->vdev_id, ar->cfg_tx_chainmask, nss, ret);
5423 switch (arvif->vdev_type) {
5425 peer_param.vdev_id = arvif->vdev_id;
5428 ret = ath12k_peer_create(ar, arvif, NULL, &peer_param);
5431 arvif->vdev_id, ret);
5435 ret = ath12k_mac_set_kickout(arvif);
5438 arvif->vdev_id, ret);
5445 ret = ath12k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5449 arvif->vdev_id, ret);
5455 ret = ath12k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5459 arvif->vdev_id, ret);
5465 ret = ath12k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5469 arvif->vdev_id, ret);
5473 ret = ath12k_wmi_pdev_set_ps_mode(ar, arvif->vdev_id, false);
5476 arvif->vdev_id, ret);
5484 arvif->txpower = vif->bss_conf.txpower;
5491 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
5495 arvif->vdev_id, ret);
5498 ath12k_dp_vdev_tx_attach(ar, arvif);
5508 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
5512 arvif->vdev_id);
5515 arvif->vdev_id, vif->addr);
5519 ret = ath12k_wait_for_peer_delete_done(ar, arvif->vdev_id,
5528 ath12k_wmi_vdev_delete(ar, arvif->vdev_id);
5530 ar->allocated_vdev_map &= ~(1LL << arvif->vdev_id);
5531 ab->free_vdev_map |= 1LL << arvif->vdev_id;
5532 ab->free_vdev_stats_id_map &= ~(1LL << arvif->vdev_stats_id);
5534 list_del(&arvif->list);
5572 struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
5580 arvif->vdev_id);
5582 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
5583 ret = ath12k_peer_delete(ar, arvif->vdev_id, vif->addr);
5586 arvif->vdev_id, ret);
5591 ret = ath12k_wmi_vdev_delete(ar, arvif->vdev_id);
5594 arvif->vdev_id, ret);
5605 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
5612 ab->free_vdev_map |= 1LL << (arvif->vdev_id);
5613 ar->allocated_vdev_map &= ~(1LL << arvif->vdev_id);
5614 ab->free_vdev_stats_id_map &= ~(1LL << arvif->vdev_stats_id);
5618 vif->addr, arvif->vdev_id);
5622 list_del(&arvif->list);
5625 ath12k_peer_cleanup(ar, arvif->vdev_id);
5631 ath12k_dp_tx_put_bank_profile(&ab->dp, arvif->bank_id);
5792 ath12k_mac_vdev_start_restart(struct ath12k_vif *arvif,
5796 struct ath12k *ar = arvif->ar;
5799 int he_support = arvif->vif->bss_conf.he_support;
5806 arg.vdev_id = arvif->vdev_id;
5807 arg.dtim_period = arvif->dtim_period;
5808 arg.bcn_intval = arvif->beacon_interval;
5809 arg.punct_bitmap = ~arvif->punct_bitmap;
5824 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
5825 arg.ssid = arvif->u.ap.ssid;
5826 arg.ssid_len = arvif->u.ap.ssid_len;
5827 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
5840 ret = ath12k_set_he_mu_sounding_mode(ar, arvif);
5872 arvif->vif->addr, arvif->vdev_id);
5881 if (arvif->vdev_type == WMI_VDEV_TYPE_AP &&
5890 ret = ath12k_mac_set_txbf_conf(arvif);
5893 arvif->vdev_id, ret);
5898 static int ath12k_mac_vdev_stop(struct ath12k_vif *arvif)
5900 struct ath12k *ar = arvif->ar;
5907 ret = ath12k_wmi_vdev_stop(ar, arvif->vdev_id);
5910 arvif->vdev_id, ret);
5917 arvif->vdev_id, ret);
5925 arvif->vif->addr, arvif->vdev_id);
5930 arvif->vdev_id);
5938 static int ath12k_mac_vdev_start(struct ath12k_vif *arvif,
5941 return ath12k_mac_vdev_start_restart(arvif, chandef, false);
5944 static int ath12k_mac_vdev_restart(struct ath12k_vif *arvif,
5947 return ath12k_mac_vdev_start_restart(arvif, chandef, true);
5995 struct ath12k_vif *arvif;
6003 arvif = (void *)vifs[i].vif->drv_priv;
6010 arvif->vdev_id,
6016 if (WARN_ON(!arvif->is_started))
6019 if (WARN_ON(!arvif->is_up))
6022 ret = ath12k_wmi_vdev_down(ar, arvif->vdev_id);
6025 arvif->vdev_id, ret);
6037 arvif = (void *)vifs[i].vif->drv_priv;
6039 if (WARN_ON(!arvif->is_started))
6042 if (WARN_ON(!arvif->is_up))
6045 ret = ath12k_mac_vdev_restart(arvif, &vifs[i].new_ctx->def);
6048 arvif->vdev_id, ret);
6052 ret = ath12k_mac_setup_bcn_tmpl(arvif);
6057 ret = ath12k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
6058 arvif->bssid);
6061 arvif->vdev_id, ret);
6135 struct ath12k_vif *arvif = (void *)vif->drv_priv;
6138 if (WARN_ON(arvif->is_started))
6141 ret = ath12k_mac_vdev_start(arvif, &arvif->chanctx.def);
6144 arvif->vdev_id, vif->addr,
6145 arvif->chanctx.def.chan->center_freq, ret);
6149 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
6150 ret = ath12k_monitor_vdev_up(ar, arvif->vdev_id);
6157 arvif->is_started = true;
6171 struct ath12k_vif *arvif = (void *)vif->drv_priv;
6179 ctx, arvif->vdev_id);
6181 arvif->punct_bitmap = link_conf->eht_puncturing;
6185 arvif->vdev_type != WMI_VDEV_TYPE_AP &&
6186 arvif->vdev_type != WMI_VDEV_TYPE_MONITOR &&
6187 !ath12k_peer_exist_by_vdev_id(ab, arvif->vdev_id)) {
6188 memcpy(&arvif->chanctx, ctx, sizeof(*ctx));
6193 if (WARN_ON(arvif->is_started)) {
6199 arvif->vdev_type != WMI_VDEV_TYPE_AP &&
6200 arvif->vdev_type != WMI_VDEV_TYPE_MONITOR) {
6201 param.vdev_id = arvif->vdev_id;
6205 ret = ath12k_peer_create(ar, arvif, NULL, &param);
6213 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
6217 arvif->is_started = true;
6221 ret = ath12k_mac_vdev_start(arvif, &ctx->def);
6224 arvif->vdev_id, vif->addr,
6229 if (arvif->vdev_type != WMI_VDEV_TYPE_MONITOR && ar->monitor_vdev_created)
6232 arvif->is_started = true;
6250 struct ath12k_vif *arvif = (void *)vif->drv_priv;
6257 ctx, arvif->vdev_id);
6259 WARN_ON(!arvif->is_started);
6262 arvif->vdev_type == WMI_VDEV_TYPE_MONITOR &&
6264 ath12k_peer_delete(ar, arvif->vdev_id, ar->mac_addr);
6266 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
6273 arvif->is_started = false;
6276 ret = ath12k_mac_vdev_stop(arvif);
6279 arvif->vdev_id, ret);
6281 arvif->is_started = false;
6284 arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
6285 ath12k_wmi_vdev_down(ar, arvif->vdev_id);
6287 if (arvif->vdev_type != WMI_VDEV_TYPE_MONITOR &&
6317 struct ath12k_vif *arvif;
6321 list_for_each_entry(arvif, &ar->arvifs, list) {
6323 param, arvif->vdev_id, value);
6325 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
6329 param, arvif->vdev_id, ret);
6501 static int ath12k_mac_set_fixed_rate_params(struct ath12k_vif *arvif,
6504 struct ath12k *ar = arvif->ar;
6511 arvif->vdev_id, rate, nss, sgi);
6514 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
6523 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
6532 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
6541 ret = ath12k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
6580 struct ath12k_vif *arvif = data;
6582 struct ath12k *ar = arvif->ar;
6594 struct ath12k_vif *arvif = data;
6595 struct ath12k *ar = arvif->ar;
6599 arvif->vdev_id,
6613 struct ath12k_vif *arvif = (void *)vif->drv_priv;
6615 struct ath12k *ar = arvif->ar;
6652 arvif->vdev_id, ret);
6657 arvif);
6703 arvif);
6707 arvif->bitrate_mask = *mask;
6710 arvif);
6717 ret = ath12k_mac_set_fixed_rate_params(arvif, rate, nss, sgi, ldpc);
6720 arvif->vdev_id, ret);
6734 struct ath12k_vif *arvif;
6764 list_for_each_entry(arvif, &ar->arvifs, list) {
6767 arvif->key_cipher,
6768 arvif->is_up,
6769 arvif->vdev_type);
6775 if (arvif->is_up &&
6776 arvif->vdev_type == WMI_VDEV_TYPE_STA &&
6777 arvif->vdev_subtype == WMI_VDEV_SUBTYPE_NONE) {
6778 ieee80211_hw_restart_disconnect(arvif->vif);