Lines Matching refs:ar

575 struct ath11k_vif *ath11k_mac_get_arvif(struct ath11k *ar, u32 vdev_id)  in ath11k_mac_get_arvif()  argument
584 ieee80211_iterate_active_interfaces_atomic(ar->hw, in ath11k_mac_get_arvif()
589 ath11k_warn(ar->ab, "No VIF found for vdev %d\n", vdev_id); in ath11k_mac_get_arvif()
605 if (pdev && pdev->ar && in ath11k_mac_get_arvif_by_vdev_id()
606 (pdev->ar->allocated_vdev_map & (1LL << vdev_id))) { in ath11k_mac_get_arvif_by_vdev_id()
607 arvif = ath11k_mac_get_arvif(pdev->ar, vdev_id); in ath11k_mac_get_arvif_by_vdev_id()
623 if (pdev && pdev->ar) { in ath11k_mac_get_ar_by_vdev_id()
624 if (pdev->ar->allocated_vdev_map & (1LL << vdev_id)) in ath11k_mac_get_ar_by_vdev_id()
625 return pdev->ar; in ath11k_mac_get_ar_by_vdev_id()
639 return pdev ? pdev->ar : NULL; in ath11k_mac_get_ar_by_pdev_id()
652 return (pdev->ar ? pdev->ar : NULL); in ath11k_mac_get_ar_by_pdev_id()
660 struct ath11k *ar; in ath11k_mac_get_vif_up() local
667 ar = pdev->ar; in ath11k_mac_get_vif_up()
668 list_for_each_entry(arvif, &ar->arvifs, list) { in ath11k_mac_get_vif_up()
686 struct ath11k *ar = arvif->ar; in ath11k_mac_get_target_pdev_id_from_vif() local
687 struct ath11k_base *ab = ar->ab; in ath11k_mac_get_target_pdev_id_from_vif()
707 u8 ath11k_mac_get_target_pdev_id(struct ath11k *ar) in ath11k_mac_get_target_pdev_id() argument
711 arvif = ath11k_mac_get_vif_up(ar->ab); in ath11k_mac_get_target_pdev_id()
716 return ar->ab->target_pdev_ids[0].pdev_id; in ath11k_mac_get_target_pdev_id()
719 static void ath11k_pdev_caps_update(struct ath11k *ar) in ath11k_pdev_caps_update() argument
721 struct ath11k_base *ab = ar->ab; in ath11k_pdev_caps_update()
723 ar->max_tx_power = ab->target_caps.hw_max_tx_power; in ath11k_pdev_caps_update()
730 ar->min_tx_power = 0; in ath11k_pdev_caps_update()
732 ar->txpower_limit_2g = ar->max_tx_power; in ath11k_pdev_caps_update()
733 ar->txpower_limit_5g = ar->max_tx_power; in ath11k_pdev_caps_update()
734 ar->txpower_scale = WMI_HOST_TP_SCALE_MAX; in ath11k_pdev_caps_update()
737 static int ath11k_mac_txpower_recalc(struct ath11k *ar) in ath11k_mac_txpower_recalc() argument
739 struct ath11k_pdev *pdev = ar->pdev; in ath11k_mac_txpower_recalc()
744 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_txpower_recalc()
746 list_for_each_entry(arvif, &ar->arvifs, list) { in ath11k_mac_txpower_recalc()
760 txpower = min_t(u32, max_t(u32, ar->min_tx_power, txpower), in ath11k_mac_txpower_recalc()
761 ar->max_tx_power) * 2; in ath11k_mac_txpower_recalc()
763 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "txpower to set in hw %d\n", in ath11k_mac_txpower_recalc()
767 ar->txpower_limit_2g != txpower) { in ath11k_mac_txpower_recalc()
769 ret = ath11k_wmi_pdev_set_param(ar, param, in ath11k_mac_txpower_recalc()
770 txpower, ar->pdev->pdev_id); in ath11k_mac_txpower_recalc()
773 ar->txpower_limit_2g = txpower; in ath11k_mac_txpower_recalc()
777 ar->txpower_limit_5g != txpower) { in ath11k_mac_txpower_recalc()
779 ret = ath11k_wmi_pdev_set_param(ar, param, in ath11k_mac_txpower_recalc()
780 txpower, ar->pdev->pdev_id); in ath11k_mac_txpower_recalc()
783 ar->txpower_limit_5g = txpower; in ath11k_mac_txpower_recalc()
789 ath11k_warn(ar->ab, "failed to recalc txpower limit %d using pdev param %d: %d\n", in ath11k_mac_txpower_recalc()
796 struct ath11k *ar = arvif->ar; in ath11k_recalc_rtscts_prot() local
800 lockdep_assert_held(&ar->conf_mutex); in ath11k_recalc_rtscts_prot()
821 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev %d recalc rts/cts prot %d\n", in ath11k_recalc_rtscts_prot()
824 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_recalc_rtscts_prot()
827 ath11k_warn(ar->ab, "failed to recalculate rts/cts prot for vdev %d: %d\n", in ath11k_recalc_rtscts_prot()
835 struct ath11k *ar = arvif->ar; in ath11k_mac_set_kickout() local
839 ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_STA_KICKOUT_TH, in ath11k_mac_set_kickout()
841 ar->pdev->pdev_id); in ath11k_mac_set_kickout()
843 ath11k_warn(ar->ab, "failed to set kickout threshold on vdev %i: %d\n", in ath11k_mac_set_kickout()
849 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, in ath11k_mac_set_kickout()
852 ath11k_warn(ar->ab, "failed to set keepalive minimum idle time on vdev %i: %d\n", in ath11k_mac_set_kickout()
858 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, in ath11k_mac_set_kickout()
861 ath11k_warn(ar->ab, "failed to set keepalive maximum idle time on vdev %i: %d\n", in ath11k_mac_set_kickout()
867 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, in ath11k_mac_set_kickout()
870 ath11k_warn(ar->ab, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n", in ath11k_mac_set_kickout()
878 void ath11k_mac_peer_cleanup_all(struct ath11k *ar) in ath11k_mac_peer_cleanup_all() argument
881 struct ath11k_base *ab = ar->ab; in ath11k_mac_peer_cleanup_all()
883 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_peer_cleanup_all()
888 ath11k_peer_rx_tid_cleanup(ar, peer); in ath11k_mac_peer_cleanup_all()
896 ar->num_peers = 0; in ath11k_mac_peer_cleanup_all()
897 ar->num_stations = 0; in ath11k_mac_peer_cleanup_all()
900 static inline int ath11k_mac_vdev_setup_sync(struct ath11k *ar) in ath11k_mac_vdev_setup_sync() argument
902 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_vdev_setup_sync()
904 if (test_bit(ATH11K_FLAG_CRASH_FLUSH, &ar->ab->dev_flags)) in ath11k_mac_vdev_setup_sync()
907 if (!wait_for_completion_timeout(&ar->vdev_setup_done, in ath11k_mac_vdev_setup_sync()
911 return ar->last_wmi_vdev_start_status ? -EINVAL : 0; in ath11k_mac_vdev_setup_sync()
924 static int ath11k_mac_monitor_vdev_start(struct ath11k *ar, int vdev_id, in ath11k_mac_monitor_vdev_start() argument
931 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_monitor_vdev_start()
948 arg.pref_tx_streams = ar->num_tx_chains; in ath11k_mac_monitor_vdev_start()
949 arg.pref_rx_streams = ar->num_rx_chains; in ath11k_mac_monitor_vdev_start()
953 reinit_completion(&ar->vdev_setup_done); in ath11k_mac_monitor_vdev_start()
954 reinit_completion(&ar->vdev_delete_done); in ath11k_mac_monitor_vdev_start()
956 ret = ath11k_wmi_vdev_start(ar, &arg, false); in ath11k_mac_monitor_vdev_start()
958 ath11k_warn(ar->ab, "failed to request monitor vdev %i start: %d\n", in ath11k_mac_monitor_vdev_start()
963 ret = ath11k_mac_vdev_setup_sync(ar); in ath11k_mac_monitor_vdev_start()
965 ath11k_warn(ar->ab, "failed to synchronize setup for monitor vdev %i start: %d\n", in ath11k_mac_monitor_vdev_start()
970 ret = ath11k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr, NULL, 0, 0); in ath11k_mac_monitor_vdev_start()
972 ath11k_warn(ar->ab, "failed to put up monitor vdev %i: %d\n", in ath11k_mac_monitor_vdev_start()
977 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "monitor vdev %i started\n", in ath11k_mac_monitor_vdev_start()
983 reinit_completion(&ar->vdev_setup_done); in ath11k_mac_monitor_vdev_start()
985 ret = ath11k_wmi_vdev_stop(ar, vdev_id); in ath11k_mac_monitor_vdev_start()
987 ath11k_warn(ar->ab, "failed to stop monitor vdev %i after start failure: %d\n", in ath11k_mac_monitor_vdev_start()
992 ret = ath11k_mac_vdev_setup_sync(ar); in ath11k_mac_monitor_vdev_start()
994 ath11k_warn(ar->ab, "failed to synchronize setup for vdev %i stop: %d\n", in ath11k_mac_monitor_vdev_start()
1002 static int ath11k_mac_monitor_vdev_stop(struct ath11k *ar) in ath11k_mac_monitor_vdev_stop() argument
1006 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_monitor_vdev_stop()
1008 reinit_completion(&ar->vdev_setup_done); in ath11k_mac_monitor_vdev_stop()
1010 ret = ath11k_wmi_vdev_stop(ar, ar->monitor_vdev_id); in ath11k_mac_monitor_vdev_stop()
1012 ath11k_warn(ar->ab, "failed to request monitor vdev %i stop: %d\n", in ath11k_mac_monitor_vdev_stop()
1013 ar->monitor_vdev_id, ret); in ath11k_mac_monitor_vdev_stop()
1017 ret = ath11k_mac_vdev_setup_sync(ar); in ath11k_mac_monitor_vdev_stop()
1019 ath11k_warn(ar->ab, "failed to synchronize monitor vdev %i stop: %d\n", in ath11k_mac_monitor_vdev_stop()
1020 ar->monitor_vdev_id, ret); in ath11k_mac_monitor_vdev_stop()
1024 ret = ath11k_wmi_vdev_down(ar, ar->monitor_vdev_id); in ath11k_mac_monitor_vdev_stop()
1026 ath11k_warn(ar->ab, "failed to put down monitor vdev %i: %d\n", in ath11k_mac_monitor_vdev_stop()
1027 ar->monitor_vdev_id, ret); in ath11k_mac_monitor_vdev_stop()
1031 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "monitor vdev %i stopped\n", in ath11k_mac_monitor_vdev_stop()
1032 ar->monitor_vdev_id); in ath11k_mac_monitor_vdev_stop()
1037 static int ath11k_mac_monitor_vdev_create(struct ath11k *ar) in ath11k_mac_monitor_vdev_create() argument
1039 struct ath11k_pdev *pdev = ar->pdev; in ath11k_mac_monitor_vdev_create()
1045 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_monitor_vdev_create()
1047 if (test_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags)) in ath11k_mac_monitor_vdev_create()
1050 if (ar->ab->free_vdev_map == 0) { in ath11k_mac_monitor_vdev_create()
1051 ath11k_warn(ar->ab, "failed to find free vdev id for monitor vdev\n"); in ath11k_mac_monitor_vdev_create()
1055 bit = __ffs64(ar->ab->free_vdev_map); in ath11k_mac_monitor_vdev_create()
1057 ar->monitor_vdev_id = bit; in ath11k_mac_monitor_vdev_create()
1059 param.if_id = ar->monitor_vdev_id; in ath11k_mac_monitor_vdev_create()
1065 param.chains[NL80211_BAND_2GHZ].tx = ar->num_tx_chains; in ath11k_mac_monitor_vdev_create()
1066 param.chains[NL80211_BAND_2GHZ].rx = ar->num_rx_chains; in ath11k_mac_monitor_vdev_create()
1069 param.chains[NL80211_BAND_5GHZ].tx = ar->num_tx_chains; in ath11k_mac_monitor_vdev_create()
1070 param.chains[NL80211_BAND_5GHZ].rx = ar->num_rx_chains; in ath11k_mac_monitor_vdev_create()
1073 ret = ath11k_wmi_vdev_create(ar, tmp_addr, &param); in ath11k_mac_monitor_vdev_create()
1075 ath11k_warn(ar->ab, "failed to request monitor vdev %i creation: %d\n", in ath11k_mac_monitor_vdev_create()
1076 ar->monitor_vdev_id, ret); in ath11k_mac_monitor_vdev_create()
1077 ar->monitor_vdev_id = -1; in ath11k_mac_monitor_vdev_create()
1081 nss = get_num_chains(ar->cfg_tx_chainmask) ? : 1; in ath11k_mac_monitor_vdev_create()
1082 ret = ath11k_wmi_vdev_set_param_cmd(ar, ar->monitor_vdev_id, in ath11k_mac_monitor_vdev_create()
1085 ath11k_warn(ar->ab, "failed to set vdev %d chainmask 0x%x, nss %d :%d\n", in ath11k_mac_monitor_vdev_create()
1086 ar->monitor_vdev_id, ar->cfg_tx_chainmask, nss, ret); in ath11k_mac_monitor_vdev_create()
1090 ret = ath11k_mac_txpower_recalc(ar); in ath11k_mac_monitor_vdev_create()
1092 ath11k_warn(ar->ab, "failed to recalc txpower for monitor vdev %d: %d\n", in ath11k_mac_monitor_vdev_create()
1093 ar->monitor_vdev_id, ret); in ath11k_mac_monitor_vdev_create()
1097 ar->allocated_vdev_map |= 1LL << ar->monitor_vdev_id; in ath11k_mac_monitor_vdev_create()
1098 ar->ab->free_vdev_map &= ~(1LL << ar->monitor_vdev_id); in ath11k_mac_monitor_vdev_create()
1099 ar->num_created_vdevs++; in ath11k_mac_monitor_vdev_create()
1100 set_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags); in ath11k_mac_monitor_vdev_create()
1102 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "monitor vdev %d created\n", in ath11k_mac_monitor_vdev_create()
1103 ar->monitor_vdev_id); in ath11k_mac_monitor_vdev_create()
1108 ath11k_wmi_vdev_delete(ar, ar->monitor_vdev_id); in ath11k_mac_monitor_vdev_create()
1109 ar->monitor_vdev_id = -1; in ath11k_mac_monitor_vdev_create()
1113 static int ath11k_mac_monitor_vdev_delete(struct ath11k *ar) in ath11k_mac_monitor_vdev_delete() argument
1118 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_monitor_vdev_delete()
1120 if (!test_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags)) in ath11k_mac_monitor_vdev_delete()
1123 reinit_completion(&ar->vdev_delete_done); in ath11k_mac_monitor_vdev_delete()
1125 ret = ath11k_wmi_vdev_delete(ar, ar->monitor_vdev_id); in ath11k_mac_monitor_vdev_delete()
1127 ath11k_warn(ar->ab, "failed to request wmi monitor vdev %i removal: %d\n", in ath11k_mac_monitor_vdev_delete()
1128 ar->monitor_vdev_id, ret); in ath11k_mac_monitor_vdev_delete()
1132 time_left = wait_for_completion_timeout(&ar->vdev_delete_done, in ath11k_mac_monitor_vdev_delete()
1135 ath11k_warn(ar->ab, "Timeout in receiving vdev delete response\n"); in ath11k_mac_monitor_vdev_delete()
1137 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "monitor vdev %d deleted\n", in ath11k_mac_monitor_vdev_delete()
1138 ar->monitor_vdev_id); in ath11k_mac_monitor_vdev_delete()
1140 ar->allocated_vdev_map &= ~(1LL << ar->monitor_vdev_id); in ath11k_mac_monitor_vdev_delete()
1141 ar->ab->free_vdev_map |= 1LL << (ar->monitor_vdev_id); in ath11k_mac_monitor_vdev_delete()
1142 ar->num_created_vdevs--; in ath11k_mac_monitor_vdev_delete()
1143 ar->monitor_vdev_id = -1; in ath11k_mac_monitor_vdev_delete()
1144 clear_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags); in ath11k_mac_monitor_vdev_delete()
1150 static int ath11k_mac_monitor_start(struct ath11k *ar) in ath11k_mac_monitor_start() argument
1155 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_monitor_start()
1157 if (test_bit(ATH11K_FLAG_MONITOR_STARTED, &ar->monitor_flags)) in ath11k_mac_monitor_start()
1160 ieee80211_iter_chan_contexts_atomic(ar->hw, in ath11k_mac_monitor_start()
1166 ret = ath11k_mac_monitor_vdev_start(ar, ar->monitor_vdev_id, chandef); in ath11k_mac_monitor_start()
1168 ath11k_warn(ar->ab, "failed to start monitor vdev: %d\n", ret); in ath11k_mac_monitor_start()
1169 ath11k_mac_monitor_vdev_delete(ar); in ath11k_mac_monitor_start()
1173 set_bit(ATH11K_FLAG_MONITOR_STARTED, &ar->monitor_flags); in ath11k_mac_monitor_start()
1175 ar->num_started_vdevs++; in ath11k_mac_monitor_start()
1176 ret = ath11k_dp_tx_htt_monitor_mode_ring_config(ar, false); in ath11k_mac_monitor_start()
1178 ath11k_warn(ar->ab, "failed to configure htt monitor mode ring during start: %d", in ath11k_mac_monitor_start()
1183 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "monitor started\n"); in ath11k_mac_monitor_start()
1188 static int ath11k_mac_monitor_stop(struct ath11k *ar) in ath11k_mac_monitor_stop() argument
1192 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_monitor_stop()
1194 if (!test_bit(ATH11K_FLAG_MONITOR_STARTED, &ar->monitor_flags)) in ath11k_mac_monitor_stop()
1197 ret = ath11k_mac_monitor_vdev_stop(ar); in ath11k_mac_monitor_stop()
1199 ath11k_warn(ar->ab, "failed to stop monitor vdev: %d\n", ret); in ath11k_mac_monitor_stop()
1203 clear_bit(ATH11K_FLAG_MONITOR_STARTED, &ar->monitor_flags); in ath11k_mac_monitor_stop()
1204 ar->num_started_vdevs--; in ath11k_mac_monitor_stop()
1206 ret = ath11k_dp_tx_htt_monitor_mode_ring_config(ar, true); in ath11k_mac_monitor_stop()
1208 ath11k_warn(ar->ab, "failed to configure htt monitor mode ring during stop: %d", in ath11k_mac_monitor_stop()
1213 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "monitor stopped ret %d\n", ret); in ath11k_mac_monitor_stop()
1220 struct ath11k *ar = arvif->ar; in ath11k_mac_vif_setup_ps() local
1222 struct ieee80211_conf *conf = &ar->hw->conf; in ath11k_mac_vif_setup_ps()
1229 lockdep_assert_held(&arvif->ar->conf_mutex); in ath11k_mac_vif_setup_ps()
1253 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, in ath11k_mac_vif_setup_ps()
1256 ath11k_warn(ar->ab, "failed to set inactivity time for vdev %d: %i\n", in ath11k_mac_vif_setup_ps()
1264 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev %d psmode %s\n", in ath11k_mac_vif_setup_ps()
1267 ret = ath11k_wmi_pdev_set_ps_mode(ar, arvif->vdev_id, psmode); in ath11k_mac_vif_setup_ps()
1269 ath11k_warn(ar->ab, "failed to set sta power save mode %d for vdev %d: %d\n", in ath11k_mac_vif_setup_ps()
1277 static int ath11k_mac_config_ps(struct ath11k *ar) in ath11k_mac_config_ps() argument
1282 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_config_ps()
1284 list_for_each_entry(arvif, &ar->arvifs, list) { in ath11k_mac_config_ps()
1287 ath11k_warn(ar->ab, "failed to setup powersave: %d\n", ret); in ath11k_mac_config_ps()
1297 struct ath11k *ar = hw->priv; in ath11k_mac_op_config() local
1301 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_config()
1305 set_bit(ATH11K_FLAG_MONITOR_CONF_ENABLED, &ar->monitor_flags); in ath11k_mac_op_config()
1308 &ar->monitor_flags)) in ath11k_mac_op_config()
1311 ret = ath11k_mac_monitor_vdev_create(ar); in ath11k_mac_op_config()
1313 ath11k_warn(ar->ab, "failed to create monitor vdev: %d", in ath11k_mac_op_config()
1318 ret = ath11k_mac_monitor_start(ar); in ath11k_mac_op_config()
1320 ath11k_warn(ar->ab, "failed to start monitor: %d", in ath11k_mac_op_config()
1325 clear_bit(ATH11K_FLAG_MONITOR_CONF_ENABLED, &ar->monitor_flags); in ath11k_mac_op_config()
1328 &ar->monitor_flags)) in ath11k_mac_op_config()
1331 ret = ath11k_mac_monitor_stop(ar); in ath11k_mac_op_config()
1333 ath11k_warn(ar->ab, "failed to stop monitor: %d", in ath11k_mac_op_config()
1338 ret = ath11k_mac_monitor_vdev_delete(ar); in ath11k_mac_op_config()
1340 ath11k_warn(ar->ab, "failed to delete monitor vdev: %d", in ath11k_mac_op_config()
1348 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_config()
1352 ath11k_mac_monitor_vdev_delete(ar); in ath11k_mac_op_config()
1353 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_config()
1469 beacons = ieee80211_beacon_get_template_ema_list(tx_arvif->ar->hw, in ath11k_mac_setup_bcn_tmpl_ema()
1472 ath11k_warn(arvif->ar->ab, in ath11k_mac_setup_bcn_tmpl_ema()
1493 ret = ath11k_wmi_bcn_tmpl(tx_arvif->ar, tx_arvif->vdev_id, in ath11k_mac_setup_bcn_tmpl_ema()
1497 ath11k_warn(tx_arvif->ar->ab, in ath11k_mac_setup_bcn_tmpl_ema()
1514 struct ath11k *ar = arvif->ar; in ath11k_mac_setup_bcn_tmpl_mbssid() local
1515 struct ath11k_base *ab = ar->ab; in ath11k_mac_setup_bcn_tmpl_mbssid()
1517 struct ieee80211_hw *hw = ar->hw; in ath11k_mac_setup_bcn_tmpl_mbssid()
1526 ar = tx_arvif->ar; in ath11k_mac_setup_bcn_tmpl_mbssid()
1527 ab = ar->ab; in ath11k_mac_setup_bcn_tmpl_mbssid()
1528 hw = ar->hw; in ath11k_mac_setup_bcn_tmpl_mbssid()
1544 ret = ath11k_wmi_bcn_tmpl(ar, arvif->vdev_id, &offs, bcn, 0); in ath11k_mac_setup_bcn_tmpl_mbssid()
1598 struct ath11k *ar = arvif->ar; in ath11k_control_beaconing() local
1602 lockdep_assert_held(&arvif->ar->conf_mutex); in ath11k_control_beaconing()
1605 ret = ath11k_wmi_vdev_down(ar, arvif->vdev_id); in ath11k_control_beaconing()
1607 ath11k_warn(ar->ab, "failed to down vdev_id %i: %d\n", in ath11k_control_beaconing()
1617 ath11k_warn(ar->ab, "failed to update bcn tmpl during vdev up: %d\n", in ath11k_control_beaconing()
1631 ret = ath11k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, in ath11k_control_beaconing()
1637 ath11k_warn(ar->ab, "failed to bring up vdev %d: %i\n", in ath11k_control_beaconing()
1644 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev %d up\n", arvif->vdev_id); in ath11k_control_beaconing()
1663 void ath11k_mac_handle_beacon(struct ath11k *ar, struct sk_buff *skb) in ath11k_mac_handle_beacon() argument
1665 ieee80211_iterate_active_interfaces_atomic(ar->hw, in ath11k_mac_handle_beacon()
1676 struct ath11k *ar = arvif->ar; in ath11k_mac_handle_beacon_miss_iter() local
1677 struct ieee80211_hw *hw = ar->hw; in ath11k_mac_handle_beacon_miss_iter()
1696 void ath11k_mac_handle_beacon_miss(struct ath11k *ar, u32 vdev_id) in ath11k_mac_handle_beacon_miss() argument
1698 ieee80211_iterate_active_interfaces_atomic(ar->hw, in ath11k_mac_handle_beacon_miss()
1716 static void ath11k_peer_assoc_h_basic(struct ath11k *ar, in ath11k_peer_assoc_h_basic() argument
1724 lockdep_assert_held(&ar->conf_mutex); in ath11k_peer_assoc_h_basic()
1736 arg->peer_listen_intval = ar->hw->conf.listen_interval; in ath11k_peer_assoc_h_basic()
1741 static void ath11k_peer_assoc_h_crypto(struct ath11k *ar, in ath11k_peer_assoc_h_crypto() argument
1753 lockdep_assert_held(&ar->conf_mutex); in ath11k_peer_assoc_h_crypto()
1758 bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid, NULL, 0, in ath11k_peer_assoc_h_crypto()
1778 cfg80211_put_bss(ar->hw->wiphy, bss); in ath11k_peer_assoc_h_crypto()
1783 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_peer_assoc_h_crypto()
1789 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_peer_assoc_h_crypto()
1802 static void ath11k_peer_assoc_h_rates(struct ath11k *ar, in ath11k_peer_assoc_h_rates() argument
1817 lockdep_assert_held(&ar->conf_mutex); in ath11k_peer_assoc_h_rates()
1823 sband = ar->hw->wiphy->bands[band]; in ath11k_peer_assoc_h_rates()
1864 static void ath11k_peer_assoc_h_ht(struct ath11k *ar, in ath11k_peer_assoc_h_ht() argument
1878 lockdep_assert_held(&ar->conf_mutex); in ath11k_peer_assoc_h_ht()
1967 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "ht peer %pM mcs cnt %d nss %d\n", in ath11k_peer_assoc_h_ht()
2033 static u8 ath11k_get_nss_160mhz(struct ath11k *ar, in ath11k_get_nss_160mhz() argument
2036 u8 nss_ratio_info = ar->pdev->cap.nss_ratio_info; in ath11k_get_nss_160mhz()
2044 ath11k_warn(ar->ab, "WMI_NSS_RATIO_3BY4_NSS not supported\n"); in ath11k_get_nss_160mhz()
2050 ath11k_warn(ar->ab, "WMI_NSS_RATIO_2_NSS not supported\n"); in ath11k_get_nss_160mhz()
2053 ath11k_warn(ar->ab, "invalid nss ratio received from firmware: %d\n", in ath11k_get_nss_160mhz()
2061 static void ath11k_peer_assoc_h_vht(struct ath11k *ar, in ath11k_peer_assoc_h_vht() argument
2131 …ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "setting vht range mcs value to peer supported nss %d for peer … in ath11k_peer_assoc_h_vht()
2170 tx_nss = ath11k_get_nss_160mhz(ar, max_nss); in ath11k_peer_assoc_h_vht()
2175 ath11k_warn(ar->ab, "invalid max_nss\n"); in ath11k_peer_assoc_h_vht()
2187 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_peer_assoc_h_vht()
2259 static void ath11k_peer_assoc_h_he(struct ath11k *ar, in ath11k_peer_assoc_h_he() argument
2413 …ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "setting he range mcs value to peer supported nss %d for peer %… in ath11k_peer_assoc_h_he()
2476 tx_nss = ath11k_get_nss_160mhz(ar, max_nss); in ath11k_peer_assoc_h_he()
2481 ath11k_warn(ar->ab, "invalid max_nss\n"); in ath11k_peer_assoc_h_he()
2493 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_peer_assoc_h_he()
2500 static void ath11k_peer_assoc_h_he_6ghz(struct ath11k *ar, in ath11k_peer_assoc_h_he_6ghz() argument
2582 static void ath11k_peer_assoc_h_qos(struct ath11k *ar, in ath11k_peer_assoc_h_qos() argument
2614 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "peer %pM qos %d\n", in ath11k_peer_assoc_h_qos()
2618 static int ath11k_peer_assoc_qos_ap(struct ath11k *ar, in ath11k_peer_assoc_qos_ap() argument
2627 lockdep_assert_held(&ar->conf_mutex); in ath11k_peer_assoc_qos_ap()
2631 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "uapsd_queues 0x%x max_sp %d\n", in ath11k_peer_assoc_qos_ap()
2654 ret = ath11k_wmi_send_set_ap_ps_param_cmd(ar, sta->addr, &params); in ath11k_peer_assoc_qos_ap()
2660 ret = ath11k_wmi_send_set_ap_ps_param_cmd(ar, sta->addr, &params); in ath11k_peer_assoc_qos_ap()
2667 ret = ath11k_wmi_send_set_ap_ps_param_cmd(ar, sta->addr, &params); in ath11k_peer_assoc_qos_ap()
2673 ret = ath11k_wmi_send_set_ap_ps_param_cmd(ar, sta->addr, &params); in ath11k_peer_assoc_qos_ap()
2680 ath11k_warn(ar->ab, "failed to set ap ps peer param %d for vdev %i: %d\n", in ath11k_peer_assoc_qos_ap()
2691 static enum wmi_phy_mode ath11k_mac_get_phymode_vht(struct ath11k *ar, in ath11k_mac_get_phymode_vht() argument
2719 static enum wmi_phy_mode ath11k_mac_get_phymode_he(struct ath11k *ar, in ath11k_mac_get_phymode_he() argument
2745 static void ath11k_peer_assoc_h_phymode(struct ath11k *ar, in ath11k_peer_assoc_h_phymode() argument
2799 phymode = ath11k_mac_get_phymode_he(ar, sta); in ath11k_peer_assoc_h_phymode()
2802 phymode = ath11k_mac_get_phymode_vht(ar, sta); in ath11k_peer_assoc_h_phymode()
2817 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "peer %pM phymode %s\n", in ath11k_peer_assoc_h_phymode()
2824 static void ath11k_peer_assoc_prepare(struct ath11k *ar, in ath11k_peer_assoc_prepare() argument
2832 lockdep_assert_held(&ar->conf_mutex); in ath11k_peer_assoc_prepare()
2838 reinit_completion(&ar->peer_assoc_done); in ath11k_peer_assoc_prepare()
2841 ath11k_peer_assoc_h_basic(ar, vif, sta, arg); in ath11k_peer_assoc_prepare()
2842 ath11k_peer_assoc_h_crypto(ar, vif, sta, arg); in ath11k_peer_assoc_prepare()
2843 ath11k_peer_assoc_h_rates(ar, vif, sta, arg); in ath11k_peer_assoc_prepare()
2844 ath11k_peer_assoc_h_phymode(ar, vif, sta, arg); in ath11k_peer_assoc_prepare()
2845 ath11k_peer_assoc_h_ht(ar, vif, sta, arg); in ath11k_peer_assoc_prepare()
2846 ath11k_peer_assoc_h_vht(ar, vif, sta, arg); in ath11k_peer_assoc_prepare()
2847 ath11k_peer_assoc_h_he(ar, vif, sta, arg); in ath11k_peer_assoc_prepare()
2848 ath11k_peer_assoc_h_he_6ghz(ar, vif, sta, arg); in ath11k_peer_assoc_prepare()
2849 ath11k_peer_assoc_h_qos(ar, vif, sta, arg); in ath11k_peer_assoc_prepare()
2857 static int ath11k_setup_peer_smps(struct ath11k *ar, struct ath11k_vif *arvif, in ath11k_setup_peer_smps() argument
2877 return ath11k_wmi_set_peer_param(ar, addr, arvif->vdev_id, in ath11k_setup_peer_smps()
2884 struct ath11k *ar = arvif->ar; in ath11k_mac_set_he_txbf_conf() local
2911 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, value); in ath11k_mac_set_he_txbf_conf()
2913 ath11k_warn(ar->ab, "failed to set vdev %d HE MU mode: %d\n", in ath11k_mac_set_he_txbf_conf()
2922 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_set_he_txbf_conf()
2925 ath11k_warn(ar->ab, "failed to set vdev %d sounding mode: %d\n", in ath11k_mac_set_he_txbf_conf()
2932 static bool ath11k_mac_vif_recalc_sta_he_txbf(struct ath11k *ar, in ath11k_mac_vif_recalc_sta_he_txbf() argument
2954 cap_band = &ar->mac.iftype[NL80211_BAND_2GHZ][vif->type].he_cap; in ath11k_mac_vif_recalc_sta_he_txbf()
2956 cap_band = &ar->mac.iftype[NL80211_BAND_5GHZ][vif->type].he_cap; in ath11k_mac_vif_recalc_sta_he_txbf()
2983 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, hemode); in ath11k_mac_vif_recalc_sta_he_txbf()
2985 ath11k_warn(ar->ab, "failed to submit vdev param txbf 0x%x: %d\n", in ath11k_mac_vif_recalc_sta_he_txbf()
2997 struct ath11k *ar = hw->priv; in ath11k_bss_assoc() local
3006 lockdep_assert_held(&ar->conf_mutex); in ath11k_bss_assoc()
3008 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev %i assoc bssid %pM aid %d\n", in ath11k_bss_assoc()
3015 ath11k_warn(ar->ab, "failed to find station entry for bss %pM vdev %i\n", in ath11k_bss_assoc()
3024 ath11k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg, false); in ath11k_bss_assoc()
3029 ret = ath11k_wmi_send_peer_assoc_cmd(ar, &peer_arg); in ath11k_bss_assoc()
3031 ath11k_warn(ar->ab, "failed to run peer assoc for %pM vdev %i: %d\n", in ath11k_bss_assoc()
3036 if (!wait_for_completion_timeout(&ar->peer_assoc_done, 1 * HZ)) { in ath11k_bss_assoc()
3037 ath11k_warn(ar->ab, "failed to get peer assoc conf event for %pM vdev %i\n", in ath11k_bss_assoc()
3042 ret = ath11k_setup_peer_smps(ar, arvif, bss_conf->bssid, in ath11k_bss_assoc()
3046 ath11k_warn(ar->ab, "failed to setup peer SMPS for vdev %d: %d\n", in ath11k_bss_assoc()
3051 if (!ath11k_mac_vif_recalc_sta_he_txbf(ar, vif, &he_cap)) { in ath11k_bss_assoc()
3052 ath11k_warn(ar->ab, "failed to recalc he txbf for vdev %i on bss %pM\n", in ath11k_bss_assoc()
3062 ret = ath11k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid, in ath11k_bss_assoc()
3065 ath11k_warn(ar->ab, "failed to set vdev %d up: %d\n", in ath11k_bss_assoc()
3073 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_bss_assoc()
3077 spin_lock_bh(&ar->ab->base_lock); in ath11k_bss_assoc()
3079 peer = ath11k_peer_find(ar->ab, arvif->vdev_id, arvif->bssid); in ath11k_bss_assoc()
3083 spin_unlock_bh(&ar->ab->base_lock); in ath11k_bss_assoc()
3086 ret = ath11k_wmi_set_peer_param(ar, arvif->bssid, in ath11k_bss_assoc()
3091 ath11k_warn(ar->ab, "Unable to authorize BSS peer: %d\n", ret); in ath11k_bss_assoc()
3094 ret = ath11k_wmi_send_obss_spr_cmd(ar, arvif->vdev_id, in ath11k_bss_assoc()
3097 ath11k_warn(ar->ab, "failed to set vdev %i OBSS PD parameters: %d\n", in ath11k_bss_assoc()
3100 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_bss_assoc()
3104 ath11k_warn(ar->ab, "failed to set vdev %d dtim policy: %d\n", in ath11k_bss_assoc()
3107 ath11k_mac_11d_scan_stop_all(ar->ab); in ath11k_bss_assoc()
3113 struct ath11k *ar = hw->priv; in ath11k_bss_disassoc() local
3117 lockdep_assert_held(&ar->conf_mutex); in ath11k_bss_disassoc()
3119 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev %i disassoc bssid %pM\n", in ath11k_bss_disassoc()
3122 ret = ath11k_wmi_vdev_down(ar, arvif->vdev_id); in ath11k_bss_disassoc()
3124 ath11k_warn(ar->ab, "failed to down vdev %i: %d\n", in ath11k_bss_disassoc()
3159 static void ath11k_recalculate_mgmt_rate(struct ath11k *ar, in ath11k_recalculate_mgmt_rate() argument
3171 lockdep_assert_held(&ar->conf_mutex); in ath11k_recalculate_mgmt_rate()
3173 sband = ar->hw->wiphy->bands[def->chan->band]; in ath11k_recalculate_mgmt_rate()
3179 ath11k_warn(ar->ab, "bitrate not supported %d\n", bitrate); in ath11k_recalculate_mgmt_rate()
3184 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, vdev_param, in ath11k_recalculate_mgmt_rate()
3187 ath11k_warn(ar->ab, "failed to set mgmt tx rate %d\n", ret); in ath11k_recalculate_mgmt_rate()
3192 ar->hw_rate_code = hw_rate_code; in ath11k_recalculate_mgmt_rate()
3195 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, vdev_param, in ath11k_recalculate_mgmt_rate()
3198 ath11k_warn(ar->ab, "failed to set beacon tx rate %d\n", ret); in ath11k_recalculate_mgmt_rate()
3204 struct ath11k *ar = arvif->ar; in ath11k_mac_fils_discovery() local
3213 tmpl = ieee80211_get_fils_discovery_tmpl(ar->hw, arvif->vif); in ath11k_mac_fils_discovery()
3215 ret = ath11k_wmi_fils_discovery_tmpl(ar, arvif->vdev_id, in ath11k_mac_fils_discovery()
3221 tmpl = ieee80211_get_unsol_bcast_probe_resp_tmpl(ar->hw, in ath11k_mac_fils_discovery()
3224 ret = ath11k_wmi_probe_resp_tmpl(ar, arvif->vdev_id, in ath11k_mac_fils_discovery()
3227 return ath11k_wmi_fils_discovery(ar, arvif->vdev_id, 0, false); in ath11k_mac_fils_discovery()
3231 ath11k_warn(ar->ab, in ath11k_mac_fils_discovery()
3241 ret = ath11k_wmi_fils_discovery(ar, arvif->vdev_id, interval, in ath11k_mac_fils_discovery()
3247 static int ath11k_mac_config_obss_pd(struct ath11k *ar, in ath11k_mac_config_obss_pd() argument
3254 pdev_id = ar->pdev->pdev_id; in ath11k_mac_config_obss_pd()
3258 if (test_bit(ATH11K_FLAG_MONITOR_STARTED, &ar->monitor_flags)) { in ath11k_mac_config_obss_pd()
3259 ret = ath11k_wmi_pdev_set_param(ar, param_id, 0, pdev_id); in ath11k_mac_config_obss_pd()
3261 ath11k_warn(ar->ab, in ath11k_mac_config_obss_pd()
3267 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_config_obss_pd()
3293 ar->ab->wmi_ab.svc_map)) { in ath11k_mac_config_obss_pd()
3304 ret = ath11k_wmi_pdev_set_param(ar, param_id, param_val, pdev_id); in ath11k_mac_config_obss_pd()
3306 ath11k_warn(ar->ab, in ath11k_mac_config_obss_pd()
3315 ret = ath11k_wmi_pdev_set_param(ar, param_id, param_val, pdev_id); in ath11k_mac_config_obss_pd()
3317 ath11k_warn(ar->ab, in ath11k_mac_config_obss_pd()
3327 ret = ath11k_wmi_pdev_set_param(ar, param_id, param_val, pdev_id); in ath11k_mac_config_obss_pd()
3329 ath11k_warn(ar->ab, "failed to set sr_prohibit for pdev: %u\n", in ath11k_mac_config_obss_pd()
3335 ar->ab->wmi_ab.svc_map)) in ath11k_mac_config_obss_pd()
3340 ret = ath11k_wmi_pdev_set_srg_bss_color_bitmap(ar, bitmap); in ath11k_mac_config_obss_pd()
3342 ath11k_warn(ar->ab, in ath11k_mac_config_obss_pd()
3350 ret = ath11k_wmi_pdev_set_srg_patial_bssid_bitmap(ar, bitmap); in ath11k_mac_config_obss_pd()
3352 ath11k_warn(ar->ab, in ath11k_mac_config_obss_pd()
3361 ret = ath11k_wmi_pdev_srg_obss_color_enable_bitmap(ar, bitmap); in ath11k_mac_config_obss_pd()
3363 ath11k_warn(ar->ab, in ath11k_mac_config_obss_pd()
3370 ret = ath11k_wmi_pdev_srg_obss_bssid_enable_bitmap(ar, bitmap); in ath11k_mac_config_obss_pd()
3372 ath11k_warn(ar->ab, in ath11k_mac_config_obss_pd()
3379 ret = ath11k_wmi_pdev_non_srg_obss_color_enable_bitmap(ar, bitmap); in ath11k_mac_config_obss_pd()
3381 ath11k_warn(ar->ab, in ath11k_mac_config_obss_pd()
3388 ret = ath11k_wmi_pdev_non_srg_obss_bssid_enable_bitmap(ar, bitmap); in ath11k_mac_config_obss_pd()
3390 ath11k_warn(ar->ab, in ath11k_mac_config_obss_pd()
3404 struct ath11k *ar = hw->priv; in ath11k_mac_op_bss_info_changed() local
3419 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_bss_info_changed()
3425 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_bss_info_changed()
3429 ath11k_warn(ar->ab, "Failed to set beacon interval for VDEV: %d\n", in ath11k_mac_op_bss_info_changed()
3432 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_bss_info_changed()
3440 ret = ath11k_wmi_pdev_set_param(ar, param_id, in ath11k_mac_op_bss_info_changed()
3441 param_value, ar->pdev->pdev_id); in ath11k_mac_op_bss_info_changed()
3443 ath11k_warn(ar->ab, "Failed to set beacon mode for VDEV: %d\n", in ath11k_mac_op_bss_info_changed()
3446 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_bss_info_changed()
3453 ath11k_warn(ar->ab, "failed to update bcn template: %d\n", in ath11k_mac_op_bss_info_changed()
3463 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_bss_info_changed()
3467 ath11k_warn(ar->ab, in ath11k_mac_op_bss_info_changed()
3471 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_bss_info_changed()
3481 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_bss_info_changed()
3486 ath11k_warn(ar->ab, "Failed to set dtim period for VDEV %d: %i\n", in ath11k_mac_op_bss_info_changed()
3489 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_bss_info_changed()
3515 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_bss_info_changed()
3517 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_bss_info_changed()
3522 ath11k_warn(ar->ab, "Failed to set he oper params %x for VDEV %d: %i\n", in ath11k_mac_op_bss_info_changed()
3534 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_bss_info_changed()
3537 ath11k_warn(ar->ab, "Failed to set CTS prot for VDEV: %d\n", in ath11k_mac_op_bss_info_changed()
3540 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "Set CTS prot: %d for VDEV: %d\n", in ath11k_mac_op_bss_info_changed()
3543 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "defer protection mode setup, vdev is not ready yet\n"); in ath11k_mac_op_bss_info_changed()
3557 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_bss_info_changed()
3560 ath11k_warn(ar->ab, "Failed to set erp slot for VDEV: %d\n", in ath11k_mac_op_bss_info_changed()
3563 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_bss_info_changed()
3577 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_bss_info_changed()
3580 ath11k_warn(ar->ab, "Failed to set preamble for VDEV: %d\n", in ath11k_mac_op_bss_info_changed()
3583 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_bss_info_changed()
3596 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev_id %i txpower %d\n", in ath11k_mac_op_bss_info_changed()
3600 ath11k_mac_txpower_recalc(ar); in ath11k_mac_op_bss_info_changed()
3604 ar->ab->hw_params.supports_sta_ps) { in ath11k_mac_op_bss_info_changed()
3607 ret = ath11k_mac_config_ps(ar); in ath11k_mac_op_bss_info_changed()
3609 ath11k_warn(ar->ab, "failed to setup ps on vdev %i: %d\n", in ath11k_mac_op_bss_info_changed()
3623 if (ar->pdev->cap.supported_bands & WMI_HOST_WLAN_5G_CAP) in ath11k_mac_op_bss_info_changed()
3636 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_bss_info_changed()
3641 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_bss_info_changed()
3644 ath11k_warn(ar->ab, in ath11k_mac_op_bss_info_changed()
3649 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_bss_info_changed()
3652 ath11k_warn(ar->ab, in ath11k_mac_op_bss_info_changed()
3659 ath11k_recalculate_mgmt_rate(ar, vif, &def); in ath11k_mac_op_bss_info_changed()
3666 ath11k_wmi_send_twt_enable_cmd(ar, ar->pdev->pdev_id, in ath11k_mac_op_bss_info_changed()
3669 ath11k_wmi_send_twt_disable_cmd(ar, ar->pdev->pdev_id); in ath11k_mac_op_bss_info_changed()
3674 ath11k_mac_config_obss_pd(ar, &info->he_obss_pd); in ath11k_mac_op_bss_info_changed()
3679 ar, arvif->vdev_id, info->he_bss_color.color, in ath11k_mac_op_bss_info_changed()
3683 ath11k_warn(ar->ab, "failed to set bss color collision on vdev %i: %d\n", in ath11k_mac_op_bss_info_changed()
3693 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_bss_info_changed()
3697 ath11k_warn(ar->ab, in ath11k_mac_op_bss_info_changed()
3701 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_bss_info_changed()
3705 ret = ath11k_wmi_send_bss_color_change_enable_cmd(ar, in ath11k_mac_op_bss_info_changed()
3709 ath11k_warn(ar->ab, "failed to enable bss color change on vdev %i: %d\n", in ath11k_mac_op_bss_info_changed()
3712 ar, arvif->vdev_id, 0, in ath11k_mac_op_bss_info_changed()
3715 ath11k_warn(ar->ab, "failed to set bss color collision on vdev %i: %d\n", in ath11k_mac_op_bss_info_changed()
3722 test_bit(WMI_TLV_SERVICE_RTT, ar->ab->wmi_ab.svc_map) && in ath11k_mac_op_bss_info_changed()
3727 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, param, in ath11k_mac_op_bss_info_changed()
3730 ath11k_warn(ar->ab, "Failed to set ftm responder %i: %d\n", in ath11k_mac_op_bss_info_changed()
3746 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "arp_addr_cnt %d vif->addr %pM, offload_addr %pI4\n", in ath11k_mac_op_bss_info_changed()
3751 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_bss_info_changed()
3754 void __ath11k_mac_scan_finish(struct ath11k *ar) in __ath11k_mac_scan_finish() argument
3756 lockdep_assert_held(&ar->data_lock); in __ath11k_mac_scan_finish()
3758 switch (ar->scan.state) { in __ath11k_mac_scan_finish()
3763 if (ar->scan.is_roc && ar->scan.roc_notify) in __ath11k_mac_scan_finish()
3764 ieee80211_remain_on_channel_expired(ar->hw); in __ath11k_mac_scan_finish()
3767 if (!ar->scan.is_roc) { in __ath11k_mac_scan_finish()
3769 .aborted = ((ar->scan.state == in __ath11k_mac_scan_finish()
3771 (ar->scan.state == in __ath11k_mac_scan_finish()
3775 ieee80211_scan_completed(ar->hw, &info); in __ath11k_mac_scan_finish()
3778 ar->scan.state = ATH11K_SCAN_IDLE; in __ath11k_mac_scan_finish()
3779 ar->scan_channel = NULL; in __ath11k_mac_scan_finish()
3780 ar->scan.roc_freq = 0; in __ath11k_mac_scan_finish()
3781 cancel_delayed_work(&ar->scan.timeout); in __ath11k_mac_scan_finish()
3782 complete_all(&ar->scan.completed); in __ath11k_mac_scan_finish()
3787 void ath11k_mac_scan_finish(struct ath11k *ar) in ath11k_mac_scan_finish() argument
3789 spin_lock_bh(&ar->data_lock); in ath11k_mac_scan_finish()
3790 __ath11k_mac_scan_finish(ar); in ath11k_mac_scan_finish()
3791 spin_unlock_bh(&ar->data_lock); in ath11k_mac_scan_finish()
3794 static int ath11k_scan_stop(struct ath11k *ar) in ath11k_scan_stop() argument
3802 lockdep_assert_held(&ar->conf_mutex); in ath11k_scan_stop()
3805 arg.pdev_id = ar->pdev->pdev_id; in ath11k_scan_stop()
3807 ret = ath11k_wmi_send_scan_stop_cmd(ar, &arg); in ath11k_scan_stop()
3809 ath11k_warn(ar->ab, "failed to stop wmi scan: %d\n", ret); in ath11k_scan_stop()
3813 ret = wait_for_completion_timeout(&ar->scan.completed, 3 * HZ); in ath11k_scan_stop()
3815 ath11k_warn(ar->ab, in ath11k_scan_stop()
3830 spin_lock_bh(&ar->data_lock); in ath11k_scan_stop()
3831 if (ar->scan.state != ATH11K_SCAN_IDLE) in ath11k_scan_stop()
3832 __ath11k_mac_scan_finish(ar); in ath11k_scan_stop()
3833 spin_unlock_bh(&ar->data_lock); in ath11k_scan_stop()
3838 static void ath11k_scan_abort(struct ath11k *ar) in ath11k_scan_abort() argument
3842 lockdep_assert_held(&ar->conf_mutex); in ath11k_scan_abort()
3844 spin_lock_bh(&ar->data_lock); in ath11k_scan_abort()
3846 switch (ar->scan.state) { in ath11k_scan_abort()
3854 ath11k_warn(ar->ab, "refusing scan abortion due to invalid scan state: %d\n", in ath11k_scan_abort()
3855 ar->scan.state); in ath11k_scan_abort()
3858 ar->scan.state = ATH11K_SCAN_ABORTING; in ath11k_scan_abort()
3859 spin_unlock_bh(&ar->data_lock); in ath11k_scan_abort()
3861 ret = ath11k_scan_stop(ar); in ath11k_scan_abort()
3863 ath11k_warn(ar->ab, "failed to abort scan: %d\n", ret); in ath11k_scan_abort()
3865 spin_lock_bh(&ar->data_lock); in ath11k_scan_abort()
3869 spin_unlock_bh(&ar->data_lock); in ath11k_scan_abort()
3874 struct ath11k *ar = container_of(work, struct ath11k, in ath11k_scan_timeout_work() local
3877 mutex_lock(&ar->conf_mutex); in ath11k_scan_timeout_work()
3878 ath11k_scan_abort(ar); in ath11k_scan_timeout_work()
3879 mutex_unlock(&ar->conf_mutex); in ath11k_scan_timeout_work()
3882 static int ath11k_start_scan(struct ath11k *ar, in ath11k_start_scan() argument
3888 lockdep_assert_held(&ar->conf_mutex); in ath11k_start_scan()
3890 if (ath11k_spectral_get_mode(ar) == ATH11K_SPECTRAL_BACKGROUND) in ath11k_start_scan()
3891 ath11k_spectral_reset_buffer(ar); in ath11k_start_scan()
3893 ret = ath11k_wmi_send_scan_start_cmd(ar, arg); in ath11k_start_scan()
3897 if (test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ar->ab->wmi_ab.svc_map)) { in ath11k_start_scan()
3900 if (ar->supports_6ghz) in ath11k_start_scan()
3904 ret = wait_for_completion_timeout(&ar->scan.started, timeout); in ath11k_start_scan()
3906 ret = ath11k_scan_stop(ar); in ath11k_start_scan()
3908 ath11k_warn(ar->ab, "failed to stop scan: %d\n", ret); in ath11k_start_scan()
3917 spin_lock_bh(&ar->data_lock); in ath11k_start_scan()
3918 if (ar->scan.state == ATH11K_SCAN_IDLE) { in ath11k_start_scan()
3919 spin_unlock_bh(&ar->data_lock); in ath11k_start_scan()
3922 spin_unlock_bh(&ar->data_lock); in ath11k_start_scan()
3931 struct ath11k *ar = hw->priv; in ath11k_mac_op_hw_scan() local
3946 if (ar->state_11d == ATH11K_11D_PREPARING && in ath11k_mac_op_hw_scan()
3948 ar->ab->wmi_ab.svc_map)) in ath11k_mac_op_hw_scan()
3949 ath11k_mac_11d_scan_start(ar, arvif->vdev_id); in ath11k_mac_op_hw_scan()
3951 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_hw_scan()
3953 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_hw_scan()
3954 switch (ar->scan.state) { in ath11k_mac_op_hw_scan()
3956 reinit_completion(&ar->scan.started); in ath11k_mac_op_hw_scan()
3957 reinit_completion(&ar->scan.completed); in ath11k_mac_op_hw_scan()
3958 ar->scan.state = ATH11K_SCAN_STARTING; in ath11k_mac_op_hw_scan()
3959 ar->scan.is_roc = false; in ath11k_mac_op_hw_scan()
3960 ar->scan.vdev_id = arvif->vdev_id; in ath11k_mac_op_hw_scan()
3969 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_hw_scan()
3981 ath11k_wmi_start_scan_init(ar, arg); in ath11k_mac_op_hw_scan()
4017 ar->ab->wmi_ab.svc_map)) { in ath11k_mac_op_hw_scan()
4066 ret = ath11k_start_scan(ar, arg); in ath11k_mac_op_hw_scan()
4068 ath11k_warn(ar->ab, "failed to start hw scan: %d\n", ret); in ath11k_mac_op_hw_scan()
4069 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_hw_scan()
4070 ar->scan.state = ATH11K_SCAN_IDLE; in ath11k_mac_op_hw_scan()
4071 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_hw_scan()
4074 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout, in ath11k_mac_op_hw_scan()
4084 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_hw_scan()
4086 if (ar->state_11d == ATH11K_11D_PREPARING) in ath11k_mac_op_hw_scan()
4087 ath11k_mac_11d_scan_start(ar, arvif->vdev_id); in ath11k_mac_op_hw_scan()
4095 struct ath11k *ar = hw->priv; in ath11k_mac_op_cancel_hw_scan() local
4097 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_cancel_hw_scan()
4098 ath11k_scan_abort(ar); in ath11k_mac_op_cancel_hw_scan()
4099 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_cancel_hw_scan()
4101 cancel_delayed_work_sync(&ar->scan.timeout); in ath11k_mac_op_cancel_hw_scan()
4110 struct ath11k *ar = arvif->ar; in ath11k_install_key() local
4120 lockdep_assert_held(&arvif->ar->conf_mutex); in ath11k_install_key()
4122 reinit_completion(&ar->install_key_done); in ath11k_install_key()
4124 if (test_bit(ATH11K_FLAG_HW_CRYPTO_DISABLED, &ar->ab->dev_flags)) in ath11k_install_key()
4152 ath11k_warn(ar->ab, "cipher %d is not supported\n", key->cipher); in ath11k_install_key()
4156 if (test_bit(ATH11K_FLAG_RAW_MODE, &ar->ab->dev_flags)) in ath11k_install_key()
4161 ret = ath11k_wmi_vdev_install_key(arvif->ar, &arg); in ath11k_install_key()
4166 if (!wait_for_completion_timeout(&ar->install_key_done, 1 * HZ)) in ath11k_install_key()
4169 return ar->install_key_status ? -EINVAL : 0; in ath11k_install_key()
4175 struct ath11k *ar = arvif->ar; in ath11k_clear_peer_keys() local
4176 struct ath11k_base *ab = ar->ab; in ath11k_clear_peer_keys()
4183 lockdep_assert_held(&ar->conf_mutex); in ath11k_clear_peer_keys()
4218 struct ath11k *ar = hw->priv; in ath11k_mac_op_set_key() local
4219 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_set_key()
4234 if (test_bit(ATH11K_FLAG_HW_CRYPTO_DISABLED, &ar->ab->dev_flags)) in ath11k_mac_op_set_key()
4240 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_set_key()
4261 ath11k_peer_frags_flush(ar, peer); in ath11k_mac_op_set_key()
4339 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_set_key()
4344 ath11k_mac_bitrate_mask_num_ht_rates(struct ath11k *ar, in ath11k_mac_bitrate_mask_num_ht_rates() argument
4358 ath11k_mac_bitrate_mask_num_vht_rates(struct ath11k *ar, in ath11k_mac_bitrate_mask_num_vht_rates() argument
4372 ath11k_mac_bitrate_mask_num_he_rates(struct ath11k *ar, in ath11k_mac_bitrate_mask_num_he_rates() argument
4391 struct ath11k *ar = arvif->ar; in ath11k_mac_set_peer_vht_fixed_rate() local
4396 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_set_peer_vht_fixed_rate()
4408 ath11k_warn(ar->ab, "No single VHT Fixed rate found to set for %pM", in ath11k_mac_set_peer_vht_fixed_rate()
4417 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_set_peer_vht_fixed_rate()
4423 ret = ath11k_wmi_set_peer_param(ar, sta->addr, in ath11k_mac_set_peer_vht_fixed_rate()
4428 ath11k_warn(ar->ab, in ath11k_mac_set_peer_vht_fixed_rate()
4441 struct ath11k *ar = arvif->ar; in ath11k_mac_set_peer_he_fixed_rate() local
4446 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_set_peer_he_fixed_rate()
4458 ath11k_warn(ar->ab, "No single he fixed rate found to set for %pM", in ath11k_mac_set_peer_he_fixed_rate()
4467 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_set_peer_he_fixed_rate()
4474 ret = ath11k_wmi_set_peer_param(ar, sta->addr, in ath11k_mac_set_peer_he_fixed_rate()
4479 ath11k_warn(ar->ab, in ath11k_mac_set_peer_he_fixed_rate()
4492 struct ath11k *ar = arvif->ar; in ath11k_mac_set_peer_ht_fixed_rate() local
4497 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_set_peer_ht_fixed_rate()
4507 ath11k_warn(ar->ab, "No single HT Fixed rate found to set for %pM", in ath11k_mac_set_peer_ht_fixed_rate()
4516 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_set_peer_ht_fixed_rate()
4522 ret = ath11k_wmi_set_peer_param(ar, sta->addr, in ath11k_mac_set_peer_ht_fixed_rate()
4527 ath11k_warn(ar->ab, in ath11k_mac_set_peer_ht_fixed_rate()
4534 static int ath11k_station_assoc(struct ath11k *ar, in ath11k_station_assoc() argument
4547 lockdep_assert_held(&ar->conf_mutex); in ath11k_station_assoc()
4555 ath11k_peer_assoc_prepare(ar, vif, sta, &peer_arg, reassoc); in ath11k_station_assoc()
4558 ret = ath11k_wmi_send_peer_assoc_cmd(ar, &peer_arg); in ath11k_station_assoc()
4560 ath11k_warn(ar->ab, "failed to run peer assoc for STA %pM vdev %i: %d\n", in ath11k_station_assoc()
4565 if (!wait_for_completion_timeout(&ar->peer_assoc_done, 1 * HZ)) { in ath11k_station_assoc()
4566 ath11k_warn(ar->ab, "failed to get peer assoc conf event for %pM vdev %i\n", in ath11k_station_assoc()
4571 num_vht_rates = ath11k_mac_bitrate_mask_num_vht_rates(ar, band, mask); in ath11k_station_assoc()
4572 num_he_rates = ath11k_mac_bitrate_mask_num_he_rates(ar, band, mask); in ath11k_station_assoc()
4573 num_ht_rates = ath11k_mac_bitrate_mask_num_ht_rates(ar, band, mask); in ath11k_station_assoc()
4603 ret = ath11k_setup_peer_smps(ar, arvif, sta->addr, in ath11k_station_assoc()
4607 ath11k_warn(ar->ab, "failed to setup peer SMPS for vdev %d: %d\n", in ath11k_station_assoc()
4620 ret = ath11k_peer_assoc_qos_ap(ar, arvif, sta); in ath11k_station_assoc()
4622 ath11k_warn(ar->ab, "failed to set qos params for STA %pM for vdev %i: %d\n", in ath11k_station_assoc()
4631 static int ath11k_station_disassoc(struct ath11k *ar, in ath11k_station_disassoc() argument
4638 lockdep_assert_held(&ar->conf_mutex); in ath11k_station_disassoc()
4649 ath11k_warn(ar->ab, "failed to clear all peer keys for vdev %i: %d\n", in ath11k_station_disassoc()
4658 struct ath11k *ar; in ath11k_sta_rc_update_wk() local
4676 ar = arvif->ar; in ath11k_sta_rc_update_wk()
4686 spin_lock_bh(&ar->data_lock); in ath11k_sta_rc_update_wk()
4696 spin_unlock_bh(&ar->data_lock); in ath11k_sta_rc_update_wk()
4698 mutex_lock(&ar->conf_mutex); in ath11k_sta_rc_update_wk()
4707 ath11k_peer_assoc_h_phymode(ar, arvif->vif, sta, &peer_arg); in ath11k_sta_rc_update_wk()
4710 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "update sta %pM peer bw %d phymode %d\n", in ath11k_sta_rc_update_wk()
4717 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "BW upgrade for sta %pM new BW %d, old BW %d\n", in ath11k_sta_rc_update_wk()
4720 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, in ath11k_sta_rc_update_wk()
4724 ath11k_warn(ar->ab, "failed to update STA %pM peer phymode %d: %d\n", in ath11k_sta_rc_update_wk()
4729 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, in ath11k_sta_rc_update_wk()
4733 ath11k_warn(ar->ab, "failed to update STA %pM peer bw %d: %d\n", in ath11k_sta_rc_update_wk()
4739 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "BW downgrade for sta %pM new BW %d,old BW %d\n", in ath11k_sta_rc_update_wk()
4742 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, in ath11k_sta_rc_update_wk()
4746 ath11k_warn(ar->ab, "failed to update STA %pM peer bw %d: %d\n", in ath11k_sta_rc_update_wk()
4751 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, in ath11k_sta_rc_update_wk()
4755 ath11k_warn(ar->ab, "failed to update STA %pM peer phymode %d: %d\n", in ath11k_sta_rc_update_wk()
4761 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "update sta %pM nss %d\n", in ath11k_sta_rc_update_wk()
4764 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, in ath11k_sta_rc_update_wk()
4767 ath11k_warn(ar->ab, "failed to update STA %pM nss %d: %d\n", in ath11k_sta_rc_update_wk()
4772 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "update sta %pM smps %d\n", in ath11k_sta_rc_update_wk()
4775 err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, in ath11k_sta_rc_update_wk()
4778 ath11k_warn(ar->ab, "failed to update STA %pM smps %d: %d\n", in ath11k_sta_rc_update_wk()
4784 num_ht_rates = ath11k_mac_bitrate_mask_num_ht_rates(ar, band, in ath11k_sta_rc_update_wk()
4786 num_vht_rates = ath11k_mac_bitrate_mask_num_vht_rates(ar, band, in ath11k_sta_rc_update_wk()
4788 num_he_rates = ath11k_mac_bitrate_mask_num_he_rates(ar, band, in ath11k_sta_rc_update_wk()
4818 err = ath11k_wmi_set_peer_param(ar, sta->addr, in ath11k_sta_rc_update_wk()
4823 ath11k_warn(ar->ab, in ath11k_sta_rc_update_wk()
4827 ath11k_peer_assoc_prepare(ar, arvif->vif, sta, in ath11k_sta_rc_update_wk()
4831 err = ath11k_wmi_send_peer_assoc_cmd(ar, &peer_arg); in ath11k_sta_rc_update_wk()
4833 ath11k_warn(ar->ab, "failed to run peer assoc for STA %pM vdev %i: %d\n", in ath11k_sta_rc_update_wk()
4836 if (!wait_for_completion_timeout(&ar->peer_assoc_done, 1 * HZ)) in ath11k_sta_rc_update_wk()
4837 ath11k_warn(ar->ab, "failed to get peer assoc conf event for %pM vdev %i\n", in ath11k_sta_rc_update_wk()
4843 mutex_unlock(&ar->conf_mutex); in ath11k_sta_rc_update_wk()
4848 struct ath11k *ar; in ath11k_sta_set_4addr_wk() local
4857 ar = arvif->ar; in ath11k_sta_set_4addr_wk()
4859 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_sta_set_4addr_wk()
4862 ret = ath11k_wmi_set_peer_param(ar, sta->addr, in ath11k_sta_set_4addr_wk()
4867 ath11k_warn(ar->ab, "failed to set peer %pM 4addr capability: %d\n", in ath11k_sta_set_4addr_wk()
4874 struct ath11k *ar = arvif->ar; in ath11k_mac_inc_num_stations() local
4876 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_inc_num_stations()
4881 if (ar->num_stations >= ar->max_num_stations) in ath11k_mac_inc_num_stations()
4884 ar->num_stations++; in ath11k_mac_inc_num_stations()
4892 struct ath11k *ar = arvif->ar; in ath11k_mac_dec_num_stations() local
4894 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_dec_num_stations()
4899 ar->num_stations--; in ath11k_mac_dec_num_stations()
4902 static int ath11k_mac_station_add(struct ath11k *ar, in ath11k_mac_station_add() argument
4906 struct ath11k_base *ab = ar->ab; in ath11k_mac_station_add()
4912 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_station_add()
4917 ar->max_num_stations); in ath11k_mac_station_add()
4931 ret = ath11k_peer_create(ar, arvif, sta, &peer_param); in ath11k_mac_station_add()
4941 if (ath11k_debugfs_is_extd_tx_stats_enabled(ar)) { in ath11k_mac_station_add()
4952 ret = ath11k_wmi_set_peer_param(ar, sta->addr, in ath11k_mac_station_add()
4962 ret = ath11k_dp_peer_setup(ar, arvif->vdev_id, sta->addr); in ath11k_mac_station_add()
4972 ret = ath11k_start_vdev_delay(ar->hw, vif); in ath11k_mac_station_add()
4986 ath11k_peer_delete(ar, arvif->vdev_id, sta->addr); in ath11k_mac_station_add()
4996 static u32 ath11k_mac_ieee80211_sta_bw_to_wmi(struct ath11k *ar, in ath11k_mac_ieee80211_sta_bw_to_wmi() argument
5015 ath11k_warn(ar->ab, "Invalid bandwidth %d for %pM\n", in ath11k_mac_ieee80211_sta_bw_to_wmi()
5030 struct ath11k *ar = hw->priv; in ath11k_mac_op_sta_state() local
5043 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_sta_state()
5053 ret = ath11k_mac_station_add(ar, vif, sta); in ath11k_mac_op_sta_state()
5055 ath11k_warn(ar->ab, "Failed to add station: %pM for VDEV: %d\n", in ath11k_mac_op_sta_state()
5059 bool skip_peer_delete = ar->ab->hw_params.vdev_start_delay && in ath11k_mac_op_sta_state()
5062 ath11k_dp_peer_cleanup(ar, arvif->vdev_id, sta->addr); in ath11k_mac_op_sta_state()
5065 ret = ath11k_peer_delete(ar, arvif->vdev_id, sta->addr); in ath11k_mac_op_sta_state()
5067 ath11k_warn(ar->ab, in ath11k_mac_op_sta_state()
5071 ath11k_dbg(ar->ab, in ath11k_mac_op_sta_state()
5078 mutex_lock(&ar->ab->tbl_mtx_lock); in ath11k_mac_op_sta_state()
5079 spin_lock_bh(&ar->ab->base_lock); in ath11k_mac_op_sta_state()
5080 peer = ath11k_peer_find(ar->ab, arvif->vdev_id, sta->addr); in ath11k_mac_op_sta_state()
5084 ath11k_warn(ar->ab, "Found peer entry %pM n vdev %i after it was supposedly removed\n", in ath11k_mac_op_sta_state()
5086 ath11k_peer_rhash_delete(ar->ab, peer); in ath11k_mac_op_sta_state()
5090 ar->num_peers--; in ath11k_mac_op_sta_state()
5092 spin_unlock_bh(&ar->ab->base_lock); in ath11k_mac_op_sta_state()
5093 mutex_unlock(&ar->ab->tbl_mtx_lock); in ath11k_mac_op_sta_state()
5105 ret = ath11k_station_assoc(ar, vif, sta, false); in ath11k_mac_op_sta_state()
5107 ath11k_warn(ar->ab, "Failed to associate station: %pM\n", in ath11k_mac_op_sta_state()
5110 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_sta_state()
5112 arsta->bw = ath11k_mac_ieee80211_sta_bw_to_wmi(ar, sta); in ath11k_mac_op_sta_state()
5114 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_sta_state()
5117 spin_lock_bh(&ar->ab->base_lock); in ath11k_mac_op_sta_state()
5119 peer = ath11k_peer_find(ar->ab, arvif->vdev_id, sta->addr); in ath11k_mac_op_sta_state()
5123 spin_unlock_bh(&ar->ab->base_lock); in ath11k_mac_op_sta_state()
5126 ret = ath11k_wmi_set_peer_param(ar, sta->addr, in ath11k_mac_op_sta_state()
5131 ath11k_warn(ar->ab, "Unable to authorize peer %pM vdev %d: %d\n", in ath11k_mac_op_sta_state()
5136 spin_lock_bh(&ar->ab->base_lock); in ath11k_mac_op_sta_state()
5138 peer = ath11k_peer_find(ar->ab, arvif->vdev_id, sta->addr); in ath11k_mac_op_sta_state()
5142 spin_unlock_bh(&ar->ab->base_lock); in ath11k_mac_op_sta_state()
5148 ret = ath11k_station_disassoc(ar, vif, sta); in ath11k_mac_op_sta_state()
5150 ath11k_warn(ar->ab, "Failed to disassociate station: %pM\n", in ath11k_mac_op_sta_state()
5154 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_sta_state()
5162 struct ath11k *ar = hw->priv; in ath11k_mac_op_sta_set_txpwr() local
5178 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_sta_set_txpwr()
5180 ret = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id, in ath11k_mac_op_sta_set_txpwr()
5183 ath11k_warn(ar->ab, "failed to set tx power for station ret: %d\n", in ath11k_mac_op_sta_set_txpwr()
5189 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_sta_set_txpwr()
5197 struct ath11k *ar = hw->priv; in ath11k_mac_op_sta_set_4addr() local
5201 ieee80211_queue_work(ar->hw, &arsta->set_4addr_wk); in ath11k_mac_op_sta_set_4addr()
5211 struct ath11k *ar = hw->priv; in ath11k_mac_op_sta_rc_update() local
5217 spin_lock_bh(&ar->ab->base_lock); in ath11k_mac_op_sta_rc_update()
5219 peer = ath11k_peer_find(ar->ab, arvif->vdev_id, sta->addr); in ath11k_mac_op_sta_rc_update()
5221 spin_unlock_bh(&ar->ab->base_lock); in ath11k_mac_op_sta_rc_update()
5222 ath11k_warn(ar->ab, "mac sta rc update failed to find peer %pM on vdev %i\n", in ath11k_mac_op_sta_rc_update()
5227 spin_unlock_bh(&ar->ab->base_lock); in ath11k_mac_op_sta_rc_update()
5229 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_sta_rc_update()
5235 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_sta_rc_update()
5238 bw = ath11k_mac_ieee80211_sta_bw_to_wmi(ar, sta); in ath11k_mac_op_sta_rc_update()
5261 ath11k_warn(ar->ab, "Invalid smps %d in sta rc update for %pM\n", in ath11k_mac_op_sta_rc_update()
5272 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_sta_rc_update()
5277 static int ath11k_conf_tx_uapsd(struct ath11k *ar, struct ieee80211_vif *vif, in ath11k_conf_tx_uapsd() argument
5311 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath11k_conf_tx_uapsd()
5315 ath11k_warn(ar->ab, "could not set uapsd params %d\n", ret); in ath11k_conf_tx_uapsd()
5324 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath11k_conf_tx_uapsd()
5328 ath11k_warn(ar->ab, "could not set rx wake param %d\n", ret); in ath11k_conf_tx_uapsd()
5339 struct ath11k *ar = hw->priv; in ath11k_mac_op_conf_tx() local
5344 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_conf_tx()
5371 ret = ath11k_wmi_send_wmm_update_cmd_tlv(ar, arvif->vdev_id, in ath11k_mac_op_conf_tx()
5374 ath11k_warn(ar->ab, "failed to set wmm params: %d\n", ret); in ath11k_mac_op_conf_tx()
5378 ret = ath11k_conf_tx_uapsd(ar, vif, ac, params->uapsd); in ath11k_mac_op_conf_tx()
5381 ath11k_warn(ar->ab, "failed to set sta uapsd: %d\n", ret); in ath11k_mac_op_conf_tx()
5384 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_conf_tx()
5389 ath11k_create_ht_cap(struct ath11k *ar, u32 ar_ht_cap, u32 rate_cap_rx_chainmask) in ath11k_create_ht_cap() argument
5393 u32 ar_vht_cap = ar->pdev->cap.vht_cap; in ath11k_create_ht_cap()
5444 for (i = 0; i < ar->num_rx_chains; i++) { in ath11k_create_ht_cap()
5457 struct ath11k *ar = arvif->ar; in ath11k_mac_set_txbf_conf() local
5460 u32 vht_cap = ar->pdev->cap.vht_cap; in ath11k_mac_set_txbf_conf()
5466 if (nsts > (ar->num_rx_chains - 1)) in ath11k_mac_set_txbf_conf()
5467 nsts = ar->num_rx_chains - 1; in ath11k_mac_set_txbf_conf()
5475 if (sound_dim > (ar->num_tx_chains - 1)) in ath11k_mac_set_txbf_conf()
5476 sound_dim = ar->num_tx_chains - 1; in ath11k_mac_set_txbf_conf()
5501 return ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_set_txbf_conf()
5505 static void ath11k_set_vht_txbf_cap(struct ath11k *ar, u32 *vht_cap) in ath11k_set_vht_txbf_cap() argument
5513 if (ar->num_tx_chains < 2) { in ath11k_set_vht_txbf_cap()
5518 if (ar->num_rx_chains < 2) { in ath11k_set_vht_txbf_cap()
5541 if (sound_dim > (ar->num_tx_chains - 1)) in ath11k_set_vht_txbf_cap()
5542 sound_dim = ar->num_tx_chains - 1; in ath11k_set_vht_txbf_cap()
5551 if (nsts > (ar->num_rx_chains - 1)) in ath11k_set_vht_txbf_cap()
5552 nsts = ar->num_rx_chains - 1; in ath11k_set_vht_txbf_cap()
5561 ath11k_create_vht_cap(struct ath11k *ar, u32 rate_cap_tx_chainmask, in ath11k_create_vht_cap() argument
5569 vht_cap.cap = ar->pdev->cap.vht_cap; in ath11k_create_vht_cap()
5571 if (ar->pdev->cap.nss_ratio_enabled) in ath11k_create_vht_cap()
5575 ath11k_set_vht_txbf_cap(ar, &vht_cap.cap); in ath11k_create_vht_cap()
5580 if (i < ar->num_tx_chains && rate_cap_tx_chainmask & BIT(i)) in ath11k_create_vht_cap()
5585 if (i < ar->num_rx_chains && rate_cap_rx_chainmask & BIT(i)) in ath11k_create_vht_cap()
5600 static void ath11k_mac_setup_ht_vht_cap(struct ath11k *ar, in ath11k_mac_setup_ht_vht_cap() argument
5609 rate_cap_tx_chainmask = ar->cfg_tx_chainmask >> cap->tx_chain_mask_shift; in ath11k_mac_setup_ht_vht_cap()
5610 rate_cap_rx_chainmask = ar->cfg_rx_chainmask >> cap->rx_chain_mask_shift; in ath11k_mac_setup_ht_vht_cap()
5613 band = &ar->mac.sbands[NL80211_BAND_2GHZ]; in ath11k_mac_setup_ht_vht_cap()
5617 band->ht_cap = ath11k_create_ht_cap(ar, ht_cap, in ath11k_mac_setup_ht_vht_cap()
5622 (ar->ab->hw_params.single_pdev_only || in ath11k_mac_setup_ht_vht_cap()
5623 !ar->supports_6ghz)) { in ath11k_mac_setup_ht_vht_cap()
5624 band = &ar->mac.sbands[NL80211_BAND_5GHZ]; in ath11k_mac_setup_ht_vht_cap()
5628 band->ht_cap = ath11k_create_ht_cap(ar, ht_cap, in ath11k_mac_setup_ht_vht_cap()
5630 band->vht_cap = ath11k_create_vht_cap(ar, rate_cap_tx_chainmask, in ath11k_mac_setup_ht_vht_cap()
5635 static int ath11k_check_chain_mask(struct ath11k *ar, u32 ant, bool is_tx_ant) in ath11k_check_chain_mask() argument
5773 static void ath11k_mac_set_hemcsmap(struct ath11k *ar, in ath11k_mac_set_hemcsmap() argument
5784 if (i < ar->num_tx_chains && in ath11k_mac_set_hemcsmap()
5785 (ar->cfg_tx_chainmask >> cap->tx_chain_mask_shift) & BIT(i)) in ath11k_mac_set_hemcsmap()
5790 if (i < ar->num_rx_chains && in ath11k_mac_set_hemcsmap()
5791 (ar->cfg_rx_chainmask >> cap->tx_chain_mask_shift) & BIT(i)) in ath11k_mac_set_hemcsmap()
5810 static int ath11k_mac_copy_he_cap(struct ath11k *ar, in ath11k_mac_copy_he_cap() argument
5845 he_cap_elem->phy_cap_info[5] |= ar->num_tx_chains - 1; in ath11k_mac_copy_he_cap()
5867 ath11k_mac_set_hemcsmap(ar, cap, he_cap, band); in ath11k_mac_copy_he_cap()
5885 static void ath11k_mac_setup_he_cap(struct ath11k *ar, in ath11k_mac_setup_he_cap() argument
5892 count = ath11k_mac_copy_he_cap(ar, cap, in ath11k_mac_setup_he_cap()
5893 ar->mac.iftype[NL80211_BAND_2GHZ], in ath11k_mac_setup_he_cap()
5895 band = &ar->mac.sbands[NL80211_BAND_2GHZ]; in ath11k_mac_setup_he_cap()
5896 band->iftype_data = ar->mac.iftype[NL80211_BAND_2GHZ]; in ath11k_mac_setup_he_cap()
5901 count = ath11k_mac_copy_he_cap(ar, cap, in ath11k_mac_setup_he_cap()
5902 ar->mac.iftype[NL80211_BAND_5GHZ], in ath11k_mac_setup_he_cap()
5904 band = &ar->mac.sbands[NL80211_BAND_5GHZ]; in ath11k_mac_setup_he_cap()
5905 band->iftype_data = ar->mac.iftype[NL80211_BAND_5GHZ]; in ath11k_mac_setup_he_cap()
5910 ar->supports_6ghz) { in ath11k_mac_setup_he_cap()
5911 count = ath11k_mac_copy_he_cap(ar, cap, in ath11k_mac_setup_he_cap()
5912 ar->mac.iftype[NL80211_BAND_6GHZ], in ath11k_mac_setup_he_cap()
5914 band = &ar->mac.sbands[NL80211_BAND_6GHZ]; in ath11k_mac_setup_he_cap()
5915 band->iftype_data = ar->mac.iftype[NL80211_BAND_6GHZ]; in ath11k_mac_setup_he_cap()
5920 static int __ath11k_set_antenna(struct ath11k *ar, u32 tx_ant, u32 rx_ant) in __ath11k_set_antenna() argument
5924 lockdep_assert_held(&ar->conf_mutex); in __ath11k_set_antenna()
5926 if (ath11k_check_chain_mask(ar, tx_ant, true)) in __ath11k_set_antenna()
5929 if (ath11k_check_chain_mask(ar, rx_ant, false)) in __ath11k_set_antenna()
5932 ar->cfg_tx_chainmask = tx_ant; in __ath11k_set_antenna()
5933 ar->cfg_rx_chainmask = rx_ant; in __ath11k_set_antenna()
5935 if (ar->state != ATH11K_STATE_ON && in __ath11k_set_antenna()
5936 ar->state != ATH11K_STATE_RESTARTED) in __ath11k_set_antenna()
5939 ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_TX_CHAIN_MASK, in __ath11k_set_antenna()
5940 tx_ant, ar->pdev->pdev_id); in __ath11k_set_antenna()
5942 ath11k_warn(ar->ab, "failed to set tx-chainmask: %d, req 0x%x\n", in __ath11k_set_antenna()
5947 ar->num_tx_chains = get_num_chains(tx_ant); in __ath11k_set_antenna()
5949 ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_RX_CHAIN_MASK, in __ath11k_set_antenna()
5950 rx_ant, ar->pdev->pdev_id); in __ath11k_set_antenna()
5952 ath11k_warn(ar->ab, "failed to set rx-chainmask: %d, req 0x%x\n", in __ath11k_set_antenna()
5957 ar->num_rx_chains = get_num_chains(rx_ant); in __ath11k_set_antenna()
5960 ath11k_mac_setup_ht_vht_cap(ar, &ar->pdev->cap, NULL); in __ath11k_set_antenna()
5961 ath11k_mac_setup_he_cap(ar, &ar->pdev->cap); in __ath11k_set_antenna()
5966 static void ath11k_mgmt_over_wmi_tx_drop(struct ath11k *ar, struct sk_buff *skb) in ath11k_mgmt_over_wmi_tx_drop() argument
5970 ieee80211_free_txskb(ar->hw, skb); in ath11k_mgmt_over_wmi_tx_drop()
5972 num_mgmt = atomic_dec_if_positive(&ar->num_pending_mgmt_tx); in ath11k_mgmt_over_wmi_tx_drop()
5978 wake_up(&ar->txmgmt_empty_waitq); in ath11k_mgmt_over_wmi_tx_drop()
5981 static void ath11k_mac_tx_mgmt_free(struct ath11k *ar, int buf_id) in ath11k_mac_tx_mgmt_free() argument
5986 spin_lock_bh(&ar->txmgmt_idr_lock); in ath11k_mac_tx_mgmt_free()
5987 msdu = idr_remove(&ar->txmgmt_idr, buf_id); in ath11k_mac_tx_mgmt_free()
5988 spin_unlock_bh(&ar->txmgmt_idr_lock); in ath11k_mac_tx_mgmt_free()
5993 dma_unmap_single(ar->ab->dev, ATH11K_SKB_CB(msdu)->paddr, msdu->len, in ath11k_mac_tx_mgmt_free()
5999 ath11k_mgmt_over_wmi_tx_drop(ar, msdu); in ath11k_mac_tx_mgmt_free()
6004 struct ath11k *ar = ctx; in ath11k_mac_tx_mgmt_pending_free() local
6006 ath11k_mac_tx_mgmt_free(ar, buf_id); in ath11k_mac_tx_mgmt_pending_free()
6015 struct ath11k *ar = skb_cb->ar; in ath11k_mac_vif_txmgmt_idr_remove() local
6018 ath11k_mac_tx_mgmt_free(ar, buf_id); in ath11k_mac_vif_txmgmt_idr_remove()
6023 static int ath11k_mac_mgmt_tx_wmi(struct ath11k *ar, struct ath11k_vif *arvif, in ath11k_mac_mgmt_tx_wmi() argument
6026 struct ath11k_base *ab = ar->ab; in ath11k_mac_mgmt_tx_wmi()
6033 ATH11K_SKB_CB(skb)->ar = ar; in ath11k_mac_mgmt_tx_wmi()
6035 spin_lock_bh(&ar->txmgmt_idr_lock); in ath11k_mac_mgmt_tx_wmi()
6036 buf_id = idr_alloc(&ar->txmgmt_idr, skb, 0, in ath11k_mac_mgmt_tx_wmi()
6038 spin_unlock_bh(&ar->txmgmt_idr_lock); in ath11k_mac_mgmt_tx_wmi()
6040 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_mgmt_tx_wmi()
6065 ret = ath11k_wmi_mgmt_send(ar, arvif->vdev_id, buf_id, skb); in ath11k_mac_mgmt_tx_wmi()
6067 ath11k_warn(ar->ab, "failed to send mgmt frame: %d\n", ret); in ath11k_mac_mgmt_tx_wmi()
6077 spin_lock_bh(&ar->txmgmt_idr_lock); in ath11k_mac_mgmt_tx_wmi()
6078 idr_remove(&ar->txmgmt_idr, buf_id); in ath11k_mac_mgmt_tx_wmi()
6079 spin_unlock_bh(&ar->txmgmt_idr_lock); in ath11k_mac_mgmt_tx_wmi()
6084 static void ath11k_mgmt_over_wmi_tx_purge(struct ath11k *ar) in ath11k_mgmt_over_wmi_tx_purge() argument
6088 while ((skb = skb_dequeue(&ar->wmi_mgmt_tx_queue)) != NULL) in ath11k_mgmt_over_wmi_tx_purge()
6089 ath11k_mgmt_over_wmi_tx_drop(ar, skb); in ath11k_mgmt_over_wmi_tx_purge()
6094 struct ath11k *ar = container_of(work, struct ath11k, wmi_mgmt_tx_work); in ath11k_mgmt_over_wmi_tx_work() local
6100 while ((skb = skb_dequeue(&ar->wmi_mgmt_tx_queue)) != NULL) { in ath11k_mgmt_over_wmi_tx_work()
6103 ath11k_warn(ar->ab, "no vif found for mgmt frame\n"); in ath11k_mgmt_over_wmi_tx_work()
6104 ath11k_mgmt_over_wmi_tx_drop(ar, skb); in ath11k_mgmt_over_wmi_tx_work()
6109 mutex_lock(&ar->conf_mutex); in ath11k_mgmt_over_wmi_tx_work()
6110 if (ar->allocated_vdev_map & (1LL << arvif->vdev_id)) { in ath11k_mgmt_over_wmi_tx_work()
6111 ret = ath11k_mac_mgmt_tx_wmi(ar, arvif, skb); in ath11k_mgmt_over_wmi_tx_work()
6113 ath11k_warn(ar->ab, "failed to tx mgmt frame, vdev_id %d :%d\n", in ath11k_mgmt_over_wmi_tx_work()
6115 ath11k_mgmt_over_wmi_tx_drop(ar, skb); in ath11k_mgmt_over_wmi_tx_work()
6117 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mgmt_over_wmi_tx_work()
6122 ath11k_warn(ar->ab, in ath11k_mgmt_over_wmi_tx_work()
6126 ath11k_mgmt_over_wmi_tx_drop(ar, skb); in ath11k_mgmt_over_wmi_tx_work()
6128 mutex_unlock(&ar->conf_mutex); in ath11k_mgmt_over_wmi_tx_work()
6132 static int ath11k_mac_mgmt_tx(struct ath11k *ar, struct sk_buff *skb, in ath11k_mac_mgmt_tx() argument
6135 struct sk_buff_head *q = &ar->wmi_mgmt_tx_queue; in ath11k_mac_mgmt_tx()
6137 if (test_bit(ATH11K_FLAG_CRASH_FLUSH, &ar->ab->dev_flags)) in ath11k_mac_mgmt_tx()
6146 atomic_read(&ar->num_pending_mgmt_tx) > ATH11K_PRB_RSP_DROP_THRESHOLD) { in ath11k_mac_mgmt_tx()
6147 ath11k_warn(ar->ab, in ath11k_mac_mgmt_tx()
6153 ath11k_warn(ar->ab, "mgmt tx queue is full\n"); in ath11k_mac_mgmt_tx()
6158 atomic_inc(&ar->num_pending_mgmt_tx); in ath11k_mac_mgmt_tx()
6159 queue_work(ar->ab->workqueue_aux, &ar->wmi_mgmt_tx_work); in ath11k_mac_mgmt_tx()
6169 struct ath11k *ar = hw->priv; in ath11k_mac_op_tx() local
6192 ret = ath11k_mac_mgmt_tx(ar, skb, is_prb_rsp); in ath11k_mac_op_tx()
6194 ath11k_warn(ar->ab, "failed to queue management frame %d\n", in ath11k_mac_op_tx()
6196 ieee80211_free_txskb(ar->hw, skb); in ath11k_mac_op_tx()
6204 ret = ath11k_dp_tx(ar, arvif, arsta, skb); in ath11k_mac_op_tx()
6206 ath11k_warn(ar->ab, "failed to transmit frame %d\n", ret); in ath11k_mac_op_tx()
6207 ieee80211_free_txskb(ar->hw, skb); in ath11k_mac_op_tx()
6211 void ath11k_mac_drain_tx(struct ath11k *ar) in ath11k_mac_drain_tx() argument
6216 cancel_work_sync(&ar->wmi_mgmt_tx_work); in ath11k_mac_drain_tx()
6217 ath11k_mgmt_over_wmi_tx_purge(ar); in ath11k_mac_drain_tx()
6220 static int ath11k_mac_config_mon_status_default(struct ath11k *ar, bool enable) in ath11k_mac_config_mon_status_default() argument
6223 struct ath11k_base *ab = ar->ab; in ath11k_mac_config_mon_status_default()
6229 if (ath11k_debugfs_rx_filter(ar)) in ath11k_mac_config_mon_status_default()
6230 tlv_filter.rx_filter = ath11k_debugfs_rx_filter(ar); in ath11k_mac_config_mon_status_default()
6234 ring_id = ar->dp.rx_mon_status_refill_ring[i].refill_buf_ring.ring_id; in ath11k_mac_config_mon_status_default()
6235 ret = ath11k_dp_tx_htt_rx_filter_setup(ar->ab, ring_id, in ath11k_mac_config_mon_status_default()
6236 ar->dp.mac_id + i, in ath11k_mac_config_mon_status_default()
6242 if (enable && !ar->ab->hw_params.rxdma1_enable) in ath11k_mac_config_mon_status_default()
6243 mod_timer(&ar->ab->mon_reap_timer, jiffies + in ath11k_mac_config_mon_status_default()
6272 struct ath11k *ar = hw->priv; in ath11k_mac_op_start() local
6273 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_start()
6274 struct ath11k_pdev *pdev = ar->pdev; in ath11k_mac_op_start()
6282 ath11k_mac_drain_tx(ar); in ath11k_mac_op_start()
6283 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_start()
6285 switch (ar->state) { in ath11k_mac_op_start()
6287 ar->state = ATH11K_STATE_ON; in ath11k_mac_op_start()
6290 ar->state = ATH11K_STATE_RESTARTED; in ath11k_mac_op_start()
6302 ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_PMF_QOS, in ath11k_mac_op_start()
6306 ath11k_err(ar->ab, "failed to enable PMF QOS: (%d\n", ret); in ath11k_mac_op_start()
6310 ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_DYNAMIC_BW, 1, in ath11k_mac_op_start()
6313 ath11k_err(ar->ab, "failed to enable dynamic bw: %d\n", ret); in ath11k_mac_op_start()
6317 if (test_bit(WMI_TLV_SERVICE_SPOOF_MAC_SUPPORT, ar->wmi->wmi_ab->svc_map)) { in ath11k_mac_op_start()
6318 ret = ath11k_wmi_scan_prob_req_oui(ar, ar->mac_addr); in ath11k_mac_op_start()
6325 ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_ARP_AC_OVERRIDE, in ath11k_mac_op_start()
6333 ret = ath11k_wmi_send_dfs_phyerr_offload_enable_cmd(ar, pdev->pdev_id); in ath11k_mac_op_start()
6340 ret = ath11k_dp_tx_htt_h2t_ppdu_stats_req(ar, in ath11k_mac_op_start()
6347 ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_MESH_MCAST_ENABLE, in ath11k_mac_op_start()
6351 ath11k_err(ar->ab, "failed to enable MESH MCAST ENABLE: (%d\n", ret); in ath11k_mac_op_start()
6355 __ath11k_set_antenna(ar, ar->cfg_tx_chainmask, ar->cfg_rx_chainmask); in ath11k_mac_op_start()
6359 ath11k_reg_update_chan_list(ar, false); in ath11k_mac_op_start()
6361 ar->num_started_vdevs = 0; in ath11k_mac_op_start()
6362 ar->num_created_vdevs = 0; in ath11k_mac_op_start()
6363 ar->num_peers = 0; in ath11k_mac_op_start()
6364 ar->allocated_vdev_map = 0; in ath11k_mac_op_start()
6369 ret = ath11k_mac_config_mon_status_default(ar, true); in ath11k_mac_op_start()
6377 ath11k_wmi_pdev_lro_cfg(ar, ar->pdev->pdev_id); in ath11k_mac_op_start()
6381 ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_IDLE_PS_CONFIG, in ath11k_mac_op_start()
6389 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_start()
6391 rcu_assign_pointer(ab->pdevs_active[ar->pdev_idx], in ath11k_mac_op_start()
6392 &ab->pdevs[ar->pdev_idx]); in ath11k_mac_op_start()
6397 ar->state = ATH11K_STATE_OFF; in ath11k_mac_op_start()
6398 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_start()
6405 struct ath11k *ar = hw->priv; in ath11k_mac_op_stop() local
6409 ath11k_mac_drain_tx(ar); in ath11k_mac_op_stop()
6411 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_stop()
6412 ret = ath11k_mac_config_mon_status_default(ar, false); in ath11k_mac_op_stop()
6414 ath11k_err(ar->ab, "failed to clear rx_filter for monitor status ring: (%d)\n", in ath11k_mac_op_stop()
6417 clear_bit(ATH11K_CAC_RUNNING, &ar->dev_flags); in ath11k_mac_op_stop()
6418 ar->state = ATH11K_STATE_OFF; in ath11k_mac_op_stop()
6419 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_stop()
6421 cancel_delayed_work_sync(&ar->scan.timeout); in ath11k_mac_op_stop()
6422 cancel_work_sync(&ar->regd_update_work); in ath11k_mac_op_stop()
6423 cancel_work_sync(&ar->ab->update_11d_work); in ath11k_mac_op_stop()
6425 if (ar->state_11d == ATH11K_11D_PREPARING) { in ath11k_mac_op_stop()
6426 ar->state_11d = ATH11K_11D_IDLE; in ath11k_mac_op_stop()
6427 complete(&ar->completed_11d_scan); in ath11k_mac_op_stop()
6430 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_stop()
6431 list_for_each_entry_safe(ppdu_stats, tmp, &ar->ppdu_stats_info, list) { in ath11k_mac_op_stop()
6435 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_stop()
6437 rcu_assign_pointer(ar->ab->pdevs_active[ar->pdev_idx], NULL); in ath11k_mac_op_stop()
6441 atomic_set(&ar->num_pending_mgmt_tx, 0); in ath11k_mac_op_stop()
6447 struct ath11k *ar = arvif->ar; in ath11k_mac_setup_vdev_params_mbssid() local
6461 if (ar->hw->wiphy != ieee80211_vif_to_wdev(tx_vif)->wiphy) in ath11k_mac_setup_vdev_params_mbssid()
6481 struct ath11k *ar = arvif->ar; in ath11k_mac_setup_vdev_create_params() local
6482 struct ath11k_pdev *pdev = ar->pdev; in ath11k_mac_setup_vdev_create_params()
6493 ar->ab->wmi_ab.svc_map)) { in ath11k_mac_setup_vdev_create_params()
6502 params->chains[NL80211_BAND_2GHZ].tx = ar->num_tx_chains; in ath11k_mac_setup_vdev_create_params()
6503 params->chains[NL80211_BAND_2GHZ].rx = ar->num_rx_chains; in ath11k_mac_setup_vdev_create_params()
6506 params->chains[NL80211_BAND_5GHZ].tx = ar->num_tx_chains; in ath11k_mac_setup_vdev_create_params()
6507 params->chains[NL80211_BAND_5GHZ].rx = ar->num_rx_chains; in ath11k_mac_setup_vdev_create_params()
6510 ar->supports_6ghz) { in ath11k_mac_setup_vdev_create_params()
6511 params->chains[NL80211_BAND_6GHZ].tx = ar->num_tx_chains; in ath11k_mac_setup_vdev_create_params()
6512 params->chains[NL80211_BAND_6GHZ].rx = ar->num_rx_chains; in ath11k_mac_setup_vdev_create_params()
6520 struct ath11k *ar = hw->priv; in ath11k_mac_op_update_vif_offload() local
6521 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_update_vif_offload()
6540 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_update_vif_offload()
6556 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_update_vif_offload()
6567 struct ath11k *ar; in ath11k_mac_vif_ap_active_any() local
6574 ar = pdev->ar; in ath11k_mac_vif_ap_active_any()
6575 list_for_each_entry(arvif, &ar->arvifs, list) { in ath11k_mac_vif_ap_active_any()
6583 void ath11k_mac_11d_scan_start(struct ath11k *ar, u32 vdev_id) in ath11k_mac_11d_scan_start() argument
6588 mutex_lock(&ar->ab->vdev_id_11d_lock); in ath11k_mac_11d_scan_start()
6590 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev id for 11d scan %d\n", in ath11k_mac_11d_scan_start()
6591 ar->vdev_id_11d_scan); in ath11k_mac_11d_scan_start()
6593 if (ar->regdom_set_by_user) in ath11k_mac_11d_scan_start()
6596 if (ar->vdev_id_11d_scan != ATH11K_11D_INVALID_VDEV_ID) in ath11k_mac_11d_scan_start()
6599 if (!test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ar->ab->wmi_ab.svc_map)) in ath11k_mac_11d_scan_start()
6602 if (ath11k_mac_vif_ap_active_any(ar->ab)) in ath11k_mac_11d_scan_start()
6609 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "start 11d scan\n"); in ath11k_mac_11d_scan_start()
6611 ret = ath11k_wmi_send_11d_scan_start_cmd(ar, &param); in ath11k_mac_11d_scan_start()
6613 ath11k_warn(ar->ab, "failed to start 11d scan vdev %d ret: %d\n", in ath11k_mac_11d_scan_start()
6616 ar->vdev_id_11d_scan = vdev_id; in ath11k_mac_11d_scan_start()
6617 if (ar->state_11d == ATH11K_11D_PREPARING) in ath11k_mac_11d_scan_start()
6618 ar->state_11d = ATH11K_11D_RUNNING; in ath11k_mac_11d_scan_start()
6622 if (ar->state_11d == ATH11K_11D_PREPARING) { in ath11k_mac_11d_scan_start()
6623 ar->state_11d = ATH11K_11D_IDLE; in ath11k_mac_11d_scan_start()
6624 complete(&ar->completed_11d_scan); in ath11k_mac_11d_scan_start()
6627 mutex_unlock(&ar->ab->vdev_id_11d_lock); in ath11k_mac_11d_scan_start()
6630 void ath11k_mac_11d_scan_stop(struct ath11k *ar) in ath11k_mac_11d_scan_stop() argument
6635 if (!test_bit(WMI_TLV_SERVICE_11D_OFFLOAD, ar->ab->wmi_ab.svc_map)) in ath11k_mac_11d_scan_stop()
6638 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "stop 11d scan\n"); in ath11k_mac_11d_scan_stop()
6640 mutex_lock(&ar->ab->vdev_id_11d_lock); in ath11k_mac_11d_scan_stop()
6642 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "stop 11d vdev id %d\n", in ath11k_mac_11d_scan_stop()
6643 ar->vdev_id_11d_scan); in ath11k_mac_11d_scan_stop()
6645 if (ar->state_11d == ATH11K_11D_PREPARING) { in ath11k_mac_11d_scan_stop()
6646 ar->state_11d = ATH11K_11D_IDLE; in ath11k_mac_11d_scan_stop()
6647 complete(&ar->completed_11d_scan); in ath11k_mac_11d_scan_stop()
6650 if (ar->vdev_id_11d_scan != ATH11K_11D_INVALID_VDEV_ID) { in ath11k_mac_11d_scan_stop()
6651 vdev_id = ar->vdev_id_11d_scan; in ath11k_mac_11d_scan_stop()
6653 ret = ath11k_wmi_send_11d_scan_stop_cmd(ar, vdev_id); in ath11k_mac_11d_scan_stop()
6655 ath11k_warn(ar->ab, in ath11k_mac_11d_scan_stop()
6659 ar->vdev_id_11d_scan = ATH11K_11D_INVALID_VDEV_ID; in ath11k_mac_11d_scan_stop()
6660 ar->state_11d = ATH11K_11D_IDLE; in ath11k_mac_11d_scan_stop()
6661 complete(&ar->completed_11d_scan); in ath11k_mac_11d_scan_stop()
6664 mutex_unlock(&ar->ab->vdev_id_11d_lock); in ath11k_mac_11d_scan_stop()
6669 struct ath11k *ar; in ath11k_mac_11d_scan_stop_all() local
6677 ar = pdev->ar; in ath11k_mac_11d_scan_stop_all()
6679 ath11k_mac_11d_scan_stop(ar); in ath11k_mac_11d_scan_stop_all()
6683 static int ath11k_mac_vdev_delete(struct ath11k *ar, struct ath11k_vif *arvif) in ath11k_mac_vdev_delete() argument
6689 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_vdev_delete()
6691 reinit_completion(&ar->vdev_delete_done); in ath11k_mac_vdev_delete()
6693 ret = ath11k_wmi_vdev_delete(ar, arvif->vdev_id); in ath11k_mac_vdev_delete()
6695 ath11k_warn(ar->ab, "failed to delete WMI vdev %d: %d\n", in ath11k_mac_vdev_delete()
6700 time_left = wait_for_completion_timeout(&ar->vdev_delete_done, in ath11k_mac_vdev_delete()
6703 ath11k_warn(ar->ab, "Timeout in receiving vdev delete response\n"); in ath11k_mac_vdev_delete()
6707 ar->ab->free_vdev_map |= 1LL << (arvif->vdev_id); in ath11k_mac_vdev_delete()
6708 ar->allocated_vdev_map &= ~(1LL << arvif->vdev_id); in ath11k_mac_vdev_delete()
6709 ar->num_created_vdevs--; in ath11k_mac_vdev_delete()
6711 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev %pM deleted, vdev_id %d\n", in ath11k_mac_vdev_delete()
6720 struct ath11k *ar = hw->priv; in ath11k_mac_op_add_interface() local
6721 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_add_interface()
6733 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_add_interface()
6736 ar->num_peers > (ar->max_num_peers - 1)) { in ath11k_mac_op_add_interface()
6742 if (ar->num_created_vdevs > (TARGET_NUM_VDEVS(ab) - 1)) { in ath11k_mac_op_add_interface()
6744 ar->num_created_vdevs, TARGET_NUM_VDEVS(ab)); in ath11k_mac_op_add_interface()
6758 arvif->ar = ar; in ath11k_mac_op_add_interface()
6794 ar->monitor_vdev_id = bit; in ath11k_mac_op_add_interface()
6801 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "add interface id %d type %d subtype %d map %llx\n", in ath11k_mac_op_add_interface()
6816 ret = ath11k_wmi_vdev_create(ar, vif->addr, &vdev_param); in ath11k_mac_op_add_interface()
6823 ar->num_created_vdevs++; in ath11k_mac_op_add_interface()
6826 ar->allocated_vdev_map |= 1LL << arvif->vdev_id; in ath11k_mac_op_add_interface()
6829 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_add_interface()
6830 list_add(&arvif->list, &ar->arvifs); in ath11k_mac_op_add_interface()
6831 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_add_interface()
6835 nss = get_num_chains(ar->cfg_tx_chainmask) ? : 1; in ath11k_mac_op_add_interface()
6836 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_add_interface()
6840 arvif->vdev_id, ar->cfg_tx_chainmask, nss, ret); in ath11k_mac_op_add_interface()
6849 ret = ath11k_peer_create(ar, arvif, NULL, &peer_param); in ath11k_mac_op_add_interface()
6858 ath11k_warn(ar->ab, "failed to set vdev %i kickout parameters: %d\n", in ath11k_mac_op_add_interface()
6863 ath11k_mac_11d_scan_stop_all(ar->ab); in ath11k_mac_op_add_interface()
6868 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath11k_mac_op_add_interface()
6871 ath11k_warn(ar->ab, "failed to set vdev %d RX wake policy: %d\n", in ath11k_mac_op_add_interface()
6878 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath11k_mac_op_add_interface()
6881 ath11k_warn(ar->ab, "failed to set vdev %d TX wake threshold: %d\n", in ath11k_mac_op_add_interface()
6888 ret = ath11k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath11k_mac_op_add_interface()
6891 ath11k_warn(ar->ab, "failed to set vdev %d pspoll count: %d\n", in ath11k_mac_op_add_interface()
6896 ret = ath11k_wmi_pdev_set_ps_mode(ar, arvif->vdev_id, in ath11k_mac_op_add_interface()
6899 ath11k_warn(ar->ab, "failed to disable vdev %d ps mode: %d\n", in ath11k_mac_op_add_interface()
6905 reinit_completion(&ar->completed_11d_scan); in ath11k_mac_op_add_interface()
6906 ar->state_11d = ATH11K_11D_PREPARING; in ath11k_mac_op_add_interface()
6910 set_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags); in ath11k_mac_op_add_interface()
6917 ret = ath11k_mac_txpower_recalc(ar); in ath11k_mac_op_add_interface()
6922 param_value = ar->hw->wiphy->rts_threshold; in ath11k_mac_op_add_interface()
6923 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_op_add_interface()
6926 ath11k_warn(ar->ab, "failed to set rts threshold for vdev %d: %d\n", in ath11k_mac_op_add_interface()
6930 ath11k_dp_vdev_tx_attach(ar, arvif); in ath11k_mac_op_add_interface()
6935 test_bit(ATH11K_FLAG_MONITOR_CONF_ENABLED, &ar->monitor_flags)) { in ath11k_mac_op_add_interface()
6936 ret = ath11k_mac_monitor_vdev_create(ar); in ath11k_mac_op_add_interface()
6938 ath11k_warn(ar->ab, "failed to create monitor vdev during add interface: %d", in ath11k_mac_op_add_interface()
6942 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_add_interface()
6948 fbret = ath11k_peer_delete(ar, arvif->vdev_id, vif->addr); in ath11k_mac_op_add_interface()
6950 ath11k_warn(ar->ab, "fallback fail to delete peer addr %pM vdev_id %d ret %d\n", in ath11k_mac_op_add_interface()
6957 ath11k_mac_vdev_delete(ar, arvif); in ath11k_mac_op_add_interface()
6958 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_add_interface()
6960 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_add_interface()
6963 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_add_interface()
6982 struct ath11k *ar = hw->priv; in ath11k_mac_op_remove_interface() local
6984 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_remove_interface()
6990 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_remove_interface()
7001 ath11k_mac_11d_scan_stop(ar); in ath11k_mac_op_remove_interface()
7004 ret = ath11k_peer_delete(ar, arvif->vdev_id, vif->addr); in ath11k_mac_op_remove_interface()
7010 ret = ath11k_mac_vdev_delete(ar, arvif); in ath11k_mac_op_remove_interface()
7018 clear_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags); in ath11k_mac_op_remove_interface()
7019 ar->monitor_vdev_id = -1; in ath11k_mac_op_remove_interface()
7020 } else if (test_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags) && in ath11k_mac_op_remove_interface()
7021 !test_bit(ATH11K_FLAG_MONITOR_STARTED, &ar->monitor_flags)) { in ath11k_mac_op_remove_interface()
7022 ret = ath11k_mac_monitor_vdev_delete(ar); in ath11k_mac_op_remove_interface()
7025 ath11k_warn(ar->ab, "failed to delete vdev monitor during remove interface: %d", in ath11k_mac_op_remove_interface()
7030 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_remove_interface()
7032 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_remove_interface()
7034 ath11k_peer_cleanup(ar, arvif->vdev_id); in ath11k_mac_op_remove_interface()
7036 idr_for_each(&ar->txmgmt_idr, in ath11k_mac_op_remove_interface()
7047 ath11k_mac_txpower_recalc(ar); in ath11k_mac_op_remove_interface()
7053 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_remove_interface()
7071 struct ath11k *ar = hw->priv; in ath11k_mac_op_configure_filter() local
7073 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_configure_filter()
7076 ar->filter_flags = *total_flags; in ath11k_mac_op_configure_filter()
7078 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_configure_filter()
7083 struct ath11k *ar = hw->priv; in ath11k_mac_op_get_antenna() local
7085 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_get_antenna()
7087 *tx_ant = ar->cfg_tx_chainmask; in ath11k_mac_op_get_antenna()
7088 *rx_ant = ar->cfg_rx_chainmask; in ath11k_mac_op_get_antenna()
7090 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_get_antenna()
7097 struct ath11k *ar = hw->priv; in ath11k_mac_op_set_antenna() local
7100 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_set_antenna()
7101 ret = __ath11k_set_antenna(ar, tx_ant, rx_ant); in ath11k_mac_op_set_antenna()
7102 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_set_antenna()
7111 struct ath11k *ar = hw->priv; in ath11k_mac_op_ampdu_action() local
7114 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_ampdu_action()
7118 ret = ath11k_dp_rx_ampdu_start(ar, params); in ath11k_mac_op_ampdu_action()
7121 ret = ath11k_dp_rx_ampdu_stop(ar, params); in ath11k_mac_op_ampdu_action()
7135 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_ampdu_action()
7143 struct ath11k *ar = hw->priv; in ath11k_mac_op_add_chanctx() local
7144 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_add_chanctx()
7150 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_add_chanctx()
7152 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_add_chanctx()
7156 ar->rx_channel = ctx->def.chan; in ath11k_mac_op_add_chanctx()
7157 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_add_chanctx()
7159 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_add_chanctx()
7167 struct ath11k *ar = hw->priv; in ath11k_mac_op_remove_chanctx() local
7168 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_remove_chanctx()
7174 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_remove_chanctx()
7176 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_remove_chanctx()
7180 ar->rx_channel = NULL; in ath11k_mac_op_remove_chanctx()
7181 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_remove_chanctx()
7183 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_remove_chanctx()
7191 struct ath11k *ar = arvif->ar; in ath11k_mac_vdev_start_restart() local
7192 struct ath11k_base *ab = ar->ab; in ath11k_mac_vdev_start_restart()
7197 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_vdev_start_restart()
7199 reinit_completion(&ar->vdev_setup_done); in ath11k_mac_vdev_start_restart()
7216 arg.pref_tx_streams = ar->num_tx_chains; in ath11k_mac_vdev_start_restart()
7217 arg.pref_rx_streams = ar->num_rx_chains; in ath11k_mac_vdev_start_restart()
7222 ar->ab->wmi_ab.svc_map)) { in ath11k_mac_vdev_start_restart()
7244 arg.regdomain = ar->ab->dfs_region; in ath11k_mac_vdev_start_restart()
7255 ret = ath11k_wmi_vdev_start(ar, &arg, restart); in ath11k_mac_vdev_start_restart()
7257 ath11k_warn(ar->ab, "failed to %s WMI vdev %i\n", in ath11k_mac_vdev_start_restart()
7262 ret = ath11k_mac_vdev_setup_sync(ar); in ath11k_mac_vdev_start_restart()
7270 ar->num_started_vdevs++; in ath11k_mac_vdev_start_restart()
7285 set_bit(ATH11K_CAC_RUNNING, &ar->dev_flags); in ath11k_mac_vdev_start_restart()
7301 struct ath11k *ar = arvif->ar; in ath11k_mac_vdev_stop() local
7304 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_vdev_stop()
7306 reinit_completion(&ar->vdev_setup_done); in ath11k_mac_vdev_stop()
7308 ret = ath11k_wmi_vdev_stop(ar, arvif->vdev_id); in ath11k_mac_vdev_stop()
7310 ath11k_warn(ar->ab, "failed to stop WMI vdev %i: %d\n", in ath11k_mac_vdev_stop()
7315 ret = ath11k_mac_vdev_setup_sync(ar); in ath11k_mac_vdev_stop()
7317 ath11k_warn(ar->ab, "failed to synchronize setup for vdev %i: %d\n", in ath11k_mac_vdev_stop()
7322 WARN_ON(ar->num_started_vdevs == 0); in ath11k_mac_vdev_stop()
7324 ar->num_started_vdevs--; in ath11k_mac_vdev_stop()
7325 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "vdev %pM stopped, vdev_id %d\n", in ath11k_mac_vdev_stop()
7328 if (test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags)) { in ath11k_mac_vdev_stop()
7329 clear_bit(ATH11K_CAC_RUNNING, &ar->dev_flags); in ath11k_mac_vdev_stop()
7330 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "CAC Stopped for vdev %d\n", in ath11k_mac_vdev_stop()
7391 ath11k_mac_update_vif_chan(struct ath11k *ar, in ath11k_mac_update_vif_chan() argument
7395 struct ath11k_base *ab = ar->ab; in ath11k_mac_update_vif_chan()
7402 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_update_vif_chan()
7455 ret = ath11k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, in ath11k_mac_update_vif_chan()
7469 test_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags)) { in ath11k_mac_update_vif_chan()
7470 ret = ath11k_mac_monitor_stop(ar); in ath11k_mac_update_vif_chan()
7472 ath11k_warn(ar->ab, "failed to stop monitor during vif channel update: %d", in ath11k_mac_update_vif_chan()
7477 ret = ath11k_mac_monitor_start(ar); in ath11k_mac_update_vif_chan()
7479 ath11k_warn(ar->ab, "failed to start monitor during vif channel update: %d", in ath11k_mac_update_vif_chan()
7487 ath11k_mac_update_active_vif_chan(struct ath11k *ar, in ath11k_mac_update_active_vif_chan() argument
7492 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_update_active_vif_chan()
7494 ieee80211_iterate_active_interfaces_atomic(ar->hw, in ath11k_mac_update_active_vif_chan()
7505 ieee80211_iterate_active_interfaces_atomic(ar->hw, in ath11k_mac_update_active_vif_chan()
7510 ath11k_mac_update_vif_chan(ar, arg.vifs, arg.n_vifs); in ath11k_mac_update_active_vif_chan()
7519 struct ath11k *ar = hw->priv; in ath11k_mac_op_change_chanctx() local
7520 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_change_chanctx()
7522 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_change_chanctx()
7536 ath11k_mac_update_active_vif_chan(ar, ctx); in ath11k_mac_op_change_chanctx()
7541 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_change_chanctx()
7547 struct ath11k *ar = hw->priv; in ath11k_start_vdev_delay() local
7548 struct ath11k_base *ab = ar->ab; in ath11k_start_vdev_delay()
7565 if (ar->hw_rate_code > 0) { in ath11k_start_vdev_delay()
7568 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, vdev_param, in ath11k_start_vdev_delay()
7569 ar->hw_rate_code); in ath11k_start_vdev_delay()
7571 ath11k_warn(ar->ab, "failed to set mgmt tx rate %d\n", ret); in ath11k_start_vdev_delay()
7577 ret = ath11k_wmi_vdev_up(ar, arvif->vdev_id, 0, ar->mac_addr, in ath11k_start_vdev_delay()
7597 struct ath11k *ar = hw->priv; in ath11k_mac_op_assign_vif_chanctx() local
7598 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_assign_vif_chanctx()
7603 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_assign_vif_chanctx()
7629 param.peer_addr = ar->mac_addr; in ath11k_mac_op_assign_vif_chanctx()
7631 ret = ath11k_peer_create(ar, arvif, NULL, &param); in ath11k_mac_op_assign_vif_chanctx()
7640 ret = ath11k_mac_monitor_start(ar); in ath11k_mac_op_assign_vif_chanctx()
7642 ath11k_warn(ar->ab, "failed to start monitor during vif channel context assignment: %d", in ath11k_mac_op_assign_vif_chanctx()
7662 test_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags)) { in ath11k_mac_op_assign_vif_chanctx()
7663 ret = ath11k_mac_monitor_start(ar); in ath11k_mac_op_assign_vif_chanctx()
7665 ath11k_warn(ar->ab, "failed to start monitor during vif channel context assignment: %d", in ath11k_mac_op_assign_vif_chanctx()
7676 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_assign_vif_chanctx()
7687 struct ath11k *ar = hw->priv; in ath11k_mac_op_unassign_vif_chanctx() local
7688 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_unassign_vif_chanctx()
7693 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_unassign_vif_chanctx()
7704 peer = ath11k_peer_find_by_addr(ab, ar->mac_addr); in ath11k_mac_op_unassign_vif_chanctx()
7707 ath11k_peer_delete(ar, arvif->vdev_id, ar->mac_addr); in ath11k_mac_op_unassign_vif_chanctx()
7711 ret = ath11k_mac_monitor_stop(ar); in ath11k_mac_op_unassign_vif_chanctx()
7713 ath11k_warn(ar->ab, "failed to stop monitor during vif channel context unassignment: %d", in ath11k_mac_op_unassign_vif_chanctx()
7715 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_unassign_vif_chanctx()
7720 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_unassign_vif_chanctx()
7733 ret = ath11k_peer_delete(ar, arvif->vdev_id, arvif->bssid); in ath11k_mac_op_unassign_vif_chanctx()
7735 ath11k_warn(ar->ab, in ath11k_mac_op_unassign_vif_chanctx()
7739 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_unassign_vif_chanctx()
7746 ath11k_wmi_vdev_down(ar, arvif->vdev_id); in ath11k_mac_op_unassign_vif_chanctx()
7749 ar->num_started_vdevs == 1 && in ath11k_mac_op_unassign_vif_chanctx()
7750 test_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags)) { in ath11k_mac_op_unassign_vif_chanctx()
7751 ret = ath11k_mac_monitor_stop(ar); in ath11k_mac_op_unassign_vif_chanctx()
7754 ath11k_warn(ar->ab, "failed to stop monitor during vif channel context unassignment: %d", in ath11k_mac_op_unassign_vif_chanctx()
7759 ath11k_mac_11d_scan_start(ar, arvif->vdev_id); in ath11k_mac_op_unassign_vif_chanctx()
7761 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_unassign_vif_chanctx()
7770 struct ath11k *ar = hw->priv; in ath11k_mac_op_switch_vif_chanctx() local
7772 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_switch_vif_chanctx()
7774 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_switch_vif_chanctx()
7777 ath11k_mac_update_vif_chan(ar, vifs, n_vifs); in ath11k_mac_op_switch_vif_chanctx()
7779 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_switch_vif_chanctx()
7785 ath11k_set_vdev_param_to_all_vifs(struct ath11k *ar, int param, u32 value) in ath11k_set_vdev_param_to_all_vifs() argument
7790 mutex_lock(&ar->conf_mutex); in ath11k_set_vdev_param_to_all_vifs()
7791 list_for_each_entry(arvif, &ar->arvifs, list) { in ath11k_set_vdev_param_to_all_vifs()
7792 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "setting mac vdev %d param %d value %d\n", in ath11k_set_vdev_param_to_all_vifs()
7795 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_set_vdev_param_to_all_vifs()
7798 ath11k_warn(ar->ab, "failed to set param %d for vdev %d: %d\n", in ath11k_set_vdev_param_to_all_vifs()
7803 mutex_unlock(&ar->conf_mutex); in ath11k_set_vdev_param_to_all_vifs()
7812 struct ath11k *ar = hw->priv; in ath11k_mac_op_set_rts_threshold() local
7815 return ath11k_set_vdev_param_to_all_vifs(ar, param_id, value); in ath11k_mac_op_set_rts_threshold()
7833 static int ath11k_mac_flush_tx_complete(struct ath11k *ar) in ath11k_mac_flush_tx_complete() argument
7838 time_left = wait_event_timeout(ar->dp.tx_empty_waitq, in ath11k_mac_flush_tx_complete()
7839 (atomic_read(&ar->dp.num_tx_pending) == 0), in ath11k_mac_flush_tx_complete()
7842 ath11k_warn(ar->ab, "failed to flush transmit queue, data pkts pending %d\n", in ath11k_mac_flush_tx_complete()
7843 atomic_read(&ar->dp.num_tx_pending)); in ath11k_mac_flush_tx_complete()
7847 time_left = wait_event_timeout(ar->txmgmt_empty_waitq, in ath11k_mac_flush_tx_complete()
7848 (atomic_read(&ar->num_pending_mgmt_tx) == 0), in ath11k_mac_flush_tx_complete()
7851 ath11k_warn(ar->ab, "failed to flush mgmt transmit queue, mgmt pkts pending %d\n", in ath11k_mac_flush_tx_complete()
7852 atomic_read(&ar->num_pending_mgmt_tx)); in ath11k_mac_flush_tx_complete()
7859 int ath11k_mac_wait_tx_complete(struct ath11k *ar) in ath11k_mac_wait_tx_complete() argument
7861 ath11k_mac_drain_tx(ar); in ath11k_mac_wait_tx_complete()
7862 return ath11k_mac_flush_tx_complete(ar); in ath11k_mac_wait_tx_complete()
7868 struct ath11k *ar = hw->priv; in ath11k_mac_op_flush() local
7873 ath11k_mac_flush_tx_complete(ar); in ath11k_mac_op_flush()
7877 ath11k_mac_has_single_legacy_rate(struct ath11k *ar, in ath11k_mac_has_single_legacy_rate() argument
7885 if (ath11k_mac_bitrate_mask_num_ht_rates(ar, band, mask)) in ath11k_mac_has_single_legacy_rate()
7888 if (ath11k_mac_bitrate_mask_num_vht_rates(ar, band, mask)) in ath11k_mac_has_single_legacy_rate()
7891 if (ath11k_mac_bitrate_mask_num_he_rates(ar, band, mask)) in ath11k_mac_has_single_legacy_rate()
7912 ath11k_mac_bitrate_mask_get_single_nss(struct ath11k *ar, in ath11k_mac_bitrate_mask_get_single_nss() argument
7917 struct ieee80211_supported_band *sband = &ar->mac.sbands[band]; in ath11k_mac_bitrate_mask_get_single_nss()
7977 ath11k_mac_get_single_legacy_rate(struct ath11k *ar, in ath11k_mac_get_single_legacy_rate() argument
8012 struct ath11k *ar = arvif->ar; in ath11k_mac_set_fixed_rate_gi_ltf() local
8019 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_set_fixed_rate_gi_ltf()
8022 ath11k_warn(ar->ab, "failed to set he gi %d: %d\n", in ath11k_mac_set_fixed_rate_gi_ltf()
8030 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_set_fixed_rate_gi_ltf()
8033 ath11k_warn(ar->ab, "failed to set he ltf %d: %d\n", in ath11k_mac_set_fixed_rate_gi_ltf()
8044 struct ath11k *ar = arvif->ar; in ath11k_mac_set_auto_rate_gi_ltf() local
8060 ath11k_warn(ar->ab, "invalid he gi: %d\n", he_gi); in ath11k_mac_set_auto_rate_gi_ltf()
8077 ath11k_warn(ar->ab, "invalid he ltf: %d\n", he_ltf); in ath11k_mac_set_auto_rate_gi_ltf()
8083 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_set_auto_rate_gi_ltf()
8087 ath11k_warn(ar->ab, in ath11k_mac_set_auto_rate_gi_ltf()
8100 struct ath11k *ar = arvif->ar; in ath11k_mac_set_rate_params() local
8104 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_set_rate_params()
8106 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_set_rate_params()
8113 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_set_rate_params()
8116 ath11k_warn(ar->ab, "failed to set fixed rate param 0x%02x: %d\n", in ath11k_mac_set_rate_params()
8123 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_set_rate_params()
8126 ath11k_warn(ar->ab, "failed to set nss param %d: %d\n", in ath11k_mac_set_rate_params()
8132 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_set_rate_params()
8135 ath11k_warn(ar->ab, "failed to set ldpc param %d: %d\n", in ath11k_mac_set_rate_params()
8145 ath11k_warn(ar->ab, "failed to set fixed rate gi ltf: %d\n", in ath11k_mac_set_rate_params()
8153 ath11k_warn(ar->ab, "failed to set auto rate gi ltf: %d\n", in ath11k_mac_set_rate_params()
8160 ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, in ath11k_mac_set_rate_params()
8163 ath11k_warn(ar->ab, "failed to set sgi param %d: %d\n", in ath11k_mac_set_rate_params()
8173 ath11k_mac_vht_mcs_range_present(struct ath11k *ar, in ath11k_mac_vht_mcs_range_present() argument
8198 ath11k_mac_he_mcs_range_present(struct ath11k *ar, in ath11k_mac_he_mcs_range_present() argument
8227 struct ath11k *ar = arvif->ar; in ath11k_mac_set_bitrate_mask_iter() local
8229 spin_lock_bh(&ar->data_lock); in ath11k_mac_set_bitrate_mask_iter()
8231 spin_unlock_bh(&ar->data_lock); in ath11k_mac_set_bitrate_mask_iter()
8233 ieee80211_queue_work(ar->hw, &arsta->update_wk); in ath11k_mac_set_bitrate_mask_iter()
8240 struct ath11k *ar = arvif->ar; in ath11k_mac_disable_peer_fixed_rate() local
8243 ret = ath11k_wmi_set_peer_param(ar, sta->addr, in ath11k_mac_disable_peer_fixed_rate()
8248 ath11k_warn(ar->ab, in ath11k_mac_disable_peer_fixed_rate()
8254 ath11k_mac_validate_vht_he_fixed_rate_settings(struct ath11k *ar, enum nl80211_band band, in ath11k_mac_validate_vht_he_fixed_rate_settings() argument
8267 if (ath11k_mac_bitrate_mask_num_vht_rates(ar, band, mask) == 1) in ath11k_mac_validate_vht_he_fixed_rate_settings()
8270 if (ath11k_mac_bitrate_mask_num_he_rates(ar, band, mask) == 1) in ath11k_mac_validate_vht_he_fixed_rate_settings()
8280 spin_lock_bh(&ar->ab->base_lock); in ath11k_mac_validate_vht_he_fixed_rate_settings()
8281 list_for_each_entry(peer, &ar->ab->peers, list) { in ath11k_mac_validate_vht_he_fixed_rate_settings()
8300 spin_unlock_bh(&ar->ab->base_lock); in ath11k_mac_validate_vht_he_fixed_rate_settings()
8313 struct ath11k *ar = arvif->ar; in ath11k_mac_op_set_bitrate_mask() local
8333 cap = &ar->pdev->cap; in ath11k_mac_op_set_bitrate_mask()
8354 if (ath11k_mac_has_single_legacy_rate(ar, band, mask)) { in ath11k_mac_op_set_bitrate_mask()
8355 ret = ath11k_mac_get_single_legacy_rate(ar, band, mask, &rate, in ath11k_mac_op_set_bitrate_mask()
8358 ath11k_warn(ar->ab, "failed to get single legacy rate for vdev %i: %d\n", in ath11k_mac_op_set_bitrate_mask()
8362 ieee80211_iterate_stations_atomic(ar->hw, in ath11k_mac_op_set_bitrate_mask()
8365 } else if (ath11k_mac_bitrate_mask_get_single_nss(ar, band, mask, in ath11k_mac_op_set_bitrate_mask()
8369 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_set_bitrate_mask()
8371 ieee80211_iterate_stations_atomic(ar->hw, in ath11k_mac_op_set_bitrate_mask()
8374 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_set_bitrate_mask()
8378 if (!ath11k_mac_validate_vht_he_fixed_rate_settings(ar, band, mask)) in ath11k_mac_op_set_bitrate_mask()
8379 ath11k_warn(ar->ab, in ath11k_mac_op_set_bitrate_mask()
8381 nss = min_t(u32, ar->num_tx_chains, in ath11k_mac_op_set_bitrate_mask()
8406 num_rates = ath11k_mac_bitrate_mask_num_vht_rates(ar, band, in ath11k_mac_op_set_bitrate_mask()
8409 if (!ath11k_mac_vht_mcs_range_present(ar, band, mask) && in ath11k_mac_op_set_bitrate_mask()
8414 ath11k_warn(ar->ab, in ath11k_mac_op_set_bitrate_mask()
8420 num_rates = ath11k_mac_bitrate_mask_num_he_rates(ar, band, in ath11k_mac_op_set_bitrate_mask()
8425 if (!ath11k_mac_he_mcs_range_present(ar, band, mask) && in ath11k_mac_op_set_bitrate_mask()
8427 ath11k_warn(ar->ab, in ath11k_mac_op_set_bitrate_mask()
8432 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_set_bitrate_mask()
8433 ieee80211_iterate_stations_atomic(ar->hw, in ath11k_mac_op_set_bitrate_mask()
8438 ieee80211_iterate_stations_atomic(ar->hw, in ath11k_mac_op_set_bitrate_mask()
8442 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_set_bitrate_mask()
8445 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_set_bitrate_mask()
8450 ath11k_warn(ar->ab, "failed to set rate params on vdev %i: %d\n", in ath11k_mac_op_set_bitrate_mask()
8454 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_set_bitrate_mask()
8463 struct ath11k *ar = hw->priv; in ath11k_mac_op_reconfig_complete() local
8464 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_reconfig_complete()
8471 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_reconfig_complete()
8473 if (ar->state == ATH11K_STATE_RESTARTED) { in ath11k_mac_op_reconfig_complete()
8474 ath11k_warn(ar->ab, "pdev %d successfully recovered\n", in ath11k_mac_op_reconfig_complete()
8475 ar->pdev->pdev_id); in ath11k_mac_op_reconfig_complete()
8476 ar->state = ATH11K_STATE_ON; in ath11k_mac_op_reconfig_complete()
8477 ieee80211_wake_queues(ar->hw); in ath11k_mac_op_reconfig_complete()
8479 if (ar->ab->hw_params.current_cc_support && in ath11k_mac_op_reconfig_complete()
8480 ar->alpha2[0] != 0 && ar->alpha2[1] != 0) { in ath11k_mac_op_reconfig_complete()
8483 memcpy(&set_current_param.alpha2, ar->alpha2, 2); in ath11k_mac_op_reconfig_complete()
8484 ath11k_wmi_send_set_current_country_cmd(ar, &set_current_param); in ath11k_mac_op_reconfig_complete()
8502 if (ar->ab->hw_params.support_fw_mac_sequence) { in ath11k_mac_op_reconfig_complete()
8503 list_for_each_entry(arvif, &ar->arvifs, list) { in ath11k_mac_op_reconfig_complete()
8510 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_reconfig_complete()
8514 ath11k_mac_update_bss_chan_survey(struct ath11k *ar, in ath11k_mac_update_bss_chan_survey() argument
8520 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_update_bss_chan_survey()
8522 if (!test_bit(WMI_TLV_SERVICE_BSS_CHANNEL_INFO_64, ar->ab->wmi_ab.svc_map) || in ath11k_mac_update_bss_chan_survey()
8523 ar->rx_channel != channel) in ath11k_mac_update_bss_chan_survey()
8526 if (ar->scan.state != ATH11K_SCAN_IDLE) { in ath11k_mac_update_bss_chan_survey()
8527 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_update_bss_chan_survey()
8532 reinit_completion(&ar->bss_survey_done); in ath11k_mac_update_bss_chan_survey()
8534 ret = ath11k_wmi_pdev_bss_chan_info_request(ar, type); in ath11k_mac_update_bss_chan_survey()
8536 ath11k_warn(ar->ab, "failed to send pdev bss chan info request\n"); in ath11k_mac_update_bss_chan_survey()
8540 ret = wait_for_completion_timeout(&ar->bss_survey_done, 3 * HZ); in ath11k_mac_update_bss_chan_survey()
8542 ath11k_warn(ar->ab, "bss channel survey timed out\n"); in ath11k_mac_update_bss_chan_survey()
8548 struct ath11k *ar = hw->priv; in ath11k_mac_op_get_survey() local
8556 ar_survey = &ar->survey[idx]; in ath11k_mac_op_get_survey()
8558 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_get_survey()
8580 ath11k_mac_update_bss_chan_survey(ar, &sband->channels[idx]); in ath11k_mac_op_get_survey()
8582 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_get_survey()
8584 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_get_survey()
8588 if (ar->rx_channel == survey->channel) in ath11k_mac_op_get_survey()
8592 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_get_survey()
8601 struct ath11k *ar = arsta->arvif->ar; in ath11k_mac_put_chain_rssi() local
8611 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_put_chain_rssi()
8631 struct ath11k *ar = arsta->arvif->ar; in ath11k_mac_op_sta_statistics() local
8634 ar->ab->wmi_ab.svc_map); in ath11k_mac_op_sta_statistics()
8661 ar->ab->hw_params.supports_rssi_stats && in ath11k_mac_op_sta_statistics()
8662 !ath11k_debugfs_get_fw_stats(ar, ar->pdev->pdev_id, 0, in ath11k_mac_op_sta_statistics()
8670 ar->ab->hw_params.supports_rssi_stats && in ath11k_mac_op_sta_statistics()
8671 !(ath11k_debugfs_get_fw_stats(ar, ar->pdev->pdev_id, 0, in ath11k_mac_op_sta_statistics()
8675 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, in ath11k_mac_op_sta_statistics()
8690 static void ath11k_generate_ns_mc_addr(struct ath11k *ar, in ath11k_generate_ns_mc_addr() argument
8706 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "NS solicited addr %pI6\n", in ath11k_generate_ns_mc_addr()
8715 struct ath11k *ar = hw->priv; in ath11k_mac_op_ipv6_changed() local
8723 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "op ipv6 changed\n"); in ath11k_mac_op_ipv6_changed()
8748 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "count %d ipv6 uc %pI6 scope %d\n", in ath11k_mac_op_ipv6_changed()
8753 ath11k_warn(ar->ab, "Unsupported ipv6 scope: %d\n", scope); in ath11k_mac_op_ipv6_changed()
8768 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "count %d ipv6 ac %pI6 scope %d\n", in ath11k_mac_op_ipv6_changed()
8773 ath11k_warn(ar->ab, "Unsupported ipv scope: %d\n", scope); in ath11k_mac_op_ipv6_changed()
8782 ath11k_generate_ns_mc_addr(ar, offload); in ath11k_mac_op_ipv6_changed()
8790 struct ath11k *ar = hw->priv; in ath11k_mac_op_set_rekey_data() local
8794 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "set rekey data vdev %d\n", in ath11k_mac_op_set_rekey_data()
8797 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_set_rekey_data()
8809 ath11k_dbg_dump(ar->ab, ATH11K_DBG_MAC, "kck", NULL, in ath11k_mac_op_set_rekey_data()
8811 ath11k_dbg_dump(ar->ab, ATH11K_DBG_MAC, "kek", NULL, in ath11k_mac_op_set_rekey_data()
8813 ath11k_dbg_dump(ar->ab, ATH11K_DBG_MAC, "replay ctr", NULL, in ath11k_mac_op_set_rekey_data()
8816 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_set_rekey_data()
8822 struct ath11k *ar = hw->priv; in ath11k_mac_op_set_bios_sar_specs() local
8832 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_set_bios_sar_specs()
8834 if (!test_bit(WMI_TLV_SERVICE_BIOS_SAR_SUPPORT, ar->ab->wmi_ab.svc_map) || in ath11k_mac_op_set_bios_sar_specs()
8835 !ar->ab->hw_params.bios_sar_capa) { in ath11k_mac_op_set_bios_sar_specs()
8840 ret = ath11k_wmi_pdev_set_bios_geo_table_param(ar); in ath11k_mac_op_set_bios_sar_specs()
8842 ath11k_warn(ar->ab, "failed to set geo table: %d\n", ret); in ath11k_mac_op_set_bios_sar_specs()
8855 ath11k_warn(ar->ab, "Ignore bad frequency index %u, max allowed %u\n", in ath11k_mac_op_set_bios_sar_specs()
8864 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "sar tbl[%d] = %d\n", in ath11k_mac_op_set_bios_sar_specs()
8869 ret = ath11k_wmi_pdev_set_bios_sar_table_param(ar, sar_tbl); in ath11k_mac_op_set_bios_sar_specs()
8871 ath11k_warn(ar->ab, "failed to set sar power: %d", ret); in ath11k_mac_op_set_bios_sar_specs()
8875 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_set_bios_sar_specs()
8883 struct ath11k *ar = hw->priv; in ath11k_mac_op_cancel_remain_on_channel() local
8885 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_cancel_remain_on_channel()
8887 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_cancel_remain_on_channel()
8888 ar->scan.roc_notify = false; in ath11k_mac_op_cancel_remain_on_channel()
8889 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_cancel_remain_on_channel()
8891 ath11k_scan_abort(ar); in ath11k_mac_op_cancel_remain_on_channel()
8893 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_cancel_remain_on_channel()
8895 cancel_delayed_work_sync(&ar->scan.timeout); in ath11k_mac_op_cancel_remain_on_channel()
8906 struct ath11k *ar = hw->priv; in ath11k_mac_op_remain_on_channel() local
8912 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_remain_on_channel()
8914 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_remain_on_channel()
8915 switch (ar->scan.state) { in ath11k_mac_op_remain_on_channel()
8917 reinit_completion(&ar->scan.started); in ath11k_mac_op_remain_on_channel()
8918 reinit_completion(&ar->scan.completed); in ath11k_mac_op_remain_on_channel()
8919 reinit_completion(&ar->scan.on_channel); in ath11k_mac_op_remain_on_channel()
8920 ar->scan.state = ATH11K_SCAN_STARTING; in ath11k_mac_op_remain_on_channel()
8921 ar->scan.is_roc = true; in ath11k_mac_op_remain_on_channel()
8922 ar->scan.vdev_id = arvif->vdev_id; in ath11k_mac_op_remain_on_channel()
8923 ar->scan.roc_freq = chan->center_freq; in ath11k_mac_op_remain_on_channel()
8924 ar->scan.roc_notify = true; in ath11k_mac_op_remain_on_channel()
8933 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_remain_on_channel()
8938 scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2; in ath11k_mac_op_remain_on_channel()
8941 ath11k_wmi_start_scan_init(ar, &arg); in ath11k_mac_op_remain_on_channel()
8960 ret = ath11k_start_scan(ar, &arg); in ath11k_mac_op_remain_on_channel()
8962 ath11k_warn(ar->ab, "failed to start roc scan: %d\n", ret); in ath11k_mac_op_remain_on_channel()
8964 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_remain_on_channel()
8965 ar->scan.state = ATH11K_SCAN_IDLE; in ath11k_mac_op_remain_on_channel()
8966 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_remain_on_channel()
8970 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3 * HZ); in ath11k_mac_op_remain_on_channel()
8972 ath11k_warn(ar->ab, "failed to switch to channel for roc scan\n"); in ath11k_mac_op_remain_on_channel()
8973 ret = ath11k_scan_stop(ar); in ath11k_mac_op_remain_on_channel()
8975 ath11k_warn(ar->ab, "failed to stop scan: %d\n", ret); in ath11k_mac_op_remain_on_channel()
8980 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout, in ath11k_mac_op_remain_on_channel()
8988 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_remain_on_channel()
8992 static int ath11k_fw_stats_request(struct ath11k *ar, in ath11k_fw_stats_request() argument
8995 struct ath11k_base *ab = ar->ab; in ath11k_fw_stats_request()
8999 lockdep_assert_held(&ar->conf_mutex); in ath11k_fw_stats_request()
9001 spin_lock_bh(&ar->data_lock); in ath11k_fw_stats_request()
9002 ar->fw_stats_done = false; in ath11k_fw_stats_request()
9003 ath11k_fw_stats_pdevs_free(&ar->fw_stats.pdevs); in ath11k_fw_stats_request()
9004 spin_unlock_bh(&ar->data_lock); in ath11k_fw_stats_request()
9006 reinit_completion(&ar->fw_stats_complete); in ath11k_fw_stats_request()
9008 ret = ath11k_wmi_send_stats_request_cmd(ar, req_param); in ath11k_fw_stats_request()
9015 time_left = wait_for_completion_timeout(&ar->fw_stats_complete, in ath11k_fw_stats_request()
9028 struct ath11k *ar = hw->priv; in ath11k_mac_op_get_txpower() local
9029 struct ath11k_base *ab = ar->ab; in ath11k_mac_op_get_txpower()
9040 mutex_lock(&ar->conf_mutex); in ath11k_mac_op_get_txpower()
9042 if (ar->state != ATH11K_STATE_ON) in ath11k_mac_op_get_txpower()
9045 req_param.pdev_id = ar->pdev->pdev_id; in ath11k_mac_op_get_txpower()
9048 ret = ath11k_fw_stats_request(ar, &req_param); in ath11k_mac_op_get_txpower()
9054 spin_lock_bh(&ar->data_lock); in ath11k_mac_op_get_txpower()
9055 pdev = list_first_entry_or_null(&ar->fw_stats.pdevs, in ath11k_mac_op_get_txpower()
9058 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_get_txpower()
9065 spin_unlock_bh(&ar->data_lock); in ath11k_mac_op_get_txpower()
9066 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_get_txpower()
9068 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "txpower from firmware %d, reported %d dBm\n", in ath11k_mac_op_get_txpower()
9073 mutex_unlock(&ar->conf_mutex); in ath11k_mac_op_get_txpower()
9076 ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "txpower from firmware NaN, reported %d dBm\n", in ath11k_mac_op_get_txpower()
9139 static void ath11k_mac_update_ch_list(struct ath11k *ar, in ath11k_mac_update_ch_list() argument
9155 static u32 ath11k_get_phy_id(struct ath11k *ar, u32 band) in ath11k_get_phy_id() argument
9157 struct ath11k_pdev *pdev = ar->pdev; in ath11k_get_phy_id()
9166 ath11k_warn(ar->ab, "unsupported phy cap:%d\n", band); in ath11k_get_phy_id()
9171 static int ath11k_mac_setup_channels_rates(struct ath11k *ar, in ath11k_mac_setup_channels_rates() argument
9184 reg_cap = &ar->ab->hal_reg_cap[ar->pdev_idx]; in ath11k_mac_setup_channels_rates()
9194 band = &ar->mac.sbands[NL80211_BAND_2GHZ]; in ath11k_mac_setup_channels_rates()
9200 ar->hw->wiphy->bands[NL80211_BAND_2GHZ] = band; in ath11k_mac_setup_channels_rates()
9202 if (ar->ab->hw_params.single_pdev_only) { in ath11k_mac_setup_channels_rates()
9203 phy_id = ath11k_get_phy_id(ar, WMI_HOST_WLAN_2G_CAP); in ath11k_mac_setup_channels_rates()
9204 temp_reg_cap = &ar->ab->hal_reg_cap[phy_id]; in ath11k_mac_setup_channels_rates()
9206 ath11k_mac_update_ch_list(ar, band, in ath11k_mac_setup_channels_rates()
9216 kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels); in ath11k_mac_setup_channels_rates()
9220 ar->supports_6ghz = true; in ath11k_mac_setup_channels_rates()
9221 band = &ar->mac.sbands[NL80211_BAND_6GHZ]; in ath11k_mac_setup_channels_rates()
9227 ar->hw->wiphy->bands[NL80211_BAND_6GHZ] = band; in ath11k_mac_setup_channels_rates()
9229 if (ar->ab->hw_params.single_pdev_only) { in ath11k_mac_setup_channels_rates()
9230 phy_id = ath11k_get_phy_id(ar, WMI_HOST_WLAN_5G_CAP); in ath11k_mac_setup_channels_rates()
9231 temp_reg_cap = &ar->ab->hal_reg_cap[phy_id]; in ath11k_mac_setup_channels_rates()
9234 ath11k_mac_update_ch_list(ar, band, in ath11k_mac_setup_channels_rates()
9244 kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels); in ath11k_mac_setup_channels_rates()
9245 kfree(ar->mac.sbands[NL80211_BAND_6GHZ].channels); in ath11k_mac_setup_channels_rates()
9249 band = &ar->mac.sbands[NL80211_BAND_5GHZ]; in ath11k_mac_setup_channels_rates()
9255 ar->hw->wiphy->bands[NL80211_BAND_5GHZ] = band; in ath11k_mac_setup_channels_rates()
9257 if (ar->ab->hw_params.single_pdev_only) { in ath11k_mac_setup_channels_rates()
9258 phy_id = ath11k_get_phy_id(ar, WMI_HOST_WLAN_5G_CAP); in ath11k_mac_setup_channels_rates()
9259 temp_reg_cap = &ar->ab->hal_reg_cap[phy_id]; in ath11k_mac_setup_channels_rates()
9262 ath11k_mac_update_ch_list(ar, band, in ath11k_mac_setup_channels_rates()
9271 static int ath11k_mac_setup_iface_combinations(struct ath11k *ar) in ath11k_mac_setup_iface_combinations() argument
9273 struct ath11k_base *ab = ar->ab; in ath11k_mac_setup_iface_combinations()
9313 ar->hw->wiphy->iface_combinations = combinations; in ath11k_mac_setup_iface_combinations()
9314 ar->hw->wiphy->n_iface_combinations = 1; in ath11k_mac_setup_iface_combinations()
9360 static void __ath11k_mac_unregister(struct ath11k *ar) in __ath11k_mac_unregister() argument
9362 cancel_work_sync(&ar->regd_update_work); in __ath11k_mac_unregister()
9364 ieee80211_unregister_hw(ar->hw); in __ath11k_mac_unregister()
9366 idr_for_each(&ar->txmgmt_idr, ath11k_mac_tx_mgmt_pending_free, ar); in __ath11k_mac_unregister()
9367 idr_destroy(&ar->txmgmt_idr); in __ath11k_mac_unregister()
9369 kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels); in __ath11k_mac_unregister()
9370 kfree(ar->mac.sbands[NL80211_BAND_5GHZ].channels); in __ath11k_mac_unregister()
9371 kfree(ar->mac.sbands[NL80211_BAND_6GHZ].channels); in __ath11k_mac_unregister()
9373 kfree(ar->hw->wiphy->iface_combinations[0].limits); in __ath11k_mac_unregister()
9374 kfree(ar->hw->wiphy->iface_combinations); in __ath11k_mac_unregister()
9376 SET_IEEE80211_DEV(ar->hw, NULL); in __ath11k_mac_unregister()
9381 struct ath11k *ar; in ath11k_mac_unregister() local
9387 ar = pdev->ar; in ath11k_mac_unregister()
9388 if (!ar) in ath11k_mac_unregister()
9391 __ath11k_mac_unregister(ar); in ath11k_mac_unregister()
9397 static int __ath11k_mac_register(struct ath11k *ar) in __ath11k_mac_register() argument
9399 struct ath11k_base *ab = ar->ab; in __ath11k_mac_register()
9400 struct ath11k_pdev_cap *cap = &ar->pdev->cap; in __ath11k_mac_register()
9415 ath11k_pdev_caps_update(ar); in __ath11k_mac_register()
9417 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr); in __ath11k_mac_register()
9419 SET_IEEE80211_DEV(ar->hw, ab->dev); in __ath11k_mac_register()
9421 ret = ath11k_mac_setup_channels_rates(ar, in __ath11k_mac_register()
9426 ath11k_mac_setup_ht_vht_cap(ar, cap, &ht_cap); in __ath11k_mac_register()
9427 ath11k_mac_setup_he_cap(ar, cap); in __ath11k_mac_register()
9429 ret = ath11k_mac_setup_iface_combinations(ar); in __ath11k_mac_register()
9431 ath11k_err(ar->ab, "failed to setup interface combinations: %d\n", ret); in __ath11k_mac_register()
9435 ar->hw->wiphy->available_antennas_rx = cap->rx_chain_mask; in __ath11k_mac_register()
9436 ar->hw->wiphy->available_antennas_tx = cap->tx_chain_mask; in __ath11k_mac_register()
9438 ar->hw->wiphy->interface_modes = ab->hw_params.interface_modes; in __ath11k_mac_register()
9440 if (ab->hw_params.single_pdev_only && ar->supports_6ghz) in __ath11k_mac_register()
9441 ieee80211_hw_set(ar->hw, SINGLE_SCAN_ON_ALL_BANDS); in __ath11k_mac_register()
9444 ieee80211_hw_set(ar->hw, SUPPORTS_MULTI_BSSID); in __ath11k_mac_register()
9445 ieee80211_hw_set(ar->hw, SUPPORTS_ONLY_HE_MULTI_BSSID); in __ath11k_mac_register()
9448 ieee80211_hw_set(ar->hw, SIGNAL_DBM); in __ath11k_mac_register()
9449 ieee80211_hw_set(ar->hw, SUPPORTS_PS); in __ath11k_mac_register()
9450 ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS); in __ath11k_mac_register()
9451 ieee80211_hw_set(ar->hw, MFP_CAPABLE); in __ath11k_mac_register()
9452 ieee80211_hw_set(ar->hw, REPORTS_TX_ACK_STATUS); in __ath11k_mac_register()
9453 ieee80211_hw_set(ar->hw, HAS_RATE_CONTROL); in __ath11k_mac_register()
9454 ieee80211_hw_set(ar->hw, AP_LINK_PS); in __ath11k_mac_register()
9455 ieee80211_hw_set(ar->hw, SPECTRUM_MGMT); in __ath11k_mac_register()
9456 ieee80211_hw_set(ar->hw, CONNECTION_MONITOR); in __ath11k_mac_register()
9457 ieee80211_hw_set(ar->hw, SUPPORTS_PER_STA_GTK); in __ath11k_mac_register()
9458 ieee80211_hw_set(ar->hw, WANT_MONITOR_VIF); in __ath11k_mac_register()
9459 ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA); in __ath11k_mac_register()
9460 ieee80211_hw_set(ar->hw, QUEUE_CONTROL); in __ath11k_mac_register()
9461 ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG); in __ath11k_mac_register()
9462 ieee80211_hw_set(ar->hw, REPORTS_LOW_ACK); in __ath11k_mac_register()
9465 ieee80211_hw_set(ar->hw, SUPPORTS_TX_ENCAP_OFFLOAD); in __ath11k_mac_register()
9466 ieee80211_hw_set(ar->hw, SUPPORTS_RX_DECAP_OFFLOAD); in __ath11k_mac_register()
9470 ieee80211_hw_set(ar->hw, SUPPORTS_VHT_EXT_NSS_BW); in __ath11k_mac_register()
9472 if ((ht_cap & WMI_HT_CAP_ENABLED) || ar->supports_6ghz) { in __ath11k_mac_register()
9473 ieee80211_hw_set(ar->hw, AMPDU_AGGREGATION); in __ath11k_mac_register()
9474 ieee80211_hw_set(ar->hw, TX_AMPDU_SETUP_IN_HW); in __ath11k_mac_register()
9475 ieee80211_hw_set(ar->hw, SUPPORTS_REORDERING_BUFFER); in __ath11k_mac_register()
9476 ieee80211_hw_set(ar->hw, SUPPORTS_AMSDU_IN_AMPDU); in __ath11k_mac_register()
9477 ieee80211_hw_set(ar->hw, USES_RSS); in __ath11k_mac_register()
9480 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS; in __ath11k_mac_register()
9481 ar->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; in __ath11k_mac_register()
9488 (ar->supports_6ghz && ab->hw_params.supports_dynamic_smps_6ghz)) in __ath11k_mac_register()
9489 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS; in __ath11k_mac_register()
9491 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID; in __ath11k_mac_register()
9492 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN; in __ath11k_mac_register()
9494 ar->hw->max_listen_interval = ATH11K_MAX_HW_LISTEN_INTERVAL; in __ath11k_mac_register()
9496 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; in __ath11k_mac_register()
9497 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH; in __ath11k_mac_register()
9498 ar->hw->wiphy->max_remain_on_channel_duration = 5000; in __ath11k_mac_register()
9500 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD; in __ath11k_mac_register()
9501 ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE | in __ath11k_mac_register()
9504 ar->max_num_stations = TARGET_NUM_STATIONS(ab); in __ath11k_mac_register()
9505 ar->max_num_peers = TARGET_NUM_PEERS_PDEV(ab); in __ath11k_mac_register()
9507 ar->hw->wiphy->max_ap_assoc_sta = ar->max_num_stations; in __ath11k_mac_register()
9509 if (test_bit(WMI_TLV_SERVICE_SPOOF_MAC_SUPPORT, ar->wmi->wmi_ab->svc_map)) { in __ath11k_mac_register()
9510 ar->hw->wiphy->features |= in __ath11k_mac_register()
9514 if (test_bit(WMI_TLV_SERVICE_NLO, ar->wmi->wmi_ab->svc_map)) { in __ath11k_mac_register()
9515 ar->hw->wiphy->max_sched_scan_ssids = WMI_PNO_MAX_SUPP_NETWORKS; in __ath11k_mac_register()
9516 ar->hw->wiphy->max_match_sets = WMI_PNO_MAX_SUPP_NETWORKS; in __ath11k_mac_register()
9517 ar->hw->wiphy->max_sched_scan_ie_len = WMI_PNO_MAX_IE_LENGTH; in __ath11k_mac_register()
9518 ar->hw->wiphy->max_sched_scan_plans = WMI_PNO_MAX_SCHED_SCAN_PLANS; in __ath11k_mac_register()
9519 ar->hw->wiphy->max_sched_scan_plan_interval = in __ath11k_mac_register()
9521 ar->hw->wiphy->max_sched_scan_plan_iterations = in __ath11k_mac_register()
9523 ar->hw->wiphy->features |= NL80211_FEATURE_ND_RANDOM_MAC_ADDR; in __ath11k_mac_register()
9526 ret = ath11k_wow_init(ar); in __ath11k_mac_register()
9528 ath11k_warn(ar->ab, "failed to init wow: %d\n", ret); in __ath11k_mac_register()
9533 ar->ab->wmi_ab.svc_map)) in __ath11k_mac_register()
9534 wiphy_ext_feature_set(ar->hw->wiphy, in __ath11k_mac_register()
9537 ar->hw->queues = ATH11K_HW_MAX_QUEUES; in __ath11k_mac_register()
9538 ar->hw->wiphy->tx_queue_len = ATH11K_QUEUE_LEN; in __ath11k_mac_register()
9539 ar->hw->offchannel_tx_hw_queue = ATH11K_HW_MAX_QUEUES - 1; in __ath11k_mac_register()
9540 ar->hw->max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HE; in __ath11k_mac_register()
9542 ar->hw->vif_data_size = sizeof(struct ath11k_vif); in __ath11k_mac_register()
9543 ar->hw->sta_data_size = sizeof(struct ath11k_sta); in __ath11k_mac_register()
9545 wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST); in __ath11k_mac_register()
9546 wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_STA_TX_PWR); in __ath11k_mac_register()
9548 ar->ab->wmi_ab.svc_map)) { in __ath11k_mac_register()
9549 wiphy_ext_feature_set(ar->hw->wiphy, in __ath11k_mac_register()
9551 ieee80211_hw_set(ar->hw, DETECTS_COLOR_COLLISION); in __ath11k_mac_register()
9554 ar->hw->wiphy->cipher_suites = cipher_suites; in __ath11k_mac_register()
9555 ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites); in __ath11k_mac_register()
9557 ar->hw->wiphy->iftype_ext_capab = ath11k_iftypes_ext_capa; in __ath11k_mac_register()
9558 ar->hw->wiphy->num_iftype_ext_capab = in __ath11k_mac_register()
9561 if (ar->supports_6ghz) { in __ath11k_mac_register()
9562 wiphy_ext_feature_set(ar->hw->wiphy, in __ath11k_mac_register()
9564 wiphy_ext_feature_set(ar->hw->wiphy, in __ath11k_mac_register()
9568 wiphy_ext_feature_set(ar->hw->wiphy, in __ath11k_mac_register()
9571 if (test_bit(WMI_TLV_SERVICE_RTT, ar->ab->wmi_ab.svc_map)) in __ath11k_mac_register()
9572 wiphy_ext_feature_set(ar->hw->wiphy, in __ath11k_mac_register()
9575 ar->hw->wiphy->mbssid_max_interfaces = TARGET_NUM_VDEVS(ab); in __ath11k_mac_register()
9576 ar->hw->wiphy->ema_max_profile_periodicity = TARGET_EMA_MAX_PROFILE_PERIOD; in __ath11k_mac_register()
9578 ath11k_reg_init(ar); in __ath11k_mac_register()
9581 ar->hw->netdev_features = NETIF_F_HW_CSUM; in __ath11k_mac_register()
9582 ieee80211_hw_set(ar->hw, SW_CRYPTO_CONTROL); in __ath11k_mac_register()
9583 ieee80211_hw_set(ar->hw, SUPPORT_FAST_XMIT); in __ath11k_mac_register()
9586 if (test_bit(WMI_TLV_SERVICE_BIOS_SAR_SUPPORT, ar->ab->wmi_ab.svc_map) && in __ath11k_mac_register()
9588 ar->hw->wiphy->sar_capa = ab->hw_params.bios_sar_capa; in __ath11k_mac_register()
9590 ret = ieee80211_register_hw(ar->hw); in __ath11k_mac_register()
9592 ath11k_err(ar->ab, "ieee80211 registration failed: %d\n", ret); in __ath11k_mac_register()
9602 ar->hw->wiphy->interface_modes &= ~BIT(NL80211_IFTYPE_MONITOR); in __ath11k_mac_register()
9605 ret = ath11k_regd_update(ar); in __ath11k_mac_register()
9607 ath11k_err(ar->ab, "ath11k regd update failed: %d\n", ret); in __ath11k_mac_register()
9615 memcpy(&ar->alpha2, ab->new_alpha2, 2); in __ath11k_mac_register()
9616 ret = ath11k_wmi_send_set_current_country_cmd(ar, &set_current_param); in __ath11k_mac_register()
9618 ath11k_warn(ar->ab, in __ath11k_mac_register()
9622 ret = ath11k_debugfs_register(ar); in __ath11k_mac_register()
9624 ath11k_err(ar->ab, "debugfs registration failed: %d\n", ret); in __ath11k_mac_register()
9631 ieee80211_unregister_hw(ar->hw); in __ath11k_mac_register()
9634 kfree(ar->hw->wiphy->iface_combinations[0].limits); in __ath11k_mac_register()
9635 kfree(ar->hw->wiphy->iface_combinations); in __ath11k_mac_register()
9638 kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels); in __ath11k_mac_register()
9639 kfree(ar->mac.sbands[NL80211_BAND_5GHZ].channels); in __ath11k_mac_register()
9640 kfree(ar->mac.sbands[NL80211_BAND_6GHZ].channels); in __ath11k_mac_register()
9643 SET_IEEE80211_DEV(ar->hw, NULL); in __ath11k_mac_register()
9649 struct ath11k *ar; in ath11k_mac_register() local
9670 ar = pdev->ar; in ath11k_mac_register()
9672 ether_addr_copy(ar->mac_addr, pdev->mac_addr); in ath11k_mac_register()
9675 ether_addr_copy(ar->mac_addr, ab->mac_addr); in ath11k_mac_register()
9677 ether_addr_copy(ar->mac_addr, mac_addr); in ath11k_mac_register()
9678 ar->mac_addr[4] += i; in ath11k_mac_register()
9681 idr_init(&ar->txmgmt_idr); in ath11k_mac_register()
9682 spin_lock_init(&ar->txmgmt_idr_lock); in ath11k_mac_register()
9684 ret = __ath11k_mac_register(ar); in ath11k_mac_register()
9688 init_waitqueue_head(&ar->txmgmt_empty_waitq); in ath11k_mac_register()
9696 ar = pdev->ar; in ath11k_mac_register()
9697 __ath11k_mac_unregister(ar); in ath11k_mac_register()
9708 struct ath11k *ar; in ath11k_mac_allocate() local
9725 ar = hw->priv; in ath11k_mac_allocate()
9726 ar->hw = hw; in ath11k_mac_allocate()
9727 ar->ab = ab; in ath11k_mac_allocate()
9728 ar->pdev = pdev; in ath11k_mac_allocate()
9729 ar->pdev_idx = i; in ath11k_mac_allocate()
9730 ar->lmac_id = ath11k_hw_get_mac_from_pdev_id(&ab->hw_params, i); in ath11k_mac_allocate()
9732 ar->wmi = &ab->wmi_ab.wmi[i]; in ath11k_mac_allocate()
9738 ar->cfg_tx_chainmask = pdev->cap.tx_chain_mask; in ath11k_mac_allocate()
9739 ar->cfg_rx_chainmask = pdev->cap.rx_chain_mask; in ath11k_mac_allocate()
9740 ar->num_tx_chains = get_num_chains(pdev->cap.tx_chain_mask); in ath11k_mac_allocate()
9741 ar->num_rx_chains = get_num_chains(pdev->cap.rx_chain_mask); in ath11k_mac_allocate()
9743 pdev->ar = ar; in ath11k_mac_allocate()
9744 spin_lock_init(&ar->data_lock); in ath11k_mac_allocate()
9745 INIT_LIST_HEAD(&ar->arvifs); in ath11k_mac_allocate()
9746 INIT_LIST_HEAD(&ar->ppdu_stats_info); in ath11k_mac_allocate()
9747 mutex_init(&ar->conf_mutex); in ath11k_mac_allocate()
9748 init_completion(&ar->vdev_setup_done); in ath11k_mac_allocate()
9749 init_completion(&ar->vdev_delete_done); in ath11k_mac_allocate()
9750 init_completion(&ar->peer_assoc_done); in ath11k_mac_allocate()
9751 init_completion(&ar->peer_delete_done); in ath11k_mac_allocate()
9752 init_completion(&ar->install_key_done); in ath11k_mac_allocate()
9753 init_completion(&ar->bss_survey_done); in ath11k_mac_allocate()
9754 init_completion(&ar->scan.started); in ath11k_mac_allocate()
9755 init_completion(&ar->scan.completed); in ath11k_mac_allocate()
9756 init_completion(&ar->scan.on_channel); in ath11k_mac_allocate()
9757 init_completion(&ar->thermal.wmi_sync); in ath11k_mac_allocate()
9759 INIT_DELAYED_WORK(&ar->scan.timeout, ath11k_scan_timeout_work); in ath11k_mac_allocate()
9760 INIT_WORK(&ar->regd_update_work, ath11k_regd_update_work); in ath11k_mac_allocate()
9762 INIT_WORK(&ar->wmi_mgmt_tx_work, ath11k_mgmt_over_wmi_tx_work); in ath11k_mac_allocate()
9763 skb_queue_head_init(&ar->wmi_mgmt_tx_queue); in ath11k_mac_allocate()
9765 clear_bit(ATH11K_FLAG_MONITOR_STARTED, &ar->monitor_flags); in ath11k_mac_allocate()
9767 ar->monitor_vdev_id = -1; in ath11k_mac_allocate()
9768 clear_bit(ATH11K_FLAG_MONITOR_VDEV_CREATED, &ar->monitor_flags); in ath11k_mac_allocate()
9769 ar->vdev_id_11d_scan = ATH11K_11D_INVALID_VDEV_ID; in ath11k_mac_allocate()
9770 init_completion(&ar->completed_11d_scan); in ath11k_mac_allocate()
9772 ath11k_fw_stats_init(ar); in ath11k_mac_allocate()
9785 struct ath11k *ar; in ath11k_mac_destroy() local
9791 ar = pdev->ar; in ath11k_mac_destroy()
9792 if (!ar) in ath11k_mac_destroy()
9795 ath11k_fw_stats_free(&ar->fw_stats); in ath11k_mac_destroy()
9796 ieee80211_free_hw(ar->hw); in ath11k_mac_destroy()
9797 pdev->ar = NULL; in ath11k_mac_destroy()
9805 struct ath11k *ar = arvif->ar; in ath11k_mac_vif_set_keepalive() local
9809 lockdep_assert_held(&ar->conf_mutex); in ath11k_mac_vif_set_keepalive()
9814 if (!test_bit(WMI_TLV_SERVICE_STA_KEEP_ALIVE, ar->ab->wmi_ab.svc_map)) in ath11k_mac_vif_set_keepalive()
9822 ret = ath11k_wmi_sta_keepalive(ar, &arg); in ath11k_mac_vif_set_keepalive()
9824 ath11k_warn(ar->ab, "failed to set keepalive on vdev %i: %d\n", in ath11k_mac_vif_set_keepalive()