Lines Matching refs:ar

42 	struct ath10k *ar = arvif->ar;  in ath10k_send_key()  local
51 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_send_key()
83 ath10k_warn(ar, "cipher %d is not supported\n", key->cipher); in ath10k_send_key()
92 return ath10k_wmi_vdev_install_key(arvif->ar, &arg); in ath10k_send_key()
100 struct ath10k *ar = arvif->ar; in ath10k_install_key() local
103 lockdep_assert_held(&ar->conf_mutex); in ath10k_install_key()
105 reinit_completion(&ar->install_key_done); in ath10k_install_key()
111 ret = wait_for_completion_timeout(&ar->install_key_done, 3*HZ); in ath10k_install_key()
121 struct ath10k *ar = arvif->ar; in ath10k_install_peer_wep_keys() local
127 lockdep_assert_held(&ar->conf_mutex); in ath10k_install_peer_wep_keys()
129 spin_lock_bh(&ar->data_lock); in ath10k_install_peer_wep_keys()
130 peer = ath10k_peer_find(ar, arvif->vdev_id, addr); in ath10k_install_peer_wep_keys()
131 spin_unlock_bh(&ar->data_lock); in ath10k_install_peer_wep_keys()
150 spin_lock_bh(&ar->data_lock); in ath10k_install_peer_wep_keys()
152 spin_unlock_bh(&ar->data_lock); in ath10k_install_peer_wep_keys()
161 struct ath10k *ar = arvif->ar; in ath10k_clear_peer_keys() local
167 lockdep_assert_held(&ar->conf_mutex); in ath10k_clear_peer_keys()
169 spin_lock_bh(&ar->data_lock); in ath10k_clear_peer_keys()
170 peer = ath10k_peer_find(ar, arvif->vdev_id, addr); in ath10k_clear_peer_keys()
171 spin_unlock_bh(&ar->data_lock); in ath10k_clear_peer_keys()
187 ath10k_warn(ar, "failed to remove peer wep key %d: %d\n", in ath10k_clear_peer_keys()
190 spin_lock_bh(&ar->data_lock); in ath10k_clear_peer_keys()
192 spin_unlock_bh(&ar->data_lock); in ath10k_clear_peer_keys()
198 bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr, in ath10k_mac_is_peer_wep_key_set() argument
204 lockdep_assert_held(&ar->data_lock); in ath10k_mac_is_peer_wep_key_set()
211 peer = ath10k_peer_find(ar, 0, addr); in ath10k_mac_is_peer_wep_key_set()
226 struct ath10k *ar = arvif->ar; in ath10k_clear_vdev_key() local
233 lockdep_assert_held(&ar->conf_mutex); in ath10k_clear_vdev_key()
238 spin_lock_bh(&ar->data_lock); in ath10k_clear_vdev_key()
240 list_for_each_entry(peer, &ar->peers, list) { in ath10k_clear_vdev_key()
252 spin_unlock_bh(&ar->data_lock); in ath10k_clear_vdev_key()
262 ath10k_warn(ar, "failed to remove key for %pM: %d\n", in ath10k_clear_vdev_key()
367 static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr) in ath10k_peer_create() argument
371 lockdep_assert_held(&ar->conf_mutex); in ath10k_peer_create()
373 if (ar->num_peers >= ar->max_num_peers) in ath10k_peer_create()
376 ret = ath10k_wmi_peer_create(ar, vdev_id, addr); in ath10k_peer_create()
378 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n", in ath10k_peer_create()
383 ret = ath10k_wait_for_peer_created(ar, vdev_id, addr); in ath10k_peer_create()
385 ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n", in ath10k_peer_create()
390 ar->num_peers++; in ath10k_peer_create()
397 struct ath10k *ar = arvif->ar; in ath10k_mac_set_kickout() local
401 param = ar->wmi.pdev_param->sta_kickout_th; in ath10k_mac_set_kickout()
402 ret = ath10k_wmi_pdev_set_param(ar, param, in ath10k_mac_set_kickout()
405 ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n", in ath10k_mac_set_kickout()
410 param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs; in ath10k_mac_set_kickout()
411 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, in ath10k_mac_set_kickout()
414 ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n", in ath10k_mac_set_kickout()
419 param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs; in ath10k_mac_set_kickout()
420 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, in ath10k_mac_set_kickout()
423 ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n", in ath10k_mac_set_kickout()
428 param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs; in ath10k_mac_set_kickout()
429 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, in ath10k_mac_set_kickout()
432 ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n", in ath10k_mac_set_kickout()
442 struct ath10k *ar = arvif->ar; in ath10k_mac_set_rts() local
445 vdev_param = ar->wmi.vdev_param->rts_threshold; in ath10k_mac_set_rts()
446 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value); in ath10k_mac_set_rts()
451 struct ath10k *ar = arvif->ar; in ath10k_mac_set_frag() local
455 value = clamp_t(u32, arvif->ar->hw->wiphy->frag_threshold, in ath10k_mac_set_frag()
459 vdev_param = ar->wmi.vdev_param->fragmentation_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()
463 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr) in ath10k_peer_delete() argument
467 lockdep_assert_held(&ar->conf_mutex); in ath10k_peer_delete()
469 ret = ath10k_wmi_peer_delete(ar, vdev_id, addr); in ath10k_peer_delete()
473 ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr); in ath10k_peer_delete()
477 ar->num_peers--; in ath10k_peer_delete()
482 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id) in ath10k_peer_cleanup() argument
486 lockdep_assert_held(&ar->conf_mutex); in ath10k_peer_cleanup()
488 spin_lock_bh(&ar->data_lock); in ath10k_peer_cleanup()
489 list_for_each_entry_safe(peer, tmp, &ar->peers, list) { in ath10k_peer_cleanup()
493 ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n", in ath10k_peer_cleanup()
498 ar->num_peers--; in ath10k_peer_cleanup()
500 spin_unlock_bh(&ar->data_lock); in ath10k_peer_cleanup()
503 static void ath10k_peer_cleanup_all(struct ath10k *ar) in ath10k_peer_cleanup_all() argument
507 lockdep_assert_held(&ar->conf_mutex); in ath10k_peer_cleanup_all()
509 spin_lock_bh(&ar->data_lock); in ath10k_peer_cleanup_all()
510 list_for_each_entry_safe(peer, tmp, &ar->peers, list) { in ath10k_peer_cleanup_all()
514 spin_unlock_bh(&ar->data_lock); in ath10k_peer_cleanup_all()
516 ar->num_peers = 0; in ath10k_peer_cleanup_all()
517 ar->num_stations = 0; in ath10k_peer_cleanup_all()
526 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_beacon_free() local
528 lockdep_assert_held(&ar->data_lock); in ath10k_mac_vif_beacon_free()
534 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr, in ath10k_mac_vif_beacon_free()
549 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_beacon_cleanup() local
551 lockdep_assert_held(&ar->data_lock); in ath10k_mac_vif_beacon_cleanup()
556 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN, in ath10k_mac_vif_beacon_cleanup()
562 static inline int ath10k_vdev_setup_sync(struct ath10k *ar) in ath10k_vdev_setup_sync() argument
566 lockdep_assert_held(&ar->conf_mutex); in ath10k_vdev_setup_sync()
568 if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags)) in ath10k_vdev_setup_sync()
571 ret = wait_for_completion_timeout(&ar->vdev_setup_done, in ath10k_vdev_setup_sync()
579 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id) in ath10k_monitor_vdev_start() argument
581 struct cfg80211_chan_def *chandef = &ar->chandef; in ath10k_monitor_vdev_start()
586 lockdep_assert_held(&ar->conf_mutex); in ath10k_monitor_vdev_start()
603 reinit_completion(&ar->vdev_setup_done); in ath10k_monitor_vdev_start()
605 ret = ath10k_wmi_vdev_start(ar, &arg); in ath10k_monitor_vdev_start()
607 ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n", in ath10k_monitor_vdev_start()
612 ret = ath10k_vdev_setup_sync(ar); in ath10k_monitor_vdev_start()
614 ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i start: %d\n", in ath10k_monitor_vdev_start()
619 ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr); in ath10k_monitor_vdev_start()
621 ath10k_warn(ar, "failed to put up monitor vdev %i: %d\n", in ath10k_monitor_vdev_start()
626 ar->monitor_vdev_id = vdev_id; in ath10k_monitor_vdev_start()
628 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i started\n", in ath10k_monitor_vdev_start()
629 ar->monitor_vdev_id); in ath10k_monitor_vdev_start()
633 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id); in ath10k_monitor_vdev_start()
635 ath10k_warn(ar, "failed to stop monitor vdev %i after start failure: %d\n", in ath10k_monitor_vdev_start()
636 ar->monitor_vdev_id, ret); in ath10k_monitor_vdev_start()
641 static int ath10k_monitor_vdev_stop(struct ath10k *ar) in ath10k_monitor_vdev_stop() argument
645 lockdep_assert_held(&ar->conf_mutex); in ath10k_monitor_vdev_stop()
647 ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id); in ath10k_monitor_vdev_stop()
649 ath10k_warn(ar, "failed to put down monitor vdev %i: %d\n", in ath10k_monitor_vdev_stop()
650 ar->monitor_vdev_id, ret); in ath10k_monitor_vdev_stop()
652 reinit_completion(&ar->vdev_setup_done); in ath10k_monitor_vdev_stop()
654 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id); in ath10k_monitor_vdev_stop()
656 ath10k_warn(ar, "failed to to request monitor vdev %i stop: %d\n", in ath10k_monitor_vdev_stop()
657 ar->monitor_vdev_id, ret); in ath10k_monitor_vdev_stop()
659 ret = ath10k_vdev_setup_sync(ar); in ath10k_monitor_vdev_stop()
661 ath10k_warn(ar, "failed to synchronize monitor vdev %i stop: %d\n", in ath10k_monitor_vdev_stop()
662 ar->monitor_vdev_id, ret); in ath10k_monitor_vdev_stop()
664 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n", in ath10k_monitor_vdev_stop()
665 ar->monitor_vdev_id); in ath10k_monitor_vdev_stop()
669 static int ath10k_monitor_vdev_create(struct ath10k *ar) in ath10k_monitor_vdev_create() argument
673 lockdep_assert_held(&ar->conf_mutex); in ath10k_monitor_vdev_create()
675 if (ar->free_vdev_map == 0) { in ath10k_monitor_vdev_create()
676 ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n"); in ath10k_monitor_vdev_create()
680 bit = __ffs64(ar->free_vdev_map); in ath10k_monitor_vdev_create()
682 ar->monitor_vdev_id = bit; in ath10k_monitor_vdev_create()
684 ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id, in ath10k_monitor_vdev_create()
686 0, ar->mac_addr); in ath10k_monitor_vdev_create()
688 ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n", in ath10k_monitor_vdev_create()
689 ar->monitor_vdev_id, ret); in ath10k_monitor_vdev_create()
693 ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id); in ath10k_monitor_vdev_create()
694 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n", in ath10k_monitor_vdev_create()
695 ar->monitor_vdev_id); in ath10k_monitor_vdev_create()
700 static int ath10k_monitor_vdev_delete(struct ath10k *ar) in ath10k_monitor_vdev_delete() argument
704 lockdep_assert_held(&ar->conf_mutex); in ath10k_monitor_vdev_delete()
706 ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id); in ath10k_monitor_vdev_delete()
708 ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n", in ath10k_monitor_vdev_delete()
709 ar->monitor_vdev_id, ret); in ath10k_monitor_vdev_delete()
713 ar->free_vdev_map |= 1LL << ar->monitor_vdev_id; in ath10k_monitor_vdev_delete()
715 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n", in ath10k_monitor_vdev_delete()
716 ar->monitor_vdev_id); in ath10k_monitor_vdev_delete()
720 static int ath10k_monitor_start(struct ath10k *ar) in ath10k_monitor_start() argument
724 lockdep_assert_held(&ar->conf_mutex); in ath10k_monitor_start()
726 ret = ath10k_monitor_vdev_create(ar); in ath10k_monitor_start()
728 ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret); in ath10k_monitor_start()
732 ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id); in ath10k_monitor_start()
734 ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret); in ath10k_monitor_start()
735 ath10k_monitor_vdev_delete(ar); in ath10k_monitor_start()
739 ar->monitor_started = true; in ath10k_monitor_start()
740 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n"); in ath10k_monitor_start()
745 static int ath10k_monitor_stop(struct ath10k *ar) in ath10k_monitor_stop() argument
749 lockdep_assert_held(&ar->conf_mutex); in ath10k_monitor_stop()
751 ret = ath10k_monitor_vdev_stop(ar); in ath10k_monitor_stop()
753 ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret); in ath10k_monitor_stop()
757 ret = ath10k_monitor_vdev_delete(ar); in ath10k_monitor_stop()
759 ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret); in ath10k_monitor_stop()
763 ar->monitor_started = false; in ath10k_monitor_stop()
764 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n"); in ath10k_monitor_stop()
769 static int ath10k_monitor_recalc(struct ath10k *ar) in ath10k_monitor_recalc() argument
773 lockdep_assert_held(&ar->conf_mutex); in ath10k_monitor_recalc()
775 should_start = ar->monitor || in ath10k_monitor_recalc()
776 ar->filter_flags & FIF_PROMISC_IN_BSS || in ath10k_monitor_recalc()
777 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); in ath10k_monitor_recalc()
779 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_monitor_recalc()
781 ar->monitor_started, should_start); in ath10k_monitor_recalc()
783 if (should_start == ar->monitor_started) in ath10k_monitor_recalc()
787 return ath10k_monitor_start(ar); in ath10k_monitor_recalc()
789 return ath10k_monitor_stop(ar); in ath10k_monitor_recalc()
794 struct ath10k *ar = arvif->ar; in ath10k_recalc_rtscts_prot() local
797 lockdep_assert_held(&ar->conf_mutex); in ath10k_recalc_rtscts_prot()
799 vdev_param = ar->wmi.vdev_param->enable_rtscts; in ath10k_recalc_rtscts_prot()
808 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_recalc_rtscts_prot()
812 static int ath10k_start_cac(struct ath10k *ar) in ath10k_start_cac() argument
816 lockdep_assert_held(&ar->conf_mutex); in ath10k_start_cac()
818 set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); in ath10k_start_cac()
820 ret = ath10k_monitor_recalc(ar); in ath10k_start_cac()
822 ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret); in ath10k_start_cac()
823 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); in ath10k_start_cac()
827 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n", in ath10k_start_cac()
828 ar->monitor_vdev_id); in ath10k_start_cac()
833 static int ath10k_stop_cac(struct ath10k *ar) in ath10k_stop_cac() argument
835 lockdep_assert_held(&ar->conf_mutex); in ath10k_stop_cac()
838 if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags)) in ath10k_stop_cac()
841 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); in ath10k_stop_cac()
842 ath10k_monitor_stop(ar); in ath10k_stop_cac()
844 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n"); in ath10k_stop_cac()
849 static void ath10k_recalc_radar_detection(struct ath10k *ar) in ath10k_recalc_radar_detection() argument
853 lockdep_assert_held(&ar->conf_mutex); in ath10k_recalc_radar_detection()
855 ath10k_stop_cac(ar); in ath10k_recalc_radar_detection()
857 if (!ar->radar_enabled) in ath10k_recalc_radar_detection()
860 if (ar->num_started_vdevs > 0) in ath10k_recalc_radar_detection()
863 ret = ath10k_start_cac(ar); in ath10k_recalc_radar_detection()
870 ath10k_warn(ar, "failed to start CAC: %d\n", ret); in ath10k_recalc_radar_detection()
871 ieee80211_radar_detected(ar->hw); in ath10k_recalc_radar_detection()
877 struct ath10k *ar = arvif->ar; in ath10k_vdev_start_restart() local
878 struct cfg80211_chan_def *chandef = &ar->chandef; in ath10k_vdev_start_restart()
882 lockdep_assert_held(&ar->conf_mutex); in ath10k_vdev_start_restart()
884 reinit_completion(&ar->vdev_setup_done); in ath10k_vdev_start_restart()
912 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_vdev_start_restart()
918 ret = ath10k_wmi_vdev_restart(ar, &arg); in ath10k_vdev_start_restart()
920 ret = ath10k_wmi_vdev_start(ar, &arg); in ath10k_vdev_start_restart()
923 ath10k_warn(ar, "failed to start WMI vdev %i: %d\n", in ath10k_vdev_start_restart()
928 ret = ath10k_vdev_setup_sync(ar); in ath10k_vdev_start_restart()
930 ath10k_warn(ar, in ath10k_vdev_start_restart()
936 ar->num_started_vdevs++; in ath10k_vdev_start_restart()
937 ath10k_recalc_radar_detection(ar); in ath10k_vdev_start_restart()
954 struct ath10k *ar = arvif->ar; in ath10k_vdev_stop() local
957 lockdep_assert_held(&ar->conf_mutex); in ath10k_vdev_stop()
959 reinit_completion(&ar->vdev_setup_done); in ath10k_vdev_stop()
961 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id); in ath10k_vdev_stop()
963 ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n", in ath10k_vdev_stop()
968 ret = ath10k_vdev_setup_sync(ar); in ath10k_vdev_stop()
970 ath10k_warn(ar, "failed to synchronize setup for vdev %i stop: %d\n", in ath10k_vdev_stop()
975 WARN_ON(ar->num_started_vdevs == 0); in ath10k_vdev_stop()
977 if (ar->num_started_vdevs != 0) { in ath10k_vdev_stop()
978 ar->num_started_vdevs--; in ath10k_vdev_stop()
979 ath10k_recalc_radar_detection(ar); in ath10k_vdev_stop()
988 struct ath10k *ar = arvif->ar; in ath10k_mac_setup_bcn_p2p_ie() local
1007 ret = ath10k_wmi_p2p_go_bcn_ie(ar, arvif->vdev_id, p2p_ie); in ath10k_mac_setup_bcn_p2p_ie()
1009 ath10k_warn(ar, "failed to submit p2p go bcn ie for vdev %i: %d\n", in ath10k_mac_setup_bcn_p2p_ie()
1049 struct ath10k *ar = arvif->ar; in ath10k_mac_setup_bcn_tmpl() local
1050 struct ieee80211_hw *hw = ar->hw; in ath10k_mac_setup_bcn_tmpl()
1056 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) in ath10k_mac_setup_bcn_tmpl()
1061 ath10k_warn(ar, "failed to get beacon template from mac80211\n"); in ath10k_mac_setup_bcn_tmpl()
1067 ath10k_warn(ar, "failed to setup p2p go bcn ie: %d\n", ret); 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()
1085 ath10k_warn(ar, "failed to submit beacon template command: %d\n", in ath10k_mac_setup_bcn_tmpl()
1095 struct ath10k *ar = arvif->ar; in ath10k_mac_setup_prb_tmpl() local
1096 struct ieee80211_hw *hw = ar->hw; in ath10k_mac_setup_prb_tmpl()
1101 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) in ath10k_mac_setup_prb_tmpl()
1106 ath10k_warn(ar, "failed to get probe resp template from mac80211\n"); in ath10k_mac_setup_prb_tmpl()
1110 ret = ath10k_wmi_prb_tmpl(ar, arvif->vdev_id, prb); in ath10k_mac_setup_prb_tmpl()
1114 ath10k_warn(ar, "failed to submit probe resp template command: %d\n", in ath10k_mac_setup_prb_tmpl()
1125 struct ath10k *ar = arvif->ar; in ath10k_control_beaconing() local
1128 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_control_beaconing()
1136 spin_lock_bh(&arvif->ar->data_lock); in ath10k_control_beaconing()
1138 spin_unlock_bh(&arvif->ar->data_lock); in ath10k_control_beaconing()
1152 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, in ath10k_control_beaconing()
1155 ath10k_warn(ar, "failed to bring up vdev %d: %i\n", in ath10k_control_beaconing()
1164 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id); in ath10k_control_beaconing()
1171 struct ath10k *ar = arvif->ar; in ath10k_control_ibss() local
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()
1180 ath10k_warn(ar, "failed to delete IBSS self peer %pM for vdev %d: %d\n", in ath10k_control_ibss()
1191 ret = ath10k_peer_create(arvif->ar, arvif->vdev_id, self_peer); in ath10k_control_ibss()
1193 ath10k_warn(ar, "failed to create IBSS self peer %pM for vdev %d: %d\n", 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()
1202 ath10k_warn(ar, "failed to set IBSS ATIM for vdev %d: %d\n", in ath10k_control_ibss()
1208 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_recalc_ps_wake_threshold() local
1213 lockdep_assert_held(&arvif->ar->conf_mutex); 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()
1223 ath10k_warn(ar, "failed to submit ps wake threshold %u on vdev %i: %d\n", in ath10k_mac_vif_recalc_ps_wake_threshold()
1233 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_recalc_ps_poll_count() local
1238 lockdep_assert_held(&arvif->ar->conf_mutex); 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()
1249 ath10k_warn(ar, "failed to submit ps poll count %u on vdev %i: %d\n", in ath10k_mac_vif_recalc_ps_poll_count()
1257 static int ath10k_mac_ps_vif_count(struct ath10k *ar) in ath10k_mac_ps_vif_count() argument
1262 lockdep_assert_held(&ar->conf_mutex); in ath10k_mac_ps_vif_count()
1264 list_for_each_entry(arvif, &ar->arvifs, list) in ath10k_mac_ps_vif_count()
1273 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_setup_ps() local
1275 struct ieee80211_conf *conf = &ar->hw->conf; in ath10k_mac_vif_setup_ps()
1282 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_setup_ps()
1289 if (enable_ps && ath10k_mac_ps_vif_count(ar) > 1 && in ath10k_mac_vif_setup_ps()
1291 ar->fw_features)) { in ath10k_mac_vif_setup_ps()
1292 ath10k_warn(ar, "refusing to enable ps on vdev %i: not supported by fw\n", 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()
1311 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n", in ath10k_mac_vif_setup_ps()
1319 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n", in ath10k_mac_vif_setup_ps()
1322 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode); in ath10k_mac_vif_setup_ps()
1324 ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n", in ath10k_mac_vif_setup_ps()
1334 struct ath10k *ar = arvif->ar; in ath10k_mac_vif_disable_keepalive() local
1338 lockdep_assert_held(&arvif->ar->conf_mutex); in ath10k_mac_vif_disable_keepalive()
1343 if (!test_bit(WMI_SERVICE_STA_KEEP_ALIVE, ar->wmi.svc_map)) in ath10k_mac_vif_disable_keepalive()
1354 ret = ath10k_wmi_sta_keepalive(ar, &arg); in ath10k_mac_vif_disable_keepalive()
1356 ath10k_warn(ar, "failed to submit keepalive on vdev %i: %d\n", in ath10k_mac_vif_disable_keepalive()
1368 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar, in ath10k_peer_assoc_h_listen_intval() argument
1382 return ar->hw->conf.listen_interval; in ath10k_peer_assoc_h_listen_intval()
1385 static void ath10k_peer_assoc_h_basic(struct ath10k *ar, in ath10k_peer_assoc_h_basic() argument
1392 lockdep_assert_held(&ar->conf_mutex); in ath10k_peer_assoc_h_basic()
1398 arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif); in ath10k_peer_assoc_h_basic()
1403 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar, in ath10k_peer_assoc_h_crypto() argument
1412 lockdep_assert_held(&ar->conf_mutex); in ath10k_peer_assoc_h_crypto()
1414 bss = cfg80211_get_bss(ar->hw->wiphy, ar->hw->conf.chandef.chan, in ath10k_peer_assoc_h_crypto()
1430 cfg80211_put_bss(ar->hw->wiphy, bss); in ath10k_peer_assoc_h_crypto()
1435 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__); in ath10k_peer_assoc_h_crypto()
1440 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__); in ath10k_peer_assoc_h_crypto()
1445 static void ath10k_peer_assoc_h_rates(struct ath10k *ar, in ath10k_peer_assoc_h_rates() argument
1455 lockdep_assert_held(&ar->conf_mutex); in ath10k_peer_assoc_h_rates()
1457 sband = ar->hw->wiphy->bands[ar->hw->conf.chandef.chan->band]; in ath10k_peer_assoc_h_rates()
1458 ratemask = sta->supp_rates[ar->hw->conf.chandef.chan->band]; in ath10k_peer_assoc_h_rates()
1472 static void ath10k_peer_assoc_h_ht(struct ath10k *ar, in ath10k_peer_assoc_h_ht() argument
1480 lockdep_assert_held(&ar->conf_mutex); in ath10k_peer_assoc_h_ht()
1549 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n", in ath10k_peer_assoc_h_ht()
1555 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar, in ath10k_peer_assoc_qos_ap() argument
1563 lockdep_assert_held(&ar->conf_mutex); in ath10k_peer_assoc_qos_ap()
1566 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n", in ath10k_peer_assoc_qos_ap()
1585 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, in ath10k_peer_assoc_qos_ap()
1590 ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n", in ath10k_peer_assoc_qos_ap()
1595 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, in ath10k_peer_assoc_qos_ap()
1600 ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n", 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()
1613 ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n", in ath10k_peer_assoc_qos_ap()
1622 static void ath10k_peer_assoc_h_vht(struct ath10k *ar, in ath10k_peer_assoc_h_vht() argument
1634 if (ar->hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ) in ath10k_peer_assoc_h_vht()
1663 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n", in ath10k_peer_assoc_h_vht()
1667 static void ath10k_peer_assoc_h_qos(struct ath10k *ar, in ath10k_peer_assoc_h_qos() argument
1696 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM qos %d\n", in ath10k_peer_assoc_h_qos()
1706 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar, in ath10k_peer_assoc_h_phymode() argument
1713 switch (ar->hw->conf.chandef.chan->band) { in ath10k_peer_assoc_h_phymode()
1757 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n", in ath10k_peer_assoc_h_phymode()
1764 static int ath10k_peer_assoc_prepare(struct ath10k *ar, in ath10k_peer_assoc_prepare() argument
1769 lockdep_assert_held(&ar->conf_mutex); in ath10k_peer_assoc_prepare()
1773 ath10k_peer_assoc_h_basic(ar, vif, sta, arg); in ath10k_peer_assoc_prepare()
1774 ath10k_peer_assoc_h_crypto(ar, vif, arg); in ath10k_peer_assoc_prepare()
1775 ath10k_peer_assoc_h_rates(ar, sta, arg); in ath10k_peer_assoc_prepare()
1776 ath10k_peer_assoc_h_ht(ar, sta, arg); in ath10k_peer_assoc_prepare()
1777 ath10k_peer_assoc_h_vht(ar, sta, arg); in ath10k_peer_assoc_prepare()
1778 ath10k_peer_assoc_h_qos(ar, vif, sta, arg); in ath10k_peer_assoc_prepare()
1779 ath10k_peer_assoc_h_phymode(ar, vif, sta, arg); in ath10k_peer_assoc_prepare()
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()
1811 static int ath10k_mac_vif_recalc_txbf(struct ath10k *ar, in ath10k_mac_vif_recalc_txbf() argument
1820 if (!(ar->vht_cap_info & in ath10k_mac_vif_recalc_txbf()
1827 param = ar->wmi.vdev_param->txbf; in ath10k_mac_vif_recalc_txbf()
1837 if (ar->vht_cap_info & in ath10k_mac_vif_recalc_txbf()
1847 if (ar->vht_cap_info & in ath10k_mac_vif_recalc_txbf()
1863 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, value); in ath10k_mac_vif_recalc_txbf()
1865 ath10k_warn(ar, "failed to submit vdev param txbf 0x%x: %d\n", in ath10k_mac_vif_recalc_txbf()
1878 struct ath10k *ar = hw->priv; in ath10k_bss_assoc() local
1886 lockdep_assert_held(&ar->conf_mutex); in ath10k_bss_assoc()
1888 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n", in ath10k_bss_assoc()
1895 ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n", in ath10k_bss_assoc()
1906 ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg); in ath10k_bss_assoc()
1908 ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n", in ath10k_bss_assoc()
1916 ret = ath10k_wmi_peer_assoc(ar, &peer_arg); in ath10k_bss_assoc()
1918 ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n", in ath10k_bss_assoc()
1923 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap); in ath10k_bss_assoc()
1925 ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n", in ath10k_bss_assoc()
1930 ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap); in ath10k_bss_assoc()
1932 ath10k_warn(ar, "failed to recalc txbf for vdev %i on bss %pM: %d\n", in ath10k_bss_assoc()
1937 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_bss_assoc()
1946 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid); in ath10k_bss_assoc()
1948 ath10k_warn(ar, "failed to set vdev %d up: %d\n", in ath10k_bss_assoc()
1959 ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid, in ath10k_bss_assoc()
1962 ath10k_warn(ar, "failed to poke peer %pM param for ps workaround on vdev %i: %d\n", in ath10k_bss_assoc()
1971 struct ath10k *ar = hw->priv; in ath10k_bss_disassoc() local
1976 lockdep_assert_held(&ar->conf_mutex); in ath10k_bss_disassoc()
1978 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n", in ath10k_bss_disassoc()
1981 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); in ath10k_bss_disassoc()
1983 ath10k_warn(ar, "faield to down vdev %i: %d\n", in ath10k_bss_disassoc()
1988 ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap); in ath10k_bss_disassoc()
1990 ath10k_warn(ar, "failed to recalc txbf for vdev %i: %d\n", in ath10k_bss_disassoc()
1998 static int ath10k_station_assoc(struct ath10k *ar, in ath10k_station_assoc() argument
2007 lockdep_assert_held(&ar->conf_mutex); in ath10k_station_assoc()
2009 ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg); in ath10k_station_assoc()
2011 ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n", in ath10k_station_assoc()
2017 ret = ath10k_wmi_peer_assoc(ar, &peer_arg); in ath10k_station_assoc()
2019 ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n", in ath10k_station_assoc()
2028 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr, in ath10k_station_assoc()
2031 ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n", in ath10k_station_assoc()
2036 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta); in ath10k_station_assoc()
2038 ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n", in ath10k_station_assoc()
2047 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n", in ath10k_station_assoc()
2057 ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n", in ath10k_station_assoc()
2067 static int ath10k_station_disassoc(struct ath10k *ar, in ath10k_station_disassoc() argument
2074 lockdep_assert_held(&ar->conf_mutex); in ath10k_station_disassoc()
2080 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n", in ath10k_station_disassoc()
2088 ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n", in ath10k_station_disassoc()
2100 static int ath10k_update_channel_list(struct ath10k *ar) in ath10k_update_channel_list() argument
2102 struct ieee80211_hw *hw = ar->hw; in ath10k_update_channel_list()
2113 lockdep_assert_held(&ar->conf_mutex); in ath10k_update_channel_list()
2181 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_update_channel_list()
2191 ret = ath10k_wmi_scan_chan_list(ar, &arg); in ath10k_update_channel_list()
2213 static void ath10k_regd_update(struct ath10k *ar) in ath10k_regd_update() argument
2220 lockdep_assert_held(&ar->conf_mutex); in ath10k_regd_update()
2222 ret = ath10k_update_channel_list(ar); in ath10k_regd_update()
2224 ath10k_warn(ar, "failed to update channel list: %d\n", ret); in ath10k_regd_update()
2226 regpair = ar->ath_common.regulatory.regpair; in ath10k_regd_update()
2228 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) { in ath10k_regd_update()
2229 nl_dfs_reg = ar->dfs_detector->region; in ath10k_regd_update()
2237 ret = ath10k_wmi_pdev_set_regdomain(ar, in ath10k_regd_update()
2245 ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret); in ath10k_regd_update()
2252 struct ath10k *ar = hw->priv; in ath10k_reg_notifier() local
2255 ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory); in ath10k_reg_notifier()
2257 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) { in ath10k_reg_notifier()
2258 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n", in ath10k_reg_notifier()
2260 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector, in ath10k_reg_notifier()
2263 ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n", in ath10k_reg_notifier()
2267 mutex_lock(&ar->conf_mutex); in ath10k_reg_notifier()
2268 if (ar->state == ATH10K_STATE_ON) in ath10k_reg_notifier()
2269 ath10k_regd_update(ar); in ath10k_reg_notifier()
2270 mutex_unlock(&ar->conf_mutex); in ath10k_reg_notifier()
2291 static u8 ath10k_tx_h_get_vdev_id(struct ath10k *ar, struct ieee80211_vif *vif) in ath10k_tx_h_get_vdev_id() argument
2296 if (ar->monitor_started) in ath10k_tx_h_get_vdev_id()
2297 return ar->monitor_vdev_id; in ath10k_tx_h_get_vdev_id()
2299 ath10k_warn(ar, "failed to resolve vdev id\n"); in ath10k_tx_h_get_vdev_id()
2332 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar, in ath10k_tx_h_add_p2p_noa_ie() argument
2345 spin_lock_bh(&ar->data_lock); in ath10k_tx_h_add_p2p_noa_ie()
2352 spin_unlock_bh(&ar->data_lock); in ath10k_tx_h_add_p2p_noa_ie()
2356 static bool ath10k_mac_need_offchan_tx_work(struct ath10k *ar) in ath10k_mac_need_offchan_tx_work() argument
2364 return !(ar->htt.target_version_major >= 3 && in ath10k_mac_need_offchan_tx_work()
2365 ar->htt.target_version_minor >= 4); in ath10k_mac_need_offchan_tx_work()
2368 static void ath10k_tx_htt(struct ath10k *ar, struct sk_buff *skb) in ath10k_tx_htt() argument
2373 if (ar->htt.target_version_major >= 3) { in ath10k_tx_htt()
2375 ret = ath10k_htt_tx(&ar->htt, skb); in ath10k_tx_htt()
2381 ar->fw_features)) { in ath10k_tx_htt()
2382 if (skb_queue_len(&ar->wmi_mgmt_tx_queue) >= in ath10k_tx_htt()
2384 ath10k_warn(ar, "reached WMI management transmit queue limit\n"); in ath10k_tx_htt()
2389 skb_queue_tail(&ar->wmi_mgmt_tx_queue, skb); in ath10k_tx_htt()
2390 ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work); in ath10k_tx_htt()
2392 ret = ath10k_htt_mgmt_tx(&ar->htt, skb); in ath10k_tx_htt()
2395 ar->fw_features) && in ath10k_tx_htt()
2401 ret = ath10k_htt_mgmt_tx(&ar->htt, skb); in ath10k_tx_htt()
2403 ret = ath10k_htt_tx(&ar->htt, skb); in ath10k_tx_htt()
2408 ath10k_warn(ar, "failed to transmit packet, dropping: %d\n", in ath10k_tx_htt()
2410 ieee80211_free_txskb(ar->hw, skb); in ath10k_tx_htt()
2414 void ath10k_offchan_tx_purge(struct ath10k *ar) in ath10k_offchan_tx_purge() argument
2419 skb = skb_dequeue(&ar->offchan_tx_queue); in ath10k_offchan_tx_purge()
2423 ieee80211_free_txskb(ar->hw, skb); in ath10k_offchan_tx_purge()
2429 struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work); in ath10k_offchan_tx_work() local
2445 skb = skb_dequeue(&ar->offchan_tx_queue); in ath10k_offchan_tx_work()
2449 mutex_lock(&ar->conf_mutex); in ath10k_offchan_tx_work()
2451 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %p\n", in ath10k_offchan_tx_work()
2458 spin_lock_bh(&ar->data_lock); in ath10k_offchan_tx_work()
2459 peer = ath10k_peer_find(ar, vdev_id, peer_addr); in ath10k_offchan_tx_work()
2460 spin_unlock_bh(&ar->data_lock); in ath10k_offchan_tx_work()
2464 ath10k_dbg(ar, ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n", in ath10k_offchan_tx_work()
2468 ret = ath10k_peer_create(ar, vdev_id, peer_addr); in ath10k_offchan_tx_work()
2470 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n", in ath10k_offchan_tx_work()
2474 spin_lock_bh(&ar->data_lock); in ath10k_offchan_tx_work()
2475 reinit_completion(&ar->offchan_tx_completed); in ath10k_offchan_tx_work()
2476 ar->offchan_tx_skb = skb; in ath10k_offchan_tx_work()
2477 spin_unlock_bh(&ar->data_lock); in ath10k_offchan_tx_work()
2479 ath10k_tx_htt(ar, skb); in ath10k_offchan_tx_work()
2481 ret = wait_for_completion_timeout(&ar->offchan_tx_completed, in ath10k_offchan_tx_work()
2484 ath10k_warn(ar, "timed out waiting for offchannel skb %p\n", in ath10k_offchan_tx_work()
2488 ret = ath10k_peer_delete(ar, vdev_id, peer_addr); in ath10k_offchan_tx_work()
2490 ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n", in ath10k_offchan_tx_work()
2494 mutex_unlock(&ar->conf_mutex); in ath10k_offchan_tx_work()
2498 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar) in ath10k_mgmt_over_wmi_tx_purge() argument
2503 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue); in ath10k_mgmt_over_wmi_tx_purge()
2507 ieee80211_free_txskb(ar->hw, skb); in ath10k_mgmt_over_wmi_tx_purge()
2513 struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work); in ath10k_mgmt_over_wmi_tx_work() local
2518 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue); in ath10k_mgmt_over_wmi_tx_work()
2522 ret = ath10k_wmi_mgmt_tx(ar, skb); in ath10k_mgmt_over_wmi_tx_work()
2524 ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n", in ath10k_mgmt_over_wmi_tx_work()
2526 ieee80211_free_txskb(ar->hw, skb); in ath10k_mgmt_over_wmi_tx_work()
2535 void __ath10k_scan_finish(struct ath10k *ar) in __ath10k_scan_finish() argument
2537 lockdep_assert_held(&ar->data_lock); in __ath10k_scan_finish()
2539 switch (ar->scan.state) { in __ath10k_scan_finish()
2543 if (ar->scan.is_roc) in __ath10k_scan_finish()
2544 ieee80211_remain_on_channel_expired(ar->hw); in __ath10k_scan_finish()
2547 if (!ar->scan.is_roc) in __ath10k_scan_finish()
2548 ieee80211_scan_completed(ar->hw, in __ath10k_scan_finish()
2549 (ar->scan.state == in __ath10k_scan_finish()
2553 ar->scan.state = ATH10K_SCAN_IDLE; in __ath10k_scan_finish()
2554 ar->scan_channel = NULL; in __ath10k_scan_finish()
2555 ath10k_offchan_tx_purge(ar); in __ath10k_scan_finish()
2556 cancel_delayed_work(&ar->scan.timeout); in __ath10k_scan_finish()
2557 complete_all(&ar->scan.completed); in __ath10k_scan_finish()
2562 void ath10k_scan_finish(struct ath10k *ar) in ath10k_scan_finish() argument
2564 spin_lock_bh(&ar->data_lock); in ath10k_scan_finish()
2565 __ath10k_scan_finish(ar); in ath10k_scan_finish()
2566 spin_unlock_bh(&ar->data_lock); in ath10k_scan_finish()
2569 static int ath10k_scan_stop(struct ath10k *ar) in ath10k_scan_stop() argument
2578 lockdep_assert_held(&ar->conf_mutex); in ath10k_scan_stop()
2580 ret = ath10k_wmi_stop_scan(ar, &arg); in ath10k_scan_stop()
2582 ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret); in ath10k_scan_stop()
2586 ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ); in ath10k_scan_stop()
2588 ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n"); in ath10k_scan_stop()
2602 spin_lock_bh(&ar->data_lock); in ath10k_scan_stop()
2603 if (ar->scan.state != ATH10K_SCAN_IDLE) in ath10k_scan_stop()
2604 __ath10k_scan_finish(ar); in ath10k_scan_stop()
2605 spin_unlock_bh(&ar->data_lock); in ath10k_scan_stop()
2610 static void ath10k_scan_abort(struct ath10k *ar) in ath10k_scan_abort() argument
2614 lockdep_assert_held(&ar->conf_mutex); in ath10k_scan_abort()
2616 spin_lock_bh(&ar->data_lock); in ath10k_scan_abort()
2618 switch (ar->scan.state) { in ath10k_scan_abort()
2626 ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n", in ath10k_scan_abort()
2627 ath10k_scan_state_str(ar->scan.state), in ath10k_scan_abort()
2628 ar->scan.state); in ath10k_scan_abort()
2631 ar->scan.state = ATH10K_SCAN_ABORTING; in ath10k_scan_abort()
2632 spin_unlock_bh(&ar->data_lock); in ath10k_scan_abort()
2634 ret = ath10k_scan_stop(ar); in ath10k_scan_abort()
2636 ath10k_warn(ar, "failed to abort scan: %d\n", ret); in ath10k_scan_abort()
2638 spin_lock_bh(&ar->data_lock); in ath10k_scan_abort()
2642 spin_unlock_bh(&ar->data_lock); in ath10k_scan_abort()
2647 struct ath10k *ar = container_of(work, struct ath10k, in ath10k_scan_timeout_work() local
2650 mutex_lock(&ar->conf_mutex); in ath10k_scan_timeout_work()
2651 ath10k_scan_abort(ar); in ath10k_scan_timeout_work()
2652 mutex_unlock(&ar->conf_mutex); in ath10k_scan_timeout_work()
2655 static int ath10k_start_scan(struct ath10k *ar, in ath10k_start_scan() argument
2660 lockdep_assert_held(&ar->conf_mutex); in ath10k_start_scan()
2662 ret = ath10k_wmi_start_scan(ar, arg); in ath10k_start_scan()
2666 ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ); in ath10k_start_scan()
2668 ret = ath10k_scan_stop(ar); in ath10k_start_scan()
2670 ath10k_warn(ar, "failed to stop scan: %d\n", ret); in ath10k_start_scan()
2679 spin_lock_bh(&ar->data_lock); in ath10k_start_scan()
2680 if (ar->scan.state == ATH10K_SCAN_IDLE) { in ath10k_start_scan()
2681 spin_unlock_bh(&ar->data_lock); in ath10k_start_scan()
2684 spin_unlock_bh(&ar->data_lock); in ath10k_start_scan()
2687 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout, in ath10k_start_scan()
2700 struct ath10k *ar = hw->priv; in ath10k_tx() local
2707 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n"); in ath10k_tx()
2711 ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif); in ath10k_tx()
2716 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb); in ath10k_tx()
2721 spin_lock_bh(&ar->data_lock); in ath10k_tx()
2722 ATH10K_SKB_CB(skb)->htt.freq = ar->scan.roc_freq; in ath10k_tx()
2723 ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id; in ath10k_tx()
2724 spin_unlock_bh(&ar->data_lock); in ath10k_tx()
2726 if (ath10k_mac_need_offchan_tx_work(ar)) { in ath10k_tx()
2730 ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n", in ath10k_tx()
2733 skb_queue_tail(&ar->offchan_tx_queue, skb); in ath10k_tx()
2734 ieee80211_queue_work(hw, &ar->offchan_tx_work); in ath10k_tx()
2739 ath10k_tx_htt(ar, skb); in ath10k_tx()
2743 void ath10k_drain_tx(struct ath10k *ar) in ath10k_drain_tx() argument
2748 ath10k_offchan_tx_purge(ar); in ath10k_drain_tx()
2749 ath10k_mgmt_over_wmi_tx_purge(ar); in ath10k_drain_tx()
2751 cancel_work_sync(&ar->offchan_tx_work); in ath10k_drain_tx()
2752 cancel_work_sync(&ar->wmi_mgmt_tx_work); in ath10k_drain_tx()
2755 void ath10k_halt(struct ath10k *ar) in ath10k_halt() argument
2759 lockdep_assert_held(&ar->conf_mutex); in ath10k_halt()
2761 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); in ath10k_halt()
2762 ar->filter_flags = 0; in ath10k_halt()
2763 ar->monitor = false; in ath10k_halt()
2765 if (ar->monitor_started) in ath10k_halt()
2766 ath10k_monitor_stop(ar); in ath10k_halt()
2768 ar->monitor_started = false; in ath10k_halt()
2770 ath10k_scan_finish(ar); in ath10k_halt()
2771 ath10k_peer_cleanup_all(ar); in ath10k_halt()
2772 ath10k_core_stop(ar); in ath10k_halt()
2773 ath10k_hif_power_down(ar); in ath10k_halt()
2775 spin_lock_bh(&ar->data_lock); in ath10k_halt()
2776 list_for_each_entry(arvif, &ar->arvifs, list) in ath10k_halt()
2778 spin_unlock_bh(&ar->data_lock); in ath10k_halt()
2783 struct ath10k *ar = hw->priv; in ath10k_get_antenna() local
2785 mutex_lock(&ar->conf_mutex); in ath10k_get_antenna()
2787 if (ar->cfg_tx_chainmask) { in ath10k_get_antenna()
2788 *tx_ant = ar->cfg_tx_chainmask; in ath10k_get_antenna()
2789 *rx_ant = ar->cfg_rx_chainmask; in ath10k_get_antenna()
2791 *tx_ant = ar->supp_tx_chainmask; in ath10k_get_antenna()
2792 *rx_ant = ar->supp_rx_chainmask; in ath10k_get_antenna()
2795 mutex_unlock(&ar->conf_mutex); in ath10k_get_antenna()
2800 static void ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg) in ath10k_check_chain_mask() argument
2809 …ath10k_warn(ar, "mac %s antenna chainmask may be invalid: 0x%x. Suggested values: 15, 7, 3, 1 or … in ath10k_check_chain_mask()
2813 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant) in __ath10k_set_antenna() argument
2817 lockdep_assert_held(&ar->conf_mutex); in __ath10k_set_antenna()
2819 ath10k_check_chain_mask(ar, tx_ant, "tx"); in __ath10k_set_antenna()
2820 ath10k_check_chain_mask(ar, rx_ant, "rx"); in __ath10k_set_antenna()
2822 ar->cfg_tx_chainmask = tx_ant; in __ath10k_set_antenna()
2823 ar->cfg_rx_chainmask = rx_ant; in __ath10k_set_antenna()
2825 if ((ar->state != ATH10K_STATE_ON) && in __ath10k_set_antenna()
2826 (ar->state != ATH10K_STATE_RESTARTED)) in __ath10k_set_antenna()
2829 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask, in __ath10k_set_antenna()
2832 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n", in __ath10k_set_antenna()
2837 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask, in __ath10k_set_antenna()
2840 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n", in __ath10k_set_antenna()
2850 struct ath10k *ar = hw->priv; in ath10k_set_antenna() local
2853 mutex_lock(&ar->conf_mutex); in ath10k_set_antenna()
2854 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant); in ath10k_set_antenna()
2855 mutex_unlock(&ar->conf_mutex); in ath10k_set_antenna()
2861 struct ath10k *ar = hw->priv; in ath10k_start() local
2869 ath10k_drain_tx(ar); in ath10k_start()
2871 mutex_lock(&ar->conf_mutex); in ath10k_start()
2873 switch (ar->state) { in ath10k_start()
2875 ar->state = ATH10K_STATE_ON; in ath10k_start()
2878 ath10k_halt(ar); in ath10k_start()
2879 ar->state = ATH10K_STATE_RESTARTED; in ath10k_start()
2892 ret = ath10k_hif_power_up(ar); in ath10k_start()
2894 ath10k_err(ar, "Could not init hif: %d\n", ret); in ath10k_start()
2898 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL); in ath10k_start()
2900 ath10k_err(ar, "Could not init core: %d\n", ret); in ath10k_start()
2904 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pmf_qos, 1); in ath10k_start()
2906 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret); in ath10k_start()
2910 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->dynamic_bw, 1); in ath10k_start()
2912 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret); in ath10k_start()
2916 if (ar->cfg_tx_chainmask) in ath10k_start()
2917 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask, in ath10k_start()
2918 ar->cfg_rx_chainmask); in ath10k_start()
2929 ret = ath10k_wmi_pdev_set_param(ar, in ath10k_start()
2930 ar->wmi.pdev_param->arp_ac_override, 0); in ath10k_start()
2932 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n", in ath10k_start()
2937 ar->num_started_vdevs = 0; in ath10k_start()
2938 ath10k_regd_update(ar); in ath10k_start()
2940 ath10k_spectral_start(ar); in ath10k_start()
2942 mutex_unlock(&ar->conf_mutex); in ath10k_start()
2946 ath10k_core_stop(ar); in ath10k_start()
2949 ath10k_hif_power_down(ar); in ath10k_start()
2952 ar->state = ATH10K_STATE_OFF; in ath10k_start()
2955 mutex_unlock(&ar->conf_mutex); in ath10k_start()
2961 struct ath10k *ar = hw->priv; in ath10k_stop() local
2963 ath10k_drain_tx(ar); in ath10k_stop()
2965 mutex_lock(&ar->conf_mutex); in ath10k_stop()
2966 if (ar->state != ATH10K_STATE_OFF) { in ath10k_stop()
2967 ath10k_halt(ar); in ath10k_stop()
2968 ar->state = ATH10K_STATE_OFF; in ath10k_stop()
2970 mutex_unlock(&ar->conf_mutex); in ath10k_stop()
2972 cancel_delayed_work_sync(&ar->scan.timeout); in ath10k_stop()
2973 cancel_work_sync(&ar->restart_work); in ath10k_stop()
2976 static int ath10k_config_ps(struct ath10k *ar) in ath10k_config_ps() argument
2981 lockdep_assert_held(&ar->conf_mutex); in ath10k_config_ps()
2983 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_config_ps()
2986 ath10k_warn(ar, "failed to setup powersave: %d\n", ret); in ath10k_config_ps()
3017 static void ath10k_config_chan(struct ath10k *ar) in ath10k_config_chan() argument
3022 lockdep_assert_held(&ar->conf_mutex); in ath10k_config_chan()
3024 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_config_chan()
3026 ar->chandef.chan->center_freq, in ath10k_config_chan()
3027 ar->chandef.center_freq1, in ath10k_config_chan()
3028 ar->chandef.center_freq2, in ath10k_config_chan()
3029 chandef_get_width(ar->chandef.width)); in ath10k_config_chan()
3033 if (ar->monitor_started) in ath10k_config_chan()
3034 ath10k_monitor_stop(ar); in ath10k_config_chan()
3036 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_config_chan()
3046 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); in ath10k_config_chan()
3048 ath10k_warn(ar, "failed to down vdev %d: %d\n", in ath10k_config_chan()
3056 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_config_chan()
3065 ath10k_warn(ar, "failed to restart vdev %d: %d\n", in ath10k_config_chan()
3073 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, in ath10k_config_chan()
3076 ath10k_warn(ar, "failed to bring vdev up %d: %d\n", in ath10k_config_chan()
3082 ath10k_monitor_recalc(ar); in ath10k_config_chan()
3085 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower) in ath10k_mac_txpower_setup() argument
3090 lockdep_assert_held(&ar->conf_mutex); in ath10k_mac_txpower_setup()
3092 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower); in ath10k_mac_txpower_setup()
3094 param = ar->wmi.pdev_param->txpower_limit2g; in ath10k_mac_txpower_setup()
3095 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2); in ath10k_mac_txpower_setup()
3097 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n", in ath10k_mac_txpower_setup()
3102 param = ar->wmi.pdev_param->txpower_limit5g; in ath10k_mac_txpower_setup()
3103 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2); in ath10k_mac_txpower_setup()
3105 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n", in ath10k_mac_txpower_setup()
3113 static int ath10k_mac_txpower_recalc(struct ath10k *ar) in ath10k_mac_txpower_recalc() argument
3118 lockdep_assert_held(&ar->conf_mutex); in ath10k_mac_txpower_recalc()
3120 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_mac_txpower_recalc()
3132 ret = ath10k_mac_txpower_setup(ar, txpower); in ath10k_mac_txpower_recalc()
3134 ath10k_warn(ar, "failed to setup tx power %d: %d\n", in ath10k_mac_txpower_recalc()
3144 struct ath10k *ar = hw->priv; in ath10k_config() local
3148 mutex_lock(&ar->conf_mutex); in ath10k_config()
3151 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_config()
3157 spin_lock_bh(&ar->data_lock); in ath10k_config()
3158 ar->rx_channel = conf->chandef.chan; in ath10k_config()
3159 spin_unlock_bh(&ar->data_lock); in ath10k_config()
3161 ar->radar_enabled = conf->radar_enabled; in ath10k_config()
3162 ath10k_recalc_radar_detection(ar); in ath10k_config()
3164 if (!cfg80211_chandef_identical(&ar->chandef, &conf->chandef)) { in ath10k_config()
3165 ar->chandef = conf->chandef; in ath10k_config()
3166 ath10k_config_chan(ar); in ath10k_config()
3171 ath10k_config_ps(ar); in ath10k_config()
3174 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR; in ath10k_config()
3175 ret = ath10k_monitor_recalc(ar); in ath10k_config()
3177 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret); in ath10k_config()
3180 mutex_unlock(&ar->conf_mutex); in ath10k_config()
3205 struct ath10k *ar = hw->priv; in ath10k_add_interface() local
3215 mutex_lock(&ar->conf_mutex); in ath10k_add_interface()
3219 arvif->ar = ar; in ath10k_add_interface()
3224 if (ar->free_vdev_map == 0) { in ath10k_add_interface()
3225 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n"); in ath10k_add_interface()
3229 bit = __ffs64(ar->free_vdev_map); in ath10k_add_interface()
3231 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n", in ath10k_add_interface()
3232 bit, ar->free_vdev_map); in ath10k_add_interface()
3283 arvif->beacon_buf = dma_zalloc_coherent(ar->dev, in ath10k_add_interface()
3289 ath10k_warn(ar, "failed to allocate beacon buffer: %d\n", in ath10k_add_interface()
3295 …ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n… in ath10k_add_interface()
3299 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type, in ath10k_add_interface()
3302 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n", 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()
3315 ath10k_warn(ar, "failed to disable keepalive on vdev %i: %d\n", in ath10k_add_interface()
3322 vdev_param = ar->wmi.vdev_param->tx_encap_type; in ath10k_add_interface()
3323 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_add_interface()
3327 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n", in ath10k_add_interface()
3335 if (ar->cfg_tx_chainmask && (vif->type != NL80211_IFTYPE_MONITOR)) { in ath10k_add_interface()
3336 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask); in ath10k_add_interface()
3338 vdev_param = ar->wmi.vdev_param->nss; in ath10k_add_interface()
3339 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_add_interface()
3342 ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n", in ath10k_add_interface()
3343 arvif->vdev_id, ar->cfg_tx_chainmask, nss, in ath10k_add_interface()
3350 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr); in ath10k_add_interface()
3352 ath10k_warn(ar, "failed to create vdev %i peer for AP: %d\n", in ath10k_add_interface()
3359 ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n", in ath10k_add_interface()
3368 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_add_interface()
3371 ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n", in ath10k_add_interface()
3378 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n", in ath10k_add_interface()
3385 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n", in ath10k_add_interface()
3391 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold); in ath10k_add_interface()
3393 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n", in ath10k_add_interface()
3398 ret = ath10k_mac_set_frag(arvif, ar->hw->wiphy->frag_threshold); in ath10k_add_interface()
3400 ath10k_warn(ar, "failed to set frag threshold for vdev %d: %d\n", in ath10k_add_interface()
3406 ret = ath10k_mac_txpower_recalc(ar); in ath10k_add_interface()
3408 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret); in ath10k_add_interface()
3412 mutex_unlock(&ar->conf_mutex); 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()
3426 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN, in ath10k_add_interface()
3431 mutex_unlock(&ar->conf_mutex); in ath10k_add_interface()
3439 struct ath10k *ar = hw->priv; in ath10k_remove_interface() local
3443 mutex_lock(&ar->conf_mutex); in ath10k_remove_interface()
3445 spin_lock_bh(&ar->data_lock); in ath10k_remove_interface()
3447 spin_unlock_bh(&ar->data_lock); in ath10k_remove_interface()
3451 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n", in ath10k_remove_interface()
3454 ar->free_vdev_map |= 1LL << arvif->vdev_id; in ath10k_remove_interface()
3458 ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id, in ath10k_remove_interface()
3461 ath10k_warn(ar, "failed to submit AP self-peer removal on vdev %i: %d\n", in ath10k_remove_interface()
3467 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n", in ath10k_remove_interface()
3470 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id); in ath10k_remove_interface()
3472 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n", in ath10k_remove_interface()
3479 ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id, in ath10k_remove_interface()
3482 ath10k_warn(ar, "failed to remove AP self-peer on vdev %i: %d\n", in ath10k_remove_interface()
3485 spin_lock_bh(&ar->data_lock); in ath10k_remove_interface()
3486 ar->num_peers--; in ath10k_remove_interface()
3487 spin_unlock_bh(&ar->data_lock); in ath10k_remove_interface()
3490 ath10k_peer_cleanup(ar, arvif->vdev_id); in ath10k_remove_interface()
3492 mutex_unlock(&ar->conf_mutex); in ath10k_remove_interface()
3513 struct ath10k *ar = hw->priv; in ath10k_configure_filter() local
3516 mutex_lock(&ar->conf_mutex); in ath10k_configure_filter()
3520 ar->filter_flags = *total_flags; in ath10k_configure_filter()
3522 ret = ath10k_monitor_recalc(ar); in ath10k_configure_filter()
3524 ath10k_warn(ar, "failed to recalc montior: %d\n", ret); in ath10k_configure_filter()
3526 mutex_unlock(&ar->conf_mutex); in ath10k_configure_filter()
3534 struct ath10k *ar = hw->priv; in ath10k_bss_info_changed() local
3539 mutex_lock(&ar->conf_mutex); in ath10k_bss_info_changed()
3546 vdev_param = ar->wmi.vdev_param->beacon_interval; in ath10k_bss_info_changed()
3547 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
3549 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_bss_info_changed()
3554 ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n", in ath10k_bss_info_changed()
3559 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_bss_info_changed()
3563 pdev_param = ar->wmi.pdev_param->beacon_tx_mode; in ath10k_bss_info_changed()
3564 ret = ath10k_wmi_pdev_set_param(ar, pdev_param, in ath10k_bss_info_changed()
3567 ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n", in ath10k_bss_info_changed()
3572 ath10k_warn(ar, "failed to update beacon template: %d\n", in ath10k_bss_info_changed()
3579 ath10k_warn(ar, "failed to setup probe resp template on vdev %i: %d\n", in ath10k_bss_info_changed()
3586 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_bss_info_changed()
3590 vdev_param = ar->wmi.vdev_param->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()
3594 ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n", in ath10k_bss_info_changed()
3614 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n", in ath10k_bss_info_changed()
3619 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n", in ath10k_bss_info_changed()
3630 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n", in ath10k_bss_info_changed()
3633 vdev_param = ar->wmi.vdev_param->slot_time; in ath10k_bss_info_changed()
3634 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
3637 ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n", in ath10k_bss_info_changed()
3647 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_bss_info_changed()
3651 vdev_param = ar->wmi.vdev_param->preamble; in ath10k_bss_info_changed()
3652 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_bss_info_changed()
3655 ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n", in ath10k_bss_info_changed()
3665 if (ar->monitor_started) in ath10k_bss_info_changed()
3666 ath10k_monitor_stop(ar); in ath10k_bss_info_changed()
3668 ath10k_monitor_recalc(ar); in ath10k_bss_info_changed()
3675 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n", in ath10k_bss_info_changed()
3679 ret = ath10k_mac_txpower_recalc(ar); in ath10k_bss_info_changed()
3681 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret); in ath10k_bss_info_changed()
3687 ret = ath10k_config_ps(ar); in ath10k_bss_info_changed()
3689 ath10k_warn(ar, "failed to setup ps on vdev %i: %d\n", in ath10k_bss_info_changed()
3693 mutex_unlock(&ar->conf_mutex); in ath10k_bss_info_changed()
3700 struct ath10k *ar = hw->priv; in ath10k_hw_scan() local
3707 mutex_lock(&ar->conf_mutex); in ath10k_hw_scan()
3709 spin_lock_bh(&ar->data_lock); in ath10k_hw_scan()
3710 switch (ar->scan.state) { in ath10k_hw_scan()
3712 reinit_completion(&ar->scan.started); in ath10k_hw_scan()
3713 reinit_completion(&ar->scan.completed); in ath10k_hw_scan()
3714 ar->scan.state = ATH10K_SCAN_STARTING; in ath10k_hw_scan()
3715 ar->scan.is_roc = false; in ath10k_hw_scan()
3716 ar->scan.vdev_id = arvif->vdev_id; in ath10k_hw_scan()
3725 spin_unlock_bh(&ar->data_lock); in ath10k_hw_scan()
3731 ath10k_wmi_start_scan_init(ar, &arg); in ath10k_hw_scan()
3759 ret = ath10k_start_scan(ar, &arg); in ath10k_hw_scan()
3761 ath10k_warn(ar, "failed to start hw scan: %d\n", ret); in ath10k_hw_scan()
3762 spin_lock_bh(&ar->data_lock); in ath10k_hw_scan()
3763 ar->scan.state = ATH10K_SCAN_IDLE; in ath10k_hw_scan()
3764 spin_unlock_bh(&ar->data_lock); in ath10k_hw_scan()
3768 mutex_unlock(&ar->conf_mutex); in ath10k_hw_scan()
3775 struct ath10k *ar = hw->priv; in ath10k_cancel_hw_scan() local
3777 mutex_lock(&ar->conf_mutex); in ath10k_cancel_hw_scan()
3778 ath10k_scan_abort(ar); in ath10k_cancel_hw_scan()
3779 mutex_unlock(&ar->conf_mutex); in ath10k_cancel_hw_scan()
3781 cancel_delayed_work_sync(&ar->scan.timeout); in ath10k_cancel_hw_scan()
3784 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar, 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()
3815 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, in ath10k_set_key_h_def_keyidx()
3818 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n", in ath10k_set_key_h_def_keyidx()
3826 struct ath10k *ar = hw->priv; in ath10k_set_key() local
3838 mutex_lock(&ar->conf_mutex); in ath10k_set_key()
3851 spin_lock_bh(&ar->data_lock); in ath10k_set_key()
3852 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr); in ath10k_set_key()
3853 spin_unlock_bh(&ar->data_lock); in ath10k_set_key()
3857 ath10k_warn(ar, "failed to install key for non-existent peer %pM\n", in ath10k_set_key()
3887 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n", in ath10k_set_key()
3892 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key); in ath10k_set_key()
3894 spin_lock_bh(&ar->data_lock); in ath10k_set_key()
3895 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr); in ath10k_set_key()
3902 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr); in ath10k_set_key()
3903 spin_unlock_bh(&ar->data_lock); in ath10k_set_key()
3906 mutex_unlock(&ar->conf_mutex); in ath10k_set_key()
3914 struct ath10k *ar = hw->priv; 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()
3923 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n", in ath10k_set_default_unicast_key()
3926 ret = ath10k_wmi_vdev_set_param(arvif->ar, in ath10k_set_default_unicast_key()
3928 arvif->ar->wmi.vdev_param->def_keyid, in ath10k_set_default_unicast_key()
3932 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n", in ath10k_set_default_unicast_key()
3940 mutex_unlock(&arvif->ar->conf_mutex); in ath10k_set_default_unicast_key()
3945 struct ath10k *ar; in ath10k_sta_rc_update_wk() local
3955 ar = arvif->ar; in ath10k_sta_rc_update_wk()
3957 spin_lock_bh(&ar->data_lock); in ath10k_sta_rc_update_wk()
3966 spin_unlock_bh(&ar->data_lock); in ath10k_sta_rc_update_wk()
3968 mutex_lock(&ar->conf_mutex); in ath10k_sta_rc_update_wk()
3971 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n", 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()
3977 ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n", in ath10k_sta_rc_update_wk()
3982 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n", 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()
3988 ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n", in ath10k_sta_rc_update_wk()
3993 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n", 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()
3999 ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n", in ath10k_sta_rc_update_wk()
4005 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates/nss\n", in ath10k_sta_rc_update_wk()
4008 err = ath10k_station_assoc(ar, arvif->vif, sta, true); in ath10k_sta_rc_update_wk()
4010 ath10k_warn(ar, "failed to reassociate station: %pM\n", in ath10k_sta_rc_update_wk()
4014 mutex_unlock(&ar->conf_mutex); in ath10k_sta_rc_update_wk()
4019 struct ath10k *ar = arvif->ar; in ath10k_mac_inc_num_stations() local
4021 lockdep_assert_held(&ar->conf_mutex); in ath10k_mac_inc_num_stations()
4027 if (ar->num_stations >= ar->max_num_stations) in ath10k_mac_inc_num_stations()
4030 ar->num_stations++; in ath10k_mac_inc_num_stations()
4037 struct ath10k *ar = arvif->ar; in ath10k_mac_dec_num_stations() local
4039 lockdep_assert_held(&ar->conf_mutex); in ath10k_mac_dec_num_stations()
4045 ar->num_stations--; in ath10k_mac_dec_num_stations()
4054 struct ath10k *ar = hw->priv; in ath10k_sta_state() local
4071 mutex_lock(&ar->conf_mutex); in ath10k_sta_state()
4078 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_sta_state()
4081 ar->num_stations + 1, ar->max_num_stations, in ath10k_sta_state()
4082 ar->num_peers + 1, ar->max_num_peers); in ath10k_sta_state()
4086 ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n", in ath10k_sta_state()
4087 ar->max_num_stations); in ath10k_sta_state()
4091 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr); in ath10k_sta_state()
4093 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n", in ath10k_sta_state()
4104 ath10k_warn(ar, "failed to start vdev %i: %d\n", in ath10k_sta_state()
4106 WARN_ON(ath10k_peer_delete(ar, arvif->vdev_id, in ath10k_sta_state()
4119 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_sta_state()
4128 ath10k_warn(ar, "failed to stop vdev %i: %d\n", in ath10k_sta_state()
4134 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr); in ath10k_sta_state()
4136 ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n", in ath10k_sta_state()
4147 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n", in ath10k_sta_state()
4150 ret = ath10k_station_assoc(ar, vif, sta, false); in ath10k_sta_state()
4152 ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n", in ath10k_sta_state()
4161 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n", in ath10k_sta_state()
4164 ret = ath10k_station_disassoc(ar, vif, sta); in ath10k_sta_state()
4166 ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n", in ath10k_sta_state()
4170 mutex_unlock(&ar->conf_mutex); in ath10k_sta_state()
4174 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif, in ath10k_conf_tx_uapsd() argument
4183 lockdep_assert_held(&ar->conf_mutex); in ath10k_conf_tx_uapsd()
4220 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_conf_tx_uapsd()
4224 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret); in ath10k_conf_tx_uapsd()
4233 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, in ath10k_conf_tx_uapsd()
4237 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret); in ath10k_conf_tx_uapsd()
4241 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n", in ath10k_conf_tx_uapsd()
4248 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n", in ath10k_conf_tx_uapsd()
4253 if (test_bit(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, ar->wmi.svc_map) || in ath10k_conf_tx_uapsd()
4254 test_bit(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, ar->wmi.svc_map)) { in ath10k_conf_tx_uapsd()
4267 ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id, in ath10k_conf_tx_uapsd()
4270 ath10k_warn(ar, "failed to set uapsd auto trigger %d\n", in ath10k_conf_tx_uapsd()
4284 struct ath10k *ar = hw->priv; in ath10k_conf_tx() local
4289 mutex_lock(&ar->conf_mutex); in ath10k_conf_tx()
4322 if (ar->wmi.ops->gen_vdev_wmm_conf) { in ath10k_conf_tx()
4323 ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id, in ath10k_conf_tx()
4326 ath10k_warn(ar, "failed to set vdev wmm params on vdev %i: %d\n", in ath10k_conf_tx()
4334 ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params); in ath10k_conf_tx()
4336 ath10k_warn(ar, "failed to set wmm params: %d\n", ret); in ath10k_conf_tx()
4341 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd); in ath10k_conf_tx()
4343 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret); in ath10k_conf_tx()
4346 mutex_unlock(&ar->conf_mutex); in ath10k_conf_tx()
4358 struct ath10k *ar = hw->priv; in ath10k_remain_on_channel() local
4363 mutex_lock(&ar->conf_mutex); in ath10k_remain_on_channel()
4365 spin_lock_bh(&ar->data_lock); in ath10k_remain_on_channel()
4366 switch (ar->scan.state) { in ath10k_remain_on_channel()
4368 reinit_completion(&ar->scan.started); in ath10k_remain_on_channel()
4369 reinit_completion(&ar->scan.completed); in ath10k_remain_on_channel()
4370 reinit_completion(&ar->scan.on_channel); in ath10k_remain_on_channel()
4371 ar->scan.state = ATH10K_SCAN_STARTING; in ath10k_remain_on_channel()
4372 ar->scan.is_roc = true; in ath10k_remain_on_channel()
4373 ar->scan.vdev_id = arvif->vdev_id; in ath10k_remain_on_channel()
4374 ar->scan.roc_freq = chan->center_freq; in ath10k_remain_on_channel()
4383 spin_unlock_bh(&ar->data_lock); in ath10k_remain_on_channel()
4391 ath10k_wmi_start_scan_init(ar, &arg); in ath10k_remain_on_channel()
4402 ret = ath10k_start_scan(ar, &arg); in ath10k_remain_on_channel()
4404 ath10k_warn(ar, "failed to start roc scan: %d\n", ret); in ath10k_remain_on_channel()
4405 spin_lock_bh(&ar->data_lock); in ath10k_remain_on_channel()
4406 ar->scan.state = ATH10K_SCAN_IDLE; in ath10k_remain_on_channel()
4407 spin_unlock_bh(&ar->data_lock); in ath10k_remain_on_channel()
4411 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ); in ath10k_remain_on_channel()
4413 ath10k_warn(ar, "failed to switch to channel for roc scan\n"); in ath10k_remain_on_channel()
4415 ret = ath10k_scan_stop(ar); in ath10k_remain_on_channel()
4417 ath10k_warn(ar, "failed to stop scan: %d\n", ret); in ath10k_remain_on_channel()
4425 mutex_unlock(&ar->conf_mutex); in ath10k_remain_on_channel()
4431 struct ath10k *ar = hw->priv; in ath10k_cancel_remain_on_channel() local
4433 mutex_lock(&ar->conf_mutex); in ath10k_cancel_remain_on_channel()
4434 ath10k_scan_abort(ar); in ath10k_cancel_remain_on_channel()
4435 mutex_unlock(&ar->conf_mutex); in ath10k_cancel_remain_on_channel()
4437 cancel_delayed_work_sync(&ar->scan.timeout); in ath10k_cancel_remain_on_channel()
4449 struct ath10k *ar = hw->priv; in ath10k_set_rts_threshold() local
4453 mutex_lock(&ar->conf_mutex); in ath10k_set_rts_threshold()
4454 list_for_each_entry(arvif, &ar->arvifs, list) { in ath10k_set_rts_threshold()
4455 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n", in ath10k_set_rts_threshold()
4460 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n", in ath10k_set_rts_threshold()
4465 mutex_unlock(&ar->conf_mutex); in ath10k_set_rts_threshold()
4488 struct ath10k *ar = hw->priv; in ath10k_flush() local
4497 mutex_lock(&ar->conf_mutex); in ath10k_flush()
4499 if (ar->state == ATH10K_STATE_WEDGED) in ath10k_flush()
4502 ret = wait_event_timeout(ar->htt.empty_tx_wq, ({ in ath10k_flush()
4505 spin_lock_bh(&ar->htt.tx_lock); in ath10k_flush()
4506 empty = (ar->htt.num_pending_tx == 0); in ath10k_flush()
4507 spin_unlock_bh(&ar->htt.tx_lock); in ath10k_flush()
4509 skip = (ar->state == ATH10K_STATE_WEDGED) || in ath10k_flush()
4511 &ar->dev_flags); in ath10k_flush()
4517 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %i\n", in ath10k_flush()
4518 skip, ar->state, ret); in ath10k_flush()
4521 mutex_unlock(&ar->conf_mutex); in ath10k_flush()
4537 struct ath10k *ar = hw->priv; in ath10k_suspend() local
4540 mutex_lock(&ar->conf_mutex); in ath10k_suspend()
4542 ret = ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND); in ath10k_suspend()
4550 ret = ath10k_hif_suspend(ar); in ath10k_suspend()
4552 ath10k_warn(ar, "failed to suspend hif: %d\n", ret); in ath10k_suspend()
4559 ret = ath10k_wmi_pdev_resume_target(ar); in ath10k_suspend()
4561 ath10k_warn(ar, "failed to resume target: %d\n", ret); in ath10k_suspend()
4565 mutex_unlock(&ar->conf_mutex); in ath10k_suspend()
4571 struct ath10k *ar = hw->priv; in ath10k_resume() local
4574 mutex_lock(&ar->conf_mutex); in ath10k_resume()
4576 ret = ath10k_hif_resume(ar); in ath10k_resume()
4578 ath10k_warn(ar, "failed to resume hif: %d\n", ret); in ath10k_resume()
4583 ret = ath10k_wmi_pdev_resume_target(ar); in ath10k_resume()
4585 ath10k_warn(ar, "failed to resume target: %d\n", ret); in ath10k_resume()
4592 mutex_unlock(&ar->conf_mutex); in ath10k_resume()
4600 struct ath10k *ar = hw->priv; in ath10k_reconfig_complete() local
4605 mutex_lock(&ar->conf_mutex); in ath10k_reconfig_complete()
4609 if (ar->state == ATH10K_STATE_RESTARTED) { in ath10k_reconfig_complete()
4610 ath10k_info(ar, "device successfully recovered\n"); in ath10k_reconfig_complete()
4611 ar->state = ATH10K_STATE_ON; in ath10k_reconfig_complete()
4612 ieee80211_wake_queues(ar->hw); in ath10k_reconfig_complete()
4615 mutex_unlock(&ar->conf_mutex); in ath10k_reconfig_complete()
4621 struct ath10k *ar = hw->priv; in ath10k_get_survey() local
4623 struct survey_info *ar_survey = &ar->survey[idx]; in ath10k_get_survey()
4626 mutex_lock(&ar->conf_mutex); in ath10k_get_survey()
4642 spin_lock_bh(&ar->data_lock); in ath10k_get_survey()
4644 spin_unlock_bh(&ar->data_lock); in ath10k_get_survey()
4648 if (ar->rx_channel == survey->channel) in ath10k_get_survey()
4652 mutex_unlock(&ar->conf_mutex); in ath10k_get_survey()
4691 ath10k_default_bitrate_mask(struct ath10k *ar, in ath10k_default_bitrate_mask() argument
4698 u16 nrf = ar->num_rf_chains; in ath10k_default_bitrate_mask()
4700 if (ar->cfg_tx_chainmask) in ath10k_default_bitrate_mask()
4701 nrf = get_nss_from_chainmask(ar->cfg_tx_chainmask); in ath10k_default_bitrate_mask()
4815 ath10k_bitrate_mask_rate(struct ath10k *ar, in ath10k_bitrate_mask_rate() argument
4874 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac fixed rate pream 0x%02x nss 0x%02x rate 0x%02x\n", in ath10k_bitrate_mask_rate()
4882 static bool ath10k_get_fixed_rate_nss(struct ath10k *ar, in ath10k_get_fixed_rate_nss() argument
4893 return ath10k_bitrate_mask_rate(ar, mask, band, fixed_rate, fixed_nss); in ath10k_get_fixed_rate_nss()
4901 struct ath10k *ar = arvif->ar; in ath10k_set_fixed_rate_param() local
4905 mutex_lock(&ar->conf_mutex); in ath10k_set_fixed_rate_param()
4913 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac disable fixed bitrate mask\n"); in ath10k_set_fixed_rate_param()
4916 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac force sgi\n"); in ath10k_set_fixed_rate_param()
4918 vdev_param = ar->wmi.vdev_param->fixed_rate; in ath10k_set_fixed_rate_param()
4919 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, in ath10k_set_fixed_rate_param()
4922 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n", in ath10k_set_fixed_rate_param()
4930 vdev_param = ar->wmi.vdev_param->nss; in ath10k_set_fixed_rate_param()
4931 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, in ath10k_set_fixed_rate_param()
4935 ath10k_warn(ar, "failed to set fixed nss param %d: %d\n", in ath10k_set_fixed_rate_param()
4943 vdev_param = ar->wmi.vdev_param->sgi; 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()
4948 ath10k_warn(ar, "failed to set sgi param %d: %d\n", in ath10k_set_fixed_rate_param()
4957 mutex_unlock(&ar->conf_mutex); in ath10k_set_fixed_rate_param()
4966 struct ath10k *ar = arvif->ar; in ath10k_set_bitrate_mask() local
4967 enum ieee80211_band band = ar->hw->conf.chandef.chan->band; in ath10k_set_bitrate_mask()
4969 u8 fixed_nss = ar->num_rf_chains; in ath10k_set_bitrate_mask()
4972 if (ar->cfg_tx_chainmask) in ath10k_set_bitrate_mask()
4973 fixed_nss = get_nss_from_chainmask(ar->cfg_tx_chainmask); in ath10k_set_bitrate_mask()
4979 if (!ath10k_default_bitrate_mask(ar, band, mask)) { in ath10k_set_bitrate_mask()
4980 if (!ath10k_get_fixed_rate_nss(ar, mask, band, in ath10k_set_bitrate_mask()
4987 ath10k_warn(ar, "failed to force SGI usage for default rate settings\n"); in ath10k_set_bitrate_mask()
5000 struct ath10k *ar = hw->priv; in ath10k_sta_rc_update() local
5004 spin_lock_bh(&ar->data_lock); in ath10k_sta_rc_update()
5006 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_sta_rc_update()
5025 ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n", in ath10k_sta_rc_update()
5052 ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n", in ath10k_sta_rc_update()
5063 spin_unlock_bh(&ar->data_lock); in ath10k_sta_rc_update()
5084 struct ath10k *ar = hw->priv; in ath10k_ampdu_action() local
5087 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n", in ath10k_ampdu_action()
5251 struct ath10k *ar; in ath10k_mac_create() local
5257 ar = hw->priv; in ath10k_mac_create()
5258 ar->hw = hw; in ath10k_mac_create()
5260 return ar; in ath10k_mac_create()
5263 void ath10k_mac_destroy(struct ath10k *ar) in ath10k_mac_destroy() argument
5265 ieee80211_free_hw(ar->hw); in ath10k_mac_destroy()
5321 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar) in ath10k_create_vht_cap() argument
5328 vht_cap.cap = ar->vht_cap_info; in ath10k_create_vht_cap()
5332 if (i < ar->num_rf_chains) in ath10k_create_vht_cap()
5344 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar) in ath10k_get_ht_cap() argument
5349 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED)) in ath10k_get_ht_cap()
5359 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI) in ath10k_get_ht_cap()
5362 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI) in ath10k_get_ht_cap()
5365 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) { in ath10k_get_ht_cap()
5374 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC) in ath10k_get_ht_cap()
5377 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) { in ath10k_get_ht_cap()
5380 stbc = ar->ht_cap_info; in ath10k_get_ht_cap()
5389 if (ar->ht_cap_info & WMI_HT_CAP_LDPC) in ath10k_get_ht_cap()
5392 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT) in ath10k_get_ht_cap()
5396 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK) in ath10k_get_ht_cap()
5399 for (i = 0; i < ar->num_rf_chains; i++) in ath10k_get_ht_cap()
5417 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id) in ath10k_get_arvif() argument
5426 ieee80211_iterate_active_interfaces_atomic(ar->hw, in ath10k_get_arvif()
5431 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id); in ath10k_get_arvif()
5438 int ath10k_mac_register(struct ath10k *ar) in ath10k_mac_register() argument
5453 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr); in ath10k_mac_register()
5455 SET_IEEE80211_DEV(ar->hw, ar->dev); in ath10k_mac_register()
5457 ht_cap = ath10k_get_ht_cap(ar); in ath10k_mac_register()
5458 vht_cap = ath10k_create_vht_cap(ar); in ath10k_mac_register()
5460 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) { in ath10k_mac_register()
5469 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ]; in ath10k_mac_register()
5479 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band; in ath10k_mac_register()
5482 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) { in ath10k_mac_register()
5491 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ]; in ath10k_mac_register()
5498 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band; in ath10k_mac_register()
5501 ar->hw->wiphy->interface_modes = in ath10k_mac_register()
5505 ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask; in ath10k_mac_register()
5506 ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask; in ath10k_mac_register()
5508 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features)) in ath10k_mac_register()
5509 ar->hw->wiphy->interface_modes |= in ath10k_mac_register()
5514 ar->hw->flags = IEEE80211_HW_SIGNAL_DBM | in ath10k_mac_register()
5524 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS; in ath10k_mac_register()
5526 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) in ath10k_mac_register()
5527 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS; in ath10k_mac_register()
5529 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) { in ath10k_mac_register()
5530 ar->hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION; in ath10k_mac_register()
5531 ar->hw->flags |= IEEE80211_HW_TX_AMPDU_SETUP_IN_HW; in ath10k_mac_register()
5534 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID; in ath10k_mac_register()
5535 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN; in ath10k_mac_register()
5537 ar->hw->vif_data_size = sizeof(struct ath10k_vif); in ath10k_mac_register()
5538 ar->hw->sta_data_size = sizeof(struct ath10k_sta); in ath10k_mac_register()
5540 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL; in ath10k_mac_register()
5542 if (test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) { in ath10k_mac_register()
5543 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD; in ath10k_mac_register()
5549 ar->hw->wiphy->probe_resp_offload |= in ath10k_mac_register()
5555 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; in ath10k_mac_register()
5556 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH; in ath10k_mac_register()
5557 ar->hw->wiphy->max_remain_on_channel_duration = 5000; in ath10k_mac_register()
5559 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD; in ath10k_mac_register()
5560 ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE; in ath10k_mac_register()
5566 ar->hw->queues = 4; in ath10k_mac_register()
5568 switch (ar->wmi.op_version) { in ath10k_mac_register()
5571 ar->hw->wiphy->iface_combinations = ath10k_if_comb; in ath10k_mac_register()
5572 ar->hw->wiphy->n_iface_combinations = in ath10k_mac_register()
5574 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC); in ath10k_mac_register()
5579 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb; in ath10k_mac_register()
5580 ar->hw->wiphy->n_iface_combinations = in ath10k_mac_register()
5590 ar->hw->netdev_features = NETIF_F_HW_CSUM; in ath10k_mac_register()
5594 ar->ath_common.debug_mask = ATH_DBG_DFS; in ath10k_mac_register()
5595 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common, in ath10k_mac_register()
5598 if (!ar->dfs_detector) in ath10k_mac_register()
5599 ath10k_warn(ar, "failed to initialise DFS pattern detector\n"); in ath10k_mac_register()
5602 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy, in ath10k_mac_register()
5605 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret); in ath10k_mac_register()
5609 ar->hw->wiphy->cipher_suites = cipher_suites; in ath10k_mac_register()
5610 ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites); in ath10k_mac_register()
5612 ret = ieee80211_register_hw(ar->hw); in ath10k_mac_register()
5614 ath10k_err(ar, "failed to register ieee80211: %d\n", ret); in ath10k_mac_register()
5618 if (!ath_is_world_regd(&ar->ath_common.regulatory)) { in ath10k_mac_register()
5619 ret = regulatory_hint(ar->hw->wiphy, in ath10k_mac_register()
5620 ar->ath_common.regulatory.alpha2); in ath10k_mac_register()
5628 ieee80211_unregister_hw(ar->hw); in ath10k_mac_register()
5630 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels); in ath10k_mac_register()
5631 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels); in ath10k_mac_register()
5636 void ath10k_mac_unregister(struct ath10k *ar) in ath10k_mac_unregister() argument
5638 ieee80211_unregister_hw(ar->hw); in ath10k_mac_unregister()
5640 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) in ath10k_mac_unregister()
5641 ar->dfs_detector->exit(ar->dfs_detector); in ath10k_mac_unregister()
5643 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels); in ath10k_mac_unregister()
5644 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels); in ath10k_mac_unregister()
5646 SET_IEEE80211_DEV(ar->hw, NULL); in ath10k_mac_unregister()