2 * Copyright (c) 2005-2011 Atheros Communications Inc.
3 * Copyright (c) 2011-2013 Qualcomm Atheros, Inc.
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 #include <net/mac80211.h>
21 #include <linux/etherdevice.h>
37 static int ath10k_send_key(struct ath10k_vif *arvif,
38 struct ieee80211_key_conf *key,
42 struct ath10k *ar = arvif->ar;
43 struct wmi_vdev_install_key_arg arg = {
44 .vdev_id = arvif->vdev_id,
45 .key_idx = key->keyidx,
46 .key_len = key->keylen,
51 lockdep_assert_held(&arvif->ar->conf_mutex);
53 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
54 arg.key_flags = WMI_KEY_PAIRWISE;
56 arg.key_flags = WMI_KEY_GROUP;
58 switch (key->cipher) {
59 case WLAN_CIPHER_SUITE_CCMP:
60 arg.key_cipher = WMI_CIPHER_AES_CCM;
61 if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
62 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
64 key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
66 case WLAN_CIPHER_SUITE_TKIP:
67 arg.key_cipher = WMI_CIPHER_TKIP;
68 arg.key_txmic_len = 8;
69 arg.key_rxmic_len = 8;
71 case WLAN_CIPHER_SUITE_WEP40:
72 case WLAN_CIPHER_SUITE_WEP104:
73 arg.key_cipher = WMI_CIPHER_WEP;
74 /* AP/IBSS mode requires self-key to be groupwise
75 * Otherwise pairwise key must be set */
76 if (memcmp(macaddr, arvif->vif->addr, ETH_ALEN))
77 arg.key_flags = WMI_KEY_PAIRWISE;
80 ath10k_warn(ar, "cipher %d is not supported\n", key->cipher);
84 if (cmd == DISABLE_KEY) {
85 arg.key_cipher = WMI_CIPHER_NONE;
89 return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
92 static int ath10k_install_key(struct ath10k_vif *arvif,
93 struct ieee80211_key_conf *key,
97 struct ath10k *ar = arvif->ar;
100 lockdep_assert_held(&ar->conf_mutex);
102 reinit_completion(&ar->install_key_done);
104 ret = ath10k_send_key(arvif, key, cmd, macaddr);
108 ret = wait_for_completion_timeout(&ar->install_key_done, 3*HZ);
115 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
118 struct ath10k *ar = arvif->ar;
119 struct ath10k_peer *peer;
123 lockdep_assert_held(&ar->conf_mutex);
125 spin_lock_bh(&ar->data_lock);
126 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
127 spin_unlock_bh(&ar->data_lock);
132 for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
133 if (arvif->wep_keys[i] == NULL)
136 ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY,
141 spin_lock_bh(&ar->data_lock);
142 peer->keys[i] = arvif->wep_keys[i];
143 spin_unlock_bh(&ar->data_lock);
149 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
152 struct ath10k *ar = arvif->ar;
153 struct ath10k_peer *peer;
158 lockdep_assert_held(&ar->conf_mutex);
160 spin_lock_bh(&ar->data_lock);
161 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
162 spin_unlock_bh(&ar->data_lock);
167 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
168 if (peer->keys[i] == NULL)
171 ret = ath10k_install_key(arvif, peer->keys[i],
173 if (ret && first_errno == 0)
177 ath10k_warn(ar, "failed to remove peer wep key %d: %d\n",
180 spin_lock_bh(&ar->data_lock);
181 peer->keys[i] = NULL;
182 spin_unlock_bh(&ar->data_lock);
188 bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr,
191 struct ath10k_peer *peer;
194 lockdep_assert_held(&ar->data_lock);
196 /* We don't know which vdev this peer belongs to,
197 * since WMI doesn't give us that information.
199 * FIXME: multi-bss needs to be handled.
201 peer = ath10k_peer_find(ar, 0, addr);
205 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
206 if (peer->keys[i] && peer->keys[i]->keyidx == keyidx)
213 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
214 struct ieee80211_key_conf *key)
216 struct ath10k *ar = arvif->ar;
217 struct ath10k_peer *peer;
223 lockdep_assert_held(&ar->conf_mutex);
226 /* since ath10k_install_key we can't hold data_lock all the
227 * time, so we try to remove the keys incrementally */
228 spin_lock_bh(&ar->data_lock);
230 list_for_each_entry(peer, &ar->peers, list) {
231 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
232 if (peer->keys[i] == key) {
233 ether_addr_copy(addr, peer->addr);
234 peer->keys[i] = NULL;
239 if (i < ARRAY_SIZE(peer->keys))
242 spin_unlock_bh(&ar->data_lock);
244 if (i == ARRAY_SIZE(peer->keys))
247 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr);
248 if (ret && first_errno == 0)
252 ath10k_warn(ar, "failed to remove key for %pM: %d\n",
259 /*********************/
260 /* General utilities */
261 /*********************/
263 static inline enum wmi_phy_mode
264 chan_to_phymode(const struct cfg80211_chan_def *chandef)
266 enum wmi_phy_mode phymode = MODE_UNKNOWN;
268 switch (chandef->chan->band) {
269 case IEEE80211_BAND_2GHZ:
270 switch (chandef->width) {
271 case NL80211_CHAN_WIDTH_20_NOHT:
274 case NL80211_CHAN_WIDTH_20:
275 phymode = MODE_11NG_HT20;
277 case NL80211_CHAN_WIDTH_40:
278 phymode = MODE_11NG_HT40;
280 case NL80211_CHAN_WIDTH_5:
281 case NL80211_CHAN_WIDTH_10:
282 case NL80211_CHAN_WIDTH_80:
283 case NL80211_CHAN_WIDTH_80P80:
284 case NL80211_CHAN_WIDTH_160:
285 phymode = MODE_UNKNOWN;
289 case IEEE80211_BAND_5GHZ:
290 switch (chandef->width) {
291 case NL80211_CHAN_WIDTH_20_NOHT:
294 case NL80211_CHAN_WIDTH_20:
295 phymode = MODE_11NA_HT20;
297 case NL80211_CHAN_WIDTH_40:
298 phymode = MODE_11NA_HT40;
300 case NL80211_CHAN_WIDTH_80:
301 phymode = MODE_11AC_VHT80;
303 case NL80211_CHAN_WIDTH_5:
304 case NL80211_CHAN_WIDTH_10:
305 case NL80211_CHAN_WIDTH_80P80:
306 case NL80211_CHAN_WIDTH_160:
307 phymode = MODE_UNKNOWN;
315 WARN_ON(phymode == MODE_UNKNOWN);
319 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
322 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
323 * 0 for no restriction
332 switch (mpdudensity) {
338 /* Our lower layer calculations limit our precision to
354 static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr)
358 lockdep_assert_held(&ar->conf_mutex);
360 if (ar->num_peers >= ar->max_num_peers)
363 ret = ath10k_wmi_peer_create(ar, vdev_id, addr);
365 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n",
370 ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
372 ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n",
382 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
384 struct ath10k *ar = arvif->ar;
388 param = ar->wmi.pdev_param->sta_kickout_th;
389 ret = ath10k_wmi_pdev_set_param(ar, param,
390 ATH10K_KICKOUT_THRESHOLD);
392 ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n",
393 arvif->vdev_id, ret);
397 param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
398 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
399 ATH10K_KEEPALIVE_MIN_IDLE);
401 ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n",
402 arvif->vdev_id, ret);
406 param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
407 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
408 ATH10K_KEEPALIVE_MAX_IDLE);
410 ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n",
411 arvif->vdev_id, ret);
415 param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
416 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
417 ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
419 ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
420 arvif->vdev_id, ret);
427 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
429 struct ath10k *ar = arvif->ar;
432 vdev_param = ar->wmi.vdev_param->rts_threshold;
433 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
436 static int ath10k_mac_set_frag(struct ath10k_vif *arvif, u32 value)
438 struct ath10k *ar = arvif->ar;
441 if (value != 0xFFFFFFFF)
442 value = clamp_t(u32, arvif->ar->hw->wiphy->frag_threshold,
443 ATH10K_FRAGMT_THRESHOLD_MIN,
444 ATH10K_FRAGMT_THRESHOLD_MAX);
446 vdev_param = ar->wmi.vdev_param->fragmentation_threshold;
447 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
450 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
454 lockdep_assert_held(&ar->conf_mutex);
456 ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
460 ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
469 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
471 struct ath10k_peer *peer, *tmp;
473 lockdep_assert_held(&ar->conf_mutex);
475 spin_lock_bh(&ar->data_lock);
476 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
477 if (peer->vdev_id != vdev_id)
480 ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n",
481 peer->addr, vdev_id);
483 list_del(&peer->list);
487 spin_unlock_bh(&ar->data_lock);
490 static void ath10k_peer_cleanup_all(struct ath10k *ar)
492 struct ath10k_peer *peer, *tmp;
494 lockdep_assert_held(&ar->conf_mutex);
496 spin_lock_bh(&ar->data_lock);
497 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
498 list_del(&peer->list);
501 spin_unlock_bh(&ar->data_lock);
504 ar->num_stations = 0;
507 /************************/
508 /* Interface management */
509 /************************/
511 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif)
513 struct ath10k *ar = arvif->ar;
515 lockdep_assert_held(&ar->data_lock);
520 if (!arvif->beacon_buf)
521 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr,
522 arvif->beacon->len, DMA_TO_DEVICE);
524 dev_kfree_skb_any(arvif->beacon);
526 arvif->beacon = NULL;
527 arvif->beacon_sent = false;
530 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
532 struct ath10k *ar = arvif->ar;
534 lockdep_assert_held(&ar->data_lock);
536 ath10k_mac_vif_beacon_free(arvif);
538 if (arvif->beacon_buf) {
539 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
540 arvif->beacon_buf, arvif->beacon_paddr);
541 arvif->beacon_buf = NULL;
545 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
549 lockdep_assert_held(&ar->conf_mutex);
551 if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags))
554 ret = wait_for_completion_timeout(&ar->vdev_setup_done,
555 ATH10K_VDEV_SETUP_TIMEOUT_HZ);
562 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
564 struct cfg80211_chan_def *chandef = &ar->chandef;
565 struct ieee80211_channel *channel = chandef->chan;
566 struct wmi_vdev_start_request_arg arg = {};
569 lockdep_assert_held(&ar->conf_mutex);
571 arg.vdev_id = vdev_id;
572 arg.channel.freq = channel->center_freq;
573 arg.channel.band_center_freq1 = chandef->center_freq1;
575 /* TODO setup this dynamically, what in case we
576 don't have any vifs? */
577 arg.channel.mode = chan_to_phymode(chandef);
578 arg.channel.chan_radar =
579 !!(channel->flags & IEEE80211_CHAN_RADAR);
581 arg.channel.min_power = 0;
582 arg.channel.max_power = channel->max_power * 2;
583 arg.channel.max_reg_power = channel->max_reg_power * 2;
584 arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
586 reinit_completion(&ar->vdev_setup_done);
588 ret = ath10k_wmi_vdev_start(ar, &arg);
590 ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n",
595 ret = ath10k_vdev_setup_sync(ar);
597 ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i: %d\n",
602 ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
604 ath10k_warn(ar, "failed to put up monitor vdev %i: %d\n",
609 ar->monitor_vdev_id = vdev_id;
611 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i started\n",
612 ar->monitor_vdev_id);
616 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
618 ath10k_warn(ar, "failed to stop monitor vdev %i after start failure: %d\n",
619 ar->monitor_vdev_id, ret);
624 static int ath10k_monitor_vdev_stop(struct ath10k *ar)
628 lockdep_assert_held(&ar->conf_mutex);
630 ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id);
632 ath10k_warn(ar, "failed to put down monitor vdev %i: %d\n",
633 ar->monitor_vdev_id, ret);
635 reinit_completion(&ar->vdev_setup_done);
637 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
639 ath10k_warn(ar, "failed to to request monitor vdev %i stop: %d\n",
640 ar->monitor_vdev_id, ret);
642 ret = ath10k_vdev_setup_sync(ar);
644 ath10k_warn(ar, "failed to synchronise monitor vdev %i: %d\n",
645 ar->monitor_vdev_id, ret);
647 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n",
648 ar->monitor_vdev_id);
652 static int ath10k_monitor_vdev_create(struct ath10k *ar)
656 lockdep_assert_held(&ar->conf_mutex);
658 if (ar->free_vdev_map == 0) {
659 ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n");
663 bit = __ffs64(ar->free_vdev_map);
665 ar->monitor_vdev_id = bit;
667 ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
668 WMI_VDEV_TYPE_MONITOR,
671 ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n",
672 ar->monitor_vdev_id, ret);
676 ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id);
677 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
678 ar->monitor_vdev_id);
683 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
687 lockdep_assert_held(&ar->conf_mutex);
689 ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
691 ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n",
692 ar->monitor_vdev_id, ret);
696 ar->free_vdev_map |= 1LL << ar->monitor_vdev_id;
698 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
699 ar->monitor_vdev_id);
703 static int ath10k_monitor_start(struct ath10k *ar)
707 lockdep_assert_held(&ar->conf_mutex);
709 ret = ath10k_monitor_vdev_create(ar);
711 ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret);
715 ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
717 ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret);
718 ath10k_monitor_vdev_delete(ar);
722 ar->monitor_started = true;
723 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n");
728 static int ath10k_monitor_stop(struct ath10k *ar)
732 lockdep_assert_held(&ar->conf_mutex);
734 ret = ath10k_monitor_vdev_stop(ar);
736 ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret);
740 ret = ath10k_monitor_vdev_delete(ar);
742 ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret);
746 ar->monitor_started = false;
747 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n");
752 static int ath10k_monitor_recalc(struct ath10k *ar)
756 lockdep_assert_held(&ar->conf_mutex);
758 should_start = ar->monitor ||
759 ar->filter_flags & FIF_PROMISC_IN_BSS ||
760 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
762 ath10k_dbg(ar, ATH10K_DBG_MAC,
763 "mac monitor recalc started? %d should? %d\n",
764 ar->monitor_started, should_start);
766 if (should_start == ar->monitor_started)
770 return ath10k_monitor_start(ar);
772 return ath10k_monitor_stop(ar);
775 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
777 struct ath10k *ar = arvif->ar;
778 u32 vdev_param, rts_cts = 0;
780 lockdep_assert_held(&ar->conf_mutex);
782 vdev_param = ar->wmi.vdev_param->enable_rtscts;
784 if (arvif->use_cts_prot || arvif->num_legacy_stations > 0)
785 rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
787 if (arvif->num_legacy_stations > 0)
788 rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
791 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
795 static int ath10k_start_cac(struct ath10k *ar)
799 lockdep_assert_held(&ar->conf_mutex);
801 set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
803 ret = ath10k_monitor_recalc(ar);
805 ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret);
806 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
810 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
811 ar->monitor_vdev_id);
816 static int ath10k_stop_cac(struct ath10k *ar)
818 lockdep_assert_held(&ar->conf_mutex);
820 /* CAC is not running - do nothing */
821 if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
824 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
825 ath10k_monitor_stop(ar);
827 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n");
832 static void ath10k_recalc_radar_detection(struct ath10k *ar)
836 lockdep_assert_held(&ar->conf_mutex);
840 if (!ar->radar_enabled)
843 if (ar->num_started_vdevs > 0)
846 ret = ath10k_start_cac(ar);
849 * Not possible to start CAC on current channel so starting
850 * radiation is not allowed, make this channel DFS_UNAVAILABLE
851 * by indicating that radar was detected.
853 ath10k_warn(ar, "failed to start CAC: %d\n", ret);
854 ieee80211_radar_detected(ar->hw);
858 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif, bool restart)
860 struct ath10k *ar = arvif->ar;
861 struct cfg80211_chan_def *chandef = &ar->chandef;
862 struct wmi_vdev_start_request_arg arg = {};
865 lockdep_assert_held(&ar->conf_mutex);
867 reinit_completion(&ar->vdev_setup_done);
869 arg.vdev_id = arvif->vdev_id;
870 arg.dtim_period = arvif->dtim_period;
871 arg.bcn_intval = arvif->beacon_interval;
873 arg.channel.freq = chandef->chan->center_freq;
874 arg.channel.band_center_freq1 = chandef->center_freq1;
875 arg.channel.mode = chan_to_phymode(chandef);
877 arg.channel.min_power = 0;
878 arg.channel.max_power = chandef->chan->max_power * 2;
879 arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
880 arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
882 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
883 arg.ssid = arvif->u.ap.ssid;
884 arg.ssid_len = arvif->u.ap.ssid_len;
885 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
887 /* For now allow DFS for AP mode */
888 arg.channel.chan_radar =
889 !!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
890 } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
891 arg.ssid = arvif->vif->bss_conf.ssid;
892 arg.ssid_len = arvif->vif->bss_conf.ssid_len;
895 ath10k_dbg(ar, ATH10K_DBG_MAC,
896 "mac vdev %d start center_freq %d phymode %s\n",
897 arg.vdev_id, arg.channel.freq,
898 ath10k_wmi_phymode_str(arg.channel.mode));
901 ret = ath10k_wmi_vdev_restart(ar, &arg);
903 ret = ath10k_wmi_vdev_start(ar, &arg);
906 ath10k_warn(ar, "failed to start WMI vdev %i: %d\n",
911 ret = ath10k_vdev_setup_sync(ar);
913 ath10k_warn(ar, "failed to synchronise setup for vdev %i: %d\n",
918 ar->num_started_vdevs++;
919 ath10k_recalc_radar_detection(ar);
924 static int ath10k_vdev_start(struct ath10k_vif *arvif)
926 return ath10k_vdev_start_restart(arvif, false);
929 static int ath10k_vdev_restart(struct ath10k_vif *arvif)
931 return ath10k_vdev_start_restart(arvif, true);
934 static int ath10k_vdev_stop(struct ath10k_vif *arvif)
936 struct ath10k *ar = arvif->ar;
939 lockdep_assert_held(&ar->conf_mutex);
941 reinit_completion(&ar->vdev_setup_done);
943 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
945 ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n",
946 arvif->vdev_id, ret);
950 ret = ath10k_vdev_setup_sync(ar);
952 ath10k_warn(ar, "failed to syncronise setup for vdev %i: %d\n",
953 arvif->vdev_id, ret);
957 WARN_ON(ar->num_started_vdevs == 0);
959 if (ar->num_started_vdevs != 0) {
960 ar->num_started_vdevs--;
961 ath10k_recalc_radar_detection(ar);
967 static void ath10k_control_beaconing(struct ath10k_vif *arvif,
968 struct ieee80211_bss_conf *info)
970 struct ath10k *ar = arvif->ar;
973 lockdep_assert_held(&arvif->ar->conf_mutex);
975 if (!info->enable_beacon) {
976 ath10k_vdev_stop(arvif);
978 arvif->is_started = false;
979 arvif->is_up = false;
981 spin_lock_bh(&arvif->ar->data_lock);
982 ath10k_mac_vif_beacon_free(arvif);
983 spin_unlock_bh(&arvif->ar->data_lock);
988 arvif->tx_seq_no = 0x1000;
990 ret = ath10k_vdev_start(arvif);
995 ether_addr_copy(arvif->bssid, info->bssid);
997 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1000 ath10k_warn(ar, "failed to bring up vdev %d: %i\n",
1001 arvif->vdev_id, ret);
1002 ath10k_vdev_stop(arvif);
1006 arvif->is_started = true;
1007 arvif->is_up = true;
1009 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
1012 static void ath10k_control_ibss(struct ath10k_vif *arvif,
1013 struct ieee80211_bss_conf *info,
1014 const u8 self_peer[ETH_ALEN])
1016 struct ath10k *ar = arvif->ar;
1020 lockdep_assert_held(&arvif->ar->conf_mutex);
1022 if (!info->ibss_joined) {
1023 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, self_peer);
1025 ath10k_warn(ar, "failed to delete IBSS self peer %pM for vdev %d: %d\n",
1026 self_peer, arvif->vdev_id, ret);
1028 if (is_zero_ether_addr(arvif->bssid))
1031 memset(arvif->bssid, 0, ETH_ALEN);
1036 ret = ath10k_peer_create(arvif->ar, arvif->vdev_id, self_peer);
1038 ath10k_warn(ar, "failed to create IBSS self peer %pM for vdev %d: %d\n",
1039 self_peer, arvif->vdev_id, ret);
1043 vdev_param = arvif->ar->wmi.vdev_param->atim_window;
1044 ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param,
1045 ATH10K_DEFAULT_ATIM);
1047 ath10k_warn(ar, "failed to set IBSS ATIM for vdev %d: %d\n",
1048 arvif->vdev_id, ret);
1051 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif)
1053 struct ath10k *ar = arvif->ar;
1058 lockdep_assert_held(&arvif->ar->conf_mutex);
1060 if (arvif->u.sta.uapsd)
1061 value = WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER;
1063 value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS;
1065 param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD;
1066 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, value);
1068 ath10k_warn(ar, "failed to submit ps wake threshold %u on vdev %i: %d\n",
1069 value, arvif->vdev_id, ret);
1076 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif)
1078 struct ath10k *ar = arvif->ar;
1083 lockdep_assert_held(&arvif->ar->conf_mutex);
1085 if (arvif->u.sta.uapsd)
1086 value = WMI_STA_PS_PSPOLL_COUNT_UAPSD;
1088 value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX;
1090 param = WMI_STA_PS_PARAM_PSPOLL_COUNT;
1091 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
1094 ath10k_warn(ar, "failed to submit ps poll count %u on vdev %i: %d\n",
1095 value, arvif->vdev_id, ret);
1103 * Review this when mac80211 gains per-interface powersave support.
1105 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
1107 struct ath10k *ar = arvif->ar;
1108 struct ieee80211_vif *vif = arvif->vif;
1109 struct ieee80211_conf *conf = &ar->hw->conf;
1110 enum wmi_sta_powersave_param param;
1111 enum wmi_sta_ps_mode psmode;
1115 lockdep_assert_held(&arvif->ar->conf_mutex);
1117 if (arvif->vif->type != NL80211_IFTYPE_STATION)
1120 if (conf->flags & IEEE80211_CONF_PS) {
1121 psmode = WMI_STA_PS_MODE_ENABLED;
1122 param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1124 ps_timeout = conf->dynamic_ps_timeout;
1125 if (ps_timeout == 0) {
1126 /* Firmware doesn't like 0 */
1127 ps_timeout = ieee80211_tu_to_usec(
1128 vif->bss_conf.beacon_int) / 1000;
1131 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1134 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
1135 arvif->vdev_id, ret);
1139 psmode = WMI_STA_PS_MODE_DISABLED;
1142 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1143 arvif->vdev_id, psmode ? "enable" : "disable");
1145 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1147 ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n",
1148 psmode, arvif->vdev_id, ret);
1155 /**********************/
1156 /* Station management */
1157 /**********************/
1159 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar,
1160 struct ieee80211_vif *vif)
1162 /* Some firmware revisions have unstable STA powersave when listen
1163 * interval is set too high (e.g. 5). The symptoms are firmware doesn't
1164 * generate NullFunc frames properly even if buffered frames have been
1165 * indicated in Beacon TIM. Firmware would seldom wake up to pull
1166 * buffered frames. Often pinging the device from AP would simply fail.
1168 * As a workaround set it to 1.
1170 if (vif->type == NL80211_IFTYPE_STATION)
1173 return ar->hw->conf.listen_interval;
1176 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
1177 struct ieee80211_vif *vif,
1178 struct ieee80211_sta *sta,
1179 struct wmi_peer_assoc_complete_arg *arg)
1181 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1183 lockdep_assert_held(&ar->conf_mutex);
1185 ether_addr_copy(arg->addr, sta->addr);
1186 arg->vdev_id = arvif->vdev_id;
1187 arg->peer_aid = sta->aid;
1188 arg->peer_flags |= WMI_PEER_AUTH;
1189 arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif);
1190 arg->peer_num_spatial_streams = 1;
1191 arg->peer_caps = vif->bss_conf.assoc_capability;
1194 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
1195 struct ieee80211_vif *vif,
1196 struct wmi_peer_assoc_complete_arg *arg)
1198 struct ieee80211_bss_conf *info = &vif->bss_conf;
1199 struct cfg80211_bss *bss;
1200 const u8 *rsnie = NULL;
1201 const u8 *wpaie = NULL;
1203 lockdep_assert_held(&ar->conf_mutex);
1205 bss = cfg80211_get_bss(ar->hw->wiphy, ar->hw->conf.chandef.chan,
1206 info->bssid, NULL, 0, 0, 0);
1208 const struct cfg80211_bss_ies *ies;
1211 rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
1213 ies = rcu_dereference(bss->ies);
1215 wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
1216 WLAN_OUI_TYPE_MICROSOFT_WPA,
1220 cfg80211_put_bss(ar->hw->wiphy, bss);
1223 /* FIXME: base on RSN IE/WPA IE is a correct idea? */
1224 if (rsnie || wpaie) {
1225 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
1226 arg->peer_flags |= WMI_PEER_NEED_PTK_4_WAY;
1230 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
1231 arg->peer_flags |= WMI_PEER_NEED_GTK_2_WAY;
1235 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
1236 struct ieee80211_sta *sta,
1237 struct wmi_peer_assoc_complete_arg *arg)
1239 struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
1240 const struct ieee80211_supported_band *sband;
1241 const struct ieee80211_rate *rates;
1245 lockdep_assert_held(&ar->conf_mutex);
1247 sband = ar->hw->wiphy->bands[ar->hw->conf.chandef.chan->band];
1248 ratemask = sta->supp_rates[ar->hw->conf.chandef.chan->band];
1249 rates = sband->bitrates;
1251 rateset->num_rates = 0;
1253 for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
1254 if (!(ratemask & 1))
1257 rateset->rates[rateset->num_rates] = rates->hw_value;
1258 rateset->num_rates++;
1262 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
1263 struct ieee80211_sta *sta,
1264 struct wmi_peer_assoc_complete_arg *arg)
1266 const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
1270 lockdep_assert_held(&ar->conf_mutex);
1272 if (!ht_cap->ht_supported)
1275 arg->peer_flags |= WMI_PEER_HT;
1276 arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1277 ht_cap->ampdu_factor)) - 1;
1279 arg->peer_mpdu_density =
1280 ath10k_parse_mpdudensity(ht_cap->ampdu_density);
1282 arg->peer_ht_caps = ht_cap->cap;
1283 arg->peer_rate_caps |= WMI_RC_HT_FLAG;
1285 if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
1286 arg->peer_flags |= WMI_PEER_LDPC;
1288 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
1289 arg->peer_flags |= WMI_PEER_40MHZ;
1290 arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
1293 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
1294 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1296 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
1297 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1299 if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
1300 arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
1301 arg->peer_flags |= WMI_PEER_STBC;
1304 if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
1305 stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
1306 stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
1307 stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
1308 arg->peer_rate_caps |= stbc;
1309 arg->peer_flags |= WMI_PEER_STBC;
1312 if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
1313 arg->peer_rate_caps |= WMI_RC_TS_FLAG;
1314 else if (ht_cap->mcs.rx_mask[1])
1315 arg->peer_rate_caps |= WMI_RC_DS_FLAG;
1317 for (i = 0, n = 0; i < IEEE80211_HT_MCS_MASK_LEN*8; i++)
1318 if (ht_cap->mcs.rx_mask[i/8] & (1 << i%8))
1319 arg->peer_ht_rates.rates[n++] = i;
1322 * This is a workaround for HT-enabled STAs which break the spec
1323 * and have no HT capabilities RX mask (no HT RX MCS map).
1325 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
1326 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
1328 * Firmware asserts if such situation occurs.
1331 arg->peer_ht_rates.num_rates = 8;
1332 for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
1333 arg->peer_ht_rates.rates[i] = i;
1335 arg->peer_ht_rates.num_rates = n;
1336 arg->peer_num_spatial_streams = sta->rx_nss;
1339 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
1341 arg->peer_ht_rates.num_rates,
1342 arg->peer_num_spatial_streams);
1345 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
1346 struct ath10k_vif *arvif,
1347 struct ieee80211_sta *sta)
1353 lockdep_assert_held(&ar->conf_mutex);
1355 if (sta->wme && sta->uapsd_queues) {
1356 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
1357 sta->uapsd_queues, sta->max_sp);
1359 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
1360 uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
1361 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
1362 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
1363 uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
1364 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
1365 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
1366 uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
1367 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
1368 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
1369 uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
1370 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
1372 if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
1373 max_sp = sta->max_sp;
1375 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1377 WMI_AP_PS_PEER_PARAM_UAPSD,
1380 ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n",
1381 arvif->vdev_id, ret);
1385 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1387 WMI_AP_PS_PEER_PARAM_MAX_SP,
1390 ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n",
1391 arvif->vdev_id, ret);
1395 /* TODO setup this based on STA listen interval and
1396 beacon interval. Currently we don't know
1397 sta->listen_interval - mac80211 patch required.
1398 Currently use 10 seconds */
1399 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
1400 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME,
1403 ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n",
1404 arvif->vdev_id, ret);
1412 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
1413 struct ieee80211_sta *sta,
1414 struct wmi_peer_assoc_complete_arg *arg)
1416 const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
1419 if (!vht_cap->vht_supported)
1422 arg->peer_flags |= WMI_PEER_VHT;
1423 arg->peer_vht_caps = vht_cap->cap;
1425 ampdu_factor = (vht_cap->cap &
1426 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
1427 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
1429 /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
1430 * zero in VHT IE. Using it would result in degraded throughput.
1431 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
1432 * it if VHT max_mpdu is smaller. */
1433 arg->peer_max_mpdu = max(arg->peer_max_mpdu,
1434 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1435 ampdu_factor)) - 1);
1437 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1438 arg->peer_flags |= WMI_PEER_80MHZ;
1440 arg->peer_vht_rates.rx_max_rate =
1441 __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
1442 arg->peer_vht_rates.rx_mcs_set =
1443 __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
1444 arg->peer_vht_rates.tx_max_rate =
1445 __le16_to_cpu(vht_cap->vht_mcs.tx_highest);
1446 arg->peer_vht_rates.tx_mcs_set =
1447 __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map);
1449 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
1450 sta->addr, arg->peer_max_mpdu, arg->peer_flags);
1453 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
1454 struct ieee80211_vif *vif,
1455 struct ieee80211_sta *sta,
1456 struct wmi_peer_assoc_complete_arg *arg)
1458 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1460 switch (arvif->vdev_type) {
1461 case WMI_VDEV_TYPE_AP:
1463 arg->peer_flags |= WMI_PEER_QOS;
1465 if (sta->wme && sta->uapsd_queues) {
1466 arg->peer_flags |= WMI_PEER_APSD;
1467 arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
1470 case WMI_VDEV_TYPE_STA:
1471 if (vif->bss_conf.qos)
1472 arg->peer_flags |= WMI_PEER_QOS;
1479 static bool ath10k_mac_sta_has_11g_rates(struct ieee80211_sta *sta)
1481 /* First 4 rates in ath10k_rates are CCK (11b) rates. */
1482 return sta->supp_rates[IEEE80211_BAND_2GHZ] >> 4;
1485 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
1486 struct ieee80211_vif *vif,
1487 struct ieee80211_sta *sta,
1488 struct wmi_peer_assoc_complete_arg *arg)
1490 enum wmi_phy_mode phymode = MODE_UNKNOWN;
1492 switch (ar->hw->conf.chandef.chan->band) {
1493 case IEEE80211_BAND_2GHZ:
1494 if (sta->ht_cap.ht_supported) {
1495 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1496 phymode = MODE_11NG_HT40;
1498 phymode = MODE_11NG_HT20;
1499 } else if (ath10k_mac_sta_has_11g_rates(sta)) {
1506 case IEEE80211_BAND_5GHZ:
1510 if (sta->vht_cap.vht_supported) {
1511 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1512 phymode = MODE_11AC_VHT80;
1513 else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1514 phymode = MODE_11AC_VHT40;
1515 else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
1516 phymode = MODE_11AC_VHT20;
1517 } else if (sta->ht_cap.ht_supported) {
1518 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1519 phymode = MODE_11NA_HT40;
1521 phymode = MODE_11NA_HT20;
1531 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
1532 sta->addr, ath10k_wmi_phymode_str(phymode));
1534 arg->peer_phymode = phymode;
1535 WARN_ON(phymode == MODE_UNKNOWN);
1538 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
1539 struct ieee80211_vif *vif,
1540 struct ieee80211_sta *sta,
1541 struct wmi_peer_assoc_complete_arg *arg)
1543 lockdep_assert_held(&ar->conf_mutex);
1545 memset(arg, 0, sizeof(*arg));
1547 ath10k_peer_assoc_h_basic(ar, vif, sta, arg);
1548 ath10k_peer_assoc_h_crypto(ar, vif, arg);
1549 ath10k_peer_assoc_h_rates(ar, sta, arg);
1550 ath10k_peer_assoc_h_ht(ar, sta, arg);
1551 ath10k_peer_assoc_h_vht(ar, sta, arg);
1552 ath10k_peer_assoc_h_qos(ar, vif, sta, arg);
1553 ath10k_peer_assoc_h_phymode(ar, vif, sta, arg);
1558 static const u32 ath10k_smps_map[] = {
1559 [WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
1560 [WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
1561 [WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
1562 [WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
1565 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
1567 const struct ieee80211_sta_ht_cap *ht_cap)
1571 if (!ht_cap->ht_supported)
1574 smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
1575 smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
1577 if (smps >= ARRAY_SIZE(ath10k_smps_map))
1580 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
1581 WMI_PEER_SMPS_STATE,
1582 ath10k_smps_map[smps]);
1585 /* can be called only in mac80211 callbacks due to `key_count` usage */
1586 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
1587 struct ieee80211_vif *vif,
1588 struct ieee80211_bss_conf *bss_conf)
1590 struct ath10k *ar = hw->priv;
1591 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1592 struct ieee80211_sta_ht_cap ht_cap;
1593 struct wmi_peer_assoc_complete_arg peer_arg;
1594 struct ieee80211_sta *ap_sta;
1597 lockdep_assert_held(&ar->conf_mutex);
1599 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n",
1600 arvif->vdev_id, arvif->bssid, arvif->aid);
1604 ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
1606 ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n",
1607 bss_conf->bssid, arvif->vdev_id);
1612 /* ap_sta must be accessed only within rcu section which must be left
1613 * before calling ath10k_setup_peer_smps() which might sleep. */
1614 ht_cap = ap_sta->ht_cap;
1616 ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg);
1618 ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n",
1619 bss_conf->bssid, arvif->vdev_id, ret);
1626 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1628 ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n",
1629 bss_conf->bssid, arvif->vdev_id, ret);
1633 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
1635 ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n",
1636 arvif->vdev_id, ret);
1640 ath10k_dbg(ar, ATH10K_DBG_MAC,
1641 "mac vdev %d up (associated) bssid %pM aid %d\n",
1642 arvif->vdev_id, bss_conf->bssid, bss_conf->aid);
1644 WARN_ON(arvif->is_up);
1646 arvif->aid = bss_conf->aid;
1647 ether_addr_copy(arvif->bssid, bss_conf->bssid);
1649 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
1651 ath10k_warn(ar, "failed to set vdev %d up: %d\n",
1652 arvif->vdev_id, ret);
1656 arvif->is_up = true;
1659 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
1660 struct ieee80211_vif *vif)
1662 struct ath10k *ar = hw->priv;
1663 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1666 lockdep_assert_held(&ar->conf_mutex);
1668 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n",
1669 arvif->vdev_id, arvif->bssid);
1671 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1673 ath10k_warn(ar, "faield to down vdev %i: %d\n",
1674 arvif->vdev_id, ret);
1676 arvif->def_wep_key_idx = 0;
1677 arvif->is_up = false;
1680 static int ath10k_station_assoc(struct ath10k *ar,
1681 struct ieee80211_vif *vif,
1682 struct ieee80211_sta *sta,
1685 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1686 struct wmi_peer_assoc_complete_arg peer_arg;
1689 lockdep_assert_held(&ar->conf_mutex);
1691 ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg);
1693 ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
1694 sta->addr, arvif->vdev_id, ret);
1698 peer_arg.peer_reassoc = reassoc;
1699 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1701 ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n",
1702 sta->addr, arvif->vdev_id, ret);
1706 /* Re-assoc is run only to update supported rates for given station. It
1707 * doesn't make much sense to reconfigure the peer completely.
1710 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
1713 ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
1714 arvif->vdev_id, ret);
1718 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
1720 ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
1721 sta->addr, arvif->vdev_id, ret);
1726 arvif->num_legacy_stations++;
1727 ret = ath10k_recalc_rtscts_prot(arvif);
1729 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
1730 arvif->vdev_id, ret);
1735 ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
1737 ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
1738 arvif->vdev_id, ret);
1746 static int ath10k_station_disassoc(struct ath10k *ar,
1747 struct ieee80211_vif *vif,
1748 struct ieee80211_sta *sta)
1750 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1753 lockdep_assert_held(&ar->conf_mutex);
1756 arvif->num_legacy_stations--;
1757 ret = ath10k_recalc_rtscts_prot(arvif);
1759 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
1760 arvif->vdev_id, ret);
1765 ret = ath10k_clear_peer_keys(arvif, sta->addr);
1767 ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n",
1768 arvif->vdev_id, ret);
1779 static int ath10k_update_channel_list(struct ath10k *ar)
1781 struct ieee80211_hw *hw = ar->hw;
1782 struct ieee80211_supported_band **bands;
1783 enum ieee80211_band band;
1784 struct ieee80211_channel *channel;
1785 struct wmi_scan_chan_list_arg arg = {0};
1786 struct wmi_channel_arg *ch;
1792 lockdep_assert_held(&ar->conf_mutex);
1794 bands = hw->wiphy->bands;
1795 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1799 for (i = 0; i < bands[band]->n_channels; i++) {
1800 if (bands[band]->channels[i].flags &
1801 IEEE80211_CHAN_DISABLED)
1808 len = sizeof(struct wmi_channel_arg) * arg.n_channels;
1809 arg.channels = kzalloc(len, GFP_KERNEL);
1814 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1818 for (i = 0; i < bands[band]->n_channels; i++) {
1819 channel = &bands[band]->channels[i];
1821 if (channel->flags & IEEE80211_CHAN_DISABLED)
1824 ch->allow_ht = true;
1826 /* FIXME: when should we really allow VHT? */
1827 ch->allow_vht = true;
1830 !(channel->flags & IEEE80211_CHAN_NO_IR);
1833 !(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
1836 !!(channel->flags & IEEE80211_CHAN_RADAR);
1838 passive = channel->flags & IEEE80211_CHAN_NO_IR;
1839 ch->passive = passive;
1841 ch->freq = channel->center_freq;
1842 ch->band_center_freq1 = channel->center_freq;
1844 ch->max_power = channel->max_power * 2;
1845 ch->max_reg_power = channel->max_reg_power * 2;
1846 ch->max_antenna_gain = channel->max_antenna_gain * 2;
1847 ch->reg_class_id = 0; /* FIXME */
1849 /* FIXME: why use only legacy modes, why not any
1850 * HT/VHT modes? Would that even make any
1852 if (channel->band == IEEE80211_BAND_2GHZ)
1853 ch->mode = MODE_11G;
1855 ch->mode = MODE_11A;
1857 if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
1860 ath10k_dbg(ar, ATH10K_DBG_WMI,
1861 "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
1862 ch - arg.channels, arg.n_channels,
1863 ch->freq, ch->max_power, ch->max_reg_power,
1864 ch->max_antenna_gain, ch->mode);
1870 ret = ath10k_wmi_scan_chan_list(ar, &arg);
1871 kfree(arg.channels);
1876 static enum wmi_dfs_region
1877 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
1879 switch (dfs_region) {
1880 case NL80211_DFS_UNSET:
1881 return WMI_UNINIT_DFS_DOMAIN;
1882 case NL80211_DFS_FCC:
1883 return WMI_FCC_DFS_DOMAIN;
1884 case NL80211_DFS_ETSI:
1885 return WMI_ETSI_DFS_DOMAIN;
1886 case NL80211_DFS_JP:
1887 return WMI_MKK4_DFS_DOMAIN;
1889 return WMI_UNINIT_DFS_DOMAIN;
1892 static void ath10k_regd_update(struct ath10k *ar)
1894 struct reg_dmn_pair_mapping *regpair;
1896 enum wmi_dfs_region wmi_dfs_reg;
1897 enum nl80211_dfs_regions nl_dfs_reg;
1899 lockdep_assert_held(&ar->conf_mutex);
1901 ret = ath10k_update_channel_list(ar);
1903 ath10k_warn(ar, "failed to update channel list: %d\n", ret);
1905 regpair = ar->ath_common.regulatory.regpair;
1907 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1908 nl_dfs_reg = ar->dfs_detector->region;
1909 wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
1911 wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
1914 /* Target allows setting up per-band regdomain but ath_common provides
1915 * a combined one only */
1916 ret = ath10k_wmi_pdev_set_regdomain(ar,
1917 regpair->reg_domain,
1918 regpair->reg_domain, /* 2ghz */
1919 regpair->reg_domain, /* 5ghz */
1920 regpair->reg_2ghz_ctl,
1921 regpair->reg_5ghz_ctl,
1924 ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret);
1927 static void ath10k_reg_notifier(struct wiphy *wiphy,
1928 struct regulatory_request *request)
1930 struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1931 struct ath10k *ar = hw->priv;
1934 ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
1936 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1937 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
1938 request->dfs_region);
1939 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
1940 request->dfs_region);
1942 ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n",
1943 request->dfs_region);
1946 mutex_lock(&ar->conf_mutex);
1947 if (ar->state == ATH10K_STATE_ON)
1948 ath10k_regd_update(ar);
1949 mutex_unlock(&ar->conf_mutex);
1956 static u8 ath10k_tx_h_get_tid(struct ieee80211_hdr *hdr)
1958 if (ieee80211_is_mgmt(hdr->frame_control))
1959 return HTT_DATA_TX_EXT_TID_MGMT;
1961 if (!ieee80211_is_data_qos(hdr->frame_control))
1962 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1964 if (!is_unicast_ether_addr(ieee80211_get_DA(hdr)))
1965 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1967 return ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
1970 static u8 ath10k_tx_h_get_vdev_id(struct ath10k *ar, struct ieee80211_vif *vif)
1973 return ath10k_vif_to_arvif(vif)->vdev_id;
1975 if (ar->monitor_started)
1976 return ar->monitor_vdev_id;
1978 ath10k_warn(ar, "failed to resolve vdev id\n");
1982 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
1983 * Control in the header.
1985 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
1987 struct ieee80211_hdr *hdr = (void *)skb->data;
1988 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
1991 if (!ieee80211_is_data_qos(hdr->frame_control))
1994 qos_ctl = ieee80211_get_qos_ctl(hdr);
1995 memmove(skb->data + IEEE80211_QOS_CTL_LEN,
1996 skb->data, (void *)qos_ctl - (void *)skb->data);
1997 skb_pull(skb, IEEE80211_QOS_CTL_LEN);
1999 /* Fw/Hw generates a corrupted QoS Control Field for QoS NullFunc
2000 * frames. Powersave is handled by the fw/hw so QoS NyllFunc frames are
2001 * used only for CQM purposes (e.g. hostapd station keepalive ping) so
2002 * it is safe to downgrade to NullFunc.
2004 if (ieee80211_is_qos_nullfunc(hdr->frame_control)) {
2005 hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
2006 cb->htt.tid = HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
2010 static void ath10k_tx_wep_key_work(struct work_struct *work)
2012 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
2014 struct ath10k *ar = arvif->ar;
2015 int ret, keyidx = arvif->def_wep_key_newidx;
2017 mutex_lock(&arvif->ar->conf_mutex);
2019 if (arvif->ar->state != ATH10K_STATE_ON)
2022 if (arvif->def_wep_key_idx == keyidx)
2025 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
2026 arvif->vdev_id, keyidx);
2028 ret = ath10k_wmi_vdev_set_param(arvif->ar,
2030 arvif->ar->wmi.vdev_param->def_keyid,
2033 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
2039 arvif->def_wep_key_idx = keyidx;
2042 mutex_unlock(&arvif->ar->conf_mutex);
2045 static void ath10k_tx_h_update_wep_key(struct ieee80211_vif *vif,
2046 struct ieee80211_key_conf *key,
2047 struct sk_buff *skb)
2049 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2050 struct ath10k *ar = arvif->ar;
2051 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2053 if (!ieee80211_has_protected(hdr->frame_control))
2059 if (key->cipher != WLAN_CIPHER_SUITE_WEP40 &&
2060 key->cipher != WLAN_CIPHER_SUITE_WEP104)
2063 if (key->keyidx == arvif->def_wep_key_idx)
2066 /* FIXME: Most likely a few frames will be TXed with an old key. Simply
2067 * queueing frames until key index is updated is not an option because
2068 * sk_buff may need more processing to be done, e.g. offchannel */
2069 arvif->def_wep_key_newidx = key->keyidx;
2070 ieee80211_queue_work(ar->hw, &arvif->wep_key_work);
2073 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
2074 struct ieee80211_vif *vif,
2075 struct sk_buff *skb)
2077 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2078 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2080 /* This is case only for P2P_GO */
2081 if (arvif->vdev_type != WMI_VDEV_TYPE_AP ||
2082 arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO)
2085 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
2086 spin_lock_bh(&ar->data_lock);
2087 if (arvif->u.ap.noa_data)
2088 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
2090 memcpy(skb_put(skb, arvif->u.ap.noa_len),
2091 arvif->u.ap.noa_data,
2092 arvif->u.ap.noa_len);
2093 spin_unlock_bh(&ar->data_lock);
2097 static bool ath10k_mac_need_offchan_tx_work(struct ath10k *ar)
2099 /* FIXME: Not really sure since when the behaviour changed. At some
2100 * point new firmware stopped requiring creation of peer entries for
2101 * offchannel tx (and actually creating them causes issues with wmi-htc
2102 * tx credit replenishment and reliability). Assuming it's at least 3.4
2103 * because that's when the `freq` was introduced to TX_FRM HTT command.
2105 return !(ar->htt.target_version_major >= 3 &&
2106 ar->htt.target_version_minor >= 4);
2109 static void ath10k_tx_htt(struct ath10k *ar, struct sk_buff *skb)
2111 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2114 if (ar->htt.target_version_major >= 3) {
2115 /* Since HTT 3.0 there is no separate mgmt tx command */
2116 ret = ath10k_htt_tx(&ar->htt, skb);
2120 if (ieee80211_is_mgmt(hdr->frame_control)) {
2121 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
2123 if (skb_queue_len(&ar->wmi_mgmt_tx_queue) >=
2124 ATH10K_MAX_NUM_MGMT_PENDING) {
2125 ath10k_warn(ar, "reached WMI management transmit queue limit\n");
2130 skb_queue_tail(&ar->wmi_mgmt_tx_queue, skb);
2131 ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
2133 ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2135 } else if (!test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
2137 ieee80211_is_nullfunc(hdr->frame_control)) {
2138 /* FW does not report tx status properly for NullFunc frames
2139 * unless they are sent through mgmt tx path. mac80211 sends
2140 * those frames when it detects link/beacon loss and depends
2141 * on the tx status to be correct. */
2142 ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2144 ret = ath10k_htt_tx(&ar->htt, skb);
2149 ath10k_warn(ar, "failed to transmit packet, dropping: %d\n",
2151 ieee80211_free_txskb(ar->hw, skb);
2155 void ath10k_offchan_tx_purge(struct ath10k *ar)
2157 struct sk_buff *skb;
2160 skb = skb_dequeue(&ar->offchan_tx_queue);
2164 ieee80211_free_txskb(ar->hw, skb);
2168 void ath10k_offchan_tx_work(struct work_struct *work)
2170 struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
2171 struct ath10k_peer *peer;
2172 struct ieee80211_hdr *hdr;
2173 struct sk_buff *skb;
2174 const u8 *peer_addr;
2178 /* FW requirement: We must create a peer before FW will send out
2179 * an offchannel frame. Otherwise the frame will be stuck and
2180 * never transmitted. We delete the peer upon tx completion.
2181 * It is unlikely that a peer for offchannel tx will already be
2182 * present. However it may be in some rare cases so account for that.
2183 * Otherwise we might remove a legitimate peer and break stuff. */
2186 skb = skb_dequeue(&ar->offchan_tx_queue);
2190 mutex_lock(&ar->conf_mutex);
2192 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %p\n",
2195 hdr = (struct ieee80211_hdr *)skb->data;
2196 peer_addr = ieee80211_get_DA(hdr);
2197 vdev_id = ATH10K_SKB_CB(skb)->vdev_id;
2199 spin_lock_bh(&ar->data_lock);
2200 peer = ath10k_peer_find(ar, vdev_id, peer_addr);
2201 spin_unlock_bh(&ar->data_lock);
2204 /* FIXME: should this use ath10k_warn()? */
2205 ath10k_dbg(ar, ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
2206 peer_addr, vdev_id);
2209 ret = ath10k_peer_create(ar, vdev_id, peer_addr);
2211 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n",
2212 peer_addr, vdev_id, ret);
2215 spin_lock_bh(&ar->data_lock);
2216 reinit_completion(&ar->offchan_tx_completed);
2217 ar->offchan_tx_skb = skb;
2218 spin_unlock_bh(&ar->data_lock);
2220 ath10k_tx_htt(ar, skb);
2222 ret = wait_for_completion_timeout(&ar->offchan_tx_completed,
2225 ath10k_warn(ar, "timed out waiting for offchannel skb %p\n",
2229 ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
2231 ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n",
2232 peer_addr, vdev_id, ret);
2235 mutex_unlock(&ar->conf_mutex);
2239 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
2241 struct sk_buff *skb;
2244 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2248 ieee80211_free_txskb(ar->hw, skb);
2252 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
2254 struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
2255 struct sk_buff *skb;
2259 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2263 ret = ath10k_wmi_mgmt_tx(ar, skb);
2265 ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n",
2267 ieee80211_free_txskb(ar->hw, skb);
2276 void __ath10k_scan_finish(struct ath10k *ar)
2278 lockdep_assert_held(&ar->data_lock);
2280 switch (ar->scan.state) {
2281 case ATH10K_SCAN_IDLE:
2283 case ATH10K_SCAN_RUNNING:
2284 if (ar->scan.is_roc)
2285 ieee80211_remain_on_channel_expired(ar->hw);
2286 case ATH10K_SCAN_ABORTING:
2287 if (!ar->scan.is_roc)
2288 ieee80211_scan_completed(ar->hw,
2290 ATH10K_SCAN_ABORTING));
2292 case ATH10K_SCAN_STARTING:
2293 ar->scan.state = ATH10K_SCAN_IDLE;
2294 ar->scan_channel = NULL;
2295 ath10k_offchan_tx_purge(ar);
2296 cancel_delayed_work(&ar->scan.timeout);
2297 complete_all(&ar->scan.completed);
2302 void ath10k_scan_finish(struct ath10k *ar)
2304 spin_lock_bh(&ar->data_lock);
2305 __ath10k_scan_finish(ar);
2306 spin_unlock_bh(&ar->data_lock);
2309 static int ath10k_scan_stop(struct ath10k *ar)
2311 struct wmi_stop_scan_arg arg = {
2312 .req_id = 1, /* FIXME */
2313 .req_type = WMI_SCAN_STOP_ONE,
2314 .u.scan_id = ATH10K_SCAN_ID,
2318 lockdep_assert_held(&ar->conf_mutex);
2320 ret = ath10k_wmi_stop_scan(ar, &arg);
2322 ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret);
2326 ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ);
2328 ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n");
2330 } else if (ret > 0) {
2335 /* Scan state should be updated upon scan completion but in case
2336 * firmware fails to deliver the event (for whatever reason) it is
2337 * desired to clean up scan state anyway. Firmware may have just
2338 * dropped the scan completion event delivery due to transport pipe
2339 * being overflown with data and/or it can recover on its own before
2340 * next scan request is submitted.
2342 spin_lock_bh(&ar->data_lock);
2343 if (ar->scan.state != ATH10K_SCAN_IDLE)
2344 __ath10k_scan_finish(ar);
2345 spin_unlock_bh(&ar->data_lock);
2350 static void ath10k_scan_abort(struct ath10k *ar)
2354 lockdep_assert_held(&ar->conf_mutex);
2356 spin_lock_bh(&ar->data_lock);
2358 switch (ar->scan.state) {
2359 case ATH10K_SCAN_IDLE:
2360 /* This can happen if timeout worker kicked in and called
2361 * abortion while scan completion was being processed.
2364 case ATH10K_SCAN_STARTING:
2365 case ATH10K_SCAN_ABORTING:
2366 ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n",
2367 ath10k_scan_state_str(ar->scan.state),
2370 case ATH10K_SCAN_RUNNING:
2371 ar->scan.state = ATH10K_SCAN_ABORTING;
2372 spin_unlock_bh(&ar->data_lock);
2374 ret = ath10k_scan_stop(ar);
2376 ath10k_warn(ar, "failed to abort scan: %d\n", ret);
2378 spin_lock_bh(&ar->data_lock);
2382 spin_unlock_bh(&ar->data_lock);
2385 void ath10k_scan_timeout_work(struct work_struct *work)
2387 struct ath10k *ar = container_of(work, struct ath10k,
2390 mutex_lock(&ar->conf_mutex);
2391 ath10k_scan_abort(ar);
2392 mutex_unlock(&ar->conf_mutex);
2395 static int ath10k_start_scan(struct ath10k *ar,
2396 const struct wmi_start_scan_arg *arg)
2400 lockdep_assert_held(&ar->conf_mutex);
2402 ret = ath10k_wmi_start_scan(ar, arg);
2406 ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ);
2408 ret = ath10k_scan_stop(ar);
2410 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
2415 /* Add a 200ms margin to account for event/command processing */
2416 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
2417 msecs_to_jiffies(arg->max_scan_time+200));
2421 /**********************/
2422 /* mac80211 callbacks */
2423 /**********************/
2425 static void ath10k_tx(struct ieee80211_hw *hw,
2426 struct ieee80211_tx_control *control,
2427 struct sk_buff *skb)
2429 struct ath10k *ar = hw->priv;
2430 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
2431 struct ieee80211_vif *vif = info->control.vif;
2432 struct ieee80211_key_conf *key = info->control.hw_key;
2433 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2435 /* We should disable CCK RATE due to P2P */
2436 if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
2437 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
2439 ATH10K_SKB_CB(skb)->htt.is_offchan = false;
2440 ATH10K_SKB_CB(skb)->htt.tid = ath10k_tx_h_get_tid(hdr);
2441 ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif);
2443 /* it makes no sense to process injected frames like that */
2444 if (vif && vif->type != NL80211_IFTYPE_MONITOR) {
2445 ath10k_tx_h_nwifi(hw, skb);
2446 ath10k_tx_h_update_wep_key(vif, key, skb);
2447 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
2448 ath10k_tx_h_seq_no(vif, skb);
2451 if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
2452 spin_lock_bh(&ar->data_lock);
2453 ATH10K_SKB_CB(skb)->htt.freq = ar->scan.roc_freq;
2454 ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id;
2455 spin_unlock_bh(&ar->data_lock);
2457 if (ath10k_mac_need_offchan_tx_work(ar)) {
2458 ATH10K_SKB_CB(skb)->htt.freq = 0;
2459 ATH10K_SKB_CB(skb)->htt.is_offchan = true;
2461 ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n",
2464 skb_queue_tail(&ar->offchan_tx_queue, skb);
2465 ieee80211_queue_work(hw, &ar->offchan_tx_work);
2470 ath10k_tx_htt(ar, skb);
2473 /* Must not be called with conf_mutex held as workers can use that also. */
2474 void ath10k_drain_tx(struct ath10k *ar)
2476 /* make sure rcu-protected mac80211 tx path itself is drained */
2479 ath10k_offchan_tx_purge(ar);
2480 ath10k_mgmt_over_wmi_tx_purge(ar);
2482 cancel_work_sync(&ar->offchan_tx_work);
2483 cancel_work_sync(&ar->wmi_mgmt_tx_work);
2486 void ath10k_halt(struct ath10k *ar)
2488 struct ath10k_vif *arvif;
2490 lockdep_assert_held(&ar->conf_mutex);
2492 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
2493 ar->filter_flags = 0;
2494 ar->monitor = false;
2496 if (ar->monitor_started)
2497 ath10k_monitor_stop(ar);
2499 ar->monitor_started = false;
2501 ath10k_scan_finish(ar);
2502 ath10k_peer_cleanup_all(ar);
2503 ath10k_core_stop(ar);
2504 ath10k_hif_power_down(ar);
2506 spin_lock_bh(&ar->data_lock);
2507 list_for_each_entry(arvif, &ar->arvifs, list)
2508 ath10k_mac_vif_beacon_cleanup(arvif);
2509 spin_unlock_bh(&ar->data_lock);
2512 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
2514 struct ath10k *ar = hw->priv;
2516 mutex_lock(&ar->conf_mutex);
2518 if (ar->cfg_tx_chainmask) {
2519 *tx_ant = ar->cfg_tx_chainmask;
2520 *rx_ant = ar->cfg_rx_chainmask;
2522 *tx_ant = ar->supp_tx_chainmask;
2523 *rx_ant = ar->supp_rx_chainmask;
2526 mutex_unlock(&ar->conf_mutex);
2531 static void ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg)
2533 /* It is not clear that allowing gaps in chainmask
2534 * is helpful. Probably it will not do what user
2535 * is hoping for, so warn in that case.
2537 if (cm == 15 || cm == 7 || cm == 3 || cm == 1 || cm == 0)
2540 ath10k_warn(ar, "mac %s antenna chainmask may be invalid: 0x%x. Suggested values: 15, 7, 3, 1 or 0.\n",
2544 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
2548 lockdep_assert_held(&ar->conf_mutex);
2550 ath10k_check_chain_mask(ar, tx_ant, "tx");
2551 ath10k_check_chain_mask(ar, rx_ant, "rx");
2553 ar->cfg_tx_chainmask = tx_ant;
2554 ar->cfg_rx_chainmask = rx_ant;
2556 if ((ar->state != ATH10K_STATE_ON) &&
2557 (ar->state != ATH10K_STATE_RESTARTED))
2560 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
2563 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n",
2568 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
2571 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n",
2579 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
2581 struct ath10k *ar = hw->priv;
2584 mutex_lock(&ar->conf_mutex);
2585 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
2586 mutex_unlock(&ar->conf_mutex);
2590 static int ath10k_start(struct ieee80211_hw *hw)
2592 struct ath10k *ar = hw->priv;
2596 * This makes sense only when restarting hw. It is harmless to call
2597 * uncoditionally. This is necessary to make sure no HTT/WMI tx
2598 * commands will be submitted while restarting.
2600 ath10k_drain_tx(ar);
2602 mutex_lock(&ar->conf_mutex);
2604 switch (ar->state) {
2605 case ATH10K_STATE_OFF:
2606 ar->state = ATH10K_STATE_ON;
2608 case ATH10K_STATE_RESTARTING:
2610 ar->state = ATH10K_STATE_RESTARTED;
2612 case ATH10K_STATE_ON:
2613 case ATH10K_STATE_RESTARTED:
2614 case ATH10K_STATE_WEDGED:
2618 case ATH10K_STATE_UTF:
2623 ret = ath10k_hif_power_up(ar);
2625 ath10k_err(ar, "Could not init hif: %d\n", ret);
2629 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL);
2631 ath10k_err(ar, "Could not init core: %d\n", ret);
2632 goto err_power_down;
2635 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pmf_qos, 1);
2637 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret);
2641 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->dynamic_bw, 1);
2643 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret);
2647 if (ar->cfg_tx_chainmask)
2648 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask,
2649 ar->cfg_rx_chainmask);
2652 * By default FW set ARP frames ac to voice (6). In that case ARP
2653 * exchange is not working properly for UAPSD enabled AP. ARP requests
2654 * which arrives with access category 0 are processed by network stack
2655 * and send back with access category 0, but FW changes access category
2656 * to 6. Set ARP frames access category to best effort (0) solves
2660 ret = ath10k_wmi_pdev_set_param(ar,
2661 ar->wmi.pdev_param->arp_ac_override, 0);
2663 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n",
2668 ar->num_started_vdevs = 0;
2669 ath10k_regd_update(ar);
2671 ath10k_spectral_start(ar);
2673 mutex_unlock(&ar->conf_mutex);
2677 ath10k_core_stop(ar);
2680 ath10k_hif_power_down(ar);
2683 ar->state = ATH10K_STATE_OFF;
2686 mutex_unlock(&ar->conf_mutex);
2690 static void ath10k_stop(struct ieee80211_hw *hw)
2692 struct ath10k *ar = hw->priv;
2694 ath10k_drain_tx(ar);
2696 mutex_lock(&ar->conf_mutex);
2697 if (ar->state != ATH10K_STATE_OFF) {
2699 ar->state = ATH10K_STATE_OFF;
2701 mutex_unlock(&ar->conf_mutex);
2703 cancel_delayed_work_sync(&ar->scan.timeout);
2704 cancel_work_sync(&ar->restart_work);
2707 static int ath10k_config_ps(struct ath10k *ar)
2709 struct ath10k_vif *arvif;
2712 lockdep_assert_held(&ar->conf_mutex);
2714 list_for_each_entry(arvif, &ar->arvifs, list) {
2715 ret = ath10k_mac_vif_setup_ps(arvif);
2717 ath10k_warn(ar, "failed to setup powersave: %d\n", ret);
2725 static const char *chandef_get_width(enum nl80211_chan_width width)
2728 case NL80211_CHAN_WIDTH_20_NOHT:
2730 case NL80211_CHAN_WIDTH_20:
2732 case NL80211_CHAN_WIDTH_40:
2734 case NL80211_CHAN_WIDTH_80:
2736 case NL80211_CHAN_WIDTH_80P80:
2738 case NL80211_CHAN_WIDTH_160:
2740 case NL80211_CHAN_WIDTH_5:
2742 case NL80211_CHAN_WIDTH_10:
2748 static void ath10k_config_chan(struct ath10k *ar)
2750 struct ath10k_vif *arvif;
2753 lockdep_assert_held(&ar->conf_mutex);
2755 ath10k_dbg(ar, ATH10K_DBG_MAC,
2756 "mac config channel to %dMHz (cf1 %dMHz cf2 %dMHz width %s)\n",
2757 ar->chandef.chan->center_freq,
2758 ar->chandef.center_freq1,
2759 ar->chandef.center_freq2,
2760 chandef_get_width(ar->chandef.width));
2762 /* First stop monitor interface. Some FW versions crash if there's a
2763 * lone monitor interface. */
2764 if (ar->monitor_started)
2765 ath10k_monitor_stop(ar);
2767 list_for_each_entry(arvif, &ar->arvifs, list) {
2768 if (!arvif->is_started)
2774 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2777 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
2779 ath10k_warn(ar, "failed to down vdev %d: %d\n",
2780 arvif->vdev_id, ret);
2785 /* all vdevs are downed now - attempt to restart and re-up them */
2787 list_for_each_entry(arvif, &ar->arvifs, list) {
2788 if (!arvif->is_started)
2791 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2794 ret = ath10k_vdev_restart(arvif);
2796 ath10k_warn(ar, "failed to restart vdev %d: %d\n",
2797 arvif->vdev_id, ret);
2804 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
2807 ath10k_warn(ar, "failed to bring vdev up %d: %d\n",
2808 arvif->vdev_id, ret);
2813 ath10k_monitor_recalc(ar);
2816 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
2821 lockdep_assert_held(&ar->conf_mutex);
2823 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower);
2825 param = ar->wmi.pdev_param->txpower_limit2g;
2826 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
2828 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
2833 param = ar->wmi.pdev_param->txpower_limit5g;
2834 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
2836 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
2844 static int ath10k_mac_txpower_recalc(struct ath10k *ar)
2846 struct ath10k_vif *arvif;
2847 int ret, txpower = -1;
2849 lockdep_assert_held(&ar->conf_mutex);
2851 list_for_each_entry(arvif, &ar->arvifs, list) {
2852 WARN_ON(arvif->txpower < 0);
2855 txpower = arvif->txpower;
2857 txpower = min(txpower, arvif->txpower);
2860 if (WARN_ON(txpower == -1))
2863 ret = ath10k_mac_txpower_setup(ar, txpower);
2865 ath10k_warn(ar, "failed to setup tx power %d: %d\n",
2873 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
2875 struct ath10k *ar = hw->priv;
2876 struct ieee80211_conf *conf = &hw->conf;
2879 mutex_lock(&ar->conf_mutex);
2881 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
2882 ath10k_dbg(ar, ATH10K_DBG_MAC,
2883 "mac config channel %dMHz flags 0x%x radar %d\n",
2884 conf->chandef.chan->center_freq,
2885 conf->chandef.chan->flags,
2886 conf->radar_enabled);
2888 spin_lock_bh(&ar->data_lock);
2889 ar->rx_channel = conf->chandef.chan;
2890 spin_unlock_bh(&ar->data_lock);
2892 ar->radar_enabled = conf->radar_enabled;
2893 ath10k_recalc_radar_detection(ar);
2895 if (!cfg80211_chandef_identical(&ar->chandef, &conf->chandef)) {
2896 ar->chandef = conf->chandef;
2897 ath10k_config_chan(ar);
2901 if (changed & IEEE80211_CONF_CHANGE_PS)
2902 ath10k_config_ps(ar);
2904 if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
2905 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR;
2906 ret = ath10k_monitor_recalc(ar);
2908 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
2911 mutex_unlock(&ar->conf_mutex);
2915 static u32 get_nss_from_chainmask(u16 chain_mask)
2917 if ((chain_mask & 0x15) == 0x15)
2919 else if ((chain_mask & 0x7) == 0x7)
2921 else if ((chain_mask & 0x3) == 0x3)
2928 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
2929 * because we will send mgmt frames without CCK. This requirement
2930 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
2933 static int ath10k_add_interface(struct ieee80211_hw *hw,
2934 struct ieee80211_vif *vif)
2936 struct ath10k *ar = hw->priv;
2937 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2938 enum wmi_sta_powersave_param param;
2944 mutex_lock(&ar->conf_mutex);
2946 memset(arvif, 0, sizeof(*arvif));
2951 INIT_WORK(&arvif->wep_key_work, ath10k_tx_wep_key_work);
2952 INIT_LIST_HEAD(&arvif->list);
2954 if (ar->free_vdev_map == 0) {
2955 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
2959 bit = __ffs64(ar->free_vdev_map);
2961 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
2962 bit, ar->free_vdev_map);
2964 arvif->vdev_id = bit;
2965 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
2968 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE;
2970 switch (vif->type) {
2971 case NL80211_IFTYPE_UNSPECIFIED:
2972 case NL80211_IFTYPE_STATION:
2973 arvif->vdev_type = WMI_VDEV_TYPE_STA;
2975 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT;
2977 case NL80211_IFTYPE_ADHOC:
2978 arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
2980 case NL80211_IFTYPE_AP:
2981 arvif->vdev_type = WMI_VDEV_TYPE_AP;
2984 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO;
2986 case NL80211_IFTYPE_MONITOR:
2987 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
2994 /* Some firmware revisions don't wait for beacon tx completion before
2995 * sending another SWBA event. This could lead to hardware using old
2996 * (freed) beacon data in some cases, e.g. tx credit starvation
2997 * combined with missed TBTT. This is very very rare.
2999 * On non-IOMMU-enabled hosts this could be a possible security issue
3000 * because hw could beacon some random data on the air. On
3001 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
3002 * device would crash.
3004 * Since there are no beacon tx completions (implicit nor explicit)
3005 * propagated to host the only workaround for this is to allocate a
3006 * DMA-coherent buffer for a lifetime of a vif and use it for all
3007 * beacon tx commands. Worst case for this approach is some beacons may
3008 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
3010 if (vif->type == NL80211_IFTYPE_ADHOC ||
3011 vif->type == NL80211_IFTYPE_AP) {
3012 arvif->beacon_buf = dma_zalloc_coherent(ar->dev,
3013 IEEE80211_MAX_FRAME_LEN,
3014 &arvif->beacon_paddr,
3016 if (!arvif->beacon_buf) {
3018 ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
3024 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
3025 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
3026 arvif->beacon_buf ? "single-buf" : "per-skb");
3028 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
3029 arvif->vdev_subtype, vif->addr);
3031 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
3032 arvif->vdev_id, ret);
3036 ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
3037 list_add(&arvif->list, &ar->arvifs);
3039 vdev_param = ar->wmi.vdev_param->def_keyid;
3040 ret = ath10k_wmi_vdev_set_param(ar, 0, vdev_param,
3041 arvif->def_wep_key_idx);
3043 ath10k_warn(ar, "failed to set vdev %i default key id: %d\n",
3044 arvif->vdev_id, ret);
3045 goto err_vdev_delete;
3048 vdev_param = ar->wmi.vdev_param->tx_encap_type;
3049 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3050 ATH10K_HW_TXRX_NATIVE_WIFI);
3051 /* 10.X firmware does not support this VDEV parameter. Do not warn */
3052 if (ret && ret != -EOPNOTSUPP) {
3053 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
3054 arvif->vdev_id, ret);
3055 goto err_vdev_delete;
3058 if (ar->cfg_tx_chainmask) {
3059 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
3061 vdev_param = ar->wmi.vdev_param->nss;
3062 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3065 ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
3066 arvif->vdev_id, ar->cfg_tx_chainmask, nss,
3068 goto err_vdev_delete;
3072 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3073 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr);
3075 ath10k_warn(ar, "failed to create vdev %i peer for AP: %d\n",
3076 arvif->vdev_id, ret);
3077 goto err_vdev_delete;
3080 ret = ath10k_mac_set_kickout(arvif);
3082 ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
3083 arvif->vdev_id, ret);
3084 goto err_peer_delete;
3088 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
3089 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
3090 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
3091 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3094 ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
3095 arvif->vdev_id, ret);
3096 goto err_peer_delete;
3099 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
3101 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
3102 arvif->vdev_id, ret);
3103 goto err_peer_delete;
3106 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
3108 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
3109 arvif->vdev_id, ret);
3110 goto err_peer_delete;
3114 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
3116 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
3117 arvif->vdev_id, ret);
3118 goto err_peer_delete;
3121 ret = ath10k_mac_set_frag(arvif, ar->hw->wiphy->frag_threshold);
3123 ath10k_warn(ar, "failed to set frag threshold for vdev %d: %d\n",
3124 arvif->vdev_id, ret);
3125 goto err_peer_delete;
3128 arvif->txpower = vif->bss_conf.txpower;
3129 ret = ath10k_mac_txpower_recalc(ar);
3131 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
3132 goto err_peer_delete;
3135 mutex_unlock(&ar->conf_mutex);
3139 if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
3140 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
3143 ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
3144 ar->free_vdev_map |= 1LL << arvif->vdev_id;
3145 list_del(&arvif->list);
3148 if (arvif->beacon_buf) {
3149 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
3150 arvif->beacon_buf, arvif->beacon_paddr);
3151 arvif->beacon_buf = NULL;
3154 mutex_unlock(&ar->conf_mutex);
3159 static void ath10k_remove_interface(struct ieee80211_hw *hw,
3160 struct ieee80211_vif *vif)
3162 struct ath10k *ar = hw->priv;
3163 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3166 cancel_work_sync(&arvif->wep_key_work);
3168 mutex_lock(&ar->conf_mutex);
3170 spin_lock_bh(&ar->data_lock);
3171 ath10k_mac_vif_beacon_cleanup(arvif);
3172 spin_unlock_bh(&ar->data_lock);
3174 ret = ath10k_spectral_vif_stop(arvif);
3176 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
3177 arvif->vdev_id, ret);
3179 ar->free_vdev_map |= 1LL << arvif->vdev_id;
3180 list_del(&arvif->list);
3182 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3183 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, vif->addr);
3185 ath10k_warn(ar, "failed to remove peer for AP vdev %i: %d\n",
3186 arvif->vdev_id, ret);
3188 kfree(arvif->u.ap.noa_data);
3191 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
3194 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
3196 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
3197 arvif->vdev_id, ret);
3199 ath10k_peer_cleanup(ar, arvif->vdev_id);
3201 mutex_unlock(&ar->conf_mutex);
3205 * FIXME: Has to be verified.
3207 #define SUPPORTED_FILTERS \
3208 (FIF_PROMISC_IN_BSS | \
3213 FIF_BCN_PRBRESP_PROMISC | \
3217 static void ath10k_configure_filter(struct ieee80211_hw *hw,
3218 unsigned int changed_flags,
3219 unsigned int *total_flags,
3222 struct ath10k *ar = hw->priv;
3225 mutex_lock(&ar->conf_mutex);
3227 changed_flags &= SUPPORTED_FILTERS;
3228 *total_flags &= SUPPORTED_FILTERS;
3229 ar->filter_flags = *total_flags;
3231 ret = ath10k_monitor_recalc(ar);
3233 ath10k_warn(ar, "failed to recalc montior: %d\n", ret);
3235 mutex_unlock(&ar->conf_mutex);
3238 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
3239 struct ieee80211_vif *vif,
3240 struct ieee80211_bss_conf *info,
3243 struct ath10k *ar = hw->priv;
3244 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3246 u32 vdev_param, pdev_param, slottime, preamble;
3248 mutex_lock(&ar->conf_mutex);
3250 if (changed & BSS_CHANGED_IBSS)
3251 ath10k_control_ibss(arvif, info, vif->addr);
3253 if (changed & BSS_CHANGED_BEACON_INT) {
3254 arvif->beacon_interval = info->beacon_int;
3255 vdev_param = ar->wmi.vdev_param->beacon_interval;
3256 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3257 arvif->beacon_interval);
3258 ath10k_dbg(ar, ATH10K_DBG_MAC,
3259 "mac vdev %d beacon_interval %d\n",
3260 arvif->vdev_id, arvif->beacon_interval);
3263 ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
3264 arvif->vdev_id, ret);
3267 if (changed & BSS_CHANGED_BEACON) {
3268 ath10k_dbg(ar, ATH10K_DBG_MAC,
3269 "vdev %d set beacon tx mode to staggered\n",
3272 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
3273 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
3274 WMI_BEACON_STAGGERED_MODE);
3276 ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
3277 arvif->vdev_id, ret);
3280 if (changed & BSS_CHANGED_BEACON_INFO) {
3281 arvif->dtim_period = info->dtim_period;
3283 ath10k_dbg(ar, ATH10K_DBG_MAC,
3284 "mac vdev %d dtim_period %d\n",
3285 arvif->vdev_id, arvif->dtim_period);
3287 vdev_param = ar->wmi.vdev_param->dtim_period;
3288 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3289 arvif->dtim_period);
3291 ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
3292 arvif->vdev_id, ret);
3295 if (changed & BSS_CHANGED_SSID &&
3296 vif->type == NL80211_IFTYPE_AP) {
3297 arvif->u.ap.ssid_len = info->ssid_len;
3299 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
3300 arvif->u.ap.hidden_ssid = info->hidden_ssid;
3303 if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
3304 ether_addr_copy(arvif->bssid, info->bssid);
3306 if (changed & BSS_CHANGED_BEACON_ENABLED)
3307 ath10k_control_beaconing(arvif, info);
3309 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3310 arvif->use_cts_prot = info->use_cts_prot;
3311 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
3312 arvif->vdev_id, info->use_cts_prot);
3314 ret = ath10k_recalc_rtscts_prot(arvif);
3316 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
3317 arvif->vdev_id, ret);
3320 if (changed & BSS_CHANGED_ERP_SLOT) {
3321 if (info->use_short_slot)
3322 slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
3325 slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
3327 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
3328 arvif->vdev_id, slottime);
3330 vdev_param = ar->wmi.vdev_param->slot_time;
3331 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3334 ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
3335 arvif->vdev_id, ret);
3338 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3339 if (info->use_short_preamble)
3340 preamble = WMI_VDEV_PREAMBLE_SHORT;
3342 preamble = WMI_VDEV_PREAMBLE_LONG;
3344 ath10k_dbg(ar, ATH10K_DBG_MAC,
3345 "mac vdev %d preamble %dn",
3346 arvif->vdev_id, preamble);
3348 vdev_param = ar->wmi.vdev_param->preamble;
3349 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3352 ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
3353 arvif->vdev_id, ret);
3356 if (changed & BSS_CHANGED_ASSOC) {
3358 /* Workaround: Make sure monitor vdev is not running
3359 * when associating to prevent some firmware revisions
3360 * (e.g. 10.1 and 10.2) from crashing.
3362 if (ar->monitor_started)
3363 ath10k_monitor_stop(ar);
3364 ath10k_bss_assoc(hw, vif, info);
3365 ath10k_monitor_recalc(ar);
3367 ath10k_bss_disassoc(hw, vif);
3371 if (changed & BSS_CHANGED_TXPOWER) {
3372 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
3373 arvif->vdev_id, info->txpower);
3375 arvif->txpower = info->txpower;
3376 ret = ath10k_mac_txpower_recalc(ar);
3378 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
3381 mutex_unlock(&ar->conf_mutex);
3384 static int ath10k_hw_scan(struct ieee80211_hw *hw,
3385 struct ieee80211_vif *vif,
3386 struct ieee80211_scan_request *hw_req)
3388 struct ath10k *ar = hw->priv;
3389 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3390 struct cfg80211_scan_request *req = &hw_req->req;
3391 struct wmi_start_scan_arg arg;
3395 mutex_lock(&ar->conf_mutex);
3397 spin_lock_bh(&ar->data_lock);
3398 switch (ar->scan.state) {
3399 case ATH10K_SCAN_IDLE:
3400 reinit_completion(&ar->scan.started);
3401 reinit_completion(&ar->scan.completed);
3402 ar->scan.state = ATH10K_SCAN_STARTING;
3403 ar->scan.is_roc = false;
3404 ar->scan.vdev_id = arvif->vdev_id;
3407 case ATH10K_SCAN_STARTING:
3408 case ATH10K_SCAN_RUNNING:
3409 case ATH10K_SCAN_ABORTING:
3413 spin_unlock_bh(&ar->data_lock);
3418 memset(&arg, 0, sizeof(arg));
3419 ath10k_wmi_start_scan_init(ar, &arg);
3420 arg.vdev_id = arvif->vdev_id;
3421 arg.scan_id = ATH10K_SCAN_ID;
3424 arg.scan_ctrl_flags |= WMI_SCAN_ADD_CCK_RATES;
3427 arg.ie_len = req->ie_len;
3428 memcpy(arg.ie, req->ie, arg.ie_len);
3432 arg.n_ssids = req->n_ssids;
3433 for (i = 0; i < arg.n_ssids; i++) {
3434 arg.ssids[i].len = req->ssids[i].ssid_len;
3435 arg.ssids[i].ssid = req->ssids[i].ssid;
3438 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3441 if (req->n_channels) {
3442 arg.n_channels = req->n_channels;
3443 for (i = 0; i < arg.n_channels; i++)
3444 arg.channels[i] = req->channels[i]->center_freq;
3447 ret = ath10k_start_scan(ar, &arg);
3449 ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
3450 spin_lock_bh(&ar->data_lock);
3451 ar->scan.state = ATH10K_SCAN_IDLE;
3452 spin_unlock_bh(&ar->data_lock);
3456 mutex_unlock(&ar->conf_mutex);
3460 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
3461 struct ieee80211_vif *vif)
3463 struct ath10k *ar = hw->priv;
3465 mutex_lock(&ar->conf_mutex);
3466 ath10k_scan_abort(ar);
3467 mutex_unlock(&ar->conf_mutex);
3469 cancel_delayed_work_sync(&ar->scan.timeout);
3472 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
3473 struct ath10k_vif *arvif,
3474 enum set_key_cmd cmd,
3475 struct ieee80211_key_conf *key)
3477 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
3480 /* 10.1 firmware branch requires default key index to be set to group
3481 * key index after installing it. Otherwise FW/HW Txes corrupted
3482 * frames with multi-vif APs. This is not required for main firmware
3483 * branch (e.g. 636).
3485 * FIXME: This has been tested only in AP. It remains unknown if this
3486 * is required for multi-vif STA interfaces on 10.1 */
3488 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
3491 if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
3494 if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
3497 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
3503 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3506 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
3507 arvif->vdev_id, ret);
3510 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
3511 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
3512 struct ieee80211_key_conf *key)
3514 struct ath10k *ar = hw->priv;
3515 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3516 struct ath10k_peer *peer;
3517 const u8 *peer_addr;
3518 bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
3519 key->cipher == WLAN_CIPHER_SUITE_WEP104;
3522 if (key->keyidx > WMI_MAX_KEY_INDEX)
3525 mutex_lock(&ar->conf_mutex);
3528 peer_addr = sta->addr;
3529 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
3530 peer_addr = vif->bss_conf.bssid;
3532 peer_addr = vif->addr;
3534 key->hw_key_idx = key->keyidx;
3536 /* the peer should not disappear in mid-way (unless FW goes awry) since
3537 * we already hold conf_mutex. we just make sure its there now. */
3538 spin_lock_bh(&ar->data_lock);
3539 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3540 spin_unlock_bh(&ar->data_lock);
3543 if (cmd == SET_KEY) {
3544 ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
3549 /* if the peer doesn't exist there is no key to disable
3557 arvif->wep_keys[key->keyidx] = key;
3559 arvif->wep_keys[key->keyidx] = NULL;
3561 if (cmd == DISABLE_KEY)
3562 ath10k_clear_vdev_key(arvif, key);
3565 ret = ath10k_install_key(arvif, key, cmd, peer_addr);
3567 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
3568 arvif->vdev_id, peer_addr, ret);
3572 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
3574 spin_lock_bh(&ar->data_lock);
3575 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3576 if (peer && cmd == SET_KEY)
3577 peer->keys[key->keyidx] = key;
3578 else if (peer && cmd == DISABLE_KEY)
3579 peer->keys[key->keyidx] = NULL;
3580 else if (peer == NULL)
3581 /* impossible unless FW goes crazy */
3582 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
3583 spin_unlock_bh(&ar->data_lock);
3586 mutex_unlock(&ar->conf_mutex);
3590 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
3593 struct ath10k_vif *arvif;
3594 struct ath10k_sta *arsta;
3595 struct ieee80211_sta *sta;
3596 u32 changed, bw, nss, smps;
3599 arsta = container_of(wk, struct ath10k_sta, update_wk);
3600 sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
3601 arvif = arsta->arvif;
3604 spin_lock_bh(&ar->data_lock);
3606 changed = arsta->changed;
3613 spin_unlock_bh(&ar->data_lock);
3615 mutex_lock(&ar->conf_mutex);
3617 if (changed & IEEE80211_RC_BW_CHANGED) {
3618 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
3621 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3622 WMI_PEER_CHAN_WIDTH, bw);
3624 ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
3625 sta->addr, bw, err);
3628 if (changed & IEEE80211_RC_NSS_CHANGED) {
3629 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
3632 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3635 ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
3636 sta->addr, nss, err);
3639 if (changed & IEEE80211_RC_SMPS_CHANGED) {
3640 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
3643 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3644 WMI_PEER_SMPS_STATE, smps);
3646 ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
3647 sta->addr, smps, err);
3650 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
3651 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates\n",
3654 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
3656 ath10k_warn(ar, "failed to reassociate station: %pM\n",
3660 mutex_unlock(&ar->conf_mutex);
3663 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif)
3665 struct ath10k *ar = arvif->ar;
3667 lockdep_assert_held(&ar->conf_mutex);
3669 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
3670 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
3673 if (ar->num_stations >= ar->max_num_stations)
3681 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif)
3683 struct ath10k *ar = arvif->ar;
3685 lockdep_assert_held(&ar->conf_mutex);
3687 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
3688 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
3694 static int ath10k_sta_state(struct ieee80211_hw *hw,
3695 struct ieee80211_vif *vif,
3696 struct ieee80211_sta *sta,
3697 enum ieee80211_sta_state old_state,
3698 enum ieee80211_sta_state new_state)
3700 struct ath10k *ar = hw->priv;
3701 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3702 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
3705 if (old_state == IEEE80211_STA_NOTEXIST &&
3706 new_state == IEEE80211_STA_NONE) {
3707 memset(arsta, 0, sizeof(*arsta));
3708 arsta->arvif = arvif;
3709 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
3712 /* cancel must be done outside the mutex to avoid deadlock */
3713 if ((old_state == IEEE80211_STA_NONE &&
3714 new_state == IEEE80211_STA_NOTEXIST))
3715 cancel_work_sync(&arsta->update_wk);
3717 mutex_lock(&ar->conf_mutex);
3719 if (old_state == IEEE80211_STA_NOTEXIST &&
3720 new_state == IEEE80211_STA_NONE) {
3722 * New station addition.
3724 ath10k_dbg(ar, ATH10K_DBG_MAC,
3725 "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
3726 arvif->vdev_id, sta->addr,
3727 ar->num_stations + 1, ar->max_num_stations,
3728 ar->num_peers + 1, ar->max_num_peers);
3730 ret = ath10k_mac_inc_num_stations(arvif);
3732 ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n",
3733 ar->max_num_stations);
3737 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr);
3739 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
3740 sta->addr, arvif->vdev_id, ret);
3741 ath10k_mac_dec_num_stations(arvif);
3745 if (vif->type == NL80211_IFTYPE_STATION) {
3746 WARN_ON(arvif->is_started);
3748 ret = ath10k_vdev_start(arvif);
3750 ath10k_warn(ar, "failed to start vdev %i: %d\n",
3751 arvif->vdev_id, ret);
3752 WARN_ON(ath10k_peer_delete(ar, arvif->vdev_id,
3754 ath10k_mac_dec_num_stations(arvif);
3758 arvif->is_started = true;
3760 } else if ((old_state == IEEE80211_STA_NONE &&
3761 new_state == IEEE80211_STA_NOTEXIST)) {
3763 * Existing station deletion.
3765 ath10k_dbg(ar, ATH10K_DBG_MAC,
3766 "mac vdev %d peer delete %pM (sta gone)\n",
3767 arvif->vdev_id, sta->addr);
3769 if (vif->type == NL80211_IFTYPE_STATION) {
3770 WARN_ON(!arvif->is_started);
3772 ret = ath10k_vdev_stop(arvif);
3774 ath10k_warn(ar, "failed to stop vdev %i: %d\n",
3775 arvif->vdev_id, ret);
3777 arvif->is_started = false;
3780 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
3782 ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
3783 sta->addr, arvif->vdev_id, ret);
3785 ath10k_mac_dec_num_stations(arvif);
3786 } else if (old_state == IEEE80211_STA_AUTH &&
3787 new_state == IEEE80211_STA_ASSOC &&
3788 (vif->type == NL80211_IFTYPE_AP ||
3789 vif->type == NL80211_IFTYPE_ADHOC)) {
3793 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n",
3796 ret = ath10k_station_assoc(ar, vif, sta, false);
3798 ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
3799 sta->addr, arvif->vdev_id, ret);
3800 } else if (old_state == IEEE80211_STA_ASSOC &&
3801 new_state == IEEE80211_STA_AUTH &&
3802 (vif->type == NL80211_IFTYPE_AP ||
3803 vif->type == NL80211_IFTYPE_ADHOC)) {
3807 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
3810 ret = ath10k_station_disassoc(ar, vif, sta);
3812 ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
3813 sta->addr, arvif->vdev_id, ret);
3816 mutex_unlock(&ar->conf_mutex);
3820 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
3821 u16 ac, bool enable)
3823 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3827 lockdep_assert_held(&ar->conf_mutex);
3829 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
3833 case IEEE80211_AC_VO:
3834 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
3835 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
3837 case IEEE80211_AC_VI:
3838 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
3839 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
3841 case IEEE80211_AC_BE:
3842 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
3843 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
3845 case IEEE80211_AC_BK:
3846 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
3847 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
3852 arvif->u.sta.uapsd |= value;
3854 arvif->u.sta.uapsd &= ~value;
3856 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3857 WMI_STA_PS_PARAM_UAPSD,
3858 arvif->u.sta.uapsd);
3860 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
3864 if (arvif->u.sta.uapsd)
3865 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
3867 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
3869 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3870 WMI_STA_PS_PARAM_RX_WAKE_POLICY,
3873 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
3875 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
3877 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
3878 arvif->vdev_id, ret);
3882 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
3884 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
3885 arvif->vdev_id, ret);
3893 static int ath10k_conf_tx(struct ieee80211_hw *hw,
3894 struct ieee80211_vif *vif, u16 ac,
3895 const struct ieee80211_tx_queue_params *params)
3897 struct ath10k *ar = hw->priv;
3898 struct wmi_wmm_params_arg *p = NULL;
3901 mutex_lock(&ar->conf_mutex);
3904 case IEEE80211_AC_VO:
3905 p = &ar->wmm_params.ac_vo;
3907 case IEEE80211_AC_VI:
3908 p = &ar->wmm_params.ac_vi;
3910 case IEEE80211_AC_BE:
3911 p = &ar->wmm_params.ac_be;
3913 case IEEE80211_AC_BK:
3914 p = &ar->wmm_params.ac_bk;
3923 p->cwmin = params->cw_min;
3924 p->cwmax = params->cw_max;
3925 p->aifs = params->aifs;
3928 * The channel time duration programmed in the HW is in absolute
3929 * microseconds, while mac80211 gives the txop in units of
3932 p->txop = params->txop * 32;
3934 /* FIXME: FW accepts wmm params per hw, not per vif */
3935 ret = ath10k_wmi_pdev_set_wmm_params(ar, &ar->wmm_params);
3937 ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
3941 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
3943 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
3946 mutex_unlock(&ar->conf_mutex);
3950 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
3952 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
3953 struct ieee80211_vif *vif,
3954 struct ieee80211_channel *chan,
3956 enum ieee80211_roc_type type)
3958 struct ath10k *ar = hw->priv;
3959 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3960 struct wmi_start_scan_arg arg;
3963 mutex_lock(&ar->conf_mutex);
3965 spin_lock_bh(&ar->data_lock);
3966 switch (ar->scan.state) {
3967 case ATH10K_SCAN_IDLE:
3968 reinit_completion(&ar->scan.started);
3969 reinit_completion(&ar->scan.completed);
3970 reinit_completion(&ar->scan.on_channel);
3971 ar->scan.state = ATH10K_SCAN_STARTING;
3972 ar->scan.is_roc = true;
3973 ar->scan.vdev_id = arvif->vdev_id;
3974 ar->scan.roc_freq = chan->center_freq;
3977 case ATH10K_SCAN_STARTING:
3978 case ATH10K_SCAN_RUNNING:
3979 case ATH10K_SCAN_ABORTING:
3983 spin_unlock_bh(&ar->data_lock);
3988 duration = max(duration, WMI_SCAN_CHAN_MIN_TIME_MSEC);
3990 memset(&arg, 0, sizeof(arg));
3991 ath10k_wmi_start_scan_init(ar, &arg);
3992 arg.vdev_id = arvif->vdev_id;
3993 arg.scan_id = ATH10K_SCAN_ID;
3995 arg.channels[0] = chan->center_freq;
3996 arg.dwell_time_active = duration;
3997 arg.dwell_time_passive = duration;
3998 arg.max_scan_time = 2 * duration;
3999 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
4000 arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
4002 ret = ath10k_start_scan(ar, &arg);
4004 ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
4005 spin_lock_bh(&ar->data_lock);
4006 ar->scan.state = ATH10K_SCAN_IDLE;
4007 spin_unlock_bh(&ar->data_lock);
4011 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
4013 ath10k_warn(ar, "failed to switch to channel for roc scan\n");
4015 ret = ath10k_scan_stop(ar);
4017 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
4025 mutex_unlock(&ar->conf_mutex);
4029 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
4031 struct ath10k *ar = hw->priv;
4033 mutex_lock(&ar->conf_mutex);
4034 ath10k_scan_abort(ar);
4035 mutex_unlock(&ar->conf_mutex);
4037 cancel_delayed_work_sync(&ar->scan.timeout);
4043 * Both RTS and Fragmentation threshold are interface-specific
4044 * in ath10k, but device-specific in mac80211.
4047 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
4049 struct ath10k *ar = hw->priv;
4050 struct ath10k_vif *arvif;
4053 mutex_lock(&ar->conf_mutex);
4054 list_for_each_entry(arvif, &ar->arvifs, list) {
4055 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
4056 arvif->vdev_id, value);
4058 ret = ath10k_mac_set_rts(arvif, value);
4060 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
4061 arvif->vdev_id, ret);
4065 mutex_unlock(&ar->conf_mutex);
4070 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4071 u32 queues, bool drop)
4073 struct ath10k *ar = hw->priv;
4077 /* mac80211 doesn't care if we really xmit queued frames or not
4078 * we'll collect those frames either way if we stop/delete vdevs */
4082 mutex_lock(&ar->conf_mutex);
4084 if (ar->state == ATH10K_STATE_WEDGED)
4087 ret = wait_event_timeout(ar->htt.empty_tx_wq, ({
4090 spin_lock_bh(&ar->htt.tx_lock);
4091 empty = (ar->htt.num_pending_tx == 0);
4092 spin_unlock_bh(&ar->htt.tx_lock);
4094 skip = (ar->state == ATH10K_STATE_WEDGED) ||
4095 test_bit(ATH10K_FLAG_CRASH_FLUSH,
4099 }), ATH10K_FLUSH_TIMEOUT_HZ);
4101 if (ret <= 0 || skip)
4102 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %i\n",
4103 skip, ar->state, ret);
4106 mutex_unlock(&ar->conf_mutex);
4109 /* TODO: Implement this function properly
4110 * For now it is needed to reply to Probe Requests in IBSS mode.
4111 * Propably we need this information from FW.
4113 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
4119 static int ath10k_suspend(struct ieee80211_hw *hw,
4120 struct cfg80211_wowlan *wowlan)
4122 struct ath10k *ar = hw->priv;
4125 mutex_lock(&ar->conf_mutex);
4127 ret = ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND);
4129 if (ret == -ETIMEDOUT)
4135 ret = ath10k_hif_suspend(ar);
4137 ath10k_warn(ar, "failed to suspend hif: %d\n", ret);
4144 ret = ath10k_wmi_pdev_resume_target(ar);
4146 ath10k_warn(ar, "failed to resume target: %d\n", ret);
4150 mutex_unlock(&ar->conf_mutex);
4154 static int ath10k_resume(struct ieee80211_hw *hw)
4156 struct ath10k *ar = hw->priv;
4159 mutex_lock(&ar->conf_mutex);
4161 ret = ath10k_hif_resume(ar);
4163 ath10k_warn(ar, "failed to resume hif: %d\n", ret);
4168 ret = ath10k_wmi_pdev_resume_target(ar);
4170 ath10k_warn(ar, "failed to resume target: %d\n", ret);
4177 mutex_unlock(&ar->conf_mutex);
4182 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
4183 enum ieee80211_reconfig_type reconfig_type)
4185 struct ath10k *ar = hw->priv;
4187 if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
4190 mutex_lock(&ar->conf_mutex);
4192 /* If device failed to restart it will be in a different state, e.g.
4193 * ATH10K_STATE_WEDGED */
4194 if (ar->state == ATH10K_STATE_RESTARTED) {
4195 ath10k_info(ar, "device successfully recovered\n");
4196 ar->state = ATH10K_STATE_ON;
4197 ieee80211_wake_queues(ar->hw);
4200 mutex_unlock(&ar->conf_mutex);
4203 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
4204 struct survey_info *survey)
4206 struct ath10k *ar = hw->priv;
4207 struct ieee80211_supported_band *sband;
4208 struct survey_info *ar_survey = &ar->survey[idx];
4211 mutex_lock(&ar->conf_mutex);
4213 sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
4214 if (sband && idx >= sband->n_channels) {
4215 idx -= sband->n_channels;
4220 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
4222 if (!sband || idx >= sband->n_channels) {
4227 spin_lock_bh(&ar->data_lock);
4228 memcpy(survey, ar_survey, sizeof(*survey));
4229 spin_unlock_bh(&ar->data_lock);
4231 survey->channel = &sband->channels[idx];
4233 if (ar->rx_channel == survey->channel)
4234 survey->filled |= SURVEY_INFO_IN_USE;
4237 mutex_unlock(&ar->conf_mutex);
4241 /* Helper table for legacy fixed_rate/bitrate_mask */
4242 static const u8 cck_ofdm_rate[] = {
4259 /* Check if only one bit set */
4260 static int ath10k_check_single_mask(u32 mask)
4268 mask &= ~BIT(bit - 1);
4276 ath10k_default_bitrate_mask(struct ath10k *ar,
4277 enum ieee80211_band band,
4278 const struct cfg80211_bitrate_mask *mask)
4280 u32 legacy = 0x00ff;
4283 u16 nrf = ar->num_rf_chains;
4285 if (ar->cfg_tx_chainmask)
4286 nrf = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4289 case IEEE80211_BAND_2GHZ:
4293 case IEEE80211_BAND_5GHZ:
4299 if (mask->control[band].legacy != legacy)
4302 for (i = 0; i < nrf; i++)
4303 if (mask->control[band].ht_mcs[i] != ht)
4306 for (i = 0; i < nrf; i++)
4307 if (mask->control[band].vht_mcs[i] != vht)
4314 ath10k_bitrate_mask_nss(const struct cfg80211_bitrate_mask *mask,
4315 enum ieee80211_band band,
4318 int ht_nss = 0, vht_nss = 0, i;
4321 if (ath10k_check_single_mask(mask->control[band].legacy))
4325 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
4326 if (mask->control[band].ht_mcs[i] == 0xff)
4328 else if (mask->control[band].ht_mcs[i] == 0x00)
4337 for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
4338 if (mask->control[band].vht_mcs[i] == 0x03ff)
4340 else if (mask->control[band].vht_mcs[i] == 0x0000)
4348 if (ht_nss > 0 && vht_nss > 0)
4352 *fixed_nss = ht_nss;
4354 *fixed_nss = vht_nss;
4362 ath10k_bitrate_mask_correct(const struct cfg80211_bitrate_mask *mask,
4363 enum ieee80211_band band,
4364 enum wmi_rate_preamble *preamble)
4366 int legacy = 0, ht = 0, vht = 0, i;
4368 *preamble = WMI_RATE_PREAMBLE_OFDM;
4371 legacy = ath10k_check_single_mask(mask->control[band].legacy);
4376 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4377 ht += ath10k_check_single_mask(mask->control[band].ht_mcs[i]);
4382 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4383 vht += ath10k_check_single_mask(mask->control[band].vht_mcs[i]);
4387 /* Currently we support only one fixed_rate */
4388 if ((legacy + ht + vht) != 1)
4392 *preamble = WMI_RATE_PREAMBLE_HT;
4394 *preamble = WMI_RATE_PREAMBLE_VHT;
4400 ath10k_bitrate_mask_rate(struct ath10k *ar,
4401 const struct cfg80211_bitrate_mask *mask,
4402 enum ieee80211_band band,
4406 u8 rate = 0, pream = 0, nss = 0, i;
4407 enum wmi_rate_preamble preamble;
4409 /* Check if single rate correct */
4410 if (!ath10k_bitrate_mask_correct(mask, band, &preamble))
4416 case WMI_RATE_PREAMBLE_CCK:
4417 case WMI_RATE_PREAMBLE_OFDM:
4418 i = ffs(mask->control[band].legacy) - 1;
4420 if (band == IEEE80211_BAND_2GHZ && i < 4)
4421 pream = WMI_RATE_PREAMBLE_CCK;
4423 if (band == IEEE80211_BAND_5GHZ)
4426 if (i >= ARRAY_SIZE(cck_ofdm_rate))
4429 rate = cck_ofdm_rate[i];
4431 case WMI_RATE_PREAMBLE_HT:
4432 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4433 if (mask->control[band].ht_mcs[i])
4436 if (i == IEEE80211_HT_MCS_MASK_LEN)
4439 rate = ffs(mask->control[band].ht_mcs[i]) - 1;
4442 case WMI_RATE_PREAMBLE_VHT:
4443 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4444 if (mask->control[band].vht_mcs[i])
4447 if (i == NL80211_VHT_NSS_MAX)
4450 rate = ffs(mask->control[band].vht_mcs[i]) - 1;
4455 *fixed_nss = nss + 1;
4459 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac fixed rate pream 0x%02x nss 0x%02x rate 0x%02x\n",
4462 *fixed_rate = pream | nss | rate;
4467 static bool ath10k_get_fixed_rate_nss(struct ath10k *ar,
4468 const struct cfg80211_bitrate_mask *mask,
4469 enum ieee80211_band band,
4473 /* First check full NSS mask, if we can simply limit NSS */
4474 if (ath10k_bitrate_mask_nss(mask, band, fixed_nss))
4477 /* Next Check single rate is set */
4478 return ath10k_bitrate_mask_rate(ar, mask, band, fixed_rate, fixed_nss);
4481 static int ath10k_set_fixed_rate_param(struct ath10k_vif *arvif,
4486 struct ath10k *ar = arvif->ar;
4490 mutex_lock(&ar->conf_mutex);
4492 if (arvif->fixed_rate == fixed_rate &&
4493 arvif->fixed_nss == fixed_nss &&
4494 arvif->force_sgi == force_sgi)
4497 if (fixed_rate == WMI_FIXED_RATE_NONE)
4498 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac disable fixed bitrate mask\n");
4501 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac force sgi\n");
4503 vdev_param = ar->wmi.vdev_param->fixed_rate;
4504 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4505 vdev_param, fixed_rate);
4507 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
4513 arvif->fixed_rate = fixed_rate;
4515 vdev_param = ar->wmi.vdev_param->nss;
4516 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4517 vdev_param, fixed_nss);
4520 ath10k_warn(ar, "failed to set fixed nss param %d: %d\n",
4526 arvif->fixed_nss = fixed_nss;
4528 vdev_param = ar->wmi.vdev_param->sgi;
4529 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4533 ath10k_warn(ar, "failed to set sgi param %d: %d\n",
4539 arvif->force_sgi = force_sgi;
4542 mutex_unlock(&ar->conf_mutex);
4546 static int ath10k_set_bitrate_mask(struct ieee80211_hw *hw,
4547 struct ieee80211_vif *vif,
4548 const struct cfg80211_bitrate_mask *mask)
4550 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4551 struct ath10k *ar = arvif->ar;
4552 enum ieee80211_band band = ar->hw->conf.chandef.chan->band;
4553 u8 fixed_rate = WMI_FIXED_RATE_NONE;
4554 u8 fixed_nss = ar->num_rf_chains;
4557 if (ar->cfg_tx_chainmask)
4558 fixed_nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4560 force_sgi = mask->control[band].gi;
4561 if (force_sgi == NL80211_TXRATE_FORCE_LGI)
4564 if (!ath10k_default_bitrate_mask(ar, band, mask)) {
4565 if (!ath10k_get_fixed_rate_nss(ar, mask, band,
4571 if (fixed_rate == WMI_FIXED_RATE_NONE && force_sgi) {
4572 ath10k_warn(ar, "failed to force SGI usage for default rate settings\n");
4576 return ath10k_set_fixed_rate_param(arvif, fixed_rate,
4577 fixed_nss, force_sgi);
4580 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
4581 struct ieee80211_vif *vif,
4582 struct ieee80211_sta *sta,
4585 struct ath10k *ar = hw->priv;
4586 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
4589 spin_lock_bh(&ar->data_lock);
4591 ath10k_dbg(ar, ATH10K_DBG_MAC,
4592 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
4593 sta->addr, changed, sta->bandwidth, sta->rx_nss,
4596 if (changed & IEEE80211_RC_BW_CHANGED) {
4597 bw = WMI_PEER_CHWIDTH_20MHZ;
4599 switch (sta->bandwidth) {
4600 case IEEE80211_STA_RX_BW_20:
4601 bw = WMI_PEER_CHWIDTH_20MHZ;
4603 case IEEE80211_STA_RX_BW_40:
4604 bw = WMI_PEER_CHWIDTH_40MHZ;
4606 case IEEE80211_STA_RX_BW_80:
4607 bw = WMI_PEER_CHWIDTH_80MHZ;
4609 case IEEE80211_STA_RX_BW_160:
4610 ath10k_warn(ar, "Invalid bandwith %d in rc update for %pM\n",
4611 sta->bandwidth, sta->addr);
4612 bw = WMI_PEER_CHWIDTH_20MHZ;
4619 if (changed & IEEE80211_RC_NSS_CHANGED)
4620 arsta->nss = sta->rx_nss;
4622 if (changed & IEEE80211_RC_SMPS_CHANGED) {
4623 smps = WMI_PEER_SMPS_PS_NONE;
4625 switch (sta->smps_mode) {
4626 case IEEE80211_SMPS_AUTOMATIC:
4627 case IEEE80211_SMPS_OFF:
4628 smps = WMI_PEER_SMPS_PS_NONE;
4630 case IEEE80211_SMPS_STATIC:
4631 smps = WMI_PEER_SMPS_STATIC;
4633 case IEEE80211_SMPS_DYNAMIC:
4634 smps = WMI_PEER_SMPS_DYNAMIC;
4636 case IEEE80211_SMPS_NUM_MODES:
4637 ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
4638 sta->smps_mode, sta->addr);
4639 smps = WMI_PEER_SMPS_PS_NONE;
4646 arsta->changed |= changed;
4648 spin_unlock_bh(&ar->data_lock);
4650 ieee80211_queue_work(hw, &arsta->update_wk);
4653 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
4656 * FIXME: Return 0 for time being. Need to figure out whether FW
4657 * has the API to fetch 64-bit local TSF
4663 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
4664 struct ieee80211_vif *vif,
4665 enum ieee80211_ampdu_mlme_action action,
4666 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
4669 struct ath10k *ar = hw->priv;
4670 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4672 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
4673 arvif->vdev_id, sta->addr, tid, action);
4676 case IEEE80211_AMPDU_RX_START:
4677 case IEEE80211_AMPDU_RX_STOP:
4678 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
4679 * creation/removal. Do we need to verify this?
4682 case IEEE80211_AMPDU_TX_START:
4683 case IEEE80211_AMPDU_TX_STOP_CONT:
4684 case IEEE80211_AMPDU_TX_STOP_FLUSH:
4685 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
4686 case IEEE80211_AMPDU_TX_OPERATIONAL:
4687 /* Firmware offloads Tx aggregation entirely so deny mac80211
4688 * Tx aggregation requests.
4696 static const struct ieee80211_ops ath10k_ops = {
4698 .start = ath10k_start,
4699 .stop = ath10k_stop,
4700 .config = ath10k_config,
4701 .add_interface = ath10k_add_interface,
4702 .remove_interface = ath10k_remove_interface,
4703 .configure_filter = ath10k_configure_filter,
4704 .bss_info_changed = ath10k_bss_info_changed,
4705 .hw_scan = ath10k_hw_scan,
4706 .cancel_hw_scan = ath10k_cancel_hw_scan,
4707 .set_key = ath10k_set_key,
4708 .sta_state = ath10k_sta_state,
4709 .conf_tx = ath10k_conf_tx,
4710 .remain_on_channel = ath10k_remain_on_channel,
4711 .cancel_remain_on_channel = ath10k_cancel_remain_on_channel,
4712 .set_rts_threshold = ath10k_set_rts_threshold,
4713 .flush = ath10k_flush,
4714 .tx_last_beacon = ath10k_tx_last_beacon,
4715 .set_antenna = ath10k_set_antenna,
4716 .get_antenna = ath10k_get_antenna,
4717 .reconfig_complete = ath10k_reconfig_complete,
4718 .get_survey = ath10k_get_survey,
4719 .set_bitrate_mask = ath10k_set_bitrate_mask,
4720 .sta_rc_update = ath10k_sta_rc_update,
4721 .get_tsf = ath10k_get_tsf,
4722 .ampdu_action = ath10k_ampdu_action,
4723 .get_et_sset_count = ath10k_debug_get_et_sset_count,
4724 .get_et_stats = ath10k_debug_get_et_stats,
4725 .get_et_strings = ath10k_debug_get_et_strings,
4727 CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
4730 .suspend = ath10k_suspend,
4731 .resume = ath10k_resume,
4735 #define RATETAB_ENT(_rate, _rateid, _flags) { \
4736 .bitrate = (_rate), \
4737 .flags = (_flags), \
4738 .hw_value = (_rateid), \
4741 #define CHAN2G(_channel, _freq, _flags) { \
4742 .band = IEEE80211_BAND_2GHZ, \
4743 .hw_value = (_channel), \
4744 .center_freq = (_freq), \
4745 .flags = (_flags), \
4746 .max_antenna_gain = 0, \
4750 #define CHAN5G(_channel, _freq, _flags) { \
4751 .band = IEEE80211_BAND_5GHZ, \
4752 .hw_value = (_channel), \
4753 .center_freq = (_freq), \
4754 .flags = (_flags), \
4755 .max_antenna_gain = 0, \
4759 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
4769 CHAN2G(10, 2457, 0),
4770 CHAN2G(11, 2462, 0),
4771 CHAN2G(12, 2467, 0),
4772 CHAN2G(13, 2472, 0),
4773 CHAN2G(14, 2484, 0),
4776 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
4777 CHAN5G(36, 5180, 0),
4778 CHAN5G(40, 5200, 0),
4779 CHAN5G(44, 5220, 0),
4780 CHAN5G(48, 5240, 0),
4781 CHAN5G(52, 5260, 0),
4782 CHAN5G(56, 5280, 0),
4783 CHAN5G(60, 5300, 0),
4784 CHAN5G(64, 5320, 0),
4785 CHAN5G(100, 5500, 0),
4786 CHAN5G(104, 5520, 0),
4787 CHAN5G(108, 5540, 0),
4788 CHAN5G(112, 5560, 0),
4789 CHAN5G(116, 5580, 0),
4790 CHAN5G(120, 5600, 0),
4791 CHAN5G(124, 5620, 0),
4792 CHAN5G(128, 5640, 0),
4793 CHAN5G(132, 5660, 0),
4794 CHAN5G(136, 5680, 0),
4795 CHAN5G(140, 5700, 0),
4796 CHAN5G(149, 5745, 0),
4797 CHAN5G(153, 5765, 0),
4798 CHAN5G(157, 5785, 0),
4799 CHAN5G(161, 5805, 0),
4800 CHAN5G(165, 5825, 0),
4803 /* Note: Be careful if you re-order these. There is code which depends on this
4806 static struct ieee80211_rate ath10k_rates[] = {
4808 RATETAB_ENT(10, 0x82, 0),
4809 RATETAB_ENT(20, 0x84, 0),
4810 RATETAB_ENT(55, 0x8b, 0),
4811 RATETAB_ENT(110, 0x96, 0),
4813 RATETAB_ENT(60, 0x0c, 0),
4814 RATETAB_ENT(90, 0x12, 0),
4815 RATETAB_ENT(120, 0x18, 0),
4816 RATETAB_ENT(180, 0x24, 0),
4817 RATETAB_ENT(240, 0x30, 0),
4818 RATETAB_ENT(360, 0x48, 0),
4819 RATETAB_ENT(480, 0x60, 0),
4820 RATETAB_ENT(540, 0x6c, 0),
4823 #define ath10k_a_rates (ath10k_rates + 4)
4824 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - 4)
4825 #define ath10k_g_rates (ath10k_rates + 0)
4826 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
4828 struct ath10k *ath10k_mac_create(size_t priv_size)
4830 struct ieee80211_hw *hw;
4833 hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
4843 void ath10k_mac_destroy(struct ath10k *ar)
4845 ieee80211_free_hw(ar->hw);
4848 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
4851 .types = BIT(NL80211_IFTYPE_STATION)
4852 | BIT(NL80211_IFTYPE_P2P_CLIENT)
4856 .types = BIT(NL80211_IFTYPE_P2P_GO)
4860 .types = BIT(NL80211_IFTYPE_AP)
4864 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
4867 .types = BIT(NL80211_IFTYPE_AP)
4871 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
4873 .limits = ath10k_if_limits,
4874 .n_limits = ARRAY_SIZE(ath10k_if_limits),
4875 .max_interfaces = 8,
4876 .num_different_channels = 1,
4877 .beacon_int_infra_match = true,
4881 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
4883 .limits = ath10k_10x_if_limits,
4884 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
4885 .max_interfaces = 8,
4886 .num_different_channels = 1,
4887 .beacon_int_infra_match = true,
4888 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
4889 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
4890 BIT(NL80211_CHAN_WIDTH_20) |
4891 BIT(NL80211_CHAN_WIDTH_40) |
4892 BIT(NL80211_CHAN_WIDTH_80),
4897 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
4899 struct ieee80211_sta_vht_cap vht_cap = {0};
4903 vht_cap.vht_supported = 1;
4904 vht_cap.cap = ar->vht_cap_info;
4907 for (i = 0; i < 8; i++) {
4908 if (i < ar->num_rf_chains)
4909 mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2);
4911 mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2);
4914 vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
4915 vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
4920 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
4923 struct ieee80211_sta_ht_cap ht_cap = {0};
4925 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
4928 ht_cap.ht_supported = 1;
4929 ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
4930 ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
4931 ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
4932 ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
4933 ht_cap.cap |= WLAN_HT_CAP_SM_PS_STATIC << IEEE80211_HT_CAP_SM_PS_SHIFT;
4935 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
4936 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
4938 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
4939 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
4941 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
4944 smps = WLAN_HT_CAP_SM_PS_DYNAMIC;
4945 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
4950 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
4951 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
4953 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
4956 stbc = ar->ht_cap_info;
4957 stbc &= WMI_HT_CAP_RX_STBC;
4958 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
4959 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
4960 stbc &= IEEE80211_HT_CAP_RX_STBC;
4965 if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
4966 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
4968 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
4969 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
4971 /* max AMSDU is implicitly taken from vht_cap_info */
4972 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
4973 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
4975 for (i = 0; i < ar->num_rf_chains; i++)
4976 ht_cap.mcs.rx_mask[i] = 0xFF;
4978 ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
4983 static void ath10k_get_arvif_iter(void *data, u8 *mac,
4984 struct ieee80211_vif *vif)
4986 struct ath10k_vif_iter *arvif_iter = data;
4987 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4989 if (arvif->vdev_id == arvif_iter->vdev_id)
4990 arvif_iter->arvif = arvif;
4993 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
4995 struct ath10k_vif_iter arvif_iter;
4998 memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
4999 arvif_iter.vdev_id = vdev_id;
5001 flags = IEEE80211_IFACE_ITER_RESUME_ALL;
5002 ieee80211_iterate_active_interfaces_atomic(ar->hw,
5004 ath10k_get_arvif_iter,
5006 if (!arvif_iter.arvif) {
5007 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
5011 return arvif_iter.arvif;
5014 int ath10k_mac_register(struct ath10k *ar)
5016 struct ieee80211_supported_band *band;
5017 struct ieee80211_sta_vht_cap vht_cap;
5018 struct ieee80211_sta_ht_cap ht_cap;
5022 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
5024 SET_IEEE80211_DEV(ar->hw, ar->dev);
5026 ht_cap = ath10k_get_ht_cap(ar);
5027 vht_cap = ath10k_create_vht_cap(ar);
5029 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
5030 channels = kmemdup(ath10k_2ghz_channels,
5031 sizeof(ath10k_2ghz_channels),
5038 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
5039 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
5040 band->channels = channels;
5041 band->n_bitrates = ath10k_g_rates_size;
5042 band->bitrates = ath10k_g_rates;
5043 band->ht_cap = ht_cap;
5045 /* vht is not supported in 2.4 GHz */
5047 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
5050 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
5051 channels = kmemdup(ath10k_5ghz_channels,
5052 sizeof(ath10k_5ghz_channels),
5059 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
5060 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
5061 band->channels = channels;
5062 band->n_bitrates = ath10k_a_rates_size;
5063 band->bitrates = ath10k_a_rates;
5064 band->ht_cap = ht_cap;
5065 band->vht_cap = vht_cap;
5066 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
5069 ar->hw->wiphy->interface_modes =
5070 BIT(NL80211_IFTYPE_STATION) |
5071 BIT(NL80211_IFTYPE_AP);
5073 ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask;
5074 ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask;
5076 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
5077 ar->hw->wiphy->interface_modes |=
5078 BIT(NL80211_IFTYPE_P2P_CLIENT) |
5079 BIT(NL80211_IFTYPE_P2P_GO);
5081 ar->hw->flags = IEEE80211_HW_SIGNAL_DBM |
5082 IEEE80211_HW_SUPPORTS_PS |
5083 IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
5084 IEEE80211_HW_SUPPORTS_UAPSD |
5085 IEEE80211_HW_MFP_CAPABLE |
5086 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
5087 IEEE80211_HW_HAS_RATE_CONTROL |
5088 IEEE80211_HW_AP_LINK_PS |
5089 IEEE80211_HW_SPECTRUM_MGMT;
5091 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
5093 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
5094 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
5096 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
5097 ar->hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
5098 ar->hw->flags |= IEEE80211_HW_TX_AMPDU_SETUP_IN_HW;
5101 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
5102 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
5104 ar->hw->vif_data_size = sizeof(struct ath10k_vif);
5105 ar->hw->sta_data_size = sizeof(struct ath10k_sta);
5107 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
5109 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
5110 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
5111 ar->hw->wiphy->max_remain_on_channel_duration = 5000;
5113 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
5114 ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
5117 * on LL hardware queues are managed entirely by the FW
5118 * so we only advertise to mac we can do the queues thing
5122 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
5123 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
5124 ar->hw->wiphy->n_iface_combinations =
5125 ARRAY_SIZE(ath10k_10x_if_comb);
5127 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
5128 ar->hw->wiphy->n_iface_combinations =
5129 ARRAY_SIZE(ath10k_if_comb);
5131 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
5134 ar->hw->netdev_features = NETIF_F_HW_CSUM;
5136 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
5137 /* Init ath dfs pattern detector */
5138 ar->ath_common.debug_mask = ATH_DBG_DFS;
5139 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
5142 if (!ar->dfs_detector)
5143 ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
5146 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
5147 ath10k_reg_notifier);
5149 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
5153 ret = ieee80211_register_hw(ar->hw);
5155 ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
5159 if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
5160 ret = regulatory_hint(ar->hw->wiphy,
5161 ar->ath_common.regulatory.alpha2);
5163 goto err_unregister;
5169 ieee80211_unregister_hw(ar->hw);
5171 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
5172 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
5177 void ath10k_mac_unregister(struct ath10k *ar)
5179 ieee80211_unregister_hw(ar->hw);
5181 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
5182 ar->dfs_detector->exit(ar->dfs_detector);
5184 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
5185 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
5187 SET_IEEE80211_DEV(ar->hw, NULL);