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_conf *conf = &ar->hw->conf;
1109 enum wmi_sta_powersave_param param;
1110 enum wmi_sta_ps_mode psmode;
1113 lockdep_assert_held(&arvif->ar->conf_mutex);
1115 if (arvif->vif->type != NL80211_IFTYPE_STATION)
1118 if (conf->flags & IEEE80211_CONF_PS) {
1119 psmode = WMI_STA_PS_MODE_ENABLED;
1120 param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1122 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1123 conf->dynamic_ps_timeout);
1125 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
1126 arvif->vdev_id, ret);
1130 psmode = WMI_STA_PS_MODE_DISABLED;
1133 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1134 arvif->vdev_id, psmode ? "enable" : "disable");
1136 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1138 ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n",
1139 psmode, arvif->vdev_id, ret);
1146 /**********************/
1147 /* Station management */
1148 /**********************/
1150 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar,
1151 struct ieee80211_vif *vif)
1153 /* Some firmware revisions have unstable STA powersave when listen
1154 * interval is set too high (e.g. 5). The symptoms are firmware doesn't
1155 * generate NullFunc frames properly even if buffered frames have been
1156 * indicated in Beacon TIM. Firmware would seldom wake up to pull
1157 * buffered frames. Often pinging the device from AP would simply fail.
1159 * As a workaround set it to 1.
1161 if (vif->type == NL80211_IFTYPE_STATION)
1164 return ar->hw->conf.listen_interval;
1167 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
1168 struct ieee80211_vif *vif,
1169 struct ieee80211_sta *sta,
1170 struct wmi_peer_assoc_complete_arg *arg)
1172 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1174 lockdep_assert_held(&ar->conf_mutex);
1176 ether_addr_copy(arg->addr, sta->addr);
1177 arg->vdev_id = arvif->vdev_id;
1178 arg->peer_aid = sta->aid;
1179 arg->peer_flags |= WMI_PEER_AUTH;
1180 arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif);
1181 arg->peer_num_spatial_streams = 1;
1182 arg->peer_caps = vif->bss_conf.assoc_capability;
1185 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
1186 struct ieee80211_vif *vif,
1187 struct wmi_peer_assoc_complete_arg *arg)
1189 struct ieee80211_bss_conf *info = &vif->bss_conf;
1190 struct cfg80211_bss *bss;
1191 const u8 *rsnie = NULL;
1192 const u8 *wpaie = NULL;
1194 lockdep_assert_held(&ar->conf_mutex);
1196 bss = cfg80211_get_bss(ar->hw->wiphy, ar->hw->conf.chandef.chan,
1197 info->bssid, NULL, 0, 0, 0);
1199 const struct cfg80211_bss_ies *ies;
1202 rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
1204 ies = rcu_dereference(bss->ies);
1206 wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
1207 WLAN_OUI_TYPE_MICROSOFT_WPA,
1211 cfg80211_put_bss(ar->hw->wiphy, bss);
1214 /* FIXME: base on RSN IE/WPA IE is a correct idea? */
1215 if (rsnie || wpaie) {
1216 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
1217 arg->peer_flags |= WMI_PEER_NEED_PTK_4_WAY;
1221 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
1222 arg->peer_flags |= WMI_PEER_NEED_GTK_2_WAY;
1226 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
1227 struct ieee80211_sta *sta,
1228 struct wmi_peer_assoc_complete_arg *arg)
1230 struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
1231 const struct ieee80211_supported_band *sband;
1232 const struct ieee80211_rate *rates;
1236 lockdep_assert_held(&ar->conf_mutex);
1238 sband = ar->hw->wiphy->bands[ar->hw->conf.chandef.chan->band];
1239 ratemask = sta->supp_rates[ar->hw->conf.chandef.chan->band];
1240 rates = sband->bitrates;
1242 rateset->num_rates = 0;
1244 for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
1245 if (!(ratemask & 1))
1248 rateset->rates[rateset->num_rates] = rates->hw_value;
1249 rateset->num_rates++;
1253 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
1254 struct ieee80211_sta *sta,
1255 struct wmi_peer_assoc_complete_arg *arg)
1257 const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
1261 lockdep_assert_held(&ar->conf_mutex);
1263 if (!ht_cap->ht_supported)
1266 arg->peer_flags |= WMI_PEER_HT;
1267 arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1268 ht_cap->ampdu_factor)) - 1;
1270 arg->peer_mpdu_density =
1271 ath10k_parse_mpdudensity(ht_cap->ampdu_density);
1273 arg->peer_ht_caps = ht_cap->cap;
1274 arg->peer_rate_caps |= WMI_RC_HT_FLAG;
1276 if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
1277 arg->peer_flags |= WMI_PEER_LDPC;
1279 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
1280 arg->peer_flags |= WMI_PEER_40MHZ;
1281 arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
1284 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
1285 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1287 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
1288 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1290 if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
1291 arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
1292 arg->peer_flags |= WMI_PEER_STBC;
1295 if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
1296 stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
1297 stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
1298 stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
1299 arg->peer_rate_caps |= stbc;
1300 arg->peer_flags |= WMI_PEER_STBC;
1303 if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
1304 arg->peer_rate_caps |= WMI_RC_TS_FLAG;
1305 else if (ht_cap->mcs.rx_mask[1])
1306 arg->peer_rate_caps |= WMI_RC_DS_FLAG;
1308 for (i = 0, n = 0; i < IEEE80211_HT_MCS_MASK_LEN*8; i++)
1309 if (ht_cap->mcs.rx_mask[i/8] & (1 << i%8))
1310 arg->peer_ht_rates.rates[n++] = i;
1313 * This is a workaround for HT-enabled STAs which break the spec
1314 * and have no HT capabilities RX mask (no HT RX MCS map).
1316 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
1317 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
1319 * Firmware asserts if such situation occurs.
1322 arg->peer_ht_rates.num_rates = 8;
1323 for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
1324 arg->peer_ht_rates.rates[i] = i;
1326 arg->peer_ht_rates.num_rates = n;
1327 arg->peer_num_spatial_streams = sta->rx_nss;
1330 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
1332 arg->peer_ht_rates.num_rates,
1333 arg->peer_num_spatial_streams);
1336 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
1337 struct ath10k_vif *arvif,
1338 struct ieee80211_sta *sta)
1344 lockdep_assert_held(&ar->conf_mutex);
1346 if (sta->wme && sta->uapsd_queues) {
1347 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
1348 sta->uapsd_queues, sta->max_sp);
1350 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
1351 uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
1352 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
1353 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
1354 uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
1355 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
1356 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
1357 uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
1358 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
1359 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
1360 uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
1361 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
1363 if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
1364 max_sp = sta->max_sp;
1366 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1368 WMI_AP_PS_PEER_PARAM_UAPSD,
1371 ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n",
1372 arvif->vdev_id, ret);
1376 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1378 WMI_AP_PS_PEER_PARAM_MAX_SP,
1381 ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n",
1382 arvif->vdev_id, ret);
1386 /* TODO setup this based on STA listen interval and
1387 beacon interval. Currently we don't know
1388 sta->listen_interval - mac80211 patch required.
1389 Currently use 10 seconds */
1390 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
1391 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME,
1394 ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n",
1395 arvif->vdev_id, ret);
1403 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
1404 struct ieee80211_sta *sta,
1405 struct wmi_peer_assoc_complete_arg *arg)
1407 const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
1410 if (!vht_cap->vht_supported)
1413 arg->peer_flags |= WMI_PEER_VHT;
1414 arg->peer_vht_caps = vht_cap->cap;
1416 ampdu_factor = (vht_cap->cap &
1417 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
1418 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
1420 /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
1421 * zero in VHT IE. Using it would result in degraded throughput.
1422 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
1423 * it if VHT max_mpdu is smaller. */
1424 arg->peer_max_mpdu = max(arg->peer_max_mpdu,
1425 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1426 ampdu_factor)) - 1);
1428 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1429 arg->peer_flags |= WMI_PEER_80MHZ;
1431 arg->peer_vht_rates.rx_max_rate =
1432 __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
1433 arg->peer_vht_rates.rx_mcs_set =
1434 __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
1435 arg->peer_vht_rates.tx_max_rate =
1436 __le16_to_cpu(vht_cap->vht_mcs.tx_highest);
1437 arg->peer_vht_rates.tx_mcs_set =
1438 __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map);
1440 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
1441 sta->addr, arg->peer_max_mpdu, arg->peer_flags);
1444 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
1445 struct ieee80211_vif *vif,
1446 struct ieee80211_sta *sta,
1447 struct wmi_peer_assoc_complete_arg *arg)
1449 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1451 switch (arvif->vdev_type) {
1452 case WMI_VDEV_TYPE_AP:
1454 arg->peer_flags |= WMI_PEER_QOS;
1456 if (sta->wme && sta->uapsd_queues) {
1457 arg->peer_flags |= WMI_PEER_APSD;
1458 arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
1461 case WMI_VDEV_TYPE_STA:
1462 if (vif->bss_conf.qos)
1463 arg->peer_flags |= WMI_PEER_QOS;
1470 static bool ath10k_mac_sta_has_11g_rates(struct ieee80211_sta *sta)
1472 /* First 4 rates in ath10k_rates are CCK (11b) rates. */
1473 return sta->supp_rates[IEEE80211_BAND_2GHZ] >> 4;
1476 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
1477 struct ieee80211_vif *vif,
1478 struct ieee80211_sta *sta,
1479 struct wmi_peer_assoc_complete_arg *arg)
1481 enum wmi_phy_mode phymode = MODE_UNKNOWN;
1483 switch (ar->hw->conf.chandef.chan->band) {
1484 case IEEE80211_BAND_2GHZ:
1485 if (sta->ht_cap.ht_supported) {
1486 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1487 phymode = MODE_11NG_HT40;
1489 phymode = MODE_11NG_HT20;
1490 } else if (ath10k_mac_sta_has_11g_rates(sta)) {
1497 case IEEE80211_BAND_5GHZ:
1501 if (sta->vht_cap.vht_supported) {
1502 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1503 phymode = MODE_11AC_VHT80;
1504 else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1505 phymode = MODE_11AC_VHT40;
1506 else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
1507 phymode = MODE_11AC_VHT20;
1508 } else if (sta->ht_cap.ht_supported) {
1509 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1510 phymode = MODE_11NA_HT40;
1512 phymode = MODE_11NA_HT20;
1522 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
1523 sta->addr, ath10k_wmi_phymode_str(phymode));
1525 arg->peer_phymode = phymode;
1526 WARN_ON(phymode == MODE_UNKNOWN);
1529 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
1530 struct ieee80211_vif *vif,
1531 struct ieee80211_sta *sta,
1532 struct wmi_peer_assoc_complete_arg *arg)
1534 lockdep_assert_held(&ar->conf_mutex);
1536 memset(arg, 0, sizeof(*arg));
1538 ath10k_peer_assoc_h_basic(ar, vif, sta, arg);
1539 ath10k_peer_assoc_h_crypto(ar, vif, arg);
1540 ath10k_peer_assoc_h_rates(ar, sta, arg);
1541 ath10k_peer_assoc_h_ht(ar, sta, arg);
1542 ath10k_peer_assoc_h_vht(ar, sta, arg);
1543 ath10k_peer_assoc_h_qos(ar, vif, sta, arg);
1544 ath10k_peer_assoc_h_phymode(ar, vif, sta, arg);
1549 static const u32 ath10k_smps_map[] = {
1550 [WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
1551 [WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
1552 [WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
1553 [WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
1556 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
1558 const struct ieee80211_sta_ht_cap *ht_cap)
1562 if (!ht_cap->ht_supported)
1565 smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
1566 smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
1568 if (smps >= ARRAY_SIZE(ath10k_smps_map))
1571 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
1572 WMI_PEER_SMPS_STATE,
1573 ath10k_smps_map[smps]);
1576 /* can be called only in mac80211 callbacks due to `key_count` usage */
1577 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
1578 struct ieee80211_vif *vif,
1579 struct ieee80211_bss_conf *bss_conf)
1581 struct ath10k *ar = hw->priv;
1582 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1583 struct ieee80211_sta_ht_cap ht_cap;
1584 struct wmi_peer_assoc_complete_arg peer_arg;
1585 struct ieee80211_sta *ap_sta;
1588 lockdep_assert_held(&ar->conf_mutex);
1590 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n",
1591 arvif->vdev_id, arvif->bssid, arvif->aid);
1595 ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
1597 ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n",
1598 bss_conf->bssid, arvif->vdev_id);
1603 /* ap_sta must be accessed only within rcu section which must be left
1604 * before calling ath10k_setup_peer_smps() which might sleep. */
1605 ht_cap = ap_sta->ht_cap;
1607 ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg);
1609 ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n",
1610 bss_conf->bssid, arvif->vdev_id, ret);
1617 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1619 ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n",
1620 bss_conf->bssid, arvif->vdev_id, ret);
1624 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
1626 ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n",
1627 arvif->vdev_id, ret);
1631 ath10k_dbg(ar, ATH10K_DBG_MAC,
1632 "mac vdev %d up (associated) bssid %pM aid %d\n",
1633 arvif->vdev_id, bss_conf->bssid, bss_conf->aid);
1635 WARN_ON(arvif->is_up);
1637 arvif->aid = bss_conf->aid;
1638 ether_addr_copy(arvif->bssid, bss_conf->bssid);
1640 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
1642 ath10k_warn(ar, "failed to set vdev %d up: %d\n",
1643 arvif->vdev_id, ret);
1647 arvif->is_up = true;
1650 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
1651 struct ieee80211_vif *vif)
1653 struct ath10k *ar = hw->priv;
1654 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1657 lockdep_assert_held(&ar->conf_mutex);
1659 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n",
1660 arvif->vdev_id, arvif->bssid);
1662 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1664 ath10k_warn(ar, "faield to down vdev %i: %d\n",
1665 arvif->vdev_id, ret);
1667 arvif->def_wep_key_idx = 0;
1668 arvif->is_up = false;
1671 static int ath10k_station_assoc(struct ath10k *ar,
1672 struct ieee80211_vif *vif,
1673 struct ieee80211_sta *sta,
1676 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1677 struct wmi_peer_assoc_complete_arg peer_arg;
1680 lockdep_assert_held(&ar->conf_mutex);
1682 ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg);
1684 ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
1685 sta->addr, arvif->vdev_id, ret);
1689 peer_arg.peer_reassoc = reassoc;
1690 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1692 ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n",
1693 sta->addr, arvif->vdev_id, ret);
1697 /* Re-assoc is run only to update supported rates for given station. It
1698 * doesn't make much sense to reconfigure the peer completely.
1701 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
1704 ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
1705 arvif->vdev_id, ret);
1709 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
1711 ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
1712 sta->addr, arvif->vdev_id, ret);
1717 arvif->num_legacy_stations++;
1718 ret = ath10k_recalc_rtscts_prot(arvif);
1720 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
1721 arvif->vdev_id, ret);
1726 ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
1728 ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
1729 arvif->vdev_id, ret);
1737 static int ath10k_station_disassoc(struct ath10k *ar,
1738 struct ieee80211_vif *vif,
1739 struct ieee80211_sta *sta)
1741 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1744 lockdep_assert_held(&ar->conf_mutex);
1747 arvif->num_legacy_stations--;
1748 ret = ath10k_recalc_rtscts_prot(arvif);
1750 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
1751 arvif->vdev_id, ret);
1756 ret = ath10k_clear_peer_keys(arvif, sta->addr);
1758 ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n",
1759 arvif->vdev_id, ret);
1770 static int ath10k_update_channel_list(struct ath10k *ar)
1772 struct ieee80211_hw *hw = ar->hw;
1773 struct ieee80211_supported_band **bands;
1774 enum ieee80211_band band;
1775 struct ieee80211_channel *channel;
1776 struct wmi_scan_chan_list_arg arg = {0};
1777 struct wmi_channel_arg *ch;
1783 lockdep_assert_held(&ar->conf_mutex);
1785 bands = hw->wiphy->bands;
1786 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1790 for (i = 0; i < bands[band]->n_channels; i++) {
1791 if (bands[band]->channels[i].flags &
1792 IEEE80211_CHAN_DISABLED)
1799 len = sizeof(struct wmi_channel_arg) * arg.n_channels;
1800 arg.channels = kzalloc(len, GFP_KERNEL);
1805 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1809 for (i = 0; i < bands[band]->n_channels; i++) {
1810 channel = &bands[band]->channels[i];
1812 if (channel->flags & IEEE80211_CHAN_DISABLED)
1815 ch->allow_ht = true;
1817 /* FIXME: when should we really allow VHT? */
1818 ch->allow_vht = true;
1821 !(channel->flags & IEEE80211_CHAN_NO_IR);
1824 !(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
1827 !!(channel->flags & IEEE80211_CHAN_RADAR);
1829 passive = channel->flags & IEEE80211_CHAN_NO_IR;
1830 ch->passive = passive;
1832 ch->freq = channel->center_freq;
1833 ch->band_center_freq1 = channel->center_freq;
1835 ch->max_power = channel->max_power * 2;
1836 ch->max_reg_power = channel->max_reg_power * 2;
1837 ch->max_antenna_gain = channel->max_antenna_gain * 2;
1838 ch->reg_class_id = 0; /* FIXME */
1840 /* FIXME: why use only legacy modes, why not any
1841 * HT/VHT modes? Would that even make any
1843 if (channel->band == IEEE80211_BAND_2GHZ)
1844 ch->mode = MODE_11G;
1846 ch->mode = MODE_11A;
1848 if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
1851 ath10k_dbg(ar, ATH10K_DBG_WMI,
1852 "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
1853 ch - arg.channels, arg.n_channels,
1854 ch->freq, ch->max_power, ch->max_reg_power,
1855 ch->max_antenna_gain, ch->mode);
1861 ret = ath10k_wmi_scan_chan_list(ar, &arg);
1862 kfree(arg.channels);
1867 static enum wmi_dfs_region
1868 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
1870 switch (dfs_region) {
1871 case NL80211_DFS_UNSET:
1872 return WMI_UNINIT_DFS_DOMAIN;
1873 case NL80211_DFS_FCC:
1874 return WMI_FCC_DFS_DOMAIN;
1875 case NL80211_DFS_ETSI:
1876 return WMI_ETSI_DFS_DOMAIN;
1877 case NL80211_DFS_JP:
1878 return WMI_MKK4_DFS_DOMAIN;
1880 return WMI_UNINIT_DFS_DOMAIN;
1883 static void ath10k_regd_update(struct ath10k *ar)
1885 struct reg_dmn_pair_mapping *regpair;
1887 enum wmi_dfs_region wmi_dfs_reg;
1888 enum nl80211_dfs_regions nl_dfs_reg;
1890 lockdep_assert_held(&ar->conf_mutex);
1892 ret = ath10k_update_channel_list(ar);
1894 ath10k_warn(ar, "failed to update channel list: %d\n", ret);
1896 regpair = ar->ath_common.regulatory.regpair;
1898 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1899 nl_dfs_reg = ar->dfs_detector->region;
1900 wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
1902 wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
1905 /* Target allows setting up per-band regdomain but ath_common provides
1906 * a combined one only */
1907 ret = ath10k_wmi_pdev_set_regdomain(ar,
1908 regpair->reg_domain,
1909 regpair->reg_domain, /* 2ghz */
1910 regpair->reg_domain, /* 5ghz */
1911 regpair->reg_2ghz_ctl,
1912 regpair->reg_5ghz_ctl,
1915 ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret);
1918 static void ath10k_reg_notifier(struct wiphy *wiphy,
1919 struct regulatory_request *request)
1921 struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1922 struct ath10k *ar = hw->priv;
1925 ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
1927 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1928 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
1929 request->dfs_region);
1930 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
1931 request->dfs_region);
1933 ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n",
1934 request->dfs_region);
1937 mutex_lock(&ar->conf_mutex);
1938 if (ar->state == ATH10K_STATE_ON)
1939 ath10k_regd_update(ar);
1940 mutex_unlock(&ar->conf_mutex);
1947 static u8 ath10k_tx_h_get_tid(struct ieee80211_hdr *hdr)
1949 if (ieee80211_is_mgmt(hdr->frame_control))
1950 return HTT_DATA_TX_EXT_TID_MGMT;
1952 if (!ieee80211_is_data_qos(hdr->frame_control))
1953 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1955 if (!is_unicast_ether_addr(ieee80211_get_DA(hdr)))
1956 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1958 return ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
1961 static u8 ath10k_tx_h_get_vdev_id(struct ath10k *ar, struct ieee80211_vif *vif)
1964 return ath10k_vif_to_arvif(vif)->vdev_id;
1966 if (ar->monitor_started)
1967 return ar->monitor_vdev_id;
1969 ath10k_warn(ar, "failed to resolve vdev id\n");
1973 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
1974 * Control in the header.
1976 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
1978 struct ieee80211_hdr *hdr = (void *)skb->data;
1979 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
1982 if (!ieee80211_is_data_qos(hdr->frame_control))
1985 qos_ctl = ieee80211_get_qos_ctl(hdr);
1986 memmove(skb->data + IEEE80211_QOS_CTL_LEN,
1987 skb->data, (void *)qos_ctl - (void *)skb->data);
1988 skb_pull(skb, IEEE80211_QOS_CTL_LEN);
1990 /* Fw/Hw generates a corrupted QoS Control Field for QoS NullFunc
1991 * frames. Powersave is handled by the fw/hw so QoS NyllFunc frames are
1992 * used only for CQM purposes (e.g. hostapd station keepalive ping) so
1993 * it is safe to downgrade to NullFunc.
1995 if (ieee80211_is_qos_nullfunc(hdr->frame_control)) {
1996 hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
1997 cb->htt.tid = HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
2001 static void ath10k_tx_wep_key_work(struct work_struct *work)
2003 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
2005 struct ath10k *ar = arvif->ar;
2006 int ret, keyidx = arvif->def_wep_key_newidx;
2008 mutex_lock(&arvif->ar->conf_mutex);
2010 if (arvif->ar->state != ATH10K_STATE_ON)
2013 if (arvif->def_wep_key_idx == keyidx)
2016 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
2017 arvif->vdev_id, keyidx);
2019 ret = ath10k_wmi_vdev_set_param(arvif->ar,
2021 arvif->ar->wmi.vdev_param->def_keyid,
2024 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
2030 arvif->def_wep_key_idx = keyidx;
2033 mutex_unlock(&arvif->ar->conf_mutex);
2036 static void ath10k_tx_h_update_wep_key(struct ieee80211_vif *vif,
2037 struct ieee80211_key_conf *key,
2038 struct sk_buff *skb)
2040 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2041 struct ath10k *ar = arvif->ar;
2042 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2044 if (!ieee80211_has_protected(hdr->frame_control))
2050 if (key->cipher != WLAN_CIPHER_SUITE_WEP40 &&
2051 key->cipher != WLAN_CIPHER_SUITE_WEP104)
2054 if (key->keyidx == arvif->def_wep_key_idx)
2057 /* FIXME: Most likely a few frames will be TXed with an old key. Simply
2058 * queueing frames until key index is updated is not an option because
2059 * sk_buff may need more processing to be done, e.g. offchannel */
2060 arvif->def_wep_key_newidx = key->keyidx;
2061 ieee80211_queue_work(ar->hw, &arvif->wep_key_work);
2064 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
2065 struct ieee80211_vif *vif,
2066 struct sk_buff *skb)
2068 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2069 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2071 /* This is case only for P2P_GO */
2072 if (arvif->vdev_type != WMI_VDEV_TYPE_AP ||
2073 arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO)
2076 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
2077 spin_lock_bh(&ar->data_lock);
2078 if (arvif->u.ap.noa_data)
2079 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
2081 memcpy(skb_put(skb, arvif->u.ap.noa_len),
2082 arvif->u.ap.noa_data,
2083 arvif->u.ap.noa_len);
2084 spin_unlock_bh(&ar->data_lock);
2088 static bool ath10k_mac_need_offchan_tx_work(struct ath10k *ar)
2090 /* FIXME: Not really sure since when the behaviour changed. At some
2091 * point new firmware stopped requiring creation of peer entries for
2092 * offchannel tx (and actually creating them causes issues with wmi-htc
2093 * tx credit replenishment and reliability). Assuming it's at least 3.4
2094 * because that's when the `freq` was introduced to TX_FRM HTT command.
2096 return !(ar->htt.target_version_major >= 3 &&
2097 ar->htt.target_version_minor >= 4);
2100 static void ath10k_tx_htt(struct ath10k *ar, struct sk_buff *skb)
2102 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2105 if (ar->htt.target_version_major >= 3) {
2106 /* Since HTT 3.0 there is no separate mgmt tx command */
2107 ret = ath10k_htt_tx(&ar->htt, skb);
2111 if (ieee80211_is_mgmt(hdr->frame_control)) {
2112 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
2114 if (skb_queue_len(&ar->wmi_mgmt_tx_queue) >=
2115 ATH10K_MAX_NUM_MGMT_PENDING) {
2116 ath10k_warn(ar, "reached WMI management transmit queue limit\n");
2121 skb_queue_tail(&ar->wmi_mgmt_tx_queue, skb);
2122 ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
2124 ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2126 } else if (!test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
2128 ieee80211_is_nullfunc(hdr->frame_control)) {
2129 /* FW does not report tx status properly for NullFunc frames
2130 * unless they are sent through mgmt tx path. mac80211 sends
2131 * those frames when it detects link/beacon loss and depends
2132 * on the tx status to be correct. */
2133 ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2135 ret = ath10k_htt_tx(&ar->htt, skb);
2140 ath10k_warn(ar, "failed to transmit packet, dropping: %d\n",
2142 ieee80211_free_txskb(ar->hw, skb);
2146 void ath10k_offchan_tx_purge(struct ath10k *ar)
2148 struct sk_buff *skb;
2151 skb = skb_dequeue(&ar->offchan_tx_queue);
2155 ieee80211_free_txskb(ar->hw, skb);
2159 void ath10k_offchan_tx_work(struct work_struct *work)
2161 struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
2162 struct ath10k_peer *peer;
2163 struct ieee80211_hdr *hdr;
2164 struct sk_buff *skb;
2165 const u8 *peer_addr;
2169 /* FW requirement: We must create a peer before FW will send out
2170 * an offchannel frame. Otherwise the frame will be stuck and
2171 * never transmitted. We delete the peer upon tx completion.
2172 * It is unlikely that a peer for offchannel tx will already be
2173 * present. However it may be in some rare cases so account for that.
2174 * Otherwise we might remove a legitimate peer and break stuff. */
2177 skb = skb_dequeue(&ar->offchan_tx_queue);
2181 mutex_lock(&ar->conf_mutex);
2183 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %p\n",
2186 hdr = (struct ieee80211_hdr *)skb->data;
2187 peer_addr = ieee80211_get_DA(hdr);
2188 vdev_id = ATH10K_SKB_CB(skb)->vdev_id;
2190 spin_lock_bh(&ar->data_lock);
2191 peer = ath10k_peer_find(ar, vdev_id, peer_addr);
2192 spin_unlock_bh(&ar->data_lock);
2195 /* FIXME: should this use ath10k_warn()? */
2196 ath10k_dbg(ar, ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
2197 peer_addr, vdev_id);
2200 ret = ath10k_peer_create(ar, vdev_id, peer_addr);
2202 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n",
2203 peer_addr, vdev_id, ret);
2206 spin_lock_bh(&ar->data_lock);
2207 reinit_completion(&ar->offchan_tx_completed);
2208 ar->offchan_tx_skb = skb;
2209 spin_unlock_bh(&ar->data_lock);
2211 ath10k_tx_htt(ar, skb);
2213 ret = wait_for_completion_timeout(&ar->offchan_tx_completed,
2216 ath10k_warn(ar, "timed out waiting for offchannel skb %p\n",
2220 ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
2222 ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n",
2223 peer_addr, vdev_id, ret);
2226 mutex_unlock(&ar->conf_mutex);
2230 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
2232 struct sk_buff *skb;
2235 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2239 ieee80211_free_txskb(ar->hw, skb);
2243 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
2245 struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
2246 struct sk_buff *skb;
2250 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2254 ret = ath10k_wmi_mgmt_tx(ar, skb);
2256 ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n",
2258 ieee80211_free_txskb(ar->hw, skb);
2267 void __ath10k_scan_finish(struct ath10k *ar)
2269 lockdep_assert_held(&ar->data_lock);
2271 switch (ar->scan.state) {
2272 case ATH10K_SCAN_IDLE:
2274 case ATH10K_SCAN_RUNNING:
2275 if (ar->scan.is_roc)
2276 ieee80211_remain_on_channel_expired(ar->hw);
2277 case ATH10K_SCAN_ABORTING:
2278 if (!ar->scan.is_roc)
2279 ieee80211_scan_completed(ar->hw,
2281 ATH10K_SCAN_ABORTING));
2283 case ATH10K_SCAN_STARTING:
2284 ar->scan.state = ATH10K_SCAN_IDLE;
2285 ar->scan_channel = NULL;
2286 ath10k_offchan_tx_purge(ar);
2287 cancel_delayed_work(&ar->scan.timeout);
2288 complete_all(&ar->scan.completed);
2293 void ath10k_scan_finish(struct ath10k *ar)
2295 spin_lock_bh(&ar->data_lock);
2296 __ath10k_scan_finish(ar);
2297 spin_unlock_bh(&ar->data_lock);
2300 static int ath10k_scan_stop(struct ath10k *ar)
2302 struct wmi_stop_scan_arg arg = {
2303 .req_id = 1, /* FIXME */
2304 .req_type = WMI_SCAN_STOP_ONE,
2305 .u.scan_id = ATH10K_SCAN_ID,
2309 lockdep_assert_held(&ar->conf_mutex);
2311 ret = ath10k_wmi_stop_scan(ar, &arg);
2313 ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret);
2317 ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ);
2319 ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n");
2321 } else if (ret > 0) {
2326 /* Scan state should be updated upon scan completion but in case
2327 * firmware fails to deliver the event (for whatever reason) it is
2328 * desired to clean up scan state anyway. Firmware may have just
2329 * dropped the scan completion event delivery due to transport pipe
2330 * being overflown with data and/or it can recover on its own before
2331 * next scan request is submitted.
2333 spin_lock_bh(&ar->data_lock);
2334 if (ar->scan.state != ATH10K_SCAN_IDLE)
2335 __ath10k_scan_finish(ar);
2336 spin_unlock_bh(&ar->data_lock);
2341 static void ath10k_scan_abort(struct ath10k *ar)
2345 lockdep_assert_held(&ar->conf_mutex);
2347 spin_lock_bh(&ar->data_lock);
2349 switch (ar->scan.state) {
2350 case ATH10K_SCAN_IDLE:
2351 /* This can happen if timeout worker kicked in and called
2352 * abortion while scan completion was being processed.
2355 case ATH10K_SCAN_STARTING:
2356 case ATH10K_SCAN_ABORTING:
2357 ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n",
2358 ath10k_scan_state_str(ar->scan.state),
2361 case ATH10K_SCAN_RUNNING:
2362 ar->scan.state = ATH10K_SCAN_ABORTING;
2363 spin_unlock_bh(&ar->data_lock);
2365 ret = ath10k_scan_stop(ar);
2367 ath10k_warn(ar, "failed to abort scan: %d\n", ret);
2369 spin_lock_bh(&ar->data_lock);
2373 spin_unlock_bh(&ar->data_lock);
2376 void ath10k_scan_timeout_work(struct work_struct *work)
2378 struct ath10k *ar = container_of(work, struct ath10k,
2381 mutex_lock(&ar->conf_mutex);
2382 ath10k_scan_abort(ar);
2383 mutex_unlock(&ar->conf_mutex);
2386 static int ath10k_start_scan(struct ath10k *ar,
2387 const struct wmi_start_scan_arg *arg)
2391 lockdep_assert_held(&ar->conf_mutex);
2393 ret = ath10k_wmi_start_scan(ar, arg);
2397 ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ);
2399 ret = ath10k_scan_stop(ar);
2401 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
2406 /* Add a 200ms margin to account for event/command processing */
2407 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
2408 msecs_to_jiffies(arg->max_scan_time+200));
2412 /**********************/
2413 /* mac80211 callbacks */
2414 /**********************/
2416 static void ath10k_tx(struct ieee80211_hw *hw,
2417 struct ieee80211_tx_control *control,
2418 struct sk_buff *skb)
2420 struct ath10k *ar = hw->priv;
2421 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
2422 struct ieee80211_vif *vif = info->control.vif;
2423 struct ieee80211_key_conf *key = info->control.hw_key;
2424 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2426 /* We should disable CCK RATE due to P2P */
2427 if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
2428 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
2430 ATH10K_SKB_CB(skb)->htt.is_offchan = false;
2431 ATH10K_SKB_CB(skb)->htt.tid = ath10k_tx_h_get_tid(hdr);
2432 ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif);
2434 /* it makes no sense to process injected frames like that */
2435 if (vif && vif->type != NL80211_IFTYPE_MONITOR) {
2436 ath10k_tx_h_nwifi(hw, skb);
2437 ath10k_tx_h_update_wep_key(vif, key, skb);
2438 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
2439 ath10k_tx_h_seq_no(vif, skb);
2442 if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
2443 spin_lock_bh(&ar->data_lock);
2444 ATH10K_SKB_CB(skb)->htt.freq = ar->scan.roc_freq;
2445 ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id;
2446 spin_unlock_bh(&ar->data_lock);
2448 if (ath10k_mac_need_offchan_tx_work(ar)) {
2449 ATH10K_SKB_CB(skb)->htt.freq = 0;
2450 ATH10K_SKB_CB(skb)->htt.is_offchan = true;
2452 ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n",
2455 skb_queue_tail(&ar->offchan_tx_queue, skb);
2456 ieee80211_queue_work(hw, &ar->offchan_tx_work);
2461 ath10k_tx_htt(ar, skb);
2464 /* Must not be called with conf_mutex held as workers can use that also. */
2465 void ath10k_drain_tx(struct ath10k *ar)
2467 /* make sure rcu-protected mac80211 tx path itself is drained */
2470 ath10k_offchan_tx_purge(ar);
2471 ath10k_mgmt_over_wmi_tx_purge(ar);
2473 cancel_work_sync(&ar->offchan_tx_work);
2474 cancel_work_sync(&ar->wmi_mgmt_tx_work);
2477 void ath10k_halt(struct ath10k *ar)
2479 struct ath10k_vif *arvif;
2481 lockdep_assert_held(&ar->conf_mutex);
2483 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
2484 ar->filter_flags = 0;
2485 ar->monitor = false;
2487 if (ar->monitor_started)
2488 ath10k_monitor_stop(ar);
2490 ar->monitor_started = false;
2492 ath10k_scan_finish(ar);
2493 ath10k_peer_cleanup_all(ar);
2494 ath10k_core_stop(ar);
2495 ath10k_hif_power_down(ar);
2497 spin_lock_bh(&ar->data_lock);
2498 list_for_each_entry(arvif, &ar->arvifs, list)
2499 ath10k_mac_vif_beacon_cleanup(arvif);
2500 spin_unlock_bh(&ar->data_lock);
2503 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
2505 struct ath10k *ar = hw->priv;
2507 mutex_lock(&ar->conf_mutex);
2509 if (ar->cfg_tx_chainmask) {
2510 *tx_ant = ar->cfg_tx_chainmask;
2511 *rx_ant = ar->cfg_rx_chainmask;
2513 *tx_ant = ar->supp_tx_chainmask;
2514 *rx_ant = ar->supp_rx_chainmask;
2517 mutex_unlock(&ar->conf_mutex);
2522 static void ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg)
2524 /* It is not clear that allowing gaps in chainmask
2525 * is helpful. Probably it will not do what user
2526 * is hoping for, so warn in that case.
2528 if (cm == 15 || cm == 7 || cm == 3 || cm == 1 || cm == 0)
2531 ath10k_warn(ar, "mac %s antenna chainmask may be invalid: 0x%x. Suggested values: 15, 7, 3, 1 or 0.\n",
2535 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
2539 lockdep_assert_held(&ar->conf_mutex);
2541 ath10k_check_chain_mask(ar, tx_ant, "tx");
2542 ath10k_check_chain_mask(ar, rx_ant, "rx");
2544 ar->cfg_tx_chainmask = tx_ant;
2545 ar->cfg_rx_chainmask = rx_ant;
2547 if ((ar->state != ATH10K_STATE_ON) &&
2548 (ar->state != ATH10K_STATE_RESTARTED))
2551 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
2554 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n",
2559 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
2562 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n",
2570 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
2572 struct ath10k *ar = hw->priv;
2575 mutex_lock(&ar->conf_mutex);
2576 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
2577 mutex_unlock(&ar->conf_mutex);
2581 static int ath10k_start(struct ieee80211_hw *hw)
2583 struct ath10k *ar = hw->priv;
2587 * This makes sense only when restarting hw. It is harmless to call
2588 * uncoditionally. This is necessary to make sure no HTT/WMI tx
2589 * commands will be submitted while restarting.
2591 ath10k_drain_tx(ar);
2593 mutex_lock(&ar->conf_mutex);
2595 switch (ar->state) {
2596 case ATH10K_STATE_OFF:
2597 ar->state = ATH10K_STATE_ON;
2599 case ATH10K_STATE_RESTARTING:
2601 ar->state = ATH10K_STATE_RESTARTED;
2603 case ATH10K_STATE_ON:
2604 case ATH10K_STATE_RESTARTED:
2605 case ATH10K_STATE_WEDGED:
2609 case ATH10K_STATE_UTF:
2614 ret = ath10k_hif_power_up(ar);
2616 ath10k_err(ar, "Could not init hif: %d\n", ret);
2620 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL);
2622 ath10k_err(ar, "Could not init core: %d\n", ret);
2623 goto err_power_down;
2626 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pmf_qos, 1);
2628 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret);
2632 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->dynamic_bw, 1);
2634 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret);
2638 if (ar->cfg_tx_chainmask)
2639 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask,
2640 ar->cfg_rx_chainmask);
2643 * By default FW set ARP frames ac to voice (6). In that case ARP
2644 * exchange is not working properly for UAPSD enabled AP. ARP requests
2645 * which arrives with access category 0 are processed by network stack
2646 * and send back with access category 0, but FW changes access category
2647 * to 6. Set ARP frames access category to best effort (0) solves
2651 ret = ath10k_wmi_pdev_set_param(ar,
2652 ar->wmi.pdev_param->arp_ac_override, 0);
2654 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n",
2659 ar->num_started_vdevs = 0;
2660 ath10k_regd_update(ar);
2662 ath10k_spectral_start(ar);
2664 mutex_unlock(&ar->conf_mutex);
2668 ath10k_core_stop(ar);
2671 ath10k_hif_power_down(ar);
2674 ar->state = ATH10K_STATE_OFF;
2677 mutex_unlock(&ar->conf_mutex);
2681 static void ath10k_stop(struct ieee80211_hw *hw)
2683 struct ath10k *ar = hw->priv;
2685 ath10k_drain_tx(ar);
2687 mutex_lock(&ar->conf_mutex);
2688 if (ar->state != ATH10K_STATE_OFF) {
2690 ar->state = ATH10K_STATE_OFF;
2692 mutex_unlock(&ar->conf_mutex);
2694 cancel_delayed_work_sync(&ar->scan.timeout);
2695 cancel_work_sync(&ar->restart_work);
2698 static int ath10k_config_ps(struct ath10k *ar)
2700 struct ath10k_vif *arvif;
2703 lockdep_assert_held(&ar->conf_mutex);
2705 list_for_each_entry(arvif, &ar->arvifs, list) {
2706 ret = ath10k_mac_vif_setup_ps(arvif);
2708 ath10k_warn(ar, "failed to setup powersave: %d\n", ret);
2716 static const char *chandef_get_width(enum nl80211_chan_width width)
2719 case NL80211_CHAN_WIDTH_20_NOHT:
2721 case NL80211_CHAN_WIDTH_20:
2723 case NL80211_CHAN_WIDTH_40:
2725 case NL80211_CHAN_WIDTH_80:
2727 case NL80211_CHAN_WIDTH_80P80:
2729 case NL80211_CHAN_WIDTH_160:
2731 case NL80211_CHAN_WIDTH_5:
2733 case NL80211_CHAN_WIDTH_10:
2739 static void ath10k_config_chan(struct ath10k *ar)
2741 struct ath10k_vif *arvif;
2744 lockdep_assert_held(&ar->conf_mutex);
2746 ath10k_dbg(ar, ATH10K_DBG_MAC,
2747 "mac config channel to %dMHz (cf1 %dMHz cf2 %dMHz width %s)\n",
2748 ar->chandef.chan->center_freq,
2749 ar->chandef.center_freq1,
2750 ar->chandef.center_freq2,
2751 chandef_get_width(ar->chandef.width));
2753 /* First stop monitor interface. Some FW versions crash if there's a
2754 * lone monitor interface. */
2755 if (ar->monitor_started)
2756 ath10k_monitor_stop(ar);
2758 list_for_each_entry(arvif, &ar->arvifs, list) {
2759 if (!arvif->is_started)
2765 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2768 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
2770 ath10k_warn(ar, "failed to down vdev %d: %d\n",
2771 arvif->vdev_id, ret);
2776 /* all vdevs are downed now - attempt to restart and re-up them */
2778 list_for_each_entry(arvif, &ar->arvifs, list) {
2779 if (!arvif->is_started)
2782 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2785 ret = ath10k_vdev_restart(arvif);
2787 ath10k_warn(ar, "failed to restart vdev %d: %d\n",
2788 arvif->vdev_id, ret);
2795 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
2798 ath10k_warn(ar, "failed to bring vdev up %d: %d\n",
2799 arvif->vdev_id, ret);
2804 ath10k_monitor_recalc(ar);
2807 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
2812 lockdep_assert_held(&ar->conf_mutex);
2814 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower);
2816 param = ar->wmi.pdev_param->txpower_limit2g;
2817 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
2819 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
2824 param = ar->wmi.pdev_param->txpower_limit5g;
2825 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
2827 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
2835 static int ath10k_mac_txpower_recalc(struct ath10k *ar)
2837 struct ath10k_vif *arvif;
2838 int ret, txpower = -1;
2840 lockdep_assert_held(&ar->conf_mutex);
2842 list_for_each_entry(arvif, &ar->arvifs, list) {
2843 WARN_ON(arvif->txpower < 0);
2846 txpower = arvif->txpower;
2848 txpower = min(txpower, arvif->txpower);
2851 if (WARN_ON(txpower == -1))
2854 ret = ath10k_mac_txpower_setup(ar, txpower);
2856 ath10k_warn(ar, "failed to setup tx power %d: %d\n",
2864 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
2866 struct ath10k *ar = hw->priv;
2867 struct ieee80211_conf *conf = &hw->conf;
2870 mutex_lock(&ar->conf_mutex);
2872 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
2873 ath10k_dbg(ar, ATH10K_DBG_MAC,
2874 "mac config channel %dMHz flags 0x%x radar %d\n",
2875 conf->chandef.chan->center_freq,
2876 conf->chandef.chan->flags,
2877 conf->radar_enabled);
2879 spin_lock_bh(&ar->data_lock);
2880 ar->rx_channel = conf->chandef.chan;
2881 spin_unlock_bh(&ar->data_lock);
2883 ar->radar_enabled = conf->radar_enabled;
2884 ath10k_recalc_radar_detection(ar);
2886 if (!cfg80211_chandef_identical(&ar->chandef, &conf->chandef)) {
2887 ar->chandef = conf->chandef;
2888 ath10k_config_chan(ar);
2892 if (changed & IEEE80211_CONF_CHANGE_PS)
2893 ath10k_config_ps(ar);
2895 if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
2896 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR;
2897 ret = ath10k_monitor_recalc(ar);
2899 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
2902 mutex_unlock(&ar->conf_mutex);
2906 static u32 get_nss_from_chainmask(u16 chain_mask)
2908 if ((chain_mask & 0x15) == 0x15)
2910 else if ((chain_mask & 0x7) == 0x7)
2912 else if ((chain_mask & 0x3) == 0x3)
2919 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
2920 * because we will send mgmt frames without CCK. This requirement
2921 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
2924 static int ath10k_add_interface(struct ieee80211_hw *hw,
2925 struct ieee80211_vif *vif)
2927 struct ath10k *ar = hw->priv;
2928 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2929 enum wmi_sta_powersave_param param;
2935 mutex_lock(&ar->conf_mutex);
2937 memset(arvif, 0, sizeof(*arvif));
2942 INIT_WORK(&arvif->wep_key_work, ath10k_tx_wep_key_work);
2943 INIT_LIST_HEAD(&arvif->list);
2945 if (ar->free_vdev_map == 0) {
2946 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
2950 bit = __ffs64(ar->free_vdev_map);
2952 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
2953 bit, ar->free_vdev_map);
2955 arvif->vdev_id = bit;
2956 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
2959 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE;
2961 switch (vif->type) {
2962 case NL80211_IFTYPE_UNSPECIFIED:
2963 case NL80211_IFTYPE_STATION:
2964 arvif->vdev_type = WMI_VDEV_TYPE_STA;
2966 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT;
2968 case NL80211_IFTYPE_ADHOC:
2969 arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
2971 case NL80211_IFTYPE_AP:
2972 arvif->vdev_type = WMI_VDEV_TYPE_AP;
2975 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO;
2977 case NL80211_IFTYPE_MONITOR:
2978 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
2985 /* Some firmware revisions don't wait for beacon tx completion before
2986 * sending another SWBA event. This could lead to hardware using old
2987 * (freed) beacon data in some cases, e.g. tx credit starvation
2988 * combined with missed TBTT. This is very very rare.
2990 * On non-IOMMU-enabled hosts this could be a possible security issue
2991 * because hw could beacon some random data on the air. On
2992 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
2993 * device would crash.
2995 * Since there are no beacon tx completions (implicit nor explicit)
2996 * propagated to host the only workaround for this is to allocate a
2997 * DMA-coherent buffer for a lifetime of a vif and use it for all
2998 * beacon tx commands. Worst case for this approach is some beacons may
2999 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
3001 if (vif->type == NL80211_IFTYPE_ADHOC ||
3002 vif->type == NL80211_IFTYPE_AP) {
3003 arvif->beacon_buf = dma_zalloc_coherent(ar->dev,
3004 IEEE80211_MAX_FRAME_LEN,
3005 &arvif->beacon_paddr,
3007 if (!arvif->beacon_buf) {
3009 ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
3015 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
3016 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
3017 arvif->beacon_buf ? "single-buf" : "per-skb");
3019 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
3020 arvif->vdev_subtype, vif->addr);
3022 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
3023 arvif->vdev_id, ret);
3027 ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
3028 list_add(&arvif->list, &ar->arvifs);
3030 vdev_param = ar->wmi.vdev_param->def_keyid;
3031 ret = ath10k_wmi_vdev_set_param(ar, 0, vdev_param,
3032 arvif->def_wep_key_idx);
3034 ath10k_warn(ar, "failed to set vdev %i default key id: %d\n",
3035 arvif->vdev_id, ret);
3036 goto err_vdev_delete;
3039 vdev_param = ar->wmi.vdev_param->tx_encap_type;
3040 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3041 ATH10K_HW_TXRX_NATIVE_WIFI);
3042 /* 10.X firmware does not support this VDEV parameter. Do not warn */
3043 if (ret && ret != -EOPNOTSUPP) {
3044 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
3045 arvif->vdev_id, ret);
3046 goto err_vdev_delete;
3049 if (ar->cfg_tx_chainmask) {
3050 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
3052 vdev_param = ar->wmi.vdev_param->nss;
3053 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3056 ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
3057 arvif->vdev_id, ar->cfg_tx_chainmask, nss,
3059 goto err_vdev_delete;
3063 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3064 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr);
3066 ath10k_warn(ar, "failed to create vdev %i peer for AP: %d\n",
3067 arvif->vdev_id, ret);
3068 goto err_vdev_delete;
3071 ret = ath10k_mac_set_kickout(arvif);
3073 ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
3074 arvif->vdev_id, ret);
3075 goto err_peer_delete;
3079 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
3080 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
3081 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
3082 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3085 ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
3086 arvif->vdev_id, ret);
3087 goto err_peer_delete;
3090 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
3092 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
3093 arvif->vdev_id, ret);
3094 goto err_peer_delete;
3097 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
3099 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
3100 arvif->vdev_id, ret);
3101 goto err_peer_delete;
3105 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
3107 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
3108 arvif->vdev_id, ret);
3109 goto err_peer_delete;
3112 ret = ath10k_mac_set_frag(arvif, ar->hw->wiphy->frag_threshold);
3114 ath10k_warn(ar, "failed to set frag threshold for vdev %d: %d\n",
3115 arvif->vdev_id, ret);
3116 goto err_peer_delete;
3119 arvif->txpower = vif->bss_conf.txpower;
3120 ret = ath10k_mac_txpower_recalc(ar);
3122 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
3123 goto err_peer_delete;
3126 mutex_unlock(&ar->conf_mutex);
3130 if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
3131 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
3134 ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
3135 ar->free_vdev_map |= 1LL << arvif->vdev_id;
3136 list_del(&arvif->list);
3139 if (arvif->beacon_buf) {
3140 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
3141 arvif->beacon_buf, arvif->beacon_paddr);
3142 arvif->beacon_buf = NULL;
3145 mutex_unlock(&ar->conf_mutex);
3150 static void ath10k_remove_interface(struct ieee80211_hw *hw,
3151 struct ieee80211_vif *vif)
3153 struct ath10k *ar = hw->priv;
3154 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3157 cancel_work_sync(&arvif->wep_key_work);
3159 mutex_lock(&ar->conf_mutex);
3161 spin_lock_bh(&ar->data_lock);
3162 ath10k_mac_vif_beacon_cleanup(arvif);
3163 spin_unlock_bh(&ar->data_lock);
3165 ret = ath10k_spectral_vif_stop(arvif);
3167 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
3168 arvif->vdev_id, ret);
3170 ar->free_vdev_map |= 1LL << arvif->vdev_id;
3171 list_del(&arvif->list);
3173 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3174 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, vif->addr);
3176 ath10k_warn(ar, "failed to remove peer for AP vdev %i: %d\n",
3177 arvif->vdev_id, ret);
3179 kfree(arvif->u.ap.noa_data);
3182 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
3185 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
3187 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
3188 arvif->vdev_id, ret);
3190 ath10k_peer_cleanup(ar, arvif->vdev_id);
3192 mutex_unlock(&ar->conf_mutex);
3196 * FIXME: Has to be verified.
3198 #define SUPPORTED_FILTERS \
3199 (FIF_PROMISC_IN_BSS | \
3204 FIF_BCN_PRBRESP_PROMISC | \
3208 static void ath10k_configure_filter(struct ieee80211_hw *hw,
3209 unsigned int changed_flags,
3210 unsigned int *total_flags,
3213 struct ath10k *ar = hw->priv;
3216 mutex_lock(&ar->conf_mutex);
3218 changed_flags &= SUPPORTED_FILTERS;
3219 *total_flags &= SUPPORTED_FILTERS;
3220 ar->filter_flags = *total_flags;
3222 ret = ath10k_monitor_recalc(ar);
3224 ath10k_warn(ar, "failed to recalc montior: %d\n", ret);
3226 mutex_unlock(&ar->conf_mutex);
3229 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
3230 struct ieee80211_vif *vif,
3231 struct ieee80211_bss_conf *info,
3234 struct ath10k *ar = hw->priv;
3235 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3237 u32 vdev_param, pdev_param, slottime, preamble;
3239 mutex_lock(&ar->conf_mutex);
3241 if (changed & BSS_CHANGED_IBSS)
3242 ath10k_control_ibss(arvif, info, vif->addr);
3244 if (changed & BSS_CHANGED_BEACON_INT) {
3245 arvif->beacon_interval = info->beacon_int;
3246 vdev_param = ar->wmi.vdev_param->beacon_interval;
3247 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3248 arvif->beacon_interval);
3249 ath10k_dbg(ar, ATH10K_DBG_MAC,
3250 "mac vdev %d beacon_interval %d\n",
3251 arvif->vdev_id, arvif->beacon_interval);
3254 ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
3255 arvif->vdev_id, ret);
3258 if (changed & BSS_CHANGED_BEACON) {
3259 ath10k_dbg(ar, ATH10K_DBG_MAC,
3260 "vdev %d set beacon tx mode to staggered\n",
3263 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
3264 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
3265 WMI_BEACON_STAGGERED_MODE);
3267 ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
3268 arvif->vdev_id, ret);
3271 if (changed & BSS_CHANGED_BEACON_INFO) {
3272 arvif->dtim_period = info->dtim_period;
3274 ath10k_dbg(ar, ATH10K_DBG_MAC,
3275 "mac vdev %d dtim_period %d\n",
3276 arvif->vdev_id, arvif->dtim_period);
3278 vdev_param = ar->wmi.vdev_param->dtim_period;
3279 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3280 arvif->dtim_period);
3282 ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
3283 arvif->vdev_id, ret);
3286 if (changed & BSS_CHANGED_SSID &&
3287 vif->type == NL80211_IFTYPE_AP) {
3288 arvif->u.ap.ssid_len = info->ssid_len;
3290 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
3291 arvif->u.ap.hidden_ssid = info->hidden_ssid;
3294 if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
3295 ether_addr_copy(arvif->bssid, info->bssid);
3297 if (changed & BSS_CHANGED_BEACON_ENABLED)
3298 ath10k_control_beaconing(arvif, info);
3300 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3301 arvif->use_cts_prot = info->use_cts_prot;
3302 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
3303 arvif->vdev_id, info->use_cts_prot);
3305 ret = ath10k_recalc_rtscts_prot(arvif);
3307 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
3308 arvif->vdev_id, ret);
3311 if (changed & BSS_CHANGED_ERP_SLOT) {
3312 if (info->use_short_slot)
3313 slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
3316 slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
3318 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
3319 arvif->vdev_id, slottime);
3321 vdev_param = ar->wmi.vdev_param->slot_time;
3322 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3325 ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
3326 arvif->vdev_id, ret);
3329 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3330 if (info->use_short_preamble)
3331 preamble = WMI_VDEV_PREAMBLE_SHORT;
3333 preamble = WMI_VDEV_PREAMBLE_LONG;
3335 ath10k_dbg(ar, ATH10K_DBG_MAC,
3336 "mac vdev %d preamble %dn",
3337 arvif->vdev_id, preamble);
3339 vdev_param = ar->wmi.vdev_param->preamble;
3340 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3343 ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
3344 arvif->vdev_id, ret);
3347 if (changed & BSS_CHANGED_ASSOC) {
3349 /* Workaround: Make sure monitor vdev is not running
3350 * when associating to prevent some firmware revisions
3351 * (e.g. 10.1 and 10.2) from crashing.
3353 if (ar->monitor_started)
3354 ath10k_monitor_stop(ar);
3355 ath10k_bss_assoc(hw, vif, info);
3356 ath10k_monitor_recalc(ar);
3358 ath10k_bss_disassoc(hw, vif);
3362 if (changed & BSS_CHANGED_TXPOWER) {
3363 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
3364 arvif->vdev_id, info->txpower);
3366 arvif->txpower = info->txpower;
3367 ret = ath10k_mac_txpower_recalc(ar);
3369 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
3372 mutex_unlock(&ar->conf_mutex);
3375 static int ath10k_hw_scan(struct ieee80211_hw *hw,
3376 struct ieee80211_vif *vif,
3377 struct ieee80211_scan_request *hw_req)
3379 struct ath10k *ar = hw->priv;
3380 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3381 struct cfg80211_scan_request *req = &hw_req->req;
3382 struct wmi_start_scan_arg arg;
3386 mutex_lock(&ar->conf_mutex);
3388 spin_lock_bh(&ar->data_lock);
3389 switch (ar->scan.state) {
3390 case ATH10K_SCAN_IDLE:
3391 reinit_completion(&ar->scan.started);
3392 reinit_completion(&ar->scan.completed);
3393 ar->scan.state = ATH10K_SCAN_STARTING;
3394 ar->scan.is_roc = false;
3395 ar->scan.vdev_id = arvif->vdev_id;
3398 case ATH10K_SCAN_STARTING:
3399 case ATH10K_SCAN_RUNNING:
3400 case ATH10K_SCAN_ABORTING:
3404 spin_unlock_bh(&ar->data_lock);
3409 memset(&arg, 0, sizeof(arg));
3410 ath10k_wmi_start_scan_init(ar, &arg);
3411 arg.vdev_id = arvif->vdev_id;
3412 arg.scan_id = ATH10K_SCAN_ID;
3415 arg.scan_ctrl_flags |= WMI_SCAN_ADD_CCK_RATES;
3418 arg.ie_len = req->ie_len;
3419 memcpy(arg.ie, req->ie, arg.ie_len);
3423 arg.n_ssids = req->n_ssids;
3424 for (i = 0; i < arg.n_ssids; i++) {
3425 arg.ssids[i].len = req->ssids[i].ssid_len;
3426 arg.ssids[i].ssid = req->ssids[i].ssid;
3429 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3432 if (req->n_channels) {
3433 arg.n_channels = req->n_channels;
3434 for (i = 0; i < arg.n_channels; i++)
3435 arg.channels[i] = req->channels[i]->center_freq;
3438 ret = ath10k_start_scan(ar, &arg);
3440 ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
3441 spin_lock_bh(&ar->data_lock);
3442 ar->scan.state = ATH10K_SCAN_IDLE;
3443 spin_unlock_bh(&ar->data_lock);
3447 mutex_unlock(&ar->conf_mutex);
3451 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
3452 struct ieee80211_vif *vif)
3454 struct ath10k *ar = hw->priv;
3456 mutex_lock(&ar->conf_mutex);
3457 ath10k_scan_abort(ar);
3458 mutex_unlock(&ar->conf_mutex);
3460 cancel_delayed_work_sync(&ar->scan.timeout);
3463 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
3464 struct ath10k_vif *arvif,
3465 enum set_key_cmd cmd,
3466 struct ieee80211_key_conf *key)
3468 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
3471 /* 10.1 firmware branch requires default key index to be set to group
3472 * key index after installing it. Otherwise FW/HW Txes corrupted
3473 * frames with multi-vif APs. This is not required for main firmware
3474 * branch (e.g. 636).
3476 * FIXME: This has been tested only in AP. It remains unknown if this
3477 * is required for multi-vif STA interfaces on 10.1 */
3479 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
3482 if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
3485 if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
3488 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
3494 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3497 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
3498 arvif->vdev_id, ret);
3501 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
3502 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
3503 struct ieee80211_key_conf *key)
3505 struct ath10k *ar = hw->priv;
3506 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3507 struct ath10k_peer *peer;
3508 const u8 *peer_addr;
3509 bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
3510 key->cipher == WLAN_CIPHER_SUITE_WEP104;
3513 if (key->keyidx > WMI_MAX_KEY_INDEX)
3516 mutex_lock(&ar->conf_mutex);
3519 peer_addr = sta->addr;
3520 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
3521 peer_addr = vif->bss_conf.bssid;
3523 peer_addr = vif->addr;
3525 key->hw_key_idx = key->keyidx;
3527 /* the peer should not disappear in mid-way (unless FW goes awry) since
3528 * we already hold conf_mutex. we just make sure its there now. */
3529 spin_lock_bh(&ar->data_lock);
3530 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3531 spin_unlock_bh(&ar->data_lock);
3534 if (cmd == SET_KEY) {
3535 ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
3540 /* if the peer doesn't exist there is no key to disable
3548 arvif->wep_keys[key->keyidx] = key;
3550 arvif->wep_keys[key->keyidx] = NULL;
3552 if (cmd == DISABLE_KEY)
3553 ath10k_clear_vdev_key(arvif, key);
3556 ret = ath10k_install_key(arvif, key, cmd, peer_addr);
3558 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
3559 arvif->vdev_id, peer_addr, ret);
3563 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
3565 spin_lock_bh(&ar->data_lock);
3566 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3567 if (peer && cmd == SET_KEY)
3568 peer->keys[key->keyidx] = key;
3569 else if (peer && cmd == DISABLE_KEY)
3570 peer->keys[key->keyidx] = NULL;
3571 else if (peer == NULL)
3572 /* impossible unless FW goes crazy */
3573 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
3574 spin_unlock_bh(&ar->data_lock);
3577 mutex_unlock(&ar->conf_mutex);
3581 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
3584 struct ath10k_vif *arvif;
3585 struct ath10k_sta *arsta;
3586 struct ieee80211_sta *sta;
3587 u32 changed, bw, nss, smps;
3590 arsta = container_of(wk, struct ath10k_sta, update_wk);
3591 sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
3592 arvif = arsta->arvif;
3595 spin_lock_bh(&ar->data_lock);
3597 changed = arsta->changed;
3604 spin_unlock_bh(&ar->data_lock);
3606 mutex_lock(&ar->conf_mutex);
3608 if (changed & IEEE80211_RC_BW_CHANGED) {
3609 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
3612 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3613 WMI_PEER_CHAN_WIDTH, bw);
3615 ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
3616 sta->addr, bw, err);
3619 if (changed & IEEE80211_RC_NSS_CHANGED) {
3620 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
3623 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3626 ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
3627 sta->addr, nss, err);
3630 if (changed & IEEE80211_RC_SMPS_CHANGED) {
3631 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
3634 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3635 WMI_PEER_SMPS_STATE, smps);
3637 ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
3638 sta->addr, smps, err);
3641 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
3642 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates\n",
3645 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
3647 ath10k_warn(ar, "failed to reassociate station: %pM\n",
3651 mutex_unlock(&ar->conf_mutex);
3654 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif)
3656 struct ath10k *ar = arvif->ar;
3658 lockdep_assert_held(&ar->conf_mutex);
3660 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
3661 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
3664 if (ar->num_stations >= ar->max_num_stations)
3672 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif)
3674 struct ath10k *ar = arvif->ar;
3676 lockdep_assert_held(&ar->conf_mutex);
3678 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
3679 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
3685 static int ath10k_sta_state(struct ieee80211_hw *hw,
3686 struct ieee80211_vif *vif,
3687 struct ieee80211_sta *sta,
3688 enum ieee80211_sta_state old_state,
3689 enum ieee80211_sta_state new_state)
3691 struct ath10k *ar = hw->priv;
3692 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3693 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
3696 if (old_state == IEEE80211_STA_NOTEXIST &&
3697 new_state == IEEE80211_STA_NONE) {
3698 memset(arsta, 0, sizeof(*arsta));
3699 arsta->arvif = arvif;
3700 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
3703 /* cancel must be done outside the mutex to avoid deadlock */
3704 if ((old_state == IEEE80211_STA_NONE &&
3705 new_state == IEEE80211_STA_NOTEXIST))
3706 cancel_work_sync(&arsta->update_wk);
3708 mutex_lock(&ar->conf_mutex);
3710 if (old_state == IEEE80211_STA_NOTEXIST &&
3711 new_state == IEEE80211_STA_NONE) {
3713 * New station addition.
3715 ath10k_dbg(ar, ATH10K_DBG_MAC,
3716 "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
3717 arvif->vdev_id, sta->addr,
3718 ar->num_stations + 1, ar->max_num_stations,
3719 ar->num_peers + 1, ar->max_num_peers);
3721 ret = ath10k_mac_inc_num_stations(arvif);
3723 ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n",
3724 ar->max_num_stations);
3728 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr);
3730 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
3731 sta->addr, arvif->vdev_id, ret);
3732 ath10k_mac_dec_num_stations(arvif);
3736 if (vif->type == NL80211_IFTYPE_STATION) {
3737 WARN_ON(arvif->is_started);
3739 ret = ath10k_vdev_start(arvif);
3741 ath10k_warn(ar, "failed to start vdev %i: %d\n",
3742 arvif->vdev_id, ret);
3743 WARN_ON(ath10k_peer_delete(ar, arvif->vdev_id,
3745 ath10k_mac_dec_num_stations(arvif);
3749 arvif->is_started = true;
3751 } else if ((old_state == IEEE80211_STA_NONE &&
3752 new_state == IEEE80211_STA_NOTEXIST)) {
3754 * Existing station deletion.
3756 ath10k_dbg(ar, ATH10K_DBG_MAC,
3757 "mac vdev %d peer delete %pM (sta gone)\n",
3758 arvif->vdev_id, sta->addr);
3760 if (vif->type == NL80211_IFTYPE_STATION) {
3761 WARN_ON(!arvif->is_started);
3763 ret = ath10k_vdev_stop(arvif);
3765 ath10k_warn(ar, "failed to stop vdev %i: %d\n",
3766 arvif->vdev_id, ret);
3768 arvif->is_started = false;
3771 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
3773 ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
3774 sta->addr, arvif->vdev_id, ret);
3776 ath10k_mac_dec_num_stations(arvif);
3777 } else if (old_state == IEEE80211_STA_AUTH &&
3778 new_state == IEEE80211_STA_ASSOC &&
3779 (vif->type == NL80211_IFTYPE_AP ||
3780 vif->type == NL80211_IFTYPE_ADHOC)) {
3784 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n",
3787 ret = ath10k_station_assoc(ar, vif, sta, false);
3789 ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
3790 sta->addr, arvif->vdev_id, ret);
3791 } else if (old_state == IEEE80211_STA_ASSOC &&
3792 new_state == IEEE80211_STA_AUTH &&
3793 (vif->type == NL80211_IFTYPE_AP ||
3794 vif->type == NL80211_IFTYPE_ADHOC)) {
3798 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
3801 ret = ath10k_station_disassoc(ar, vif, sta);
3803 ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
3804 sta->addr, arvif->vdev_id, ret);
3807 mutex_unlock(&ar->conf_mutex);
3811 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
3812 u16 ac, bool enable)
3814 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3818 lockdep_assert_held(&ar->conf_mutex);
3820 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
3824 case IEEE80211_AC_VO:
3825 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
3826 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
3828 case IEEE80211_AC_VI:
3829 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
3830 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
3832 case IEEE80211_AC_BE:
3833 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
3834 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
3836 case IEEE80211_AC_BK:
3837 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
3838 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
3843 arvif->u.sta.uapsd |= value;
3845 arvif->u.sta.uapsd &= ~value;
3847 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3848 WMI_STA_PS_PARAM_UAPSD,
3849 arvif->u.sta.uapsd);
3851 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
3855 if (arvif->u.sta.uapsd)
3856 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
3858 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
3860 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3861 WMI_STA_PS_PARAM_RX_WAKE_POLICY,
3864 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
3866 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
3868 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
3869 arvif->vdev_id, ret);
3873 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
3875 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
3876 arvif->vdev_id, ret);
3884 static int ath10k_conf_tx(struct ieee80211_hw *hw,
3885 struct ieee80211_vif *vif, u16 ac,
3886 const struct ieee80211_tx_queue_params *params)
3888 struct ath10k *ar = hw->priv;
3889 struct wmi_wmm_params_arg *p = NULL;
3892 mutex_lock(&ar->conf_mutex);
3895 case IEEE80211_AC_VO:
3896 p = &ar->wmm_params.ac_vo;
3898 case IEEE80211_AC_VI:
3899 p = &ar->wmm_params.ac_vi;
3901 case IEEE80211_AC_BE:
3902 p = &ar->wmm_params.ac_be;
3904 case IEEE80211_AC_BK:
3905 p = &ar->wmm_params.ac_bk;
3914 p->cwmin = params->cw_min;
3915 p->cwmax = params->cw_max;
3916 p->aifs = params->aifs;
3919 * The channel time duration programmed in the HW is in absolute
3920 * microseconds, while mac80211 gives the txop in units of
3923 p->txop = params->txop * 32;
3925 /* FIXME: FW accepts wmm params per hw, not per vif */
3926 ret = ath10k_wmi_pdev_set_wmm_params(ar, &ar->wmm_params);
3928 ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
3932 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
3934 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
3937 mutex_unlock(&ar->conf_mutex);
3941 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
3943 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
3944 struct ieee80211_vif *vif,
3945 struct ieee80211_channel *chan,
3947 enum ieee80211_roc_type type)
3949 struct ath10k *ar = hw->priv;
3950 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3951 struct wmi_start_scan_arg arg;
3954 mutex_lock(&ar->conf_mutex);
3956 spin_lock_bh(&ar->data_lock);
3957 switch (ar->scan.state) {
3958 case ATH10K_SCAN_IDLE:
3959 reinit_completion(&ar->scan.started);
3960 reinit_completion(&ar->scan.completed);
3961 reinit_completion(&ar->scan.on_channel);
3962 ar->scan.state = ATH10K_SCAN_STARTING;
3963 ar->scan.is_roc = true;
3964 ar->scan.vdev_id = arvif->vdev_id;
3965 ar->scan.roc_freq = chan->center_freq;
3968 case ATH10K_SCAN_STARTING:
3969 case ATH10K_SCAN_RUNNING:
3970 case ATH10K_SCAN_ABORTING:
3974 spin_unlock_bh(&ar->data_lock);
3979 duration = max(duration, WMI_SCAN_CHAN_MIN_TIME_MSEC);
3981 memset(&arg, 0, sizeof(arg));
3982 ath10k_wmi_start_scan_init(ar, &arg);
3983 arg.vdev_id = arvif->vdev_id;
3984 arg.scan_id = ATH10K_SCAN_ID;
3986 arg.channels[0] = chan->center_freq;
3987 arg.dwell_time_active = duration;
3988 arg.dwell_time_passive = duration;
3989 arg.max_scan_time = 2 * duration;
3990 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3991 arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
3993 ret = ath10k_start_scan(ar, &arg);
3995 ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
3996 spin_lock_bh(&ar->data_lock);
3997 ar->scan.state = ATH10K_SCAN_IDLE;
3998 spin_unlock_bh(&ar->data_lock);
4002 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
4004 ath10k_warn(ar, "failed to switch to channel for roc scan\n");
4006 ret = ath10k_scan_stop(ar);
4008 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
4016 mutex_unlock(&ar->conf_mutex);
4020 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
4022 struct ath10k *ar = hw->priv;
4024 mutex_lock(&ar->conf_mutex);
4025 ath10k_scan_abort(ar);
4026 mutex_unlock(&ar->conf_mutex);
4028 cancel_delayed_work_sync(&ar->scan.timeout);
4034 * Both RTS and Fragmentation threshold are interface-specific
4035 * in ath10k, but device-specific in mac80211.
4038 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
4040 struct ath10k *ar = hw->priv;
4041 struct ath10k_vif *arvif;
4044 mutex_lock(&ar->conf_mutex);
4045 list_for_each_entry(arvif, &ar->arvifs, list) {
4046 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
4047 arvif->vdev_id, value);
4049 ret = ath10k_mac_set_rts(arvif, value);
4051 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
4052 arvif->vdev_id, ret);
4056 mutex_unlock(&ar->conf_mutex);
4061 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
4062 u32 queues, bool drop)
4064 struct ath10k *ar = hw->priv;
4068 /* mac80211 doesn't care if we really xmit queued frames or not
4069 * we'll collect those frames either way if we stop/delete vdevs */
4073 mutex_lock(&ar->conf_mutex);
4075 if (ar->state == ATH10K_STATE_WEDGED)
4078 ret = wait_event_timeout(ar->htt.empty_tx_wq, ({
4081 spin_lock_bh(&ar->htt.tx_lock);
4082 empty = (ar->htt.num_pending_tx == 0);
4083 spin_unlock_bh(&ar->htt.tx_lock);
4085 skip = (ar->state == ATH10K_STATE_WEDGED) ||
4086 test_bit(ATH10K_FLAG_CRASH_FLUSH,
4090 }), ATH10K_FLUSH_TIMEOUT_HZ);
4092 if (ret <= 0 || skip)
4093 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %i\n",
4094 skip, ar->state, ret);
4097 mutex_unlock(&ar->conf_mutex);
4100 /* TODO: Implement this function properly
4101 * For now it is needed to reply to Probe Requests in IBSS mode.
4102 * Propably we need this information from FW.
4104 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
4110 static int ath10k_suspend(struct ieee80211_hw *hw,
4111 struct cfg80211_wowlan *wowlan)
4113 struct ath10k *ar = hw->priv;
4116 mutex_lock(&ar->conf_mutex);
4118 ret = ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND);
4120 if (ret == -ETIMEDOUT)
4126 ret = ath10k_hif_suspend(ar);
4128 ath10k_warn(ar, "failed to suspend hif: %d\n", ret);
4135 ret = ath10k_wmi_pdev_resume_target(ar);
4137 ath10k_warn(ar, "failed to resume target: %d\n", ret);
4141 mutex_unlock(&ar->conf_mutex);
4145 static int ath10k_resume(struct ieee80211_hw *hw)
4147 struct ath10k *ar = hw->priv;
4150 mutex_lock(&ar->conf_mutex);
4152 ret = ath10k_hif_resume(ar);
4154 ath10k_warn(ar, "failed to resume hif: %d\n", ret);
4159 ret = ath10k_wmi_pdev_resume_target(ar);
4161 ath10k_warn(ar, "failed to resume target: %d\n", ret);
4168 mutex_unlock(&ar->conf_mutex);
4173 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
4174 enum ieee80211_reconfig_type reconfig_type)
4176 struct ath10k *ar = hw->priv;
4178 if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
4181 mutex_lock(&ar->conf_mutex);
4183 /* If device failed to restart it will be in a different state, e.g.
4184 * ATH10K_STATE_WEDGED */
4185 if (ar->state == ATH10K_STATE_RESTARTED) {
4186 ath10k_info(ar, "device successfully recovered\n");
4187 ar->state = ATH10K_STATE_ON;
4188 ieee80211_wake_queues(ar->hw);
4191 mutex_unlock(&ar->conf_mutex);
4194 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
4195 struct survey_info *survey)
4197 struct ath10k *ar = hw->priv;
4198 struct ieee80211_supported_band *sband;
4199 struct survey_info *ar_survey = &ar->survey[idx];
4202 mutex_lock(&ar->conf_mutex);
4204 sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
4205 if (sband && idx >= sband->n_channels) {
4206 idx -= sband->n_channels;
4211 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
4213 if (!sband || idx >= sband->n_channels) {
4218 spin_lock_bh(&ar->data_lock);
4219 memcpy(survey, ar_survey, sizeof(*survey));
4220 spin_unlock_bh(&ar->data_lock);
4222 survey->channel = &sband->channels[idx];
4224 if (ar->rx_channel == survey->channel)
4225 survey->filled |= SURVEY_INFO_IN_USE;
4228 mutex_unlock(&ar->conf_mutex);
4232 /* Helper table for legacy fixed_rate/bitrate_mask */
4233 static const u8 cck_ofdm_rate[] = {
4250 /* Check if only one bit set */
4251 static int ath10k_check_single_mask(u32 mask)
4259 mask &= ~BIT(bit - 1);
4267 ath10k_default_bitrate_mask(struct ath10k *ar,
4268 enum ieee80211_band band,
4269 const struct cfg80211_bitrate_mask *mask)
4271 u32 legacy = 0x00ff;
4274 u16 nrf = ar->num_rf_chains;
4276 if (ar->cfg_tx_chainmask)
4277 nrf = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4280 case IEEE80211_BAND_2GHZ:
4284 case IEEE80211_BAND_5GHZ:
4290 if (mask->control[band].legacy != legacy)
4293 for (i = 0; i < nrf; i++)
4294 if (mask->control[band].ht_mcs[i] != ht)
4297 for (i = 0; i < nrf; i++)
4298 if (mask->control[band].vht_mcs[i] != vht)
4305 ath10k_bitrate_mask_nss(const struct cfg80211_bitrate_mask *mask,
4306 enum ieee80211_band band,
4309 int ht_nss = 0, vht_nss = 0, i;
4312 if (ath10k_check_single_mask(mask->control[band].legacy))
4316 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
4317 if (mask->control[band].ht_mcs[i] == 0xff)
4319 else if (mask->control[band].ht_mcs[i] == 0x00)
4328 for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
4329 if (mask->control[band].vht_mcs[i] == 0x03ff)
4331 else if (mask->control[band].vht_mcs[i] == 0x0000)
4339 if (ht_nss > 0 && vht_nss > 0)
4343 *fixed_nss = ht_nss;
4345 *fixed_nss = vht_nss;
4353 ath10k_bitrate_mask_correct(const struct cfg80211_bitrate_mask *mask,
4354 enum ieee80211_band band,
4355 enum wmi_rate_preamble *preamble)
4357 int legacy = 0, ht = 0, vht = 0, i;
4359 *preamble = WMI_RATE_PREAMBLE_OFDM;
4362 legacy = ath10k_check_single_mask(mask->control[band].legacy);
4367 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4368 ht += ath10k_check_single_mask(mask->control[band].ht_mcs[i]);
4373 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4374 vht += ath10k_check_single_mask(mask->control[band].vht_mcs[i]);
4378 /* Currently we support only one fixed_rate */
4379 if ((legacy + ht + vht) != 1)
4383 *preamble = WMI_RATE_PREAMBLE_HT;
4385 *preamble = WMI_RATE_PREAMBLE_VHT;
4391 ath10k_bitrate_mask_rate(struct ath10k *ar,
4392 const struct cfg80211_bitrate_mask *mask,
4393 enum ieee80211_band band,
4397 u8 rate = 0, pream = 0, nss = 0, i;
4398 enum wmi_rate_preamble preamble;
4400 /* Check if single rate correct */
4401 if (!ath10k_bitrate_mask_correct(mask, band, &preamble))
4407 case WMI_RATE_PREAMBLE_CCK:
4408 case WMI_RATE_PREAMBLE_OFDM:
4409 i = ffs(mask->control[band].legacy) - 1;
4411 if (band == IEEE80211_BAND_2GHZ && i < 4)
4412 pream = WMI_RATE_PREAMBLE_CCK;
4414 if (band == IEEE80211_BAND_5GHZ)
4417 if (i >= ARRAY_SIZE(cck_ofdm_rate))
4420 rate = cck_ofdm_rate[i];
4422 case WMI_RATE_PREAMBLE_HT:
4423 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4424 if (mask->control[band].ht_mcs[i])
4427 if (i == IEEE80211_HT_MCS_MASK_LEN)
4430 rate = ffs(mask->control[band].ht_mcs[i]) - 1;
4433 case WMI_RATE_PREAMBLE_VHT:
4434 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4435 if (mask->control[band].vht_mcs[i])
4438 if (i == NL80211_VHT_NSS_MAX)
4441 rate = ffs(mask->control[band].vht_mcs[i]) - 1;
4446 *fixed_nss = nss + 1;
4450 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac fixed rate pream 0x%02x nss 0x%02x rate 0x%02x\n",
4453 *fixed_rate = pream | nss | rate;
4458 static bool ath10k_get_fixed_rate_nss(struct ath10k *ar,
4459 const struct cfg80211_bitrate_mask *mask,
4460 enum ieee80211_band band,
4464 /* First check full NSS mask, if we can simply limit NSS */
4465 if (ath10k_bitrate_mask_nss(mask, band, fixed_nss))
4468 /* Next Check single rate is set */
4469 return ath10k_bitrate_mask_rate(ar, mask, band, fixed_rate, fixed_nss);
4472 static int ath10k_set_fixed_rate_param(struct ath10k_vif *arvif,
4477 struct ath10k *ar = arvif->ar;
4481 mutex_lock(&ar->conf_mutex);
4483 if (arvif->fixed_rate == fixed_rate &&
4484 arvif->fixed_nss == fixed_nss &&
4485 arvif->force_sgi == force_sgi)
4488 if (fixed_rate == WMI_FIXED_RATE_NONE)
4489 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac disable fixed bitrate mask\n");
4492 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac force sgi\n");
4494 vdev_param = ar->wmi.vdev_param->fixed_rate;
4495 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4496 vdev_param, fixed_rate);
4498 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
4504 arvif->fixed_rate = fixed_rate;
4506 vdev_param = ar->wmi.vdev_param->nss;
4507 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4508 vdev_param, fixed_nss);
4511 ath10k_warn(ar, "failed to set fixed nss param %d: %d\n",
4517 arvif->fixed_nss = fixed_nss;
4519 vdev_param = ar->wmi.vdev_param->sgi;
4520 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4524 ath10k_warn(ar, "failed to set sgi param %d: %d\n",
4530 arvif->force_sgi = force_sgi;
4533 mutex_unlock(&ar->conf_mutex);
4537 static int ath10k_set_bitrate_mask(struct ieee80211_hw *hw,
4538 struct ieee80211_vif *vif,
4539 const struct cfg80211_bitrate_mask *mask)
4541 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4542 struct ath10k *ar = arvif->ar;
4543 enum ieee80211_band band = ar->hw->conf.chandef.chan->band;
4544 u8 fixed_rate = WMI_FIXED_RATE_NONE;
4545 u8 fixed_nss = ar->num_rf_chains;
4548 if (ar->cfg_tx_chainmask)
4549 fixed_nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4551 force_sgi = mask->control[band].gi;
4552 if (force_sgi == NL80211_TXRATE_FORCE_LGI)
4555 if (!ath10k_default_bitrate_mask(ar, band, mask)) {
4556 if (!ath10k_get_fixed_rate_nss(ar, mask, band,
4562 if (fixed_rate == WMI_FIXED_RATE_NONE && force_sgi) {
4563 ath10k_warn(ar, "failed to force SGI usage for default rate settings\n");
4567 return ath10k_set_fixed_rate_param(arvif, fixed_rate,
4568 fixed_nss, force_sgi);
4571 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
4572 struct ieee80211_vif *vif,
4573 struct ieee80211_sta *sta,
4576 struct ath10k *ar = hw->priv;
4577 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
4580 spin_lock_bh(&ar->data_lock);
4582 ath10k_dbg(ar, ATH10K_DBG_MAC,
4583 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
4584 sta->addr, changed, sta->bandwidth, sta->rx_nss,
4587 if (changed & IEEE80211_RC_BW_CHANGED) {
4588 bw = WMI_PEER_CHWIDTH_20MHZ;
4590 switch (sta->bandwidth) {
4591 case IEEE80211_STA_RX_BW_20:
4592 bw = WMI_PEER_CHWIDTH_20MHZ;
4594 case IEEE80211_STA_RX_BW_40:
4595 bw = WMI_PEER_CHWIDTH_40MHZ;
4597 case IEEE80211_STA_RX_BW_80:
4598 bw = WMI_PEER_CHWIDTH_80MHZ;
4600 case IEEE80211_STA_RX_BW_160:
4601 ath10k_warn(ar, "Invalid bandwith %d in rc update for %pM\n",
4602 sta->bandwidth, sta->addr);
4603 bw = WMI_PEER_CHWIDTH_20MHZ;
4610 if (changed & IEEE80211_RC_NSS_CHANGED)
4611 arsta->nss = sta->rx_nss;
4613 if (changed & IEEE80211_RC_SMPS_CHANGED) {
4614 smps = WMI_PEER_SMPS_PS_NONE;
4616 switch (sta->smps_mode) {
4617 case IEEE80211_SMPS_AUTOMATIC:
4618 case IEEE80211_SMPS_OFF:
4619 smps = WMI_PEER_SMPS_PS_NONE;
4621 case IEEE80211_SMPS_STATIC:
4622 smps = WMI_PEER_SMPS_STATIC;
4624 case IEEE80211_SMPS_DYNAMIC:
4625 smps = WMI_PEER_SMPS_DYNAMIC;
4627 case IEEE80211_SMPS_NUM_MODES:
4628 ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
4629 sta->smps_mode, sta->addr);
4630 smps = WMI_PEER_SMPS_PS_NONE;
4637 arsta->changed |= changed;
4639 spin_unlock_bh(&ar->data_lock);
4641 ieee80211_queue_work(hw, &arsta->update_wk);
4644 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
4647 * FIXME: Return 0 for time being. Need to figure out whether FW
4648 * has the API to fetch 64-bit local TSF
4654 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
4655 struct ieee80211_vif *vif,
4656 enum ieee80211_ampdu_mlme_action action,
4657 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
4660 struct ath10k *ar = hw->priv;
4661 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4663 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
4664 arvif->vdev_id, sta->addr, tid, action);
4667 case IEEE80211_AMPDU_RX_START:
4668 case IEEE80211_AMPDU_RX_STOP:
4669 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
4670 * creation/removal. Do we need to verify this?
4673 case IEEE80211_AMPDU_TX_START:
4674 case IEEE80211_AMPDU_TX_STOP_CONT:
4675 case IEEE80211_AMPDU_TX_STOP_FLUSH:
4676 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
4677 case IEEE80211_AMPDU_TX_OPERATIONAL:
4678 /* Firmware offloads Tx aggregation entirely so deny mac80211
4679 * Tx aggregation requests.
4687 static const struct ieee80211_ops ath10k_ops = {
4689 .start = ath10k_start,
4690 .stop = ath10k_stop,
4691 .config = ath10k_config,
4692 .add_interface = ath10k_add_interface,
4693 .remove_interface = ath10k_remove_interface,
4694 .configure_filter = ath10k_configure_filter,
4695 .bss_info_changed = ath10k_bss_info_changed,
4696 .hw_scan = ath10k_hw_scan,
4697 .cancel_hw_scan = ath10k_cancel_hw_scan,
4698 .set_key = ath10k_set_key,
4699 .sta_state = ath10k_sta_state,
4700 .conf_tx = ath10k_conf_tx,
4701 .remain_on_channel = ath10k_remain_on_channel,
4702 .cancel_remain_on_channel = ath10k_cancel_remain_on_channel,
4703 .set_rts_threshold = ath10k_set_rts_threshold,
4704 .flush = ath10k_flush,
4705 .tx_last_beacon = ath10k_tx_last_beacon,
4706 .set_antenna = ath10k_set_antenna,
4707 .get_antenna = ath10k_get_antenna,
4708 .reconfig_complete = ath10k_reconfig_complete,
4709 .get_survey = ath10k_get_survey,
4710 .set_bitrate_mask = ath10k_set_bitrate_mask,
4711 .sta_rc_update = ath10k_sta_rc_update,
4712 .get_tsf = ath10k_get_tsf,
4713 .ampdu_action = ath10k_ampdu_action,
4714 .get_et_sset_count = ath10k_debug_get_et_sset_count,
4715 .get_et_stats = ath10k_debug_get_et_stats,
4716 .get_et_strings = ath10k_debug_get_et_strings,
4718 CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
4721 .suspend = ath10k_suspend,
4722 .resume = ath10k_resume,
4726 #define RATETAB_ENT(_rate, _rateid, _flags) { \
4727 .bitrate = (_rate), \
4728 .flags = (_flags), \
4729 .hw_value = (_rateid), \
4732 #define CHAN2G(_channel, _freq, _flags) { \
4733 .band = IEEE80211_BAND_2GHZ, \
4734 .hw_value = (_channel), \
4735 .center_freq = (_freq), \
4736 .flags = (_flags), \
4737 .max_antenna_gain = 0, \
4741 #define CHAN5G(_channel, _freq, _flags) { \
4742 .band = IEEE80211_BAND_5GHZ, \
4743 .hw_value = (_channel), \
4744 .center_freq = (_freq), \
4745 .flags = (_flags), \
4746 .max_antenna_gain = 0, \
4750 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
4760 CHAN2G(10, 2457, 0),
4761 CHAN2G(11, 2462, 0),
4762 CHAN2G(12, 2467, 0),
4763 CHAN2G(13, 2472, 0),
4764 CHAN2G(14, 2484, 0),
4767 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
4768 CHAN5G(36, 5180, 0),
4769 CHAN5G(40, 5200, 0),
4770 CHAN5G(44, 5220, 0),
4771 CHAN5G(48, 5240, 0),
4772 CHAN5G(52, 5260, 0),
4773 CHAN5G(56, 5280, 0),
4774 CHAN5G(60, 5300, 0),
4775 CHAN5G(64, 5320, 0),
4776 CHAN5G(100, 5500, 0),
4777 CHAN5G(104, 5520, 0),
4778 CHAN5G(108, 5540, 0),
4779 CHAN5G(112, 5560, 0),
4780 CHAN5G(116, 5580, 0),
4781 CHAN5G(120, 5600, 0),
4782 CHAN5G(124, 5620, 0),
4783 CHAN5G(128, 5640, 0),
4784 CHAN5G(132, 5660, 0),
4785 CHAN5G(136, 5680, 0),
4786 CHAN5G(140, 5700, 0),
4787 CHAN5G(149, 5745, 0),
4788 CHAN5G(153, 5765, 0),
4789 CHAN5G(157, 5785, 0),
4790 CHAN5G(161, 5805, 0),
4791 CHAN5G(165, 5825, 0),
4794 /* Note: Be careful if you re-order these. There is code which depends on this
4797 static struct ieee80211_rate ath10k_rates[] = {
4799 RATETAB_ENT(10, 0x82, 0),
4800 RATETAB_ENT(20, 0x84, 0),
4801 RATETAB_ENT(55, 0x8b, 0),
4802 RATETAB_ENT(110, 0x96, 0),
4804 RATETAB_ENT(60, 0x0c, 0),
4805 RATETAB_ENT(90, 0x12, 0),
4806 RATETAB_ENT(120, 0x18, 0),
4807 RATETAB_ENT(180, 0x24, 0),
4808 RATETAB_ENT(240, 0x30, 0),
4809 RATETAB_ENT(360, 0x48, 0),
4810 RATETAB_ENT(480, 0x60, 0),
4811 RATETAB_ENT(540, 0x6c, 0),
4814 #define ath10k_a_rates (ath10k_rates + 4)
4815 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - 4)
4816 #define ath10k_g_rates (ath10k_rates + 0)
4817 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
4819 struct ath10k *ath10k_mac_create(size_t priv_size)
4821 struct ieee80211_hw *hw;
4824 hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
4834 void ath10k_mac_destroy(struct ath10k *ar)
4836 ieee80211_free_hw(ar->hw);
4839 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
4842 .types = BIT(NL80211_IFTYPE_STATION)
4843 | BIT(NL80211_IFTYPE_P2P_CLIENT)
4847 .types = BIT(NL80211_IFTYPE_P2P_GO)
4851 .types = BIT(NL80211_IFTYPE_AP)
4855 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
4858 .types = BIT(NL80211_IFTYPE_AP)
4862 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
4864 .limits = ath10k_if_limits,
4865 .n_limits = ARRAY_SIZE(ath10k_if_limits),
4866 .max_interfaces = 8,
4867 .num_different_channels = 1,
4868 .beacon_int_infra_match = true,
4872 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
4874 .limits = ath10k_10x_if_limits,
4875 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
4876 .max_interfaces = 8,
4877 .num_different_channels = 1,
4878 .beacon_int_infra_match = true,
4879 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
4880 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
4881 BIT(NL80211_CHAN_WIDTH_20) |
4882 BIT(NL80211_CHAN_WIDTH_40) |
4883 BIT(NL80211_CHAN_WIDTH_80),
4888 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
4890 struct ieee80211_sta_vht_cap vht_cap = {0};
4894 vht_cap.vht_supported = 1;
4895 vht_cap.cap = ar->vht_cap_info;
4898 for (i = 0; i < 8; i++) {
4899 if (i < ar->num_rf_chains)
4900 mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2);
4902 mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2);
4905 vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
4906 vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
4911 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
4914 struct ieee80211_sta_ht_cap ht_cap = {0};
4916 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
4919 ht_cap.ht_supported = 1;
4920 ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
4921 ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
4922 ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
4923 ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
4924 ht_cap.cap |= WLAN_HT_CAP_SM_PS_STATIC << IEEE80211_HT_CAP_SM_PS_SHIFT;
4926 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
4927 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
4929 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
4930 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
4932 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
4935 smps = WLAN_HT_CAP_SM_PS_DYNAMIC;
4936 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
4941 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
4942 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
4944 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
4947 stbc = ar->ht_cap_info;
4948 stbc &= WMI_HT_CAP_RX_STBC;
4949 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
4950 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
4951 stbc &= IEEE80211_HT_CAP_RX_STBC;
4956 if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
4957 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
4959 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
4960 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
4962 /* max AMSDU is implicitly taken from vht_cap_info */
4963 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
4964 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
4966 for (i = 0; i < ar->num_rf_chains; i++)
4967 ht_cap.mcs.rx_mask[i] = 0xFF;
4969 ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
4974 static void ath10k_get_arvif_iter(void *data, u8 *mac,
4975 struct ieee80211_vif *vif)
4977 struct ath10k_vif_iter *arvif_iter = data;
4978 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4980 if (arvif->vdev_id == arvif_iter->vdev_id)
4981 arvif_iter->arvif = arvif;
4984 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
4986 struct ath10k_vif_iter arvif_iter;
4989 memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
4990 arvif_iter.vdev_id = vdev_id;
4992 flags = IEEE80211_IFACE_ITER_RESUME_ALL;
4993 ieee80211_iterate_active_interfaces_atomic(ar->hw,
4995 ath10k_get_arvif_iter,
4997 if (!arvif_iter.arvif) {
4998 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
5002 return arvif_iter.arvif;
5005 int ath10k_mac_register(struct ath10k *ar)
5007 struct ieee80211_supported_band *band;
5008 struct ieee80211_sta_vht_cap vht_cap;
5009 struct ieee80211_sta_ht_cap ht_cap;
5013 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
5015 SET_IEEE80211_DEV(ar->hw, ar->dev);
5017 ht_cap = ath10k_get_ht_cap(ar);
5018 vht_cap = ath10k_create_vht_cap(ar);
5020 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
5021 channels = kmemdup(ath10k_2ghz_channels,
5022 sizeof(ath10k_2ghz_channels),
5029 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
5030 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
5031 band->channels = channels;
5032 band->n_bitrates = ath10k_g_rates_size;
5033 band->bitrates = ath10k_g_rates;
5034 band->ht_cap = ht_cap;
5036 /* vht is not supported in 2.4 GHz */
5038 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
5041 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
5042 channels = kmemdup(ath10k_5ghz_channels,
5043 sizeof(ath10k_5ghz_channels),
5050 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
5051 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
5052 band->channels = channels;
5053 band->n_bitrates = ath10k_a_rates_size;
5054 band->bitrates = ath10k_a_rates;
5055 band->ht_cap = ht_cap;
5056 band->vht_cap = vht_cap;
5057 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
5060 ar->hw->wiphy->interface_modes =
5061 BIT(NL80211_IFTYPE_STATION) |
5062 BIT(NL80211_IFTYPE_AP);
5064 ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask;
5065 ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask;
5067 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
5068 ar->hw->wiphy->interface_modes |=
5069 BIT(NL80211_IFTYPE_P2P_CLIENT) |
5070 BIT(NL80211_IFTYPE_P2P_GO);
5072 ar->hw->flags = IEEE80211_HW_SIGNAL_DBM |
5073 IEEE80211_HW_SUPPORTS_PS |
5074 IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
5075 IEEE80211_HW_SUPPORTS_UAPSD |
5076 IEEE80211_HW_MFP_CAPABLE |
5077 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
5078 IEEE80211_HW_HAS_RATE_CONTROL |
5079 IEEE80211_HW_AP_LINK_PS |
5080 IEEE80211_HW_SPECTRUM_MGMT;
5082 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
5084 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
5085 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
5087 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
5088 ar->hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
5089 ar->hw->flags |= IEEE80211_HW_TX_AMPDU_SETUP_IN_HW;
5092 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
5093 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
5095 ar->hw->vif_data_size = sizeof(struct ath10k_vif);
5096 ar->hw->sta_data_size = sizeof(struct ath10k_sta);
5098 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
5100 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
5101 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
5102 ar->hw->wiphy->max_remain_on_channel_duration = 5000;
5104 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
5105 ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
5108 * on LL hardware queues are managed entirely by the FW
5109 * so we only advertise to mac we can do the queues thing
5113 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
5114 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
5115 ar->hw->wiphy->n_iface_combinations =
5116 ARRAY_SIZE(ath10k_10x_if_comb);
5118 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
5119 ar->hw->wiphy->n_iface_combinations =
5120 ARRAY_SIZE(ath10k_if_comb);
5122 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
5125 ar->hw->netdev_features = NETIF_F_HW_CSUM;
5127 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
5128 /* Init ath dfs pattern detector */
5129 ar->ath_common.debug_mask = ATH_DBG_DFS;
5130 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
5133 if (!ar->dfs_detector)
5134 ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
5137 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
5138 ath10k_reg_notifier);
5140 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
5144 ret = ieee80211_register_hw(ar->hw);
5146 ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
5150 if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
5151 ret = regulatory_hint(ar->hw->wiphy,
5152 ar->ath_common.regulatory.alpha2);
5154 goto err_unregister;
5160 ieee80211_unregister_hw(ar->hw);
5162 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
5163 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
5168 void ath10k_mac_unregister(struct ath10k *ar)
5170 ieee80211_unregister_hw(ar->hw);
5172 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
5173 ar->dfs_detector->exit(ar->dfs_detector);
5175 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
5176 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
5178 SET_IEEE80211_DEV(ar->hw, NULL);