Lines Matching refs:arvif

37 static int ath10k_send_key(struct ath10k_vif *arvif,  in ath10k_send_key()  argument
42 struct ath10k *ar = arvif->ar; in ath10k_send_key()
44 .vdev_id = arvif->vdev_id, in ath10k_send_key()
51 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_send_key()
73 if (memcmp(macaddr, arvif->vif->addr, ETH_ALEN)) in ath10k_send_key()
92 return ath10k_wmi_vdev_install_key(arvif->ar, &arg); in ath10k_send_key()
95 static int ath10k_install_key(struct ath10k_vif *arvif, in ath10k_install_key() argument
100 struct ath10k *ar = arvif->ar; in ath10k_install_key()
107 ret = ath10k_send_key(arvif, key, cmd, macaddr, def_idx); in ath10k_install_key()
118 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif, in ath10k_install_peer_wep_keys() argument
121 struct ath10k *ar = arvif->ar; in ath10k_install_peer_wep_keys()
130 peer = ath10k_peer_find(ar, arvif->vdev_id, addr); in ath10k_install_peer_wep_keys()
136 for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) { in ath10k_install_peer_wep_keys()
137 if (arvif->wep_keys[i] == NULL) in ath10k_install_peer_wep_keys()
140 if (arvif->def_wep_key_idx == i) in ath10k_install_peer_wep_keys()
145 ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY, in ath10k_install_peer_wep_keys()
151 peer->keys[i] = arvif->wep_keys[i]; in ath10k_install_peer_wep_keys()
158 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif, in ath10k_clear_peer_keys() argument
161 struct ath10k *ar = arvif->ar; in ath10k_clear_peer_keys()
170 peer = ath10k_peer_find(ar, arvif->vdev_id, addr); in ath10k_clear_peer_keys()
181 ret = ath10k_install_key(arvif, peer->keys[i], in ath10k_clear_peer_keys()
223 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif, in ath10k_clear_vdev_key() argument
226 struct ath10k *ar = arvif->ar; in ath10k_clear_vdev_key()
257 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr, false); in ath10k_clear_vdev_key()
395 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif) in ath10k_mac_set_kickout() argument
397 struct ath10k *ar = arvif->ar; in ath10k_mac_set_kickout()
406 arvif->vdev_id, ret); in ath10k_mac_set_kickout()
411 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, in ath10k_mac_set_kickout()
415 arvif->vdev_id, ret); in ath10k_mac_set_kickout()
420 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, in ath10k_mac_set_kickout()
424 arvif->vdev_id, ret); in ath10k_mac_set_kickout()
429 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, in ath10k_mac_set_kickout()
433 arvif->vdev_id, ret); in ath10k_mac_set_kickout()
440 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value) in ath10k_mac_set_rts() argument
442 struct ath10k *ar = arvif->ar; in ath10k_mac_set_rts()
446 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value); in ath10k_mac_set_rts()
449 static int ath10k_mac_set_frag(struct ath10k_vif *arvif, u32 value) in ath10k_mac_set_frag() argument
451 struct ath10k *ar = arvif->ar; in ath10k_mac_set_frag()
455 value = clamp_t(u32, arvif->ar->hw->wiphy->frag_threshold, in ath10k_mac_set_frag()
460 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value); in ath10k_mac_set_frag()
524 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif) in ath10k_mac_vif_beacon_free() argument
526 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_beacon_free()
530 if (!arvif->beacon) in ath10k_mac_vif_beacon_free()
533 if (!arvif->beacon_buf) in ath10k_mac_vif_beacon_free()
534 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr, in ath10k_mac_vif_beacon_free()
535 arvif->beacon->len, DMA_TO_DEVICE); in ath10k_mac_vif_beacon_free()
537 if (WARN_ON(arvif->beacon_state != ATH10K_BEACON_SCHEDULED && in ath10k_mac_vif_beacon_free()
538 arvif->beacon_state != ATH10K_BEACON_SENT)) in ath10k_mac_vif_beacon_free()
541 dev_kfree_skb_any(arvif->beacon); in ath10k_mac_vif_beacon_free()
543 arvif->beacon = NULL; in ath10k_mac_vif_beacon_free()
544 arvif->beacon_state = ATH10K_BEACON_SCHEDULED; in ath10k_mac_vif_beacon_free()
547 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif) in ath10k_mac_vif_beacon_cleanup() argument
549 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_beacon_cleanup()
553 ath10k_mac_vif_beacon_free(arvif); in ath10k_mac_vif_beacon_cleanup()
555 if (arvif->beacon_buf) { in ath10k_mac_vif_beacon_cleanup()
557 arvif->beacon_buf, arvif->beacon_paddr); in ath10k_mac_vif_beacon_cleanup()
558 arvif->beacon_buf = NULL; in ath10k_mac_vif_beacon_cleanup()
792 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif) in ath10k_recalc_rtscts_prot() argument
794 struct ath10k *ar = arvif->ar; in ath10k_recalc_rtscts_prot()
801 if (arvif->use_cts_prot || arvif->num_legacy_stations > 0) in ath10k_recalc_rtscts_prot()
804 if (arvif->num_legacy_stations > 0) in ath10k_recalc_rtscts_prot()
808 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_recalc_rtscts_prot()
875 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif, bool restart) in ath10k_vdev_start_restart() argument
877 struct ath10k *ar = arvif->ar; in ath10k_vdev_start_restart()
886 arg.vdev_id = arvif->vdev_id; in ath10k_vdev_start_restart()
887 arg.dtim_period = arvif->dtim_period; in ath10k_vdev_start_restart()
888 arg.bcn_intval = arvif->beacon_interval; in ath10k_vdev_start_restart()
899 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { in ath10k_vdev_start_restart()
900 arg.ssid = arvif->u.ap.ssid; in ath10k_vdev_start_restart()
901 arg.ssid_len = arvif->u.ap.ssid_len; in ath10k_vdev_start_restart()
902 arg.hidden_ssid = arvif->u.ap.hidden_ssid; in ath10k_vdev_start_restart()
907 } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) { in ath10k_vdev_start_restart()
908 arg.ssid = arvif->vif->bss_conf.ssid; in ath10k_vdev_start_restart()
909 arg.ssid_len = arvif->vif->bss_conf.ssid_len; in ath10k_vdev_start_restart()
942 static int ath10k_vdev_start(struct ath10k_vif *arvif) in ath10k_vdev_start() argument
944 return ath10k_vdev_start_restart(arvif, false); in ath10k_vdev_start()
947 static int ath10k_vdev_restart(struct ath10k_vif *arvif) in ath10k_vdev_restart() argument
949 return ath10k_vdev_start_restart(arvif, true); in ath10k_vdev_restart()
952 static int ath10k_vdev_stop(struct ath10k_vif *arvif) in ath10k_vdev_stop() argument
954 struct ath10k *ar = arvif->ar; in ath10k_vdev_stop()
961 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id); in ath10k_vdev_stop()
964 arvif->vdev_id, ret); in ath10k_vdev_stop()
971 arvif->vdev_id, ret); in ath10k_vdev_stop()
985 static int ath10k_mac_setup_bcn_p2p_ie(struct ath10k_vif *arvif, in ath10k_mac_setup_bcn_p2p_ie() argument
988 struct ath10k *ar = arvif->ar; in ath10k_mac_setup_bcn_p2p_ie()
993 if (arvif->vdev_type != WMI_VDEV_TYPE_AP) in ath10k_mac_setup_bcn_p2p_ie()
996 if (arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO) in ath10k_mac_setup_bcn_p2p_ie()
1007 ret = ath10k_wmi_p2p_go_bcn_ie(ar, arvif->vdev_id, p2p_ie); in ath10k_mac_setup_bcn_p2p_ie()
1010 arvif->vdev_id, ret); in ath10k_mac_setup_bcn_p2p_ie()
1047 static int ath10k_mac_setup_bcn_tmpl(struct ath10k_vif *arvif) in ath10k_mac_setup_bcn_tmpl() argument
1049 struct ath10k *ar = arvif->ar; in ath10k_mac_setup_bcn_tmpl()
1051 struct ieee80211_vif *vif = arvif->vif; in ath10k_mac_setup_bcn_tmpl()
1065 ret = ath10k_mac_setup_bcn_p2p_ie(arvif, bcn); in ath10k_mac_setup_bcn_tmpl()
1080 ret = ath10k_wmi_bcn_tmpl(ar, arvif->vdev_id, offs.tim_offset, bcn, 0, in ath10k_mac_setup_bcn_tmpl()
1093 static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif) in ath10k_mac_setup_prb_tmpl() argument
1095 struct ath10k *ar = arvif->ar; in ath10k_mac_setup_prb_tmpl()
1097 struct ieee80211_vif *vif = arvif->vif; in ath10k_mac_setup_prb_tmpl()
1110 ret = ath10k_wmi_prb_tmpl(ar, arvif->vdev_id, prb); in ath10k_mac_setup_prb_tmpl()
1122 static void ath10k_control_beaconing(struct ath10k_vif *arvif, in ath10k_control_beaconing() argument
1125 struct ath10k *ar = arvif->ar; in ath10k_control_beaconing()
1128 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_control_beaconing()
1131 ath10k_vdev_stop(arvif); in ath10k_control_beaconing()
1133 arvif->is_started = false; in ath10k_control_beaconing()
1134 arvif->is_up = false; in ath10k_control_beaconing()
1136 spin_lock_bh(&arvif->ar->data_lock); in ath10k_control_beaconing()
1137 ath10k_mac_vif_beacon_free(arvif); in ath10k_control_beaconing()
1138 spin_unlock_bh(&arvif->ar->data_lock); in ath10k_control_beaconing()
1143 arvif->tx_seq_no = 0x1000; in ath10k_control_beaconing()
1145 ret = ath10k_vdev_start(arvif); in ath10k_control_beaconing()
1149 arvif->aid = 0; in ath10k_control_beaconing()
1150 ether_addr_copy(arvif->bssid, info->bssid); in ath10k_control_beaconing()
1152 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, in ath10k_control_beaconing()
1153 arvif->bssid); in ath10k_control_beaconing()
1156 arvif->vdev_id, ret); in ath10k_control_beaconing()
1157 ath10k_vdev_stop(arvif); in ath10k_control_beaconing()
1161 arvif->is_started = true; in ath10k_control_beaconing()
1162 arvif->is_up = true; in ath10k_control_beaconing()
1164 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id); in ath10k_control_beaconing()
1167 static void ath10k_control_ibss(struct ath10k_vif *arvif, in ath10k_control_ibss() argument
1171 struct ath10k *ar = arvif->ar; in ath10k_control_ibss()
1175 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_control_ibss()
1178 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, self_peer); in ath10k_control_ibss()
1181 self_peer, arvif->vdev_id, ret); in ath10k_control_ibss()
1183 if (is_zero_ether_addr(arvif->bssid)) in ath10k_control_ibss()
1186 eth_zero_addr(arvif->bssid); in ath10k_control_ibss()
1191 ret = ath10k_peer_create(arvif->ar, arvif->vdev_id, self_peer); in ath10k_control_ibss()
1194 self_peer, arvif->vdev_id, ret); in ath10k_control_ibss()
1198 vdev_param = arvif->ar->wmi.vdev_param->atim_window; in ath10k_control_ibss()
1199 ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param, in ath10k_control_ibss()
1203 arvif->vdev_id, ret); in ath10k_control_ibss()
1206 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif) in ath10k_mac_vif_recalc_ps_wake_threshold() argument
1208 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_recalc_ps_wake_threshold()
1213 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_recalc_ps_wake_threshold()
1215 if (arvif->u.sta.uapsd) in ath10k_mac_vif_recalc_ps_wake_threshold()
1221 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, value); in ath10k_mac_vif_recalc_ps_wake_threshold()
1224 value, arvif->vdev_id, ret); in ath10k_mac_vif_recalc_ps_wake_threshold()
1231 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif) in ath10k_mac_vif_recalc_ps_poll_count() argument
1233 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_recalc_ps_poll_count()
1238 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_recalc_ps_poll_count()
1240 if (arvif->u.sta.uapsd) in ath10k_mac_vif_recalc_ps_poll_count()
1246 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_mac_vif_recalc_ps_poll_count()
1250 value, arvif->vdev_id, ret); in ath10k_mac_vif_recalc_ps_poll_count()
1259 struct ath10k_vif *arvif; in ath10k_mac_ps_vif_count() local
1264 list_for_each_entry(arvif, &ar->arvifs, list) in ath10k_mac_ps_vif_count()
1265 if (arvif->ps) in ath10k_mac_ps_vif_count()
1271 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif) in ath10k_mac_vif_setup_ps() argument
1273 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_setup_ps()
1274 struct ieee80211_vif *vif = arvif->vif; in ath10k_mac_vif_setup_ps()
1282 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_setup_ps()
1284 if (arvif->vif->type != NL80211_IFTYPE_STATION) in ath10k_mac_vif_setup_ps()
1287 enable_ps = arvif->ps; in ath10k_mac_vif_setup_ps()
1293 arvif->vdev_id); in ath10k_mac_vif_setup_ps()
1308 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, in ath10k_mac_vif_setup_ps()
1312 arvif->vdev_id, ret); in ath10k_mac_vif_setup_ps()
1320 arvif->vdev_id, psmode ? "enable" : "disable"); in ath10k_mac_vif_setup_ps()
1322 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode); in ath10k_mac_vif_setup_ps()
1325 psmode, arvif->vdev_id, ret); in ath10k_mac_vif_setup_ps()
1332 static int ath10k_mac_vif_disable_keepalive(struct ath10k_vif *arvif) in ath10k_mac_vif_disable_keepalive() argument
1334 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_disable_keepalive()
1338 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_disable_keepalive()
1340 if (arvif->vdev_type != WMI_VDEV_TYPE_STA) in ath10k_mac_vif_disable_keepalive()
1349 arg.vdev_id = arvif->vdev_id; in ath10k_mac_vif_disable_keepalive()
1357 arvif->vdev_id, ret); in ath10k_mac_vif_disable_keepalive()
1390 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_peer_assoc_h_basic() local
1395 arg->vdev_id = arvif->vdev_id; in ath10k_peer_assoc_h_basic()
1556 struct ath10k_vif *arvif, in ath10k_peer_assoc_qos_ap() argument
1585 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, in ath10k_peer_assoc_qos_ap()
1591 arvif->vdev_id, ret); in ath10k_peer_assoc_qos_ap()
1595 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, in ath10k_peer_assoc_qos_ap()
1601 arvif->vdev_id, ret); in ath10k_peer_assoc_qos_ap()
1609 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr, in ath10k_peer_assoc_qos_ap()
1614 arvif->vdev_id, ret); in ath10k_peer_assoc_qos_ap()
1672 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_peer_assoc_h_qos() local
1674 switch (arvif->vdev_type) { in ath10k_peer_assoc_h_qos()
1791 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif, in ath10k_setup_peer_smps() argument
1806 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr, in ath10k_setup_peer_smps()
1815 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_mac_vif_recalc_txbf() local
1863 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, value); in ath10k_mac_vif_recalc_txbf()
1879 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_bss_assoc() local
1889 arvif->vdev_id, arvif->bssid, arvif->aid); in ath10k_bss_assoc()
1896 bss_conf->bssid, arvif->vdev_id); in ath10k_bss_assoc()
1909 bss_conf->bssid, arvif->vdev_id, ret); in ath10k_bss_assoc()
1919 bss_conf->bssid, arvif->vdev_id, ret); in ath10k_bss_assoc()
1923 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap); in ath10k_bss_assoc()
1926 arvif->vdev_id, ret); in ath10k_bss_assoc()
1933 arvif->vdev_id, bss_conf->bssid, ret); in ath10k_bss_assoc()
1939 arvif->vdev_id, bss_conf->bssid, bss_conf->aid); in ath10k_bss_assoc()
1941 WARN_ON(arvif->is_up); in ath10k_bss_assoc()
1943 arvif->aid = bss_conf->aid; in ath10k_bss_assoc()
1944 ether_addr_copy(arvif->bssid, bss_conf->bssid); in ath10k_bss_assoc()
1946 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid); in ath10k_bss_assoc()
1949 arvif->vdev_id, ret); in ath10k_bss_assoc()
1953 arvif->is_up = true; in ath10k_bss_assoc()
1959 ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid, in ath10k_bss_assoc()
1963 arvif->bssid, arvif->vdev_id, ret); in ath10k_bss_assoc()
1972 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_bss_disassoc() local
1979 arvif->vdev_id, arvif->bssid); in ath10k_bss_disassoc()
1981 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); in ath10k_bss_disassoc()
1984 arvif->vdev_id, ret); in ath10k_bss_disassoc()
1986 arvif->def_wep_key_idx = -1; in ath10k_bss_disassoc()
1991 arvif->vdev_id, ret); in ath10k_bss_disassoc()
1995 arvif->is_up = false; in ath10k_bss_disassoc()
2003 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_station_assoc() local
2012 sta->addr, arvif->vdev_id, ret); in ath10k_station_assoc()
2020 sta->addr, arvif->vdev_id, ret); in ath10k_station_assoc()
2028 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr, in ath10k_station_assoc()
2032 arvif->vdev_id, ret); in ath10k_station_assoc()
2036 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta); in ath10k_station_assoc()
2039 sta->addr, arvif->vdev_id, ret); in ath10k_station_assoc()
2044 arvif->num_legacy_stations++; in ath10k_station_assoc()
2045 ret = ath10k_recalc_rtscts_prot(arvif); in ath10k_station_assoc()
2048 arvif->vdev_id, ret); in ath10k_station_assoc()
2054 if (arvif->def_wep_key_idx != -1) { in ath10k_station_assoc()
2055 ret = ath10k_install_peer_wep_keys(arvif, sta->addr); in ath10k_station_assoc()
2058 arvif->vdev_id, ret); in ath10k_station_assoc()
2071 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_station_disassoc() local
2077 arvif->num_legacy_stations--; in ath10k_station_disassoc()
2078 ret = ath10k_recalc_rtscts_prot(arvif); in ath10k_station_disassoc()
2081 arvif->vdev_id, ret); in ath10k_station_disassoc()
2086 ret = ath10k_clear_peer_keys(arvif, sta->addr); in ath10k_station_disassoc()
2089 arvif->vdev_id, ret); in ath10k_station_disassoc()
2337 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_tx_h_add_p2p_noa_ie() local
2340 if (arvif->vdev_type != WMI_VDEV_TYPE_AP || in ath10k_tx_h_add_p2p_noa_ie()
2341 arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO) in ath10k_tx_h_add_p2p_noa_ie()
2346 if (arvif->u.ap.noa_data) in ath10k_tx_h_add_p2p_noa_ie()
2347 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len, in ath10k_tx_h_add_p2p_noa_ie()
2349 memcpy(skb_put(skb, arvif->u.ap.noa_len), in ath10k_tx_h_add_p2p_noa_ie()
2350 arvif->u.ap.noa_data, in ath10k_tx_h_add_p2p_noa_ie()
2351 arvif->u.ap.noa_len); in ath10k_tx_h_add_p2p_noa_ie()
2757 struct ath10k_vif *arvif; in ath10k_halt() local
2776 list_for_each_entry(arvif, &ar->arvifs, list) in ath10k_halt()
2777 ath10k_mac_vif_beacon_cleanup(arvif); in ath10k_halt()
2978 struct ath10k_vif *arvif; in ath10k_config_ps() local
2983 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_config_ps()
2984 ret = ath10k_mac_vif_setup_ps(arvif); in ath10k_config_ps()
3019 struct ath10k_vif *arvif; in ath10k_config_chan() local
3036 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_config_chan()
3037 if (!arvif->is_started) in ath10k_config_chan()
3040 if (!arvif->is_up) in ath10k_config_chan()
3043 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) in ath10k_config_chan()
3046 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); in ath10k_config_chan()
3049 arvif->vdev_id, ret); in ath10k_config_chan()
3056 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_config_chan()
3057 if (!arvif->is_started) in ath10k_config_chan()
3060 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) in ath10k_config_chan()
3063 ret = ath10k_vdev_restart(arvif); in ath10k_config_chan()
3066 arvif->vdev_id, ret); in ath10k_config_chan()
3070 if (!arvif->is_up) in ath10k_config_chan()
3073 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, in ath10k_config_chan()
3074 arvif->bssid); in ath10k_config_chan()
3077 arvif->vdev_id, ret); in ath10k_config_chan()
3115 struct ath10k_vif *arvif; in ath10k_mac_txpower_recalc() local
3120 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_mac_txpower_recalc()
3121 WARN_ON(arvif->txpower < 0); in ath10k_mac_txpower_recalc()
3124 txpower = arvif->txpower; in ath10k_mac_txpower_recalc()
3126 txpower = min(txpower, arvif->txpower); in ath10k_mac_txpower_recalc()
3206 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_add_interface() local
3217 memset(arvif, 0, sizeof(*arvif)); in ath10k_add_interface()
3219 arvif->ar = ar; in ath10k_add_interface()
3220 arvif->vif = vif; in ath10k_add_interface()
3222 INIT_LIST_HEAD(&arvif->list); in ath10k_add_interface()
3234 arvif->vdev_id = bit; in ath10k_add_interface()
3235 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE; in ath10k_add_interface()
3239 arvif->vdev_type = WMI_VDEV_TYPE_STA; in ath10k_add_interface()
3240 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE; in ath10k_add_interface()
3244 arvif->vdev_type = WMI_VDEV_TYPE_STA; in ath10k_add_interface()
3246 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT; in ath10k_add_interface()
3249 arvif->vdev_type = WMI_VDEV_TYPE_IBSS; in ath10k_add_interface()
3252 arvif->vdev_type = WMI_VDEV_TYPE_AP; in ath10k_add_interface()
3255 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO; in ath10k_add_interface()
3258 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR; in ath10k_add_interface()
3283 arvif->beacon_buf = dma_zalloc_coherent(ar->dev, in ath10k_add_interface()
3285 &arvif->beacon_paddr, in ath10k_add_interface()
3287 if (!arvif->beacon_buf) { in ath10k_add_interface()
3296 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype, in ath10k_add_interface()
3297 arvif->beacon_buf ? "single-buf" : "per-skb"); in ath10k_add_interface()
3299 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type, in ath10k_add_interface()
3300 arvif->vdev_subtype, vif->addr); in ath10k_add_interface()
3303 arvif->vdev_id, ret); in ath10k_add_interface()
3307 ar->free_vdev_map &= ~(1LL << arvif->vdev_id); in ath10k_add_interface()
3308 list_add(&arvif->list, &ar->arvifs); in ath10k_add_interface()
3313 ret = ath10k_mac_vif_disable_keepalive(arvif); in ath10k_add_interface()
3316 arvif->vdev_id, ret); in ath10k_add_interface()
3320 arvif->def_wep_key_idx = -1; in ath10k_add_interface()
3323 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_add_interface()
3328 arvif->vdev_id, ret); in ath10k_add_interface()
3339 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_add_interface()
3343 arvif->vdev_id, ar->cfg_tx_chainmask, nss, in ath10k_add_interface()
3349 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { in ath10k_add_interface()
3350 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr); in ath10k_add_interface()
3353 arvif->vdev_id, ret); in ath10k_add_interface()
3357 ret = ath10k_mac_set_kickout(arvif); in ath10k_add_interface()
3360 arvif->vdev_id, ret); in ath10k_add_interface()
3365 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) { in ath10k_add_interface()
3368 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_add_interface()
3372 arvif->vdev_id, ret); in ath10k_add_interface()
3376 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif); in ath10k_add_interface()
3379 arvif->vdev_id, ret); in ath10k_add_interface()
3383 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif); in ath10k_add_interface()
3386 arvif->vdev_id, ret); in ath10k_add_interface()
3391 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold); in ath10k_add_interface()
3394 arvif->vdev_id, ret); in ath10k_add_interface()
3398 ret = ath10k_mac_set_frag(arvif, ar->hw->wiphy->frag_threshold); in ath10k_add_interface()
3401 arvif->vdev_id, ret); in ath10k_add_interface()
3405 arvif->txpower = vif->bss_conf.txpower; in ath10k_add_interface()
3416 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) in ath10k_add_interface()
3417 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr); in ath10k_add_interface()
3420 ath10k_wmi_vdev_delete(ar, arvif->vdev_id); in ath10k_add_interface()
3421 ar->free_vdev_map |= 1LL << arvif->vdev_id; in ath10k_add_interface()
3422 list_del(&arvif->list); in ath10k_add_interface()
3425 if (arvif->beacon_buf) { in ath10k_add_interface()
3427 arvif->beacon_buf, arvif->beacon_paddr); in ath10k_add_interface()
3428 arvif->beacon_buf = NULL; in ath10k_add_interface()
3440 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_remove_interface() local
3446 ath10k_mac_vif_beacon_cleanup(arvif); in ath10k_remove_interface()
3449 ret = ath10k_spectral_vif_stop(arvif); in ath10k_remove_interface()
3452 arvif->vdev_id, ret); in ath10k_remove_interface()
3454 ar->free_vdev_map |= 1LL << arvif->vdev_id; in ath10k_remove_interface()
3455 list_del(&arvif->list); in ath10k_remove_interface()
3457 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { in ath10k_remove_interface()
3458 ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id, in ath10k_remove_interface()
3462 arvif->vdev_id, ret); in ath10k_remove_interface()
3464 kfree(arvif->u.ap.noa_data); in ath10k_remove_interface()
3468 arvif->vdev_id); in ath10k_remove_interface()
3470 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id); in ath10k_remove_interface()
3473 arvif->vdev_id, ret); in ath10k_remove_interface()
3478 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { in ath10k_remove_interface()
3479 ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id, in ath10k_remove_interface()
3483 arvif->vdev_id, ret); in ath10k_remove_interface()
3490 ath10k_peer_cleanup(ar, arvif->vdev_id); in ath10k_remove_interface()
3535 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_bss_info_changed() local
3542 ath10k_control_ibss(arvif, info, vif->addr); in ath10k_bss_info_changed()
3545 arvif->beacon_interval = info->beacon_int; in ath10k_bss_info_changed()
3547 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
3548 arvif->beacon_interval); in ath10k_bss_info_changed()
3551 arvif->vdev_id, arvif->beacon_interval); in ath10k_bss_info_changed()
3555 arvif->vdev_id, ret); in ath10k_bss_info_changed()
3561 arvif->vdev_id); in ath10k_bss_info_changed()
3568 arvif->vdev_id, ret); in ath10k_bss_info_changed()
3570 ret = ath10k_mac_setup_bcn_tmpl(arvif); in ath10k_bss_info_changed()
3577 ret = ath10k_mac_setup_prb_tmpl(arvif); in ath10k_bss_info_changed()
3580 arvif->vdev_id, ret); in ath10k_bss_info_changed()
3584 arvif->dtim_period = info->dtim_period; in ath10k_bss_info_changed()
3588 arvif->vdev_id, arvif->dtim_period); in ath10k_bss_info_changed()
3591 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
3592 arvif->dtim_period); in ath10k_bss_info_changed()
3595 arvif->vdev_id, ret); in ath10k_bss_info_changed()
3600 arvif->u.ap.ssid_len = info->ssid_len; in ath10k_bss_info_changed()
3602 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len); in ath10k_bss_info_changed()
3603 arvif->u.ap.hidden_ssid = info->hidden_ssid; in ath10k_bss_info_changed()
3607 ether_addr_copy(arvif->bssid, info->bssid); in ath10k_bss_info_changed()
3610 ath10k_control_beaconing(arvif, info); in ath10k_bss_info_changed()
3613 arvif->use_cts_prot = info->use_cts_prot; in ath10k_bss_info_changed()
3615 arvif->vdev_id, info->use_cts_prot); in ath10k_bss_info_changed()
3617 ret = ath10k_recalc_rtscts_prot(arvif); in ath10k_bss_info_changed()
3620 arvif->vdev_id, ret); in ath10k_bss_info_changed()
3631 arvif->vdev_id, slottime); in ath10k_bss_info_changed()
3634 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
3638 arvif->vdev_id, ret); in ath10k_bss_info_changed()
3649 arvif->vdev_id, preamble); in ath10k_bss_info_changed()
3652 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
3656 arvif->vdev_id, ret); in ath10k_bss_info_changed()
3676 arvif->vdev_id, info->txpower); in ath10k_bss_info_changed()
3678 arvif->txpower = info->txpower; in ath10k_bss_info_changed()
3685 arvif->ps = vif->bss_conf.ps; in ath10k_bss_info_changed()
3690 arvif->vdev_id, ret); in ath10k_bss_info_changed()
3701 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_hw_scan() local
3716 ar->scan.vdev_id = arvif->vdev_id; in ath10k_hw_scan()
3732 arg.vdev_id = arvif->vdev_id; in ath10k_hw_scan()
3785 struct ath10k_vif *arvif, in ath10k_set_key_h_def_keyidx() argument
3789 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid; in ath10k_set_key_h_def_keyidx()
3800 if (arvif->vdev_type != WMI_VDEV_TYPE_AP) in ath10k_set_key_h_def_keyidx()
3815 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_set_key_h_def_keyidx()
3819 arvif->vdev_id, ret); in ath10k_set_key_h_def_keyidx()
3827 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_set_key() local
3842 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA) in ath10k_set_key()
3852 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr); in ath10k_set_key()
3870 arvif->wep_keys[key->keyidx] = key; in ath10k_set_key()
3872 arvif->wep_keys[key->keyidx] = NULL; in ath10k_set_key()
3875 ath10k_clear_vdev_key(arvif, key); in ath10k_set_key()
3882 if (arvif->def_wep_key_idx == -1) in ath10k_set_key()
3885 ret = ath10k_install_key(arvif, key, cmd, peer_addr, def_idx); in ath10k_set_key()
3888 arvif->vdev_id, peer_addr, ret); in ath10k_set_key()
3892 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key); in ath10k_set_key()
3895 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr); in ath10k_set_key()
3915 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_set_default_unicast_key() local
3918 mutex_lock(&arvif->ar->conf_mutex); in ath10k_set_default_unicast_key()
3920 if (arvif->ar->state != ATH10K_STATE_ON) in ath10k_set_default_unicast_key()
3924 arvif->vdev_id, keyidx); in ath10k_set_default_unicast_key()
3926 ret = ath10k_wmi_vdev_set_param(arvif->ar, in ath10k_set_default_unicast_key()
3927 arvif->vdev_id, in ath10k_set_default_unicast_key()
3928 arvif->ar->wmi.vdev_param->def_keyid, in ath10k_set_default_unicast_key()
3933 arvif->vdev_id, in ath10k_set_default_unicast_key()
3938 arvif->def_wep_key_idx = keyidx; in ath10k_set_default_unicast_key()
3940 mutex_unlock(&arvif->ar->conf_mutex); in ath10k_set_default_unicast_key()
3946 struct ath10k_vif *arvif; in ath10k_sta_rc_update_wk() local
3954 arvif = arsta->arvif; in ath10k_sta_rc_update_wk()
3955 ar = arvif->ar; in ath10k_sta_rc_update_wk()
3974 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, in ath10k_sta_rc_update_wk()
3985 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, in ath10k_sta_rc_update_wk()
3996 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, in ath10k_sta_rc_update_wk()
4008 err = ath10k_station_assoc(ar, arvif->vif, sta, true); in ath10k_sta_rc_update_wk()
4017 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif) in ath10k_mac_inc_num_stations() argument
4019 struct ath10k *ar = arvif->ar; in ath10k_mac_inc_num_stations()
4023 if (arvif->vdev_type != WMI_VDEV_TYPE_AP && in ath10k_mac_inc_num_stations()
4024 arvif->vdev_type != WMI_VDEV_TYPE_IBSS) in ath10k_mac_inc_num_stations()
4035 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif) in ath10k_mac_dec_num_stations() argument
4037 struct ath10k *ar = arvif->ar; in ath10k_mac_dec_num_stations()
4041 if (arvif->vdev_type != WMI_VDEV_TYPE_AP && in ath10k_mac_dec_num_stations()
4042 arvif->vdev_type != WMI_VDEV_TYPE_IBSS) in ath10k_mac_dec_num_stations()
4055 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_sta_state() local
4062 arsta->arvif = arvif; in ath10k_sta_state()
4080 arvif->vdev_id, sta->addr, in ath10k_sta_state()
4084 ret = ath10k_mac_inc_num_stations(arvif); in ath10k_sta_state()
4091 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr); in ath10k_sta_state()
4094 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
4095 ath10k_mac_dec_num_stations(arvif); in ath10k_sta_state()
4100 WARN_ON(arvif->is_started); in ath10k_sta_state()
4102 ret = ath10k_vdev_start(arvif); in ath10k_sta_state()
4105 arvif->vdev_id, ret); in ath10k_sta_state()
4106 WARN_ON(ath10k_peer_delete(ar, arvif->vdev_id, in ath10k_sta_state()
4108 ath10k_mac_dec_num_stations(arvif); in ath10k_sta_state()
4112 arvif->is_started = true; in ath10k_sta_state()
4121 arvif->vdev_id, sta->addr); in ath10k_sta_state()
4124 WARN_ON(!arvif->is_started); in ath10k_sta_state()
4126 ret = ath10k_vdev_stop(arvif); in ath10k_sta_state()
4129 arvif->vdev_id, ret); in ath10k_sta_state()
4131 arvif->is_started = false; in ath10k_sta_state()
4134 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr); in ath10k_sta_state()
4137 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
4139 ath10k_mac_dec_num_stations(arvif); in ath10k_sta_state()
4153 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
4167 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
4177 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_conf_tx_uapsd() local
4185 if (arvif->vdev_type != WMI_VDEV_TYPE_STA) in ath10k_conf_tx_uapsd()
4216 arvif->u.sta.uapsd |= value; in ath10k_conf_tx_uapsd()
4218 arvif->u.sta.uapsd &= ~value; in ath10k_conf_tx_uapsd()
4220 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_conf_tx_uapsd()
4222 arvif->u.sta.uapsd); in ath10k_conf_tx_uapsd()
4228 if (arvif->u.sta.uapsd) in ath10k_conf_tx_uapsd()
4233 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_conf_tx_uapsd()
4239 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif); in ath10k_conf_tx_uapsd()
4242 arvif->vdev_id, ret); in ath10k_conf_tx_uapsd()
4246 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif); in ath10k_conf_tx_uapsd()
4249 arvif->vdev_id, ret); in ath10k_conf_tx_uapsd()
4267 ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id, in ath10k_conf_tx_uapsd()
4268 arvif->bssid, &arg, 1); in ath10k_conf_tx_uapsd()
4285 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_conf_tx() local
4293 p = &arvif->wmm_params.ac_vo; in ath10k_conf_tx()
4296 p = &arvif->wmm_params.ac_vi; in ath10k_conf_tx()
4299 p = &arvif->wmm_params.ac_be; in ath10k_conf_tx()
4302 p = &arvif->wmm_params.ac_bk; in ath10k_conf_tx()
4323 ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id, in ath10k_conf_tx()
4324 &arvif->wmm_params); in ath10k_conf_tx()
4327 arvif->vdev_id, ret); in ath10k_conf_tx()
4334 ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params); in ath10k_conf_tx()
4359 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_remain_on_channel() local
4373 ar->scan.vdev_id = arvif->vdev_id; in ath10k_remain_on_channel()
4392 arg.vdev_id = arvif->vdev_id; in ath10k_remain_on_channel()
4450 struct ath10k_vif *arvif; in ath10k_set_rts_threshold() local
4454 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_set_rts_threshold()
4456 arvif->vdev_id, value); in ath10k_set_rts_threshold()
4458 ret = ath10k_mac_set_rts(arvif, value); in ath10k_set_rts_threshold()
4461 arvif->vdev_id, ret); in ath10k_set_rts_threshold()
4896 static int ath10k_set_fixed_rate_param(struct ath10k_vif *arvif, in ath10k_set_fixed_rate_param() argument
4901 struct ath10k *ar = arvif->ar; in ath10k_set_fixed_rate_param()
4907 if (arvif->fixed_rate == fixed_rate && in ath10k_set_fixed_rate_param()
4908 arvif->fixed_nss == fixed_nss && in ath10k_set_fixed_rate_param()
4909 arvif->force_sgi == force_sgi) in ath10k_set_fixed_rate_param()
4919 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, in ath10k_set_fixed_rate_param()
4928 arvif->fixed_rate = fixed_rate; in ath10k_set_fixed_rate_param()
4931 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, in ath10k_set_fixed_rate_param()
4941 arvif->fixed_nss = fixed_nss; in ath10k_set_fixed_rate_param()
4944 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_set_fixed_rate_param()
4954 arvif->force_sgi = force_sgi; in ath10k_set_fixed_rate_param()
4965 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_set_bitrate_mask() local
4966 struct ath10k *ar = arvif->ar; in ath10k_set_bitrate_mask()
4991 return ath10k_set_fixed_rate_param(arvif, fixed_rate, in ath10k_set_bitrate_mask()
5085 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_ampdu_action() local
5088 arvif->vdev_id, sta->addr, tid, action); in ath10k_ampdu_action()
5411 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_get_arvif_iter() local
5413 if (arvif->vdev_id == arvif_iter->vdev_id) in ath10k_get_arvif_iter()
5414 arvif_iter->arvif = arvif; in ath10k_get_arvif_iter()
5430 if (!arvif_iter.arvif) { in ath10k_get_arvif()
5435 return arvif_iter.arvif; in ath10k_get_arvif()