Lines Matching refs:arvif
161 static int ath10k_send_key(struct ath10k_vif *arvif, in ath10k_send_key() argument
166 struct ath10k *ar = arvif->ar; in ath10k_send_key()
168 .vdev_id = arvif->vdev_id, in ath10k_send_key()
176 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_send_key()
208 return ath10k_wmi_vdev_install_key(arvif->ar, &arg); in ath10k_send_key()
211 static int ath10k_install_key(struct ath10k_vif *arvif, in ath10k_install_key() argument
216 struct ath10k *ar = arvif->ar; in ath10k_install_key()
224 if (arvif->nohwcrypt) in ath10k_install_key()
227 ret = ath10k_send_key(arvif, key, cmd, macaddr, flags); in ath10k_install_key()
238 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif, in ath10k_install_peer_wep_keys() argument
241 struct ath10k *ar = arvif->ar; in ath10k_install_peer_wep_keys()
249 if (WARN_ON(arvif->vif->type != NL80211_IFTYPE_AP && in ath10k_install_peer_wep_keys()
250 arvif->vif->type != NL80211_IFTYPE_ADHOC)) in ath10k_install_peer_wep_keys()
254 peer = ath10k_peer_find(ar, arvif->vdev_id, addr); in ath10k_install_peer_wep_keys()
260 for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) { in ath10k_install_peer_wep_keys()
261 if (arvif->wep_keys[i] == NULL) in ath10k_install_peer_wep_keys()
264 switch (arvif->vif->type) { in ath10k_install_peer_wep_keys()
268 if (arvif->def_wep_key_idx == i) in ath10k_install_peer_wep_keys()
271 ret = ath10k_install_key(arvif, arvif->wep_keys[i], in ath10k_install_peer_wep_keys()
277 ret = ath10k_install_key(arvif, arvif->wep_keys[i], in ath10k_install_peer_wep_keys()
283 ret = ath10k_install_key(arvif, arvif->wep_keys[i], in ath10k_install_peer_wep_keys()
294 peer->keys[i] = arvif->wep_keys[i]; in ath10k_install_peer_wep_keys()
306 if (arvif->vif->type != NL80211_IFTYPE_ADHOC) in ath10k_install_peer_wep_keys()
309 if (arvif->def_wep_key_idx == -1) in ath10k_install_peer_wep_keys()
312 ret = ath10k_wmi_vdev_set_param(arvif->ar, in ath10k_install_peer_wep_keys()
313 arvif->vdev_id, in ath10k_install_peer_wep_keys()
314 arvif->ar->wmi.vdev_param->def_keyid, in ath10k_install_peer_wep_keys()
315 arvif->def_wep_key_idx); in ath10k_install_peer_wep_keys()
318 arvif->vdev_id, ret); in ath10k_install_peer_wep_keys()
325 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif, in ath10k_clear_peer_keys() argument
328 struct ath10k *ar = arvif->ar; in ath10k_clear_peer_keys()
338 peer = ath10k_peer_find(ar, arvif->vdev_id, addr); in ath10k_clear_peer_keys()
349 ret = ath10k_install_key(arvif, peer->keys[i], in ath10k_clear_peer_keys()
391 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif, in ath10k_clear_vdev_key() argument
394 struct ath10k *ar = arvif->ar; in ath10k_clear_vdev_key()
426 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr, flags); in ath10k_clear_vdev_key()
438 static int ath10k_mac_vif_update_wep_key(struct ath10k_vif *arvif, in ath10k_mac_vif_update_wep_key() argument
441 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_update_wep_key()
448 if (!memcmp(peer->addr, arvif->vif->addr, ETH_ALEN)) in ath10k_mac_vif_update_wep_key()
451 if (!memcmp(peer->addr, arvif->bssid, ETH_ALEN)) in ath10k_mac_vif_update_wep_key()
458 arvif->vdev_id, key->keyidx); in ath10k_mac_vif_update_wep_key()
460 ret = ath10k_install_peer_wep_keys(arvif, peer->addr); in ath10k_mac_vif_update_wep_key()
463 arvif->vdev_id, peer->addr, ret); in ath10k_mac_vif_update_wep_key()
620 struct ath10k_vif *arvif; in ath10k_peer_create() local
629 list_for_each_entry(arvif, &ar->arvifs, list) in ath10k_peer_create()
654 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif) in ath10k_mac_set_kickout() argument
656 struct ath10k *ar = arvif->ar; in ath10k_mac_set_kickout()
665 arvif->vdev_id, ret); in ath10k_mac_set_kickout()
670 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, in ath10k_mac_set_kickout()
674 arvif->vdev_id, ret); in ath10k_mac_set_kickout()
679 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, in ath10k_mac_set_kickout()
683 arvif->vdev_id, ret); in ath10k_mac_set_kickout()
688 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, in ath10k_mac_set_kickout()
692 arvif->vdev_id, ret); in ath10k_mac_set_kickout()
699 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value) in ath10k_mac_set_rts() argument
701 struct ath10k *ar = arvif->ar; in ath10k_mac_set_rts()
705 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value); in ath10k_mac_set_rts()
801 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif) in ath10k_mac_vif_beacon_free() argument
803 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_beacon_free()
807 if (!arvif->beacon) in ath10k_mac_vif_beacon_free()
810 if (!arvif->beacon_buf) in ath10k_mac_vif_beacon_free()
811 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr, in ath10k_mac_vif_beacon_free()
812 arvif->beacon->len, DMA_TO_DEVICE); in ath10k_mac_vif_beacon_free()
814 if (WARN_ON(arvif->beacon_state != ATH10K_BEACON_SCHEDULED && in ath10k_mac_vif_beacon_free()
815 arvif->beacon_state != ATH10K_BEACON_SENT)) in ath10k_mac_vif_beacon_free()
818 dev_kfree_skb_any(arvif->beacon); in ath10k_mac_vif_beacon_free()
820 arvif->beacon = NULL; in ath10k_mac_vif_beacon_free()
821 arvif->beacon_state = ATH10K_BEACON_SCHEDULED; in ath10k_mac_vif_beacon_free()
824 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif) in ath10k_mac_vif_beacon_cleanup() argument
826 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_beacon_cleanup()
830 ath10k_mac_vif_beacon_free(arvif); in ath10k_mac_vif_beacon_cleanup()
832 if (arvif->beacon_buf) { in ath10k_mac_vif_beacon_cleanup()
834 arvif->beacon_buf, arvif->beacon_paddr); in ath10k_mac_vif_beacon_cleanup()
835 arvif->beacon_buf = NULL; in ath10k_mac_vif_beacon_cleanup()
1130 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif) in ath10k_recalc_rtscts_prot() argument
1132 struct ath10k *ar = arvif->ar; in ath10k_recalc_rtscts_prot()
1141 if (arvif->num_legacy_stations > 0) in ath10k_recalc_rtscts_prot()
1148 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_recalc_rtscts_prot()
1236 static int ath10k_vdev_stop(struct ath10k_vif *arvif) in ath10k_vdev_stop() argument
1238 struct ath10k *ar = arvif->ar; in ath10k_vdev_stop()
1245 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id); in ath10k_vdev_stop()
1248 arvif->vdev_id, ret); in ath10k_vdev_stop()
1255 arvif->vdev_id, ret); in ath10k_vdev_stop()
1269 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif, in ath10k_vdev_start_restart() argument
1273 struct ath10k *ar = arvif->ar; in ath10k_vdev_start_restart()
1281 arg.vdev_id = arvif->vdev_id; in ath10k_vdev_start_restart()
1282 arg.dtim_period = arvif->dtim_period; in ath10k_vdev_start_restart()
1283 arg.bcn_intval = arvif->beacon_interval; in ath10k_vdev_start_restart()
1294 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { in ath10k_vdev_start_restart()
1295 arg.ssid = arvif->u.ap.ssid; in ath10k_vdev_start_restart()
1296 arg.ssid_len = arvif->u.ap.ssid_len; in ath10k_vdev_start_restart()
1297 arg.hidden_ssid = arvif->u.ap.hidden_ssid; in ath10k_vdev_start_restart()
1302 } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) { in ath10k_vdev_start_restart()
1303 arg.ssid = arvif->vif->bss_conf.ssid; in ath10k_vdev_start_restart()
1304 arg.ssid_len = arvif->vif->bss_conf.ssid_len; in ath10k_vdev_start_restart()
1337 static int ath10k_vdev_start(struct ath10k_vif *arvif, in ath10k_vdev_start() argument
1340 return ath10k_vdev_start_restart(arvif, def, false); in ath10k_vdev_start()
1343 static int ath10k_vdev_restart(struct ath10k_vif *arvif, in ath10k_vdev_restart() argument
1346 return ath10k_vdev_start_restart(arvif, def, true); in ath10k_vdev_restart()
1349 static int ath10k_mac_setup_bcn_p2p_ie(struct ath10k_vif *arvif, in ath10k_mac_setup_bcn_p2p_ie() argument
1352 struct ath10k *ar = arvif->ar; in ath10k_mac_setup_bcn_p2p_ie()
1357 if (arvif->vdev_type != WMI_VDEV_TYPE_AP) in ath10k_mac_setup_bcn_p2p_ie()
1360 if (arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO) in ath10k_mac_setup_bcn_p2p_ie()
1371 ret = ath10k_wmi_p2p_go_bcn_ie(ar, arvif->vdev_id, p2p_ie); in ath10k_mac_setup_bcn_p2p_ie()
1374 arvif->vdev_id, ret); in ath10k_mac_setup_bcn_p2p_ie()
1411 static int ath10k_mac_setup_bcn_tmpl(struct ath10k_vif *arvif) in ath10k_mac_setup_bcn_tmpl() argument
1413 struct ath10k *ar = arvif->ar; in ath10k_mac_setup_bcn_tmpl()
1415 struct ieee80211_vif *vif = arvif->vif; in ath10k_mac_setup_bcn_tmpl()
1423 if (arvif->vdev_type != WMI_VDEV_TYPE_AP && in ath10k_mac_setup_bcn_tmpl()
1424 arvif->vdev_type != WMI_VDEV_TYPE_IBSS) in ath10k_mac_setup_bcn_tmpl()
1433 ret = ath10k_mac_setup_bcn_p2p_ie(arvif, bcn); in ath10k_mac_setup_bcn_tmpl()
1448 ret = ath10k_wmi_bcn_tmpl(ar, arvif->vdev_id, offs.tim_offset, bcn, 0, in ath10k_mac_setup_bcn_tmpl()
1461 static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif) in ath10k_mac_setup_prb_tmpl() argument
1463 struct ath10k *ar = arvif->ar; in ath10k_mac_setup_prb_tmpl()
1465 struct ieee80211_vif *vif = arvif->vif; in ath10k_mac_setup_prb_tmpl()
1472 if (arvif->vdev_type != WMI_VDEV_TYPE_AP) in ath10k_mac_setup_prb_tmpl()
1481 ret = ath10k_wmi_prb_tmpl(ar, arvif->vdev_id, prb); in ath10k_mac_setup_prb_tmpl()
1493 static int ath10k_mac_vif_fix_hidden_ssid(struct ath10k_vif *arvif) in ath10k_mac_vif_fix_hidden_ssid() argument
1495 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_fix_hidden_ssid()
1517 if (WARN_ON(!arvif->is_started)) in ath10k_mac_vif_fix_hidden_ssid()
1520 if (WARN_ON(!arvif->is_up)) in ath10k_mac_vif_fix_hidden_ssid()
1523 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) in ath10k_mac_vif_fix_hidden_ssid()
1526 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); in ath10k_mac_vif_fix_hidden_ssid()
1529 arvif->vdev_id, ret); in ath10k_mac_vif_fix_hidden_ssid()
1537 ret = ath10k_mac_setup_bcn_tmpl(arvif); in ath10k_mac_vif_fix_hidden_ssid()
1543 ret = ath10k_mac_setup_prb_tmpl(arvif); in ath10k_mac_vif_fix_hidden_ssid()
1549 ret = ath10k_vdev_restart(arvif, &def); in ath10k_mac_vif_fix_hidden_ssid()
1552 arvif->vdev_id, ret); in ath10k_mac_vif_fix_hidden_ssid()
1556 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, in ath10k_mac_vif_fix_hidden_ssid()
1557 arvif->bssid); in ath10k_mac_vif_fix_hidden_ssid()
1560 arvif->vdev_id, ret); in ath10k_mac_vif_fix_hidden_ssid()
1567 static void ath10k_control_beaconing(struct ath10k_vif *arvif, in ath10k_control_beaconing() argument
1570 struct ath10k *ar = arvif->ar; in ath10k_control_beaconing()
1573 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_control_beaconing()
1576 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); in ath10k_control_beaconing()
1579 arvif->vdev_id, ret); in ath10k_control_beaconing()
1581 arvif->is_up = false; in ath10k_control_beaconing()
1583 spin_lock_bh(&arvif->ar->data_lock); in ath10k_control_beaconing()
1584 ath10k_mac_vif_beacon_free(arvif); in ath10k_control_beaconing()
1585 spin_unlock_bh(&arvif->ar->data_lock); in ath10k_control_beaconing()
1590 arvif->tx_seq_no = 0x1000; in ath10k_control_beaconing()
1592 arvif->aid = 0; in ath10k_control_beaconing()
1593 ether_addr_copy(arvif->bssid, info->bssid); in ath10k_control_beaconing()
1595 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, in ath10k_control_beaconing()
1596 arvif->bssid); in ath10k_control_beaconing()
1599 arvif->vdev_id, ret); in ath10k_control_beaconing()
1603 arvif->is_up = true; in ath10k_control_beaconing()
1605 ret = ath10k_mac_vif_fix_hidden_ssid(arvif); in ath10k_control_beaconing()
1608 arvif->vdev_id, ret); in ath10k_control_beaconing()
1612 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id); in ath10k_control_beaconing()
1615 static void ath10k_control_ibss(struct ath10k_vif *arvif, in ath10k_control_ibss() argument
1619 struct ath10k *ar = arvif->ar; in ath10k_control_ibss()
1623 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_control_ibss()
1626 if (is_zero_ether_addr(arvif->bssid)) in ath10k_control_ibss()
1629 eth_zero_addr(arvif->bssid); in ath10k_control_ibss()
1634 vdev_param = arvif->ar->wmi.vdev_param->atim_window; in ath10k_control_ibss()
1635 ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param, in ath10k_control_ibss()
1639 arvif->vdev_id, ret); in ath10k_control_ibss()
1642 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif) in ath10k_mac_vif_recalc_ps_wake_threshold() argument
1644 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_recalc_ps_wake_threshold()
1649 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_recalc_ps_wake_threshold()
1651 if (arvif->u.sta.uapsd) in ath10k_mac_vif_recalc_ps_wake_threshold()
1657 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, value); in ath10k_mac_vif_recalc_ps_wake_threshold()
1660 value, arvif->vdev_id, ret); in ath10k_mac_vif_recalc_ps_wake_threshold()
1667 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif) in ath10k_mac_vif_recalc_ps_poll_count() argument
1669 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_recalc_ps_poll_count()
1674 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_recalc_ps_poll_count()
1676 if (arvif->u.sta.uapsd) in ath10k_mac_vif_recalc_ps_poll_count()
1682 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_mac_vif_recalc_ps_poll_count()
1686 value, arvif->vdev_id, ret); in ath10k_mac_vif_recalc_ps_poll_count()
1695 struct ath10k_vif *arvif; in ath10k_mac_num_vifs_started() local
1700 list_for_each_entry(arvif, &ar->arvifs, list) in ath10k_mac_num_vifs_started()
1701 if (arvif->is_started) in ath10k_mac_num_vifs_started()
1707 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif) in ath10k_mac_vif_setup_ps() argument
1709 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_setup_ps()
1710 struct ieee80211_vif *vif = arvif->vif; in ath10k_mac_vif_setup_ps()
1718 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_setup_ps()
1720 if (arvif->vif->type != NL80211_IFTYPE_STATION) in ath10k_mac_vif_setup_ps()
1723 enable_ps = arvif->ps; in ath10k_mac_vif_setup_ps()
1729 arvif->vdev_id); in ath10k_mac_vif_setup_ps()
1733 if (!arvif->is_started) { in ath10k_mac_vif_setup_ps()
1751 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, in ath10k_mac_vif_setup_ps()
1755 arvif->vdev_id, ret); in ath10k_mac_vif_setup_ps()
1763 arvif->vdev_id, psmode ? "enable" : "disable"); in ath10k_mac_vif_setup_ps()
1765 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode); in ath10k_mac_vif_setup_ps()
1768 psmode, arvif->vdev_id, ret); in ath10k_mac_vif_setup_ps()
1775 static int ath10k_mac_vif_disable_keepalive(struct ath10k_vif *arvif) in ath10k_mac_vif_disable_keepalive() argument
1777 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_disable_keepalive()
1781 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_disable_keepalive()
1783 if (arvif->vdev_type != WMI_VDEV_TYPE_STA) in ath10k_mac_vif_disable_keepalive()
1792 arg.vdev_id = arvif->vdev_id; in ath10k_mac_vif_disable_keepalive()
1800 arvif->vdev_id, ret); in ath10k_mac_vif_disable_keepalive()
1807 static void ath10k_mac_vif_ap_csa_count_down(struct ath10k_vif *arvif) in ath10k_mac_vif_ap_csa_count_down() argument
1809 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_ap_csa_count_down()
1810 struct ieee80211_vif *vif = arvif->vif; in ath10k_mac_vif_ap_csa_count_down()
1813 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_ap_csa_count_down()
1818 if (arvif->vdev_type != WMI_VDEV_TYPE_AP) in ath10k_mac_vif_ap_csa_count_down()
1824 if (!arvif->is_up) in ath10k_mac_vif_ap_csa_count_down()
1830 ret = ath10k_mac_setup_bcn_tmpl(arvif); in ath10k_mac_vif_ap_csa_count_down()
1835 ret = ath10k_mac_setup_prb_tmpl(arvif); in ath10k_mac_vif_ap_csa_count_down()
1846 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif, in ath10k_mac_vif_ap_csa_work() local
1848 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_ap_csa_work()
1851 ath10k_mac_vif_ap_csa_count_down(arvif); in ath10k_mac_vif_ap_csa_work()
1860 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_mac_handle_beacon_iter() local
1868 cancel_delayed_work(&arvif->connection_loss_work); in ath10k_mac_handle_beacon_iter()
1883 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_mac_handle_beacon_miss_iter() local
1884 struct ath10k *ar = arvif->ar; in ath10k_mac_handle_beacon_miss_iter()
1887 if (arvif->vdev_id != *vdev_id) in ath10k_mac_handle_beacon_miss_iter()
1890 if (!arvif->is_up) in ath10k_mac_handle_beacon_miss_iter()
1900 ieee80211_queue_delayed_work(hw, &arvif->connection_loss_work, in ath10k_mac_handle_beacon_miss_iter()
1914 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif, in ath10k_mac_vif_sta_connection_loss_work() local
1916 struct ieee80211_vif *vif = arvif->vif; in ath10k_mac_vif_sta_connection_loss_work()
1918 if (!arvif->is_up) in ath10k_mac_vif_sta_connection_loss_work()
1950 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_peer_assoc_h_basic() local
1961 arg->vdev_id = arvif->vdev_id; in ath10k_peer_assoc_h_basic()
2019 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_peer_assoc_h_rates() local
2037 ratemask &= arvif->bitrate_mask.control[band].legacy; in ath10k_peer_assoc_h_rates()
2082 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_peer_assoc_h_ht() local
2100 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs; in ath10k_peer_assoc_h_ht()
2101 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs; in ath10k_peer_assoc_h_ht()
2125 if (arvif->bitrate_mask.control[band].gi != NL80211_TXRATE_FORCE_LGI) { in ath10k_peer_assoc_h_ht()
2183 struct ath10k_vif *arvif, in ath10k_peer_assoc_qos_ap() argument
2212 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, in ath10k_peer_assoc_qos_ap()
2218 arvif->vdev_id, ret); in ath10k_peer_assoc_qos_ap()
2222 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, in ath10k_peer_assoc_qos_ap()
2228 arvif->vdev_id, ret); in ath10k_peer_assoc_qos_ap()
2236 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr, in ath10k_peer_assoc_qos_ap()
2241 arvif->vdev_id, ret); in ath10k_peer_assoc_qos_ap()
2306 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_peer_assoc_h_vht() local
2319 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs; in ath10k_peer_assoc_h_vht()
2364 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_peer_assoc_h_qos() local
2366 switch (arvif->vdev_type) { in ath10k_peer_assoc_h_qos()
2403 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_peer_assoc_h_phymode() local
2414 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs; in ath10k_peer_assoc_h_phymode()
2415 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs; in ath10k_peer_assoc_h_phymode()
2499 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif, in ath10k_setup_peer_smps() argument
2514 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr, in ath10k_setup_peer_smps()
2523 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_mac_vif_recalc_txbf() local
2574 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, value); in ath10k_mac_vif_recalc_txbf()
2590 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_bss_assoc() local
2600 arvif->vdev_id, arvif->bssid, arvif->aid); in ath10k_bss_assoc()
2607 bss_conf->bssid, arvif->vdev_id); in ath10k_bss_assoc()
2620 bss_conf->bssid, arvif->vdev_id, ret); in ath10k_bss_assoc()
2630 bss_conf->bssid, arvif->vdev_id, ret); in ath10k_bss_assoc()
2634 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap); in ath10k_bss_assoc()
2637 arvif->vdev_id, ret); in ath10k_bss_assoc()
2644 arvif->vdev_id, bss_conf->bssid, ret); in ath10k_bss_assoc()
2650 arvif->vdev_id, bss_conf->bssid, bss_conf->aid); in ath10k_bss_assoc()
2652 WARN_ON(arvif->is_up); in ath10k_bss_assoc()
2654 arvif->aid = bss_conf->aid; in ath10k_bss_assoc()
2655 ether_addr_copy(arvif->bssid, bss_conf->bssid); in ath10k_bss_assoc()
2657 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid); in ath10k_bss_assoc()
2660 arvif->vdev_id, ret); in ath10k_bss_assoc()
2664 arvif->is_up = true; in ath10k_bss_assoc()
2670 ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid, in ath10k_bss_assoc()
2674 arvif->bssid, arvif->vdev_id, ret); in ath10k_bss_assoc()
2683 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_bss_disassoc() local
2690 arvif->vdev_id, arvif->bssid); in ath10k_bss_disassoc()
2692 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); in ath10k_bss_disassoc()
2695 arvif->vdev_id, ret); in ath10k_bss_disassoc()
2697 arvif->def_wep_key_idx = -1; in ath10k_bss_disassoc()
2702 arvif->vdev_id, ret); in ath10k_bss_disassoc()
2706 arvif->is_up = false; in ath10k_bss_disassoc()
2708 cancel_delayed_work_sync(&arvif->connection_loss_work); in ath10k_bss_disassoc()
2716 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_station_assoc() local
2725 sta->addr, arvif->vdev_id, ret); in ath10k_station_assoc()
2732 sta->addr, arvif->vdev_id, ret); in ath10k_station_assoc()
2740 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr, in ath10k_station_assoc()
2744 arvif->vdev_id, ret); in ath10k_station_assoc()
2748 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta); in ath10k_station_assoc()
2751 sta->addr, arvif->vdev_id, ret); in ath10k_station_assoc()
2756 arvif->num_legacy_stations++; in ath10k_station_assoc()
2757 ret = ath10k_recalc_rtscts_prot(arvif); in ath10k_station_assoc()
2760 arvif->vdev_id, ret); in ath10k_station_assoc()
2766 if (arvif->def_wep_key_idx != -1) { in ath10k_station_assoc()
2767 ret = ath10k_install_peer_wep_keys(arvif, sta->addr); in ath10k_station_assoc()
2770 arvif->vdev_id, ret); in ath10k_station_assoc()
2783 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_station_disassoc() local
2789 arvif->num_legacy_stations--; in ath10k_station_disassoc()
2790 ret = ath10k_recalc_rtscts_prot(arvif); in ath10k_station_disassoc()
2793 arvif->vdev_id, ret); in ath10k_station_disassoc()
2798 ret = ath10k_clear_peer_keys(arvif, sta->addr); in ath10k_station_disassoc()
2801 arvif->vdev_id, ret); in ath10k_station_disassoc()
3002 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_mac_tx_unlock_iter() local
3004 if (arvif->tx_paused) in ath10k_mac_tx_unlock_iter()
3007 ieee80211_wake_queue(ar->hw, arvif->vdev_id); in ath10k_mac_tx_unlock_iter()
3028 void ath10k_mac_vif_tx_lock(struct ath10k_vif *arvif, int reason) in ath10k_mac_vif_tx_lock() argument
3030 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_tx_lock()
3035 arvif->tx_paused |= BIT(reason); in ath10k_mac_vif_tx_lock()
3036 ieee80211_stop_queue(ar->hw, arvif->vdev_id); in ath10k_mac_vif_tx_lock()
3039 void ath10k_mac_vif_tx_unlock(struct ath10k_vif *arvif, int reason) in ath10k_mac_vif_tx_unlock() argument
3041 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_tx_unlock()
3046 arvif->tx_paused &= ~BIT(reason); in ath10k_mac_vif_tx_unlock()
3051 if (arvif->tx_paused) in ath10k_mac_vif_tx_unlock()
3054 ieee80211_wake_queue(ar->hw, arvif->vdev_id); in ath10k_mac_vif_tx_unlock()
3057 static void ath10k_mac_vif_handle_tx_pause(struct ath10k_vif *arvif, in ath10k_mac_vif_handle_tx_pause() argument
3061 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_handle_tx_pause()
3067 ath10k_mac_vif_tx_lock(arvif, pause_id); in ath10k_mac_vif_handle_tx_pause()
3070 ath10k_mac_vif_tx_unlock(arvif, pause_id); in ath10k_mac_vif_handle_tx_pause()
3074 action, arvif->vdev_id); in ath10k_mac_vif_handle_tx_pause()
3088 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_mac_handle_tx_pause_iter() local
3091 if (arvif->vdev_id != arg->vdev_id) in ath10k_mac_handle_tx_pause_iter()
3094 ath10k_mac_vif_handle_tx_pause(arvif, arg->pause_id, arg->action); in ath10k_mac_handle_tx_pause_iter()
3264 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_tx_h_add_p2p_noa_ie() local
3267 if (arvif->vdev_type != WMI_VDEV_TYPE_AP || in ath10k_tx_h_add_p2p_noa_ie()
3268 arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO) in ath10k_tx_h_add_p2p_noa_ie()
3273 if (arvif->u.ap.noa_data) in ath10k_tx_h_add_p2p_noa_ie()
3274 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len, in ath10k_tx_h_add_p2p_noa_ie()
3276 memcpy(skb_put(skb, arvif->u.ap.noa_len), in ath10k_tx_h_add_p2p_noa_ie()
3277 arvif->u.ap.noa_data, in ath10k_tx_h_add_p2p_noa_ie()
3278 arvif->u.ap.noa_len); in ath10k_tx_h_add_p2p_noa_ie()
3707 struct ath10k_vif *arvif; in ath10k_halt() local
3728 list_for_each_entry(arvif, &ar->arvifs, list) in ath10k_halt()
3729 ath10k_mac_vif_beacon_cleanup(arvif); in ath10k_halt()
4131 struct ath10k_vif *arvif; in ath10k_config_ps() local
4136 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_config_ps()
4137 ret = ath10k_mac_vif_setup_ps(arvif); in ath10k_config_ps()
4177 struct ath10k_vif *arvif; in ath10k_mac_txpower_recalc() local
4182 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_mac_txpower_recalc()
4183 WARN_ON(arvif->txpower < 0); in ath10k_mac_txpower_recalc()
4186 txpower = arvif->txpower; in ath10k_mac_txpower_recalc()
4188 txpower = min(txpower, arvif->txpower); in ath10k_mac_txpower_recalc()
4237 static int ath10k_mac_set_txbf_conf(struct ath10k_vif *arvif) in ath10k_mac_set_txbf_conf() argument
4240 struct ath10k *ar = arvif->ar; in ath10k_mac_set_txbf_conf()
4274 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, in ath10k_mac_set_txbf_conf()
4289 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_add_interface() local
4301 memset(arvif, 0, sizeof(*arvif)); in ath10k_add_interface()
4303 arvif->ar = ar; in ath10k_add_interface()
4304 arvif->vif = vif; in ath10k_add_interface()
4306 INIT_LIST_HEAD(&arvif->list); in ath10k_add_interface()
4307 INIT_WORK(&arvif->ap_csa_work, ath10k_mac_vif_ap_csa_work); in ath10k_add_interface()
4308 INIT_DELAYED_WORK(&arvif->connection_loss_work, in ath10k_add_interface()
4311 for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) { in ath10k_add_interface()
4312 arvif->bitrate_mask.control[i].legacy = 0xffffffff; in ath10k_add_interface()
4313 memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff, in ath10k_add_interface()
4314 sizeof(arvif->bitrate_mask.control[i].ht_mcs)); in ath10k_add_interface()
4315 memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff, in ath10k_add_interface()
4316 sizeof(arvif->bitrate_mask.control[i].vht_mcs)); in ath10k_add_interface()
4335 arvif->vdev_id = bit; in ath10k_add_interface()
4336 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE; in ath10k_add_interface()
4340 arvif->vdev_type = WMI_VDEV_TYPE_STA; in ath10k_add_interface()
4341 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE; in ath10k_add_interface()
4345 arvif->vdev_type = WMI_VDEV_TYPE_STA; in ath10k_add_interface()
4347 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT; in ath10k_add_interface()
4350 arvif->vdev_type = WMI_VDEV_TYPE_IBSS; in ath10k_add_interface()
4358 arvif->vdev_type = WMI_VDEV_TYPE_AP; in ath10k_add_interface()
4361 arvif->vdev_type = WMI_VDEV_TYPE_AP; in ath10k_add_interface()
4364 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO; in ath10k_add_interface()
4367 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR; in ath10k_add_interface()
4379 vif->cab_queue = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1); in ath10k_add_interface()
4381 vif->hw_queue[i] = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1); in ath10k_add_interface()
4402 arvif->beacon_buf = dma_zalloc_coherent(ar->dev, in ath10k_add_interface()
4404 &arvif->beacon_paddr, in ath10k_add_interface()
4406 if (!arvif->beacon_buf) { in ath10k_add_interface()
4414 arvif->nohwcrypt = true; in ath10k_add_interface()
4416 if (arvif->nohwcrypt && in ath10k_add_interface()
4423 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype, in ath10k_add_interface()
4424 arvif->beacon_buf ? "single-buf" : "per-skb"); in ath10k_add_interface()
4426 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type, in ath10k_add_interface()
4427 arvif->vdev_subtype, vif->addr); in ath10k_add_interface()
4430 arvif->vdev_id, ret); in ath10k_add_interface()
4434 ar->free_vdev_map &= ~(1LL << arvif->vdev_id); in ath10k_add_interface()
4435 list_add(&arvif->list, &ar->arvifs); in ath10k_add_interface()
4440 ret = ath10k_mac_vif_disable_keepalive(arvif); in ath10k_add_interface()
4443 arvif->vdev_id, ret); in ath10k_add_interface()
4447 arvif->def_wep_key_idx = -1; in ath10k_add_interface()
4450 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_add_interface()
4455 arvif->vdev_id, ret); in ath10k_add_interface()
4466 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_add_interface()
4470 arvif->vdev_id, ar->cfg_tx_chainmask, nss, in ath10k_add_interface()
4476 if (arvif->vdev_type == WMI_VDEV_TYPE_AP || in ath10k_add_interface()
4477 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) { in ath10k_add_interface()
4478 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr, in ath10k_add_interface()
4482 arvif->vdev_id, ret); in ath10k_add_interface()
4487 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { in ath10k_add_interface()
4488 ret = ath10k_mac_set_kickout(arvif); in ath10k_add_interface()
4491 arvif->vdev_id, ret); in ath10k_add_interface()
4496 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) { in ath10k_add_interface()
4499 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_add_interface()
4503 arvif->vdev_id, ret); in ath10k_add_interface()
4507 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif); in ath10k_add_interface()
4510 arvif->vdev_id, ret); in ath10k_add_interface()
4514 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif); in ath10k_add_interface()
4517 arvif->vdev_id, ret); in ath10k_add_interface()
4522 ret = ath10k_mac_set_txbf_conf(arvif); in ath10k_add_interface()
4525 arvif->vdev_id, ret); in ath10k_add_interface()
4529 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold); in ath10k_add_interface()
4532 arvif->vdev_id, ret); in ath10k_add_interface()
4536 arvif->txpower = vif->bss_conf.txpower; in ath10k_add_interface()
4544 ar->monitor_arvif = arvif; in ath10k_add_interface()
4554 ieee80211_wake_queue(ar->hw, arvif->vdev_id); in ath10k_add_interface()
4561 if (arvif->vdev_type == WMI_VDEV_TYPE_AP || in ath10k_add_interface()
4562 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) in ath10k_add_interface()
4563 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr); in ath10k_add_interface()
4566 ath10k_wmi_vdev_delete(ar, arvif->vdev_id); in ath10k_add_interface()
4567 ar->free_vdev_map |= 1LL << arvif->vdev_id; in ath10k_add_interface()
4568 list_del(&arvif->list); in ath10k_add_interface()
4571 if (arvif->beacon_buf) { in ath10k_add_interface()
4573 arvif->beacon_buf, arvif->beacon_paddr); in ath10k_add_interface()
4574 arvif->beacon_buf = NULL; in ath10k_add_interface()
4582 static void ath10k_mac_vif_tx_unlock_all(struct ath10k_vif *arvif) in ath10k_mac_vif_tx_unlock_all() argument
4587 ath10k_mac_vif_tx_unlock(arvif, i); in ath10k_mac_vif_tx_unlock_all()
4594 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_remove_interface() local
4597 cancel_work_sync(&arvif->ap_csa_work); in ath10k_remove_interface()
4598 cancel_delayed_work_sync(&arvif->connection_loss_work); in ath10k_remove_interface()
4603 ath10k_mac_vif_beacon_cleanup(arvif); in ath10k_remove_interface()
4606 ret = ath10k_spectral_vif_stop(arvif); in ath10k_remove_interface()
4609 arvif->vdev_id, ret); in ath10k_remove_interface()
4611 ar->free_vdev_map |= 1LL << arvif->vdev_id; in ath10k_remove_interface()
4612 list_del(&arvif->list); in ath10k_remove_interface()
4614 if (arvif->vdev_type == WMI_VDEV_TYPE_AP || in ath10k_remove_interface()
4615 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) { in ath10k_remove_interface()
4616 ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id, in ath10k_remove_interface()
4620 arvif->vdev_id, ret); in ath10k_remove_interface()
4622 kfree(arvif->u.ap.noa_data); in ath10k_remove_interface()
4626 arvif->vdev_id); in ath10k_remove_interface()
4628 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id); in ath10k_remove_interface()
4631 arvif->vdev_id, ret); in ath10k_remove_interface()
4636 if (arvif->vdev_type == WMI_VDEV_TYPE_AP || in ath10k_remove_interface()
4637 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) { in ath10k_remove_interface()
4638 ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id, in ath10k_remove_interface()
4642 arvif->vdev_id, ret); in ath10k_remove_interface()
4649 ath10k_peer_cleanup(ar, arvif->vdev_id); in ath10k_remove_interface()
4659 ath10k_mac_vif_tx_unlock_all(arvif); in ath10k_remove_interface()
4704 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_bss_info_changed() local
4711 ath10k_control_ibss(arvif, info, vif->addr); in ath10k_bss_info_changed()
4714 arvif->beacon_interval = info->beacon_int; in ath10k_bss_info_changed()
4716 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
4717 arvif->beacon_interval); in ath10k_bss_info_changed()
4720 arvif->vdev_id, arvif->beacon_interval); in ath10k_bss_info_changed()
4724 arvif->vdev_id, ret); in ath10k_bss_info_changed()
4730 arvif->vdev_id); in ath10k_bss_info_changed()
4737 arvif->vdev_id, ret); in ath10k_bss_info_changed()
4739 ret = ath10k_mac_setup_bcn_tmpl(arvif); in ath10k_bss_info_changed()
4746 strncpy(arvif->u.ap.ssid, "mesh", in ath10k_bss_info_changed()
4747 sizeof(arvif->u.ap.ssid)); in ath10k_bss_info_changed()
4748 arvif->u.ap.ssid_len = 4; in ath10k_bss_info_changed()
4753 ret = ath10k_mac_setup_prb_tmpl(arvif); in ath10k_bss_info_changed()
4756 arvif->vdev_id, ret); in ath10k_bss_info_changed()
4760 arvif->dtim_period = info->dtim_period; in ath10k_bss_info_changed()
4764 arvif->vdev_id, arvif->dtim_period); in ath10k_bss_info_changed()
4767 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
4768 arvif->dtim_period); in ath10k_bss_info_changed()
4771 arvif->vdev_id, ret); in ath10k_bss_info_changed()
4776 arvif->u.ap.ssid_len = info->ssid_len; in ath10k_bss_info_changed()
4778 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len); in ath10k_bss_info_changed()
4779 arvif->u.ap.hidden_ssid = info->hidden_ssid; in ath10k_bss_info_changed()
4783 ether_addr_copy(arvif->bssid, info->bssid); in ath10k_bss_info_changed()
4786 ath10k_control_beaconing(arvif, info); in ath10k_bss_info_changed()
4789 arvif->use_cts_prot = info->use_cts_prot; in ath10k_bss_info_changed()
4791 arvif->vdev_id, info->use_cts_prot); in ath10k_bss_info_changed()
4793 ret = ath10k_recalc_rtscts_prot(arvif); in ath10k_bss_info_changed()
4796 arvif->vdev_id, ret); in ath10k_bss_info_changed()
4799 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
4803 info->use_cts_prot, arvif->vdev_id, ret); in ath10k_bss_info_changed()
4814 arvif->vdev_id, slottime); in ath10k_bss_info_changed()
4817 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
4821 arvif->vdev_id, ret); in ath10k_bss_info_changed()
4832 arvif->vdev_id, preamble); in ath10k_bss_info_changed()
4835 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
4839 arvif->vdev_id, ret); in ath10k_bss_info_changed()
4859 arvif->vdev_id, info->txpower); in ath10k_bss_info_changed()
4861 arvif->txpower = info->txpower; in ath10k_bss_info_changed()
4868 arvif->ps = vif->bss_conf.ps; in ath10k_bss_info_changed()
4873 arvif->vdev_id, ret); in ath10k_bss_info_changed()
4884 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_hw_scan() local
4899 ar->scan.vdev_id = arvif->vdev_id; in ath10k_hw_scan()
4915 arg.vdev_id = arvif->vdev_id; in ath10k_hw_scan()
4970 struct ath10k_vif *arvif, in ath10k_set_key_h_def_keyidx() argument
4974 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid; in ath10k_set_key_h_def_keyidx()
4988 if (arvif->vdev_type != WMI_VDEV_TYPE_AP && in ath10k_set_key_h_def_keyidx()
4989 arvif->vdev_type != WMI_VDEV_TYPE_IBSS) in ath10k_set_key_h_def_keyidx()
5004 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_set_key_h_def_keyidx()
5008 arvif->vdev_id, ret); in ath10k_set_key_h_def_keyidx()
5016 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_set_key() local
5030 if (arvif->nohwcrypt) in ath10k_set_key()
5040 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA) in ath10k_set_key()
5049 arvif->wep_keys[key->keyidx] = key; in ath10k_set_key()
5051 arvif->wep_keys[key->keyidx] = NULL; in ath10k_set_key()
5057 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr); in ath10k_set_key()
5080 ath10k_clear_vdev_key(arvif, key); in ath10k_set_key()
5088 ath10k_mac_vif_update_wep_key(arvif, key); in ath10k_set_key()
5096 if (cmd == SET_KEY && arvif->def_wep_key_idx == -1) in ath10k_set_key()
5100 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags); in ath10k_set_key()
5104 arvif->vdev_id, peer_addr, ret); in ath10k_set_key()
5116 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags2); in ath10k_set_key()
5120 arvif->vdev_id, peer_addr, ret); in ath10k_set_key()
5121 ret2 = ath10k_install_key(arvif, key, DISABLE_KEY, in ath10k_set_key()
5126 arvif->vdev_id, peer_addr, ret2); in ath10k_set_key()
5132 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key); in ath10k_set_key()
5135 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr); in ath10k_set_key()
5155 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_set_default_unicast_key() local
5158 mutex_lock(&arvif->ar->conf_mutex); in ath10k_set_default_unicast_key()
5160 if (arvif->ar->state != ATH10K_STATE_ON) in ath10k_set_default_unicast_key()
5164 arvif->vdev_id, keyidx); in ath10k_set_default_unicast_key()
5166 ret = ath10k_wmi_vdev_set_param(arvif->ar, in ath10k_set_default_unicast_key()
5167 arvif->vdev_id, in ath10k_set_default_unicast_key()
5168 arvif->ar->wmi.vdev_param->def_keyid, in ath10k_set_default_unicast_key()
5173 arvif->vdev_id, in ath10k_set_default_unicast_key()
5178 arvif->def_wep_key_idx = keyidx; in ath10k_set_default_unicast_key()
5181 mutex_unlock(&arvif->ar->conf_mutex); in ath10k_set_default_unicast_key()
5187 struct ath10k_vif *arvif; in ath10k_sta_rc_update_wk() local
5199 arvif = arsta->arvif; in ath10k_sta_rc_update_wk()
5200 ar = arvif->ar; in ath10k_sta_rc_update_wk()
5202 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) in ath10k_sta_rc_update_wk()
5206 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs; in ath10k_sta_rc_update_wk()
5207 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs; in ath10k_sta_rc_update_wk()
5230 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, in ath10k_sta_rc_update_wk()
5241 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, in ath10k_sta_rc_update_wk()
5252 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, in ath10k_sta_rc_update_wk()
5264 err = ath10k_station_assoc(ar, arvif->vif, sta, true); in ath10k_sta_rc_update_wk()
5273 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif, in ath10k_mac_inc_num_stations() argument
5276 struct ath10k *ar = arvif->ar; in ath10k_mac_inc_num_stations()
5280 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls) in ath10k_mac_inc_num_stations()
5291 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif, in ath10k_mac_dec_num_stations() argument
5294 struct ath10k *ar = arvif->ar; in ath10k_mac_dec_num_stations()
5298 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls) in ath10k_mac_dec_num_stations()
5314 struct ieee80211_vif *sta_vif = arsta->arvif->vif; in ath10k_mac_tdls_vif_stations_count_iter()
5336 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_mac_tdls_vifs_count_iter() local
5342 if (ath10k_mac_tdls_vif_stations_count(arvif->ar->hw, vif) > 0) in ath10k_mac_tdls_vifs_count_iter()
5364 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_sta_state() local
5371 arsta->arvif = arvif; in ath10k_sta_state()
5393 arvif->vdev_id, sta->addr, in ath10k_sta_state()
5397 ret = ath10k_mac_inc_num_stations(arvif, sta); in ath10k_sta_state()
5407 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr, in ath10k_sta_state()
5411 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
5412 ath10k_mac_dec_num_stations(arvif, sta); in ath10k_sta_state()
5425 arvif->vdev_id, ar->max_num_tdls_vdevs); in ath10k_sta_state()
5426 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr); in ath10k_sta_state()
5427 ath10k_mac_dec_num_stations(arvif, sta); in ath10k_sta_state()
5436 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id, in ath10k_sta_state()
5440 arvif->vdev_id, ret); in ath10k_sta_state()
5441 ath10k_peer_delete(ar, arvif->vdev_id, in ath10k_sta_state()
5443 ath10k_mac_dec_num_stations(arvif, sta); in ath10k_sta_state()
5448 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta, in ath10k_sta_state()
5453 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
5454 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr); in ath10k_sta_state()
5455 ath10k_mac_dec_num_stations(arvif, sta); in ath10k_sta_state()
5459 ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id, in ath10k_sta_state()
5469 arvif->vdev_id, sta->addr); in ath10k_sta_state()
5471 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr); in ath10k_sta_state()
5474 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
5476 ath10k_mac_dec_num_stations(arvif, sta); in ath10k_sta_state()
5485 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id, in ath10k_sta_state()
5489 arvif->vdev_id, ret); in ath10k_sta_state()
5505 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
5518 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
5522 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta, in ath10k_sta_state()
5526 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
5541 sta->addr, arvif->vdev_id, ret); in ath10k_sta_state()
5551 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_conf_tx_uapsd() local
5559 if (arvif->vdev_type != WMI_VDEV_TYPE_STA) in ath10k_conf_tx_uapsd()
5590 arvif->u.sta.uapsd |= value; in ath10k_conf_tx_uapsd()
5592 arvif->u.sta.uapsd &= ~value; in ath10k_conf_tx_uapsd()
5594 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_conf_tx_uapsd()
5596 arvif->u.sta.uapsd); in ath10k_conf_tx_uapsd()
5602 if (arvif->u.sta.uapsd) in ath10k_conf_tx_uapsd()
5607 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_conf_tx_uapsd()
5613 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif); in ath10k_conf_tx_uapsd()
5616 arvif->vdev_id, ret); in ath10k_conf_tx_uapsd()
5620 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif); in ath10k_conf_tx_uapsd()
5623 arvif->vdev_id, ret); in ath10k_conf_tx_uapsd()
5641 ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id, in ath10k_conf_tx_uapsd()
5642 arvif->bssid, &arg, 1); in ath10k_conf_tx_uapsd()
5659 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_conf_tx() local
5667 p = &arvif->wmm_params.ac_vo; in ath10k_conf_tx()
5670 p = &arvif->wmm_params.ac_vi; in ath10k_conf_tx()
5673 p = &arvif->wmm_params.ac_be; in ath10k_conf_tx()
5676 p = &arvif->wmm_params.ac_bk; in ath10k_conf_tx()
5697 ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id, in ath10k_conf_tx()
5698 &arvif->wmm_params); in ath10k_conf_tx()
5701 arvif->vdev_id, ret); in ath10k_conf_tx()
5708 ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params); in ath10k_conf_tx()
5733 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_remain_on_channel() local
5748 ar->scan.vdev_id = arvif->vdev_id; in ath10k_remain_on_channel()
5768 arg.vdev_id = arvif->vdev_id; in ath10k_remain_on_channel()
5836 struct ath10k_vif *arvif; in ath10k_set_rts_threshold() local
5840 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_set_rts_threshold()
5842 arvif->vdev_id, value); in ath10k_set_rts_threshold()
5844 ret = ath10k_mac_set_rts(arvif, value); in ath10k_set_rts_threshold()
5847 arvif->vdev_id, ret); in ath10k_set_rts_threshold()
6103 static int ath10k_mac_set_fixed_rate_params(struct ath10k_vif *arvif, in ath10k_mac_set_fixed_rate_params() argument
6106 struct ath10k *ar = arvif->ar; in ath10k_mac_set_fixed_rate_params()
6113 arvif->vdev_id, rate, nss, sgi); in ath10k_mac_set_fixed_rate_params()
6116 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate); in ath10k_mac_set_fixed_rate_params()
6124 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, nss); in ath10k_mac_set_fixed_rate_params()
6131 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, sgi); in ath10k_mac_set_fixed_rate_params()
6138 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, ldpc); in ath10k_mac_set_fixed_rate_params()
6180 struct ath10k_vif *arvif = data; in ath10k_mac_set_bitrate_mask_iter() local
6182 struct ath10k *ar = arvif->ar; in ath10k_mac_set_bitrate_mask_iter()
6184 if (arsta->arvif != arvif) in ath10k_mac_set_bitrate_mask_iter()
6198 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_mac_op_set_bitrate_mask() local
6200 struct ath10k *ar = arvif->ar; in ath10k_mac_op_set_bitrate_mask()
6228 arvif->vdev_id, ret); in ath10k_mac_op_set_bitrate_mask()
6246 arvif->bitrate_mask = *mask; in ath10k_mac_op_set_bitrate_mask()
6249 arvif); in ath10k_mac_op_set_bitrate_mask()
6256 ret = ath10k_mac_set_fixed_rate_params(arvif, rate, nss, sgi, ldpc); in ath10k_mac_op_set_bitrate_mask()
6259 arvif->vdev_id, ret); in ath10k_mac_op_set_bitrate_mask()
6359 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_ampdu_action() local
6362 arvif->vdev_id, sta->addr, tid, action); in ath10k_ampdu_action()
6441 struct ath10k_vif *arvif; in ath10k_mac_update_vif_chan() local
6454 arvif = ath10k_vif_to_arvif(vifs[i].vif); in ath10k_mac_update_vif_chan()
6458 arvif->vdev_id, in ath10k_mac_update_vif_chan()
6464 if (WARN_ON(!arvif->is_started)) in ath10k_mac_update_vif_chan()
6467 if (WARN_ON(!arvif->is_up)) in ath10k_mac_update_vif_chan()
6470 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); in ath10k_mac_update_vif_chan()
6473 arvif->vdev_id, ret); in ath10k_mac_update_vif_chan()
6487 arvif = ath10k_vif_to_arvif(vifs[i].vif); in ath10k_mac_update_vif_chan()
6489 if (WARN_ON(!arvif->is_started)) in ath10k_mac_update_vif_chan()
6492 if (WARN_ON(!arvif->is_up)) in ath10k_mac_update_vif_chan()
6495 ret = ath10k_mac_setup_bcn_tmpl(arvif); in ath10k_mac_update_vif_chan()
6500 ret = ath10k_mac_setup_prb_tmpl(arvif); in ath10k_mac_update_vif_chan()
6505 ret = ath10k_vdev_restart(arvif, &vifs[i].new_ctx->def); in ath10k_mac_update_vif_chan()
6508 arvif->vdev_id, ret); in ath10k_mac_update_vif_chan()
6512 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, in ath10k_mac_update_vif_chan()
6513 arvif->bssid); in ath10k_mac_update_vif_chan()
6516 arvif->vdev_id, ret); in ath10k_mac_update_vif_chan()
6672 struct ath10k_vif *arvif = (void *)vif->drv_priv; in ath10k_mac_op_assign_vif_chanctx() local
6679 ctx, arvif->vdev_id); in ath10k_mac_op_assign_vif_chanctx()
6681 if (WARN_ON(arvif->is_started)) { in ath10k_mac_op_assign_vif_chanctx()
6686 ret = ath10k_vdev_start(arvif, &ctx->def); in ath10k_mac_op_assign_vif_chanctx()
6689 arvif->vdev_id, vif->addr, in ath10k_mac_op_assign_vif_chanctx()
6694 arvif->is_started = true; in ath10k_mac_op_assign_vif_chanctx()
6696 ret = ath10k_mac_vif_setup_ps(arvif); in ath10k_mac_op_assign_vif_chanctx()
6699 arvif->vdev_id, ret); in ath10k_mac_op_assign_vif_chanctx()
6704 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, 0, vif->addr); in ath10k_mac_op_assign_vif_chanctx()
6707 arvif->vdev_id, ret); in ath10k_mac_op_assign_vif_chanctx()
6711 arvif->is_up = true; in ath10k_mac_op_assign_vif_chanctx()
6718 ath10k_vdev_stop(arvif); in ath10k_mac_op_assign_vif_chanctx()
6719 arvif->is_started = false; in ath10k_mac_op_assign_vif_chanctx()
6720 ath10k_mac_vif_setup_ps(arvif); in ath10k_mac_op_assign_vif_chanctx()
6733 struct ath10k_vif *arvif = (void *)vif->drv_priv; in ath10k_mac_op_unassign_vif_chanctx() local
6740 ctx, arvif->vdev_id); in ath10k_mac_op_unassign_vif_chanctx()
6742 WARN_ON(!arvif->is_started); in ath10k_mac_op_unassign_vif_chanctx()
6745 WARN_ON(!arvif->is_up); in ath10k_mac_op_unassign_vif_chanctx()
6747 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); in ath10k_mac_op_unassign_vif_chanctx()
6750 arvif->vdev_id, ret); in ath10k_mac_op_unassign_vif_chanctx()
6752 arvif->is_up = false; in ath10k_mac_op_unassign_vif_chanctx()
6755 ret = ath10k_vdev_stop(arvif); in ath10k_mac_op_unassign_vif_chanctx()
6758 arvif->vdev_id, ret); in ath10k_mac_op_unassign_vif_chanctx()
6760 arvif->is_started = false; in ath10k_mac_op_unassign_vif_chanctx()
7103 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); in ath10k_get_arvif_iter() local
7105 if (arvif->vdev_id == arvif_iter->vdev_id) in ath10k_get_arvif_iter()
7106 arvif_iter->arvif = arvif; in ath10k_get_arvif_iter()
7122 if (!arvif_iter.arvif) { in ath10k_get_arvif()
7127 return arvif_iter.arvif; in ath10k_get_arvif()