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>
39 static struct ieee80211_rate ath10k_rates[] = {
41 .hw_value = ATH10K_HW_RATE_CCK_LP_1M },
43 .hw_value = ATH10K_HW_RATE_CCK_LP_2M,
44 .hw_value_short = ATH10K_HW_RATE_CCK_SP_2M,
45 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
47 .hw_value = ATH10K_HW_RATE_CCK_LP_5_5M,
48 .hw_value_short = ATH10K_HW_RATE_CCK_SP_5_5M,
49 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
51 .hw_value = ATH10K_HW_RATE_CCK_LP_11M,
52 .hw_value_short = ATH10K_HW_RATE_CCK_SP_11M,
53 .flags = IEEE80211_RATE_SHORT_PREAMBLE },
55 { .bitrate = 60, .hw_value = ATH10K_HW_RATE_OFDM_6M },
56 { .bitrate = 90, .hw_value = ATH10K_HW_RATE_OFDM_9M },
57 { .bitrate = 120, .hw_value = ATH10K_HW_RATE_OFDM_12M },
58 { .bitrate = 180, .hw_value = ATH10K_HW_RATE_OFDM_18M },
59 { .bitrate = 240, .hw_value = ATH10K_HW_RATE_OFDM_24M },
60 { .bitrate = 360, .hw_value = ATH10K_HW_RATE_OFDM_36M },
61 { .bitrate = 480, .hw_value = ATH10K_HW_RATE_OFDM_48M },
62 { .bitrate = 540, .hw_value = ATH10K_HW_RATE_OFDM_54M },
65 #define ATH10K_MAC_FIRST_OFDM_RATE_IDX 4
67 #define ath10k_a_rates (ath10k_rates + ATH10K_MAC_FIRST_OFDM_RATE_IDX)
68 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - \
69 ATH10K_MAC_FIRST_OFDM_RATE_IDX)
70 #define ath10k_g_rates (ath10k_rates + 0)
71 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
73 static bool ath10k_mac_bitrate_is_cck(int bitrate)
86 static u8 ath10k_mac_bitrate_to_rate(int bitrate)
88 return DIV_ROUND_UP(bitrate, 5) |
89 (ath10k_mac_bitrate_is_cck(bitrate) ? BIT(7) : 0);
92 u8 ath10k_mac_hw_rate_to_idx(const struct ieee80211_supported_band *sband,
95 const struct ieee80211_rate *rate;
98 for (i = 0; i < sband->n_bitrates; i++) {
99 rate = &sband->bitrates[i];
101 if (rate->hw_value == hw_rate)
103 else if (rate->flags & IEEE80211_RATE_SHORT_PREAMBLE &&
104 rate->hw_value_short == hw_rate)
111 u8 ath10k_mac_bitrate_to_idx(const struct ieee80211_supported_band *sband,
116 for (i = 0; i < sband->n_bitrates; i++)
117 if (sband->bitrates[i].bitrate == bitrate)
123 static int ath10k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss)
125 switch ((mcs_map >> (2 * nss)) & 0x3) {
126 case IEEE80211_VHT_MCS_SUPPORT_0_7: return BIT(8) - 1;
127 case IEEE80211_VHT_MCS_SUPPORT_0_8: return BIT(9) - 1;
128 case IEEE80211_VHT_MCS_SUPPORT_0_9: return BIT(10) - 1;
134 ath10k_mac_max_ht_nss(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
138 for (nss = IEEE80211_HT_MCS_MASK_LEN - 1; nss >= 0; nss--)
139 if (ht_mcs_mask[nss])
146 ath10k_mac_max_vht_nss(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
150 for (nss = NL80211_VHT_NSS_MAX - 1; nss >= 0; nss--)
151 if (vht_mcs_mask[nss])
161 static int ath10k_send_key(struct ath10k_vif *arvif,
162 struct ieee80211_key_conf *key,
163 enum set_key_cmd cmd,
164 const u8 *macaddr, u32 flags)
166 struct ath10k *ar = arvif->ar;
167 struct wmi_vdev_install_key_arg arg = {
168 .vdev_id = arvif->vdev_id,
169 .key_idx = key->keyidx,
170 .key_len = key->keylen,
171 .key_data = key->key,
176 lockdep_assert_held(&arvif->ar->conf_mutex);
178 switch (key->cipher) {
179 case WLAN_CIPHER_SUITE_CCMP:
180 arg.key_cipher = WMI_CIPHER_AES_CCM;
181 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
183 case WLAN_CIPHER_SUITE_TKIP:
184 arg.key_cipher = WMI_CIPHER_TKIP;
185 arg.key_txmic_len = 8;
186 arg.key_rxmic_len = 8;
188 case WLAN_CIPHER_SUITE_WEP40:
189 case WLAN_CIPHER_SUITE_WEP104:
190 arg.key_cipher = WMI_CIPHER_WEP;
192 case WLAN_CIPHER_SUITE_AES_CMAC:
196 ath10k_warn(ar, "cipher %d is not supported\n", key->cipher);
200 if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
201 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
203 if (cmd == DISABLE_KEY) {
204 arg.key_cipher = WMI_CIPHER_NONE;
208 return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
211 static int ath10k_install_key(struct ath10k_vif *arvif,
212 struct ieee80211_key_conf *key,
213 enum set_key_cmd cmd,
214 const u8 *macaddr, u32 flags)
216 struct ath10k *ar = arvif->ar;
218 unsigned long time_left;
220 lockdep_assert_held(&ar->conf_mutex);
222 reinit_completion(&ar->install_key_done);
224 if (arvif->nohwcrypt)
227 ret = ath10k_send_key(arvif, key, cmd, macaddr, flags);
231 time_left = wait_for_completion_timeout(&ar->install_key_done, 3 * HZ);
238 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
241 struct ath10k *ar = arvif->ar;
242 struct ath10k_peer *peer;
247 lockdep_assert_held(&ar->conf_mutex);
249 if (WARN_ON(arvif->vif->type != NL80211_IFTYPE_AP &&
250 arvif->vif->type != NL80211_IFTYPE_ADHOC))
253 spin_lock_bh(&ar->data_lock);
254 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
255 spin_unlock_bh(&ar->data_lock);
260 for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
261 if (arvif->wep_keys[i] == NULL)
264 switch (arvif->vif->type) {
265 case NL80211_IFTYPE_AP:
266 flags = WMI_KEY_PAIRWISE;
268 if (arvif->def_wep_key_idx == i)
269 flags |= WMI_KEY_TX_USAGE;
271 ret = ath10k_install_key(arvif, arvif->wep_keys[i],
272 SET_KEY, addr, flags);
276 case NL80211_IFTYPE_ADHOC:
277 ret = ath10k_install_key(arvif, arvif->wep_keys[i],
283 ret = ath10k_install_key(arvif, arvif->wep_keys[i],
284 SET_KEY, addr, WMI_KEY_GROUP);
293 spin_lock_bh(&ar->data_lock);
294 peer->keys[i] = arvif->wep_keys[i];
295 spin_unlock_bh(&ar->data_lock);
298 /* In some cases (notably with static WEP IBSS with multiple keys)
299 * multicast Tx becomes broken. Both pairwise and groupwise keys are
300 * installed already. Using WMI_KEY_TX_USAGE in different combinations
301 * didn't seem help. Using def_keyid vdev parameter seems to be
302 * effective so use that.
304 * FIXME: Revisit. Perhaps this can be done in a less hacky way.
306 if (arvif->vif->type != NL80211_IFTYPE_ADHOC)
309 if (arvif->def_wep_key_idx == -1)
312 ret = ath10k_wmi_vdev_set_param(arvif->ar,
314 arvif->ar->wmi.vdev_param->def_keyid,
315 arvif->def_wep_key_idx);
317 ath10k_warn(ar, "failed to re-set def wpa key idxon vdev %i: %d\n",
318 arvif->vdev_id, ret);
325 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
328 struct ath10k *ar = arvif->ar;
329 struct ath10k_peer *peer;
335 lockdep_assert_held(&ar->conf_mutex);
337 spin_lock_bh(&ar->data_lock);
338 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
339 spin_unlock_bh(&ar->data_lock);
344 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
345 if (peer->keys[i] == NULL)
348 /* key flags are not required to delete the key */
349 ret = ath10k_install_key(arvif, peer->keys[i],
350 DISABLE_KEY, addr, flags);
351 if (ret < 0 && first_errno == 0)
355 ath10k_warn(ar, "failed to remove peer wep key %d: %d\n",
358 spin_lock_bh(&ar->data_lock);
359 peer->keys[i] = NULL;
360 spin_unlock_bh(&ar->data_lock);
366 bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr,
369 struct ath10k_peer *peer;
372 lockdep_assert_held(&ar->data_lock);
374 /* We don't know which vdev this peer belongs to,
375 * since WMI doesn't give us that information.
377 * FIXME: multi-bss needs to be handled.
379 peer = ath10k_peer_find(ar, 0, addr);
383 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
384 if (peer->keys[i] && peer->keys[i]->keyidx == keyidx)
391 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
392 struct ieee80211_key_conf *key)
394 struct ath10k *ar = arvif->ar;
395 struct ath10k_peer *peer;
402 lockdep_assert_held(&ar->conf_mutex);
405 /* since ath10k_install_key we can't hold data_lock all the
406 * time, so we try to remove the keys incrementally */
407 spin_lock_bh(&ar->data_lock);
409 list_for_each_entry(peer, &ar->peers, list) {
410 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
411 if (peer->keys[i] == key) {
412 ether_addr_copy(addr, peer->addr);
413 peer->keys[i] = NULL;
418 if (i < ARRAY_SIZE(peer->keys))
421 spin_unlock_bh(&ar->data_lock);
423 if (i == ARRAY_SIZE(peer->keys))
425 /* key flags are not required to delete the key */
426 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr, flags);
427 if (ret < 0 && first_errno == 0)
431 ath10k_warn(ar, "failed to remove key for %pM: %d\n",
438 static int ath10k_mac_vif_update_wep_key(struct ath10k_vif *arvif,
439 struct ieee80211_key_conf *key)
441 struct ath10k *ar = arvif->ar;
442 struct ath10k_peer *peer;
445 lockdep_assert_held(&ar->conf_mutex);
447 list_for_each_entry(peer, &ar->peers, list) {
448 if (!memcmp(peer->addr, arvif->vif->addr, ETH_ALEN))
451 if (!memcmp(peer->addr, arvif->bssid, ETH_ALEN))
454 if (peer->keys[key->keyidx] == key)
457 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vif vdev %i update key %i needs update\n",
458 arvif->vdev_id, key->keyidx);
460 ret = ath10k_install_peer_wep_keys(arvif, peer->addr);
462 ath10k_warn(ar, "failed to update wep keys on vdev %i for peer %pM: %d\n",
463 arvif->vdev_id, peer->addr, ret);
471 /*********************/
472 /* General utilities */
473 /*********************/
475 static inline enum wmi_phy_mode
476 chan_to_phymode(const struct cfg80211_chan_def *chandef)
478 enum wmi_phy_mode phymode = MODE_UNKNOWN;
480 switch (chandef->chan->band) {
481 case IEEE80211_BAND_2GHZ:
482 switch (chandef->width) {
483 case NL80211_CHAN_WIDTH_20_NOHT:
484 if (chandef->chan->flags & IEEE80211_CHAN_NO_OFDM)
489 case NL80211_CHAN_WIDTH_20:
490 phymode = MODE_11NG_HT20;
492 case NL80211_CHAN_WIDTH_40:
493 phymode = MODE_11NG_HT40;
495 case NL80211_CHAN_WIDTH_5:
496 case NL80211_CHAN_WIDTH_10:
497 case NL80211_CHAN_WIDTH_80:
498 case NL80211_CHAN_WIDTH_80P80:
499 case NL80211_CHAN_WIDTH_160:
500 phymode = MODE_UNKNOWN;
504 case IEEE80211_BAND_5GHZ:
505 switch (chandef->width) {
506 case NL80211_CHAN_WIDTH_20_NOHT:
509 case NL80211_CHAN_WIDTH_20:
510 phymode = MODE_11NA_HT20;
512 case NL80211_CHAN_WIDTH_40:
513 phymode = MODE_11NA_HT40;
515 case NL80211_CHAN_WIDTH_80:
516 phymode = MODE_11AC_VHT80;
518 case NL80211_CHAN_WIDTH_5:
519 case NL80211_CHAN_WIDTH_10:
520 case NL80211_CHAN_WIDTH_80P80:
521 case NL80211_CHAN_WIDTH_160:
522 phymode = MODE_UNKNOWN;
530 WARN_ON(phymode == MODE_UNKNOWN);
534 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
537 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
538 * 0 for no restriction
547 switch (mpdudensity) {
553 /* Our lower layer calculations limit our precision to
569 int ath10k_mac_vif_chan(struct ieee80211_vif *vif,
570 struct cfg80211_chan_def *def)
572 struct ieee80211_chanctx_conf *conf;
575 conf = rcu_dereference(vif->chanctx_conf);
587 static void ath10k_mac_num_chanctxs_iter(struct ieee80211_hw *hw,
588 struct ieee80211_chanctx_conf *conf,
596 static int ath10k_mac_num_chanctxs(struct ath10k *ar)
600 ieee80211_iter_chan_contexts_atomic(ar->hw,
601 ath10k_mac_num_chanctxs_iter,
608 ath10k_mac_get_any_chandef_iter(struct ieee80211_hw *hw,
609 struct ieee80211_chanctx_conf *conf,
612 struct cfg80211_chan_def **def = data;
617 static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr,
618 enum wmi_peer_type peer_type)
620 struct ath10k_vif *arvif;
624 lockdep_assert_held(&ar->conf_mutex);
626 num_peers = ar->num_peers;
628 /* Each vdev consumes a peer entry as well */
629 list_for_each_entry(arvif, &ar->arvifs, list)
632 if (num_peers >= ar->max_num_peers)
635 ret = ath10k_wmi_peer_create(ar, vdev_id, addr, peer_type);
637 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n",
642 ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
644 ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n",
654 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
656 struct ath10k *ar = arvif->ar;
660 param = ar->wmi.pdev_param->sta_kickout_th;
661 ret = ath10k_wmi_pdev_set_param(ar, param,
662 ATH10K_KICKOUT_THRESHOLD);
664 ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n",
665 arvif->vdev_id, ret);
669 param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
670 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
671 ATH10K_KEEPALIVE_MIN_IDLE);
673 ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n",
674 arvif->vdev_id, ret);
678 param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
679 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
680 ATH10K_KEEPALIVE_MAX_IDLE);
682 ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n",
683 arvif->vdev_id, ret);
687 param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
688 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
689 ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
691 ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
692 arvif->vdev_id, ret);
699 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
701 struct ath10k *ar = arvif->ar;
704 vdev_param = ar->wmi.vdev_param->rts_threshold;
705 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
708 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
712 lockdep_assert_held(&ar->conf_mutex);
714 ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
718 ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
727 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
729 struct ath10k_peer *peer, *tmp;
731 lockdep_assert_held(&ar->conf_mutex);
733 spin_lock_bh(&ar->data_lock);
734 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
735 if (peer->vdev_id != vdev_id)
738 ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n",
739 peer->addr, vdev_id);
741 list_del(&peer->list);
745 spin_unlock_bh(&ar->data_lock);
748 static void ath10k_peer_cleanup_all(struct ath10k *ar)
750 struct ath10k_peer *peer, *tmp;
752 lockdep_assert_held(&ar->conf_mutex);
754 spin_lock_bh(&ar->data_lock);
755 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
756 list_del(&peer->list);
759 spin_unlock_bh(&ar->data_lock);
762 ar->num_stations = 0;
765 static int ath10k_mac_tdls_peer_update(struct ath10k *ar, u32 vdev_id,
766 struct ieee80211_sta *sta,
767 enum wmi_tdls_peer_state state)
770 struct wmi_tdls_peer_update_cmd_arg arg = {};
771 struct wmi_tdls_peer_capab_arg cap = {};
772 struct wmi_channel_arg chan_arg = {};
774 lockdep_assert_held(&ar->conf_mutex);
776 arg.vdev_id = vdev_id;
777 arg.peer_state = state;
778 ether_addr_copy(arg.addr, sta->addr);
780 cap.peer_max_sp = sta->max_sp;
781 cap.peer_uapsd_queues = sta->uapsd_queues;
783 if (state == WMI_TDLS_PEER_STATE_CONNECTED &&
784 !sta->tdls_initiator)
785 cap.is_peer_responder = 1;
787 ret = ath10k_wmi_tdls_peer_update(ar, &arg, &cap, &chan_arg);
789 ath10k_warn(ar, "failed to update tdls peer %pM on vdev %i: %i\n",
790 arg.addr, vdev_id, ret);
797 /************************/
798 /* Interface management */
799 /************************/
801 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif)
803 struct ath10k *ar = arvif->ar;
805 lockdep_assert_held(&ar->data_lock);
810 if (!arvif->beacon_buf)
811 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr,
812 arvif->beacon->len, DMA_TO_DEVICE);
814 if (WARN_ON(arvif->beacon_state != ATH10K_BEACON_SCHEDULED &&
815 arvif->beacon_state != ATH10K_BEACON_SENT))
818 dev_kfree_skb_any(arvif->beacon);
820 arvif->beacon = NULL;
821 arvif->beacon_state = ATH10K_BEACON_SCHEDULED;
824 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
826 struct ath10k *ar = arvif->ar;
828 lockdep_assert_held(&ar->data_lock);
830 ath10k_mac_vif_beacon_free(arvif);
832 if (arvif->beacon_buf) {
833 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
834 arvif->beacon_buf, arvif->beacon_paddr);
835 arvif->beacon_buf = NULL;
839 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
841 unsigned long time_left;
843 lockdep_assert_held(&ar->conf_mutex);
845 if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags))
848 time_left = wait_for_completion_timeout(&ar->vdev_setup_done,
849 ATH10K_VDEV_SETUP_TIMEOUT_HZ);
856 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
858 struct cfg80211_chan_def *chandef = NULL;
859 struct ieee80211_channel *channel = NULL;
860 struct wmi_vdev_start_request_arg arg = {};
863 lockdep_assert_held(&ar->conf_mutex);
865 ieee80211_iter_chan_contexts_atomic(ar->hw,
866 ath10k_mac_get_any_chandef_iter,
868 if (WARN_ON_ONCE(!chandef))
871 channel = chandef->chan;
873 arg.vdev_id = vdev_id;
874 arg.channel.freq = channel->center_freq;
875 arg.channel.band_center_freq1 = chandef->center_freq1;
877 /* TODO setup this dynamically, what in case we
878 don't have any vifs? */
879 arg.channel.mode = chan_to_phymode(chandef);
880 arg.channel.chan_radar =
881 !!(channel->flags & IEEE80211_CHAN_RADAR);
883 arg.channel.min_power = 0;
884 arg.channel.max_power = channel->max_power * 2;
885 arg.channel.max_reg_power = channel->max_reg_power * 2;
886 arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
888 reinit_completion(&ar->vdev_setup_done);
890 ret = ath10k_wmi_vdev_start(ar, &arg);
892 ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n",
897 ret = ath10k_vdev_setup_sync(ar);
899 ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i start: %d\n",
904 ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
906 ath10k_warn(ar, "failed to put up monitor vdev %i: %d\n",
911 ar->monitor_vdev_id = vdev_id;
913 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i started\n",
914 ar->monitor_vdev_id);
918 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
920 ath10k_warn(ar, "failed to stop monitor vdev %i after start failure: %d\n",
921 ar->monitor_vdev_id, ret);
926 static int ath10k_monitor_vdev_stop(struct ath10k *ar)
930 lockdep_assert_held(&ar->conf_mutex);
932 ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id);
934 ath10k_warn(ar, "failed to put down monitor vdev %i: %d\n",
935 ar->monitor_vdev_id, ret);
937 reinit_completion(&ar->vdev_setup_done);
939 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
941 ath10k_warn(ar, "failed to to request monitor vdev %i stop: %d\n",
942 ar->monitor_vdev_id, ret);
944 ret = ath10k_vdev_setup_sync(ar);
946 ath10k_warn(ar, "failed to synchronize monitor vdev %i stop: %d\n",
947 ar->monitor_vdev_id, ret);
949 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n",
950 ar->monitor_vdev_id);
954 static int ath10k_monitor_vdev_create(struct ath10k *ar)
958 lockdep_assert_held(&ar->conf_mutex);
960 if (ar->free_vdev_map == 0) {
961 ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n");
965 bit = __ffs64(ar->free_vdev_map);
967 ar->monitor_vdev_id = bit;
969 ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
970 WMI_VDEV_TYPE_MONITOR,
973 ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n",
974 ar->monitor_vdev_id, ret);
978 ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id);
979 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
980 ar->monitor_vdev_id);
985 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
989 lockdep_assert_held(&ar->conf_mutex);
991 ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
993 ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n",
994 ar->monitor_vdev_id, ret);
998 ar->free_vdev_map |= 1LL << ar->monitor_vdev_id;
1000 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
1001 ar->monitor_vdev_id);
1005 static int ath10k_monitor_start(struct ath10k *ar)
1009 lockdep_assert_held(&ar->conf_mutex);
1011 ret = ath10k_monitor_vdev_create(ar);
1013 ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret);
1017 ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
1019 ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret);
1020 ath10k_monitor_vdev_delete(ar);
1024 ar->monitor_started = true;
1025 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n");
1030 static int ath10k_monitor_stop(struct ath10k *ar)
1034 lockdep_assert_held(&ar->conf_mutex);
1036 ret = ath10k_monitor_vdev_stop(ar);
1038 ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret);
1042 ret = ath10k_monitor_vdev_delete(ar);
1044 ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret);
1048 ar->monitor_started = false;
1049 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n");
1054 static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar)
1058 /* At least one chanctx is required to derive a channel to start
1061 num_ctx = ath10k_mac_num_chanctxs(ar);
1065 /* If there's already an existing special monitor interface then don't
1066 * bother creating another monitor vdev.
1068 if (ar->monitor_arvif)
1071 return ar->monitor ||
1072 ar->filter_flags & FIF_OTHER_BSS ||
1073 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1076 static bool ath10k_mac_monitor_vdev_is_allowed(struct ath10k *ar)
1080 num_ctx = ath10k_mac_num_chanctxs(ar);
1082 /* FIXME: Current interface combinations and cfg80211/mac80211 code
1083 * shouldn't allow this but make sure to prevent handling the following
1084 * case anyway since multi-channel DFS hasn't been tested at all.
1086 if (test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags) && num_ctx > 1)
1092 static int ath10k_monitor_recalc(struct ath10k *ar)
1098 lockdep_assert_held(&ar->conf_mutex);
1100 needed = ath10k_mac_monitor_vdev_is_needed(ar);
1101 allowed = ath10k_mac_monitor_vdev_is_allowed(ar);
1103 ath10k_dbg(ar, ATH10K_DBG_MAC,
1104 "mac monitor recalc started? %d needed? %d allowed? %d\n",
1105 ar->monitor_started, needed, allowed);
1107 if (WARN_ON(needed && !allowed)) {
1108 if (ar->monitor_started) {
1109 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopping disallowed monitor\n");
1111 ret = ath10k_monitor_stop(ar);
1113 ath10k_warn(ar, "failed to stop disallowed monitor: %d\n",
1121 if (needed == ar->monitor_started)
1125 return ath10k_monitor_start(ar);
1127 return ath10k_monitor_stop(ar);
1130 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
1132 struct ath10k *ar = arvif->ar;
1133 u32 vdev_param, rts_cts = 0;
1135 lockdep_assert_held(&ar->conf_mutex);
1137 vdev_param = ar->wmi.vdev_param->enable_rtscts;
1139 rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
1141 if (arvif->num_legacy_stations > 0)
1142 rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
1143 WMI_RTSCTS_PROFILE);
1145 rts_cts |= SM(WMI_RTSCTS_FOR_SECOND_RATESERIES,
1146 WMI_RTSCTS_PROFILE);
1148 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
1152 static int ath10k_start_cac(struct ath10k *ar)
1156 lockdep_assert_held(&ar->conf_mutex);
1158 set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1160 ret = ath10k_monitor_recalc(ar);
1162 ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret);
1163 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1167 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
1168 ar->monitor_vdev_id);
1173 static int ath10k_stop_cac(struct ath10k *ar)
1175 lockdep_assert_held(&ar->conf_mutex);
1177 /* CAC is not running - do nothing */
1178 if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
1181 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1182 ath10k_monitor_stop(ar);
1184 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n");
1189 static void ath10k_mac_has_radar_iter(struct ieee80211_hw *hw,
1190 struct ieee80211_chanctx_conf *conf,
1195 if (!*ret && conf->radar_enabled)
1199 static bool ath10k_mac_has_radar_enabled(struct ath10k *ar)
1201 bool has_radar = false;
1203 ieee80211_iter_chan_contexts_atomic(ar->hw,
1204 ath10k_mac_has_radar_iter,
1210 static void ath10k_recalc_radar_detection(struct ath10k *ar)
1214 lockdep_assert_held(&ar->conf_mutex);
1216 ath10k_stop_cac(ar);
1218 if (!ath10k_mac_has_radar_enabled(ar))
1221 if (ar->num_started_vdevs > 0)
1224 ret = ath10k_start_cac(ar);
1227 * Not possible to start CAC on current channel so starting
1228 * radiation is not allowed, make this channel DFS_UNAVAILABLE
1229 * by indicating that radar was detected.
1231 ath10k_warn(ar, "failed to start CAC: %d\n", ret);
1232 ieee80211_radar_detected(ar->hw);
1236 static int ath10k_vdev_stop(struct ath10k_vif *arvif)
1238 struct ath10k *ar = arvif->ar;
1241 lockdep_assert_held(&ar->conf_mutex);
1243 reinit_completion(&ar->vdev_setup_done);
1245 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
1247 ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n",
1248 arvif->vdev_id, ret);
1252 ret = ath10k_vdev_setup_sync(ar);
1254 ath10k_warn(ar, "failed to syncronise setup for vdev %i: %d\n",
1255 arvif->vdev_id, ret);
1259 WARN_ON(ar->num_started_vdevs == 0);
1261 if (ar->num_started_vdevs != 0) {
1262 ar->num_started_vdevs--;
1263 ath10k_recalc_radar_detection(ar);
1269 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif,
1270 const struct cfg80211_chan_def *chandef,
1273 struct ath10k *ar = arvif->ar;
1274 struct wmi_vdev_start_request_arg arg = {};
1277 lockdep_assert_held(&ar->conf_mutex);
1279 reinit_completion(&ar->vdev_setup_done);
1281 arg.vdev_id = arvif->vdev_id;
1282 arg.dtim_period = arvif->dtim_period;
1283 arg.bcn_intval = arvif->beacon_interval;
1285 arg.channel.freq = chandef->chan->center_freq;
1286 arg.channel.band_center_freq1 = chandef->center_freq1;
1287 arg.channel.mode = chan_to_phymode(chandef);
1289 arg.channel.min_power = 0;
1290 arg.channel.max_power = chandef->chan->max_power * 2;
1291 arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
1292 arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
1294 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
1295 arg.ssid = arvif->u.ap.ssid;
1296 arg.ssid_len = arvif->u.ap.ssid_len;
1297 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
1299 /* For now allow DFS for AP mode */
1300 arg.channel.chan_radar =
1301 !!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
1302 } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
1303 arg.ssid = arvif->vif->bss_conf.ssid;
1304 arg.ssid_len = arvif->vif->bss_conf.ssid_len;
1307 ath10k_dbg(ar, ATH10K_DBG_MAC,
1308 "mac vdev %d start center_freq %d phymode %s\n",
1309 arg.vdev_id, arg.channel.freq,
1310 ath10k_wmi_phymode_str(arg.channel.mode));
1313 ret = ath10k_wmi_vdev_restart(ar, &arg);
1315 ret = ath10k_wmi_vdev_start(ar, &arg);
1318 ath10k_warn(ar, "failed to start WMI vdev %i: %d\n",
1323 ret = ath10k_vdev_setup_sync(ar);
1326 "failed to synchronize setup for vdev %i restart %d: %d\n",
1327 arg.vdev_id, restart, ret);
1331 ar->num_started_vdevs++;
1332 ath10k_recalc_radar_detection(ar);
1337 static int ath10k_vdev_start(struct ath10k_vif *arvif,
1338 const struct cfg80211_chan_def *def)
1340 return ath10k_vdev_start_restart(arvif, def, false);
1343 static int ath10k_vdev_restart(struct ath10k_vif *arvif,
1344 const struct cfg80211_chan_def *def)
1346 return ath10k_vdev_start_restart(arvif, def, true);
1349 static int ath10k_mac_setup_bcn_p2p_ie(struct ath10k_vif *arvif,
1350 struct sk_buff *bcn)
1352 struct ath10k *ar = arvif->ar;
1353 struct ieee80211_mgmt *mgmt;
1357 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1360 if (arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO)
1363 mgmt = (void *)bcn->data;
1364 p2p_ie = cfg80211_find_vendor_ie(WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P,
1365 mgmt->u.beacon.variable,
1366 bcn->len - (mgmt->u.beacon.variable -
1371 ret = ath10k_wmi_p2p_go_bcn_ie(ar, arvif->vdev_id, p2p_ie);
1373 ath10k_warn(ar, "failed to submit p2p go bcn ie for vdev %i: %d\n",
1374 arvif->vdev_id, ret);
1381 static int ath10k_mac_remove_vendor_ie(struct sk_buff *skb, unsigned int oui,
1382 u8 oui_type, size_t ie_offset)
1389 if (WARN_ON(skb->len < ie_offset))
1392 ie = (u8 *)cfg80211_find_vendor_ie(oui, oui_type,
1393 skb->data + ie_offset,
1394 skb->len - ie_offset);
1399 end = skb->data + skb->len;
1402 if (WARN_ON(next > end))
1405 memmove(ie, next, end - next);
1406 skb_trim(skb, skb->len - len);
1411 static int ath10k_mac_setup_bcn_tmpl(struct ath10k_vif *arvif)
1413 struct ath10k *ar = arvif->ar;
1414 struct ieee80211_hw *hw = ar->hw;
1415 struct ieee80211_vif *vif = arvif->vif;
1416 struct ieee80211_mutable_offsets offs = {};
1417 struct sk_buff *bcn;
1420 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1423 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
1424 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
1427 bcn = ieee80211_beacon_get_template(hw, vif, &offs);
1429 ath10k_warn(ar, "failed to get beacon template from mac80211\n");
1433 ret = ath10k_mac_setup_bcn_p2p_ie(arvif, bcn);
1435 ath10k_warn(ar, "failed to setup p2p go bcn ie: %d\n", ret);
1440 /* P2P IE is inserted by firmware automatically (as configured above)
1441 * so remove it from the base beacon template to avoid duplicate P2P
1442 * IEs in beacon frames.
1444 ath10k_mac_remove_vendor_ie(bcn, WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P,
1445 offsetof(struct ieee80211_mgmt,
1446 u.beacon.variable));
1448 ret = ath10k_wmi_bcn_tmpl(ar, arvif->vdev_id, offs.tim_offset, bcn, 0,
1453 ath10k_warn(ar, "failed to submit beacon template command: %d\n",
1461 static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif)
1463 struct ath10k *ar = arvif->ar;
1464 struct ieee80211_hw *hw = ar->hw;
1465 struct ieee80211_vif *vif = arvif->vif;
1466 struct sk_buff *prb;
1469 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1472 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1475 prb = ieee80211_proberesp_get(hw, vif);
1477 ath10k_warn(ar, "failed to get probe resp template from mac80211\n");
1481 ret = ath10k_wmi_prb_tmpl(ar, arvif->vdev_id, prb);
1485 ath10k_warn(ar, "failed to submit probe resp template command: %d\n",
1493 static int ath10k_mac_vif_fix_hidden_ssid(struct ath10k_vif *arvif)
1495 struct ath10k *ar = arvif->ar;
1496 struct cfg80211_chan_def def;
1499 /* When originally vdev is started during assign_vif_chanctx() some
1500 * information is missing, notably SSID. Firmware revisions with beacon
1501 * offloading require the SSID to be provided during vdev (re)start to
1502 * handle hidden SSID properly.
1504 * Vdev restart must be done after vdev has been both started and
1505 * upped. Otherwise some firmware revisions (at least 10.2) fail to
1506 * deliver vdev restart response event causing timeouts during vdev
1507 * syncing in ath10k.
1509 * Note: The vdev down/up and template reinstallation could be skipped
1510 * since only wmi-tlv firmware are known to have beacon offload and
1511 * wmi-tlv doesn't seem to misbehave like 10.2 wrt vdev restart
1512 * response delivery. It's probably more robust to keep it as is.
1514 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1517 if (WARN_ON(!arvif->is_started))
1520 if (WARN_ON(!arvif->is_up))
1523 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
1526 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1528 ath10k_warn(ar, "failed to bring down ap vdev %i: %d\n",
1529 arvif->vdev_id, ret);
1533 /* Vdev down reset beacon & presp templates. Reinstall them. Otherwise
1534 * firmware will crash upon vdev up.
1537 ret = ath10k_mac_setup_bcn_tmpl(arvif);
1539 ath10k_warn(ar, "failed to update beacon template: %d\n", ret);
1543 ret = ath10k_mac_setup_prb_tmpl(arvif);
1545 ath10k_warn(ar, "failed to update presp template: %d\n", ret);
1549 ret = ath10k_vdev_restart(arvif, &def);
1551 ath10k_warn(ar, "failed to restart ap vdev %i: %d\n",
1552 arvif->vdev_id, ret);
1556 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1559 ath10k_warn(ar, "failed to bring up ap vdev %i: %d\n",
1560 arvif->vdev_id, ret);
1567 static void ath10k_control_beaconing(struct ath10k_vif *arvif,
1568 struct ieee80211_bss_conf *info)
1570 struct ath10k *ar = arvif->ar;
1573 lockdep_assert_held(&arvif->ar->conf_mutex);
1575 if (!info->enable_beacon) {
1576 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1578 ath10k_warn(ar, "failed to down vdev_id %i: %d\n",
1579 arvif->vdev_id, ret);
1581 arvif->is_up = false;
1583 spin_lock_bh(&arvif->ar->data_lock);
1584 ath10k_mac_vif_beacon_free(arvif);
1585 spin_unlock_bh(&arvif->ar->data_lock);
1590 arvif->tx_seq_no = 0x1000;
1593 ether_addr_copy(arvif->bssid, info->bssid);
1595 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1598 ath10k_warn(ar, "failed to bring up vdev %d: %i\n",
1599 arvif->vdev_id, ret);
1603 arvif->is_up = true;
1605 ret = ath10k_mac_vif_fix_hidden_ssid(arvif);
1607 ath10k_warn(ar, "failed to fix hidden ssid for vdev %i, expect trouble: %d\n",
1608 arvif->vdev_id, ret);
1612 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
1615 static void ath10k_control_ibss(struct ath10k_vif *arvif,
1616 struct ieee80211_bss_conf *info,
1617 const u8 self_peer[ETH_ALEN])
1619 struct ath10k *ar = arvif->ar;
1623 lockdep_assert_held(&arvif->ar->conf_mutex);
1625 if (!info->ibss_joined) {
1626 if (is_zero_ether_addr(arvif->bssid))
1629 eth_zero_addr(arvif->bssid);
1634 vdev_param = arvif->ar->wmi.vdev_param->atim_window;
1635 ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param,
1636 ATH10K_DEFAULT_ATIM);
1638 ath10k_warn(ar, "failed to set IBSS ATIM for vdev %d: %d\n",
1639 arvif->vdev_id, ret);
1642 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif)
1644 struct ath10k *ar = arvif->ar;
1649 lockdep_assert_held(&arvif->ar->conf_mutex);
1651 if (arvif->u.sta.uapsd)
1652 value = WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER;
1654 value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS;
1656 param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD;
1657 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, value);
1659 ath10k_warn(ar, "failed to submit ps wake threshold %u on vdev %i: %d\n",
1660 value, arvif->vdev_id, ret);
1667 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif)
1669 struct ath10k *ar = arvif->ar;
1674 lockdep_assert_held(&arvif->ar->conf_mutex);
1676 if (arvif->u.sta.uapsd)
1677 value = WMI_STA_PS_PSPOLL_COUNT_UAPSD;
1679 value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX;
1681 param = WMI_STA_PS_PARAM_PSPOLL_COUNT;
1682 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
1685 ath10k_warn(ar, "failed to submit ps poll count %u on vdev %i: %d\n",
1686 value, arvif->vdev_id, ret);
1693 static int ath10k_mac_num_vifs_started(struct ath10k *ar)
1695 struct ath10k_vif *arvif;
1698 lockdep_assert_held(&ar->conf_mutex);
1700 list_for_each_entry(arvif, &ar->arvifs, list)
1701 if (arvif->is_started)
1707 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
1709 struct ath10k *ar = arvif->ar;
1710 struct ieee80211_vif *vif = arvif->vif;
1711 struct ieee80211_conf *conf = &ar->hw->conf;
1712 enum wmi_sta_powersave_param param;
1713 enum wmi_sta_ps_mode psmode;
1718 lockdep_assert_held(&arvif->ar->conf_mutex);
1720 if (arvif->vif->type != NL80211_IFTYPE_STATION)
1723 enable_ps = arvif->ps;
1725 if (enable_ps && ath10k_mac_num_vifs_started(ar) > 1 &&
1726 !test_bit(ATH10K_FW_FEATURE_MULTI_VIF_PS_SUPPORT,
1728 ath10k_warn(ar, "refusing to enable ps on vdev %i: not supported by fw\n",
1733 if (!arvif->is_started) {
1734 /* mac80211 can update vif powersave state while disconnected.
1735 * Firmware doesn't behave nicely and consumes more power than
1736 * necessary if PS is disabled on a non-started vdev. Hence
1737 * force-enable PS for non-running vdevs.
1739 psmode = WMI_STA_PS_MODE_ENABLED;
1740 } else if (enable_ps) {
1741 psmode = WMI_STA_PS_MODE_ENABLED;
1742 param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1744 ps_timeout = conf->dynamic_ps_timeout;
1745 if (ps_timeout == 0) {
1746 /* Firmware doesn't like 0 */
1747 ps_timeout = ieee80211_tu_to_usec(
1748 vif->bss_conf.beacon_int) / 1000;
1751 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1754 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
1755 arvif->vdev_id, ret);
1759 psmode = WMI_STA_PS_MODE_DISABLED;
1762 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1763 arvif->vdev_id, psmode ? "enable" : "disable");
1765 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1767 ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n",
1768 psmode, arvif->vdev_id, ret);
1775 static int ath10k_mac_vif_disable_keepalive(struct ath10k_vif *arvif)
1777 struct ath10k *ar = arvif->ar;
1778 struct wmi_sta_keepalive_arg arg = {};
1781 lockdep_assert_held(&arvif->ar->conf_mutex);
1783 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
1786 if (!test_bit(WMI_SERVICE_STA_KEEP_ALIVE, ar->wmi.svc_map))
1789 /* Some firmware revisions have a bug and ignore the `enabled` field.
1790 * Instead use the interval to disable the keepalive.
1792 arg.vdev_id = arvif->vdev_id;
1794 arg.method = WMI_STA_KEEPALIVE_METHOD_NULL_FRAME;
1795 arg.interval = WMI_STA_KEEPALIVE_INTERVAL_DISABLE;
1797 ret = ath10k_wmi_sta_keepalive(ar, &arg);
1799 ath10k_warn(ar, "failed to submit keepalive on vdev %i: %d\n",
1800 arvif->vdev_id, ret);
1807 static void ath10k_mac_vif_ap_csa_count_down(struct ath10k_vif *arvif)
1809 struct ath10k *ar = arvif->ar;
1810 struct ieee80211_vif *vif = arvif->vif;
1813 lockdep_assert_held(&arvif->ar->conf_mutex);
1815 if (WARN_ON(!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)))
1818 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1821 if (!vif->csa_active)
1827 if (!ieee80211_csa_is_complete(vif)) {
1828 ieee80211_csa_update_counter(vif);
1830 ret = ath10k_mac_setup_bcn_tmpl(arvif);
1832 ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
1835 ret = ath10k_mac_setup_prb_tmpl(arvif);
1837 ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
1840 ieee80211_csa_finish(vif);
1844 static void ath10k_mac_vif_ap_csa_work(struct work_struct *work)
1846 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1848 struct ath10k *ar = arvif->ar;
1850 mutex_lock(&ar->conf_mutex);
1851 ath10k_mac_vif_ap_csa_count_down(arvif);
1852 mutex_unlock(&ar->conf_mutex);
1855 static void ath10k_mac_handle_beacon_iter(void *data, u8 *mac,
1856 struct ieee80211_vif *vif)
1858 struct sk_buff *skb = data;
1859 struct ieee80211_mgmt *mgmt = (void *)skb->data;
1860 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1862 if (vif->type != NL80211_IFTYPE_STATION)
1865 if (!ether_addr_equal(mgmt->bssid, vif->bss_conf.bssid))
1868 cancel_delayed_work(&arvif->connection_loss_work);
1871 void ath10k_mac_handle_beacon(struct ath10k *ar, struct sk_buff *skb)
1873 ieee80211_iterate_active_interfaces_atomic(ar->hw,
1874 IEEE80211_IFACE_ITER_NORMAL,
1875 ath10k_mac_handle_beacon_iter,
1879 static void ath10k_mac_handle_beacon_miss_iter(void *data, u8 *mac,
1880 struct ieee80211_vif *vif)
1882 u32 *vdev_id = data;
1883 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1884 struct ath10k *ar = arvif->ar;
1885 struct ieee80211_hw *hw = ar->hw;
1887 if (arvif->vdev_id != *vdev_id)
1893 ieee80211_beacon_loss(vif);
1895 /* Firmware doesn't report beacon loss events repeatedly. If AP probe
1896 * (done by mac80211) succeeds but beacons do not resume then it
1897 * doesn't make sense to continue operation. Queue connection loss work
1898 * which can be cancelled when beacon is received.
1900 ieee80211_queue_delayed_work(hw, &arvif->connection_loss_work,
1901 ATH10K_CONNECTION_LOSS_HZ);
1904 void ath10k_mac_handle_beacon_miss(struct ath10k *ar, u32 vdev_id)
1906 ieee80211_iterate_active_interfaces_atomic(ar->hw,
1907 IEEE80211_IFACE_ITER_NORMAL,
1908 ath10k_mac_handle_beacon_miss_iter,
1912 static void ath10k_mac_vif_sta_connection_loss_work(struct work_struct *work)
1914 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1915 connection_loss_work.work);
1916 struct ieee80211_vif *vif = arvif->vif;
1921 ieee80211_connection_loss(vif);
1924 /**********************/
1925 /* Station management */
1926 /**********************/
1928 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar,
1929 struct ieee80211_vif *vif)
1931 /* Some firmware revisions have unstable STA powersave when listen
1932 * interval is set too high (e.g. 5). The symptoms are firmware doesn't
1933 * generate NullFunc frames properly even if buffered frames have been
1934 * indicated in Beacon TIM. Firmware would seldom wake up to pull
1935 * buffered frames. Often pinging the device from AP would simply fail.
1937 * As a workaround set it to 1.
1939 if (vif->type == NL80211_IFTYPE_STATION)
1942 return ar->hw->conf.listen_interval;
1945 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
1946 struct ieee80211_vif *vif,
1947 struct ieee80211_sta *sta,
1948 struct wmi_peer_assoc_complete_arg *arg)
1950 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1953 lockdep_assert_held(&ar->conf_mutex);
1955 if (vif->type == NL80211_IFTYPE_STATION)
1956 aid = vif->bss_conf.aid;
1960 ether_addr_copy(arg->addr, sta->addr);
1961 arg->vdev_id = arvif->vdev_id;
1962 arg->peer_aid = aid;
1963 arg->peer_flags |= WMI_PEER_AUTH;
1964 arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif);
1965 arg->peer_num_spatial_streams = 1;
1966 arg->peer_caps = vif->bss_conf.assoc_capability;
1969 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
1970 struct ieee80211_vif *vif,
1971 struct wmi_peer_assoc_complete_arg *arg)
1973 struct ieee80211_bss_conf *info = &vif->bss_conf;
1974 struct cfg80211_chan_def def;
1975 struct cfg80211_bss *bss;
1976 const u8 *rsnie = NULL;
1977 const u8 *wpaie = NULL;
1979 lockdep_assert_held(&ar->conf_mutex);
1981 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
1984 bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid, NULL, 0,
1985 IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY);
1987 const struct cfg80211_bss_ies *ies;
1990 rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
1992 ies = rcu_dereference(bss->ies);
1994 wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
1995 WLAN_OUI_TYPE_MICROSOFT_WPA,
1999 cfg80211_put_bss(ar->hw->wiphy, bss);
2002 /* FIXME: base on RSN IE/WPA IE is a correct idea? */
2003 if (rsnie || wpaie) {
2004 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
2005 arg->peer_flags |= WMI_PEER_NEED_PTK_4_WAY;
2009 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
2010 arg->peer_flags |= WMI_PEER_NEED_GTK_2_WAY;
2014 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
2015 struct ieee80211_vif *vif,
2016 struct ieee80211_sta *sta,
2017 struct wmi_peer_assoc_complete_arg *arg)
2019 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2020 struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
2021 struct cfg80211_chan_def def;
2022 const struct ieee80211_supported_band *sband;
2023 const struct ieee80211_rate *rates;
2024 enum ieee80211_band band;
2029 lockdep_assert_held(&ar->conf_mutex);
2031 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2034 band = def.chan->band;
2035 sband = ar->hw->wiphy->bands[band];
2036 ratemask = sta->supp_rates[band];
2037 ratemask &= arvif->bitrate_mask.control[band].legacy;
2038 rates = sband->bitrates;
2040 rateset->num_rates = 0;
2042 for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
2043 if (!(ratemask & 1))
2046 rate = ath10k_mac_bitrate_to_rate(rates->bitrate);
2047 rateset->rates[rateset->num_rates] = rate;
2048 rateset->num_rates++;
2053 ath10k_peer_assoc_h_ht_masked(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
2057 for (nss = 0; nss < IEEE80211_HT_MCS_MASK_LEN; nss++)
2058 if (ht_mcs_mask[nss])
2065 ath10k_peer_assoc_h_vht_masked(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
2069 for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++)
2070 if (vht_mcs_mask[nss])
2076 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
2077 struct ieee80211_vif *vif,
2078 struct ieee80211_sta *sta,
2079 struct wmi_peer_assoc_complete_arg *arg)
2081 const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
2082 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2083 struct cfg80211_chan_def def;
2084 enum ieee80211_band band;
2085 const u8 *ht_mcs_mask;
2086 const u16 *vht_mcs_mask;
2090 lockdep_assert_held(&ar->conf_mutex);
2092 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2095 if (!ht_cap->ht_supported)
2098 band = def.chan->band;
2099 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2100 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2102 if (ath10k_peer_assoc_h_ht_masked(ht_mcs_mask) &&
2103 ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
2106 arg->peer_flags |= WMI_PEER_HT;
2107 arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
2108 ht_cap->ampdu_factor)) - 1;
2110 arg->peer_mpdu_density =
2111 ath10k_parse_mpdudensity(ht_cap->ampdu_density);
2113 arg->peer_ht_caps = ht_cap->cap;
2114 arg->peer_rate_caps |= WMI_RC_HT_FLAG;
2116 if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
2117 arg->peer_flags |= WMI_PEER_LDPC;
2119 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
2120 arg->peer_flags |= WMI_PEER_40MHZ;
2121 arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
2124 if (arvif->bitrate_mask.control[band].gi != NL80211_TXRATE_FORCE_LGI) {
2125 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
2126 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
2128 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
2129 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
2132 if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
2133 arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
2134 arg->peer_flags |= WMI_PEER_STBC;
2137 if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
2138 stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
2139 stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
2140 stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
2141 arg->peer_rate_caps |= stbc;
2142 arg->peer_flags |= WMI_PEER_STBC;
2145 if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
2146 arg->peer_rate_caps |= WMI_RC_TS_FLAG;
2147 else if (ht_cap->mcs.rx_mask[1])
2148 arg->peer_rate_caps |= WMI_RC_DS_FLAG;
2150 for (i = 0, n = 0, max_nss = 0; i < IEEE80211_HT_MCS_MASK_LEN * 8; i++)
2151 if ((ht_cap->mcs.rx_mask[i / 8] & BIT(i % 8)) &&
2152 (ht_mcs_mask[i / 8] & BIT(i % 8))) {
2153 max_nss = (i / 8) + 1;
2154 arg->peer_ht_rates.rates[n++] = i;
2158 * This is a workaround for HT-enabled STAs which break the spec
2159 * and have no HT capabilities RX mask (no HT RX MCS map).
2161 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
2162 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
2164 * Firmware asserts if such situation occurs.
2167 arg->peer_ht_rates.num_rates = 8;
2168 for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
2169 arg->peer_ht_rates.rates[i] = i;
2171 arg->peer_ht_rates.num_rates = n;
2172 arg->peer_num_spatial_streams = max_nss;
2175 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
2177 arg->peer_ht_rates.num_rates,
2178 arg->peer_num_spatial_streams);
2181 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
2182 struct ath10k_vif *arvif,
2183 struct ieee80211_sta *sta)
2189 lockdep_assert_held(&ar->conf_mutex);
2191 if (sta->wme && sta->uapsd_queues) {
2192 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
2193 sta->uapsd_queues, sta->max_sp);
2195 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
2196 uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
2197 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
2198 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
2199 uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
2200 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
2201 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
2202 uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
2203 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
2204 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
2205 uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
2206 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
2208 if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
2209 max_sp = sta->max_sp;
2211 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
2213 WMI_AP_PS_PEER_PARAM_UAPSD,
2216 ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n",
2217 arvif->vdev_id, ret);
2221 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
2223 WMI_AP_PS_PEER_PARAM_MAX_SP,
2226 ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n",
2227 arvif->vdev_id, ret);
2231 /* TODO setup this based on STA listen interval and
2232 beacon interval. Currently we don't know
2233 sta->listen_interval - mac80211 patch required.
2234 Currently use 10 seconds */
2235 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
2236 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME,
2239 ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n",
2240 arvif->vdev_id, ret);
2249 ath10k_peer_assoc_h_vht_limit(u16 tx_mcs_set,
2250 const u16 vht_mcs_limit[NL80211_VHT_NSS_MAX])
2257 for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++) {
2258 mcs_map = ath10k_mac_get_max_vht_mcs_map(tx_mcs_set, nss) &
2262 idx_limit = fls(mcs_map) - 1;
2266 switch (idx_limit) {
2267 case 0: /* fall through */
2268 case 1: /* fall through */
2269 case 2: /* fall through */
2270 case 3: /* fall through */
2271 case 4: /* fall through */
2272 case 5: /* fall through */
2273 case 6: /* fall through */
2275 /* see ath10k_mac_can_set_bitrate_mask() */
2279 mcs = IEEE80211_VHT_MCS_NOT_SUPPORTED;
2282 mcs = IEEE80211_VHT_MCS_SUPPORT_0_7;
2285 mcs = IEEE80211_VHT_MCS_SUPPORT_0_8;
2288 mcs = IEEE80211_VHT_MCS_SUPPORT_0_9;
2292 tx_mcs_set &= ~(0x3 << (nss * 2));
2293 tx_mcs_set |= mcs << (nss * 2);
2299 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
2300 struct ieee80211_vif *vif,
2301 struct ieee80211_sta *sta,
2302 struct wmi_peer_assoc_complete_arg *arg)
2304 const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
2305 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2306 struct cfg80211_chan_def def;
2307 enum ieee80211_band band;
2308 const u16 *vht_mcs_mask;
2311 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2314 if (!vht_cap->vht_supported)
2317 band = def.chan->band;
2318 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2320 if (ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
2323 arg->peer_flags |= WMI_PEER_VHT;
2325 if (def.chan->band == IEEE80211_BAND_2GHZ)
2326 arg->peer_flags |= WMI_PEER_VHT_2G;
2328 arg->peer_vht_caps = vht_cap->cap;
2330 ampdu_factor = (vht_cap->cap &
2331 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
2332 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
2334 /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
2335 * zero in VHT IE. Using it would result in degraded throughput.
2336 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
2337 * it if VHT max_mpdu is smaller. */
2338 arg->peer_max_mpdu = max(arg->peer_max_mpdu,
2339 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
2340 ampdu_factor)) - 1);
2342 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
2343 arg->peer_flags |= WMI_PEER_80MHZ;
2345 arg->peer_vht_rates.rx_max_rate =
2346 __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
2347 arg->peer_vht_rates.rx_mcs_set =
2348 __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
2349 arg->peer_vht_rates.tx_max_rate =
2350 __le16_to_cpu(vht_cap->vht_mcs.tx_highest);
2351 arg->peer_vht_rates.tx_mcs_set = ath10k_peer_assoc_h_vht_limit(
2352 __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map), vht_mcs_mask);
2354 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
2355 sta->addr, arg->peer_max_mpdu, arg->peer_flags);
2358 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
2359 struct ieee80211_vif *vif,
2360 struct ieee80211_sta *sta,
2361 struct wmi_peer_assoc_complete_arg *arg)
2363 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2365 switch (arvif->vdev_type) {
2366 case WMI_VDEV_TYPE_AP:
2368 arg->peer_flags |= WMI_PEER_QOS;
2370 if (sta->wme && sta->uapsd_queues) {
2371 arg->peer_flags |= WMI_PEER_APSD;
2372 arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
2375 case WMI_VDEV_TYPE_STA:
2376 if (vif->bss_conf.qos)
2377 arg->peer_flags |= WMI_PEER_QOS;
2379 case WMI_VDEV_TYPE_IBSS:
2381 arg->peer_flags |= WMI_PEER_QOS;
2387 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM qos %d\n",
2388 sta->addr, !!(arg->peer_flags & WMI_PEER_QOS));
2391 static bool ath10k_mac_sta_has_ofdm_only(struct ieee80211_sta *sta)
2393 return sta->supp_rates[IEEE80211_BAND_2GHZ] >>
2394 ATH10K_MAC_FIRST_OFDM_RATE_IDX;
2397 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
2398 struct ieee80211_vif *vif,
2399 struct ieee80211_sta *sta,
2400 struct wmi_peer_assoc_complete_arg *arg)
2402 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2403 struct cfg80211_chan_def def;
2404 enum ieee80211_band band;
2405 const u8 *ht_mcs_mask;
2406 const u16 *vht_mcs_mask;
2407 enum wmi_phy_mode phymode = MODE_UNKNOWN;
2409 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2412 band = def.chan->band;
2413 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2414 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2417 case IEEE80211_BAND_2GHZ:
2418 if (sta->vht_cap.vht_supported &&
2419 !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
2420 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2421 phymode = MODE_11AC_VHT40;
2423 phymode = MODE_11AC_VHT20;
2424 } else if (sta->ht_cap.ht_supported &&
2425 !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
2426 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2427 phymode = MODE_11NG_HT40;
2429 phymode = MODE_11NG_HT20;
2430 } else if (ath10k_mac_sta_has_ofdm_only(sta)) {
2437 case IEEE80211_BAND_5GHZ:
2441 if (sta->vht_cap.vht_supported &&
2442 !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
2443 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
2444 phymode = MODE_11AC_VHT80;
2445 else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2446 phymode = MODE_11AC_VHT40;
2447 else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
2448 phymode = MODE_11AC_VHT20;
2449 } else if (sta->ht_cap.ht_supported &&
2450 !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
2451 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40)
2452 phymode = MODE_11NA_HT40;
2454 phymode = MODE_11NA_HT20;
2464 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
2465 sta->addr, ath10k_wmi_phymode_str(phymode));
2467 arg->peer_phymode = phymode;
2468 WARN_ON(phymode == MODE_UNKNOWN);
2471 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
2472 struct ieee80211_vif *vif,
2473 struct ieee80211_sta *sta,
2474 struct wmi_peer_assoc_complete_arg *arg)
2476 lockdep_assert_held(&ar->conf_mutex);
2478 memset(arg, 0, sizeof(*arg));
2480 ath10k_peer_assoc_h_basic(ar, vif, sta, arg);
2481 ath10k_peer_assoc_h_crypto(ar, vif, arg);
2482 ath10k_peer_assoc_h_rates(ar, vif, sta, arg);
2483 ath10k_peer_assoc_h_ht(ar, vif, sta, arg);
2484 ath10k_peer_assoc_h_vht(ar, vif, sta, arg);
2485 ath10k_peer_assoc_h_qos(ar, vif, sta, arg);
2486 ath10k_peer_assoc_h_phymode(ar, vif, sta, arg);
2491 static const u32 ath10k_smps_map[] = {
2492 [WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
2493 [WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
2494 [WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
2495 [WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
2498 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
2500 const struct ieee80211_sta_ht_cap *ht_cap)
2504 if (!ht_cap->ht_supported)
2507 smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
2508 smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
2510 if (smps >= ARRAY_SIZE(ath10k_smps_map))
2513 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
2514 WMI_PEER_SMPS_STATE,
2515 ath10k_smps_map[smps]);
2518 static int ath10k_mac_vif_recalc_txbf(struct ath10k *ar,
2519 struct ieee80211_vif *vif,
2520 struct ieee80211_sta_vht_cap vht_cap)
2522 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2527 if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_AFTER_ASSOC)
2530 if (!(ar->vht_cap_info &
2531 (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
2532 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE |
2533 IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
2534 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)))
2537 param = ar->wmi.vdev_param->txbf;
2540 if (WARN_ON(param == WMI_VDEV_PARAM_UNSUPPORTED))
2543 /* The following logic is correct. If a remote STA advertises support
2544 * for being a beamformer then we should enable us being a beamformee.
2547 if (ar->vht_cap_info &
2548 (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
2549 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
2550 if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
2551 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
2553 if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
2554 value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFEE;
2557 if (ar->vht_cap_info &
2558 (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
2559 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
2560 if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
2561 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
2563 if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
2564 value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFER;
2567 if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFEE)
2568 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
2570 if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFER)
2571 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
2573 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, value);
2575 ath10k_warn(ar, "failed to submit vdev param txbf 0x%x: %d\n",
2583 /* can be called only in mac80211 callbacks due to `key_count` usage */
2584 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
2585 struct ieee80211_vif *vif,
2586 struct ieee80211_bss_conf *bss_conf)
2588 struct ath10k *ar = hw->priv;
2589 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2590 struct ieee80211_sta_ht_cap ht_cap;
2591 struct ieee80211_sta_vht_cap vht_cap;
2592 struct wmi_peer_assoc_complete_arg peer_arg;
2593 struct ieee80211_sta *ap_sta;
2596 lockdep_assert_held(&ar->conf_mutex);
2598 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n",
2599 arvif->vdev_id, arvif->bssid, arvif->aid);
2603 ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
2605 ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n",
2606 bss_conf->bssid, arvif->vdev_id);
2611 /* ap_sta must be accessed only within rcu section which must be left
2612 * before calling ath10k_setup_peer_smps() which might sleep. */
2613 ht_cap = ap_sta->ht_cap;
2614 vht_cap = ap_sta->vht_cap;
2616 ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg);
2618 ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n",
2619 bss_conf->bssid, arvif->vdev_id, ret);
2626 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
2628 ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n",
2629 bss_conf->bssid, arvif->vdev_id, ret);
2633 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
2635 ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n",
2636 arvif->vdev_id, ret);
2640 ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap);
2642 ath10k_warn(ar, "failed to recalc txbf for vdev %i on bss %pM: %d\n",
2643 arvif->vdev_id, bss_conf->bssid, ret);
2647 ath10k_dbg(ar, ATH10K_DBG_MAC,
2648 "mac vdev %d up (associated) bssid %pM aid %d\n",
2649 arvif->vdev_id, bss_conf->bssid, bss_conf->aid);
2651 WARN_ON(arvif->is_up);
2653 arvif->aid = bss_conf->aid;
2654 ether_addr_copy(arvif->bssid, bss_conf->bssid);
2656 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
2658 ath10k_warn(ar, "failed to set vdev %d up: %d\n",
2659 arvif->vdev_id, ret);
2663 arvif->is_up = true;
2665 /* Workaround: Some firmware revisions (tested with qca6174
2666 * WLAN.RM.2.0-00073) have buggy powersave state machine and must be
2667 * poked with peer param command.
2669 ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid,
2670 WMI_PEER_DUMMY_VAR, 1);
2672 ath10k_warn(ar, "failed to poke peer %pM param for ps workaround on vdev %i: %d\n",
2673 arvif->bssid, arvif->vdev_id, ret);
2678 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
2679 struct ieee80211_vif *vif)
2681 struct ath10k *ar = hw->priv;
2682 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2683 struct ieee80211_sta_vht_cap vht_cap = {};
2686 lockdep_assert_held(&ar->conf_mutex);
2688 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n",
2689 arvif->vdev_id, arvif->bssid);
2691 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
2693 ath10k_warn(ar, "faield to down vdev %i: %d\n",
2694 arvif->vdev_id, ret);
2696 arvif->def_wep_key_idx = -1;
2698 ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap);
2700 ath10k_warn(ar, "failed to recalc txbf for vdev %i: %d\n",
2701 arvif->vdev_id, ret);
2705 arvif->is_up = false;
2707 cancel_delayed_work_sync(&arvif->connection_loss_work);
2710 static int ath10k_station_assoc(struct ath10k *ar,
2711 struct ieee80211_vif *vif,
2712 struct ieee80211_sta *sta,
2715 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2716 struct wmi_peer_assoc_complete_arg peer_arg;
2719 lockdep_assert_held(&ar->conf_mutex);
2721 ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg);
2723 ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
2724 sta->addr, arvif->vdev_id, ret);
2728 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
2730 ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n",
2731 sta->addr, arvif->vdev_id, ret);
2735 /* Re-assoc is run only to update supported rates for given station. It
2736 * doesn't make much sense to reconfigure the peer completely.
2739 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
2742 ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
2743 arvif->vdev_id, ret);
2747 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
2749 ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
2750 sta->addr, arvif->vdev_id, ret);
2755 arvif->num_legacy_stations++;
2756 ret = ath10k_recalc_rtscts_prot(arvif);
2758 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
2759 arvif->vdev_id, ret);
2764 /* Plumb cached keys only for static WEP */
2765 if (arvif->def_wep_key_idx != -1) {
2766 ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
2768 ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
2769 arvif->vdev_id, ret);
2778 static int ath10k_station_disassoc(struct ath10k *ar,
2779 struct ieee80211_vif *vif,
2780 struct ieee80211_sta *sta)
2782 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2785 lockdep_assert_held(&ar->conf_mutex);
2788 arvif->num_legacy_stations--;
2789 ret = ath10k_recalc_rtscts_prot(arvif);
2791 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
2792 arvif->vdev_id, ret);
2797 ret = ath10k_clear_peer_keys(arvif, sta->addr);
2799 ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n",
2800 arvif->vdev_id, ret);
2811 static int ath10k_update_channel_list(struct ath10k *ar)
2813 struct ieee80211_hw *hw = ar->hw;
2814 struct ieee80211_supported_band **bands;
2815 enum ieee80211_band band;
2816 struct ieee80211_channel *channel;
2817 struct wmi_scan_chan_list_arg arg = {0};
2818 struct wmi_channel_arg *ch;
2824 lockdep_assert_held(&ar->conf_mutex);
2826 bands = hw->wiphy->bands;
2827 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
2831 for (i = 0; i < bands[band]->n_channels; i++) {
2832 if (bands[band]->channels[i].flags &
2833 IEEE80211_CHAN_DISABLED)
2840 len = sizeof(struct wmi_channel_arg) * arg.n_channels;
2841 arg.channels = kzalloc(len, GFP_KERNEL);
2846 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
2850 for (i = 0; i < bands[band]->n_channels; i++) {
2851 channel = &bands[band]->channels[i];
2853 if (channel->flags & IEEE80211_CHAN_DISABLED)
2856 ch->allow_ht = true;
2858 /* FIXME: when should we really allow VHT? */
2859 ch->allow_vht = true;
2862 !(channel->flags & IEEE80211_CHAN_NO_IR);
2865 !(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
2868 !!(channel->flags & IEEE80211_CHAN_RADAR);
2870 passive = channel->flags & IEEE80211_CHAN_NO_IR;
2871 ch->passive = passive;
2873 ch->freq = channel->center_freq;
2874 ch->band_center_freq1 = channel->center_freq;
2876 ch->max_power = channel->max_power * 2;
2877 ch->max_reg_power = channel->max_reg_power * 2;
2878 ch->max_antenna_gain = channel->max_antenna_gain * 2;
2879 ch->reg_class_id = 0; /* FIXME */
2881 /* FIXME: why use only legacy modes, why not any
2882 * HT/VHT modes? Would that even make any
2884 if (channel->band == IEEE80211_BAND_2GHZ)
2885 ch->mode = MODE_11G;
2887 ch->mode = MODE_11A;
2889 if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
2892 ath10k_dbg(ar, ATH10K_DBG_WMI,
2893 "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
2894 ch - arg.channels, arg.n_channels,
2895 ch->freq, ch->max_power, ch->max_reg_power,
2896 ch->max_antenna_gain, ch->mode);
2902 ret = ath10k_wmi_scan_chan_list(ar, &arg);
2903 kfree(arg.channels);
2908 static enum wmi_dfs_region
2909 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
2911 switch (dfs_region) {
2912 case NL80211_DFS_UNSET:
2913 return WMI_UNINIT_DFS_DOMAIN;
2914 case NL80211_DFS_FCC:
2915 return WMI_FCC_DFS_DOMAIN;
2916 case NL80211_DFS_ETSI:
2917 return WMI_ETSI_DFS_DOMAIN;
2918 case NL80211_DFS_JP:
2919 return WMI_MKK4_DFS_DOMAIN;
2921 return WMI_UNINIT_DFS_DOMAIN;
2924 static void ath10k_regd_update(struct ath10k *ar)
2926 struct reg_dmn_pair_mapping *regpair;
2928 enum wmi_dfs_region wmi_dfs_reg;
2929 enum nl80211_dfs_regions nl_dfs_reg;
2931 lockdep_assert_held(&ar->conf_mutex);
2933 ret = ath10k_update_channel_list(ar);
2935 ath10k_warn(ar, "failed to update channel list: %d\n", ret);
2937 regpair = ar->ath_common.regulatory.regpair;
2939 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
2940 nl_dfs_reg = ar->dfs_detector->region;
2941 wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
2943 wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
2946 /* Target allows setting up per-band regdomain but ath_common provides
2947 * a combined one only */
2948 ret = ath10k_wmi_pdev_set_regdomain(ar,
2949 regpair->reg_domain,
2950 regpair->reg_domain, /* 2ghz */
2951 regpair->reg_domain, /* 5ghz */
2952 regpair->reg_2ghz_ctl,
2953 regpair->reg_5ghz_ctl,
2956 ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret);
2959 static void ath10k_reg_notifier(struct wiphy *wiphy,
2960 struct regulatory_request *request)
2962 struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
2963 struct ath10k *ar = hw->priv;
2966 ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
2968 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
2969 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
2970 request->dfs_region);
2971 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
2972 request->dfs_region);
2974 ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n",
2975 request->dfs_region);
2978 mutex_lock(&ar->conf_mutex);
2979 if (ar->state == ATH10K_STATE_ON)
2980 ath10k_regd_update(ar);
2981 mutex_unlock(&ar->conf_mutex);
2988 void ath10k_mac_tx_lock(struct ath10k *ar, int reason)
2990 lockdep_assert_held(&ar->htt.tx_lock);
2992 WARN_ON(reason >= ATH10K_TX_PAUSE_MAX);
2993 ar->tx_paused |= BIT(reason);
2994 ieee80211_stop_queues(ar->hw);
2997 static void ath10k_mac_tx_unlock_iter(void *data, u8 *mac,
2998 struct ieee80211_vif *vif)
3000 struct ath10k *ar = data;
3001 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3003 if (arvif->tx_paused)
3006 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
3009 void ath10k_mac_tx_unlock(struct ath10k *ar, int reason)
3011 lockdep_assert_held(&ar->htt.tx_lock);
3013 WARN_ON(reason >= ATH10K_TX_PAUSE_MAX);
3014 ar->tx_paused &= ~BIT(reason);
3019 ieee80211_iterate_active_interfaces_atomic(ar->hw,
3020 IEEE80211_IFACE_ITER_RESUME_ALL,
3021 ath10k_mac_tx_unlock_iter,
3024 ieee80211_wake_queue(ar->hw, ar->hw->offchannel_tx_hw_queue);
3027 void ath10k_mac_vif_tx_lock(struct ath10k_vif *arvif, int reason)
3029 struct ath10k *ar = arvif->ar;
3031 lockdep_assert_held(&ar->htt.tx_lock);
3033 WARN_ON(reason >= BITS_PER_LONG);
3034 arvif->tx_paused |= BIT(reason);
3035 ieee80211_stop_queue(ar->hw, arvif->vdev_id);
3038 void ath10k_mac_vif_tx_unlock(struct ath10k_vif *arvif, int reason)
3040 struct ath10k *ar = arvif->ar;
3042 lockdep_assert_held(&ar->htt.tx_lock);
3044 WARN_ON(reason >= BITS_PER_LONG);
3045 arvif->tx_paused &= ~BIT(reason);
3050 if (arvif->tx_paused)
3053 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
3056 static void ath10k_mac_vif_handle_tx_pause(struct ath10k_vif *arvif,
3057 enum wmi_tlv_tx_pause_id pause_id,
3058 enum wmi_tlv_tx_pause_action action)
3060 struct ath10k *ar = arvif->ar;
3062 lockdep_assert_held(&ar->htt.tx_lock);
3065 case WMI_TLV_TX_PAUSE_ACTION_STOP:
3066 ath10k_mac_vif_tx_lock(arvif, pause_id);
3068 case WMI_TLV_TX_PAUSE_ACTION_WAKE:
3069 ath10k_mac_vif_tx_unlock(arvif, pause_id);
3072 ath10k_warn(ar, "received unknown tx pause action %d on vdev %i, ignoring\n",
3073 action, arvif->vdev_id);
3078 struct ath10k_mac_tx_pause {
3080 enum wmi_tlv_tx_pause_id pause_id;
3081 enum wmi_tlv_tx_pause_action action;
3084 static void ath10k_mac_handle_tx_pause_iter(void *data, u8 *mac,
3085 struct ieee80211_vif *vif)
3087 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3088 struct ath10k_mac_tx_pause *arg = data;
3090 if (arvif->vdev_id != arg->vdev_id)
3093 ath10k_mac_vif_handle_tx_pause(arvif, arg->pause_id, arg->action);
3096 void ath10k_mac_handle_tx_pause_vdev(struct ath10k *ar, u32 vdev_id,
3097 enum wmi_tlv_tx_pause_id pause_id,
3098 enum wmi_tlv_tx_pause_action action)
3100 struct ath10k_mac_tx_pause arg = {
3102 .pause_id = pause_id,
3106 spin_lock_bh(&ar->htt.tx_lock);
3107 ieee80211_iterate_active_interfaces_atomic(ar->hw,
3108 IEEE80211_IFACE_ITER_RESUME_ALL,
3109 ath10k_mac_handle_tx_pause_iter,
3111 spin_unlock_bh(&ar->htt.tx_lock);
3114 static u8 ath10k_tx_h_get_tid(struct ieee80211_hdr *hdr)
3116 if (ieee80211_is_mgmt(hdr->frame_control))
3117 return HTT_DATA_TX_EXT_TID_MGMT;
3119 if (!ieee80211_is_data_qos(hdr->frame_control))
3120 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
3122 if (!is_unicast_ether_addr(ieee80211_get_DA(hdr)))
3123 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
3125 return ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
3128 static u8 ath10k_tx_h_get_vdev_id(struct ath10k *ar, struct ieee80211_vif *vif)
3131 return ath10k_vif_to_arvif(vif)->vdev_id;
3133 if (ar->monitor_started)
3134 return ar->monitor_vdev_id;
3136 ath10k_warn(ar, "failed to resolve vdev id\n");
3140 static enum ath10k_hw_txrx_mode
3141 ath10k_tx_h_get_txmode(struct ath10k *ar, struct ieee80211_vif *vif,
3142 struct ieee80211_sta *sta, struct sk_buff *skb)
3144 const struct ieee80211_hdr *hdr = (void *)skb->data;
3145 __le16 fc = hdr->frame_control;
3147 if (!vif || vif->type == NL80211_IFTYPE_MONITOR)
3148 return ATH10K_HW_TXRX_RAW;
3150 if (ieee80211_is_mgmt(fc))
3151 return ATH10K_HW_TXRX_MGMT;
3155 * NullFunc frames are mostly used to ping if a client or AP are still
3156 * reachable and responsive. This implies tx status reports must be
3157 * accurate - otherwise either mac80211 or userspace (e.g. hostapd) can
3158 * come to a conclusion that the other end disappeared and tear down
3159 * BSS connection or it can never disconnect from BSS/client (which is
3162 * Firmware with HTT older than 3.0 delivers incorrect tx status for
3163 * NullFunc frames to driver. However there's a HTT Mgmt Tx command
3164 * which seems to deliver correct tx reports for NullFunc frames. The
3165 * downside of using it is it ignores client powersave state so it can
3166 * end up disconnecting sleeping clients in AP mode. It should fix STA
3167 * mode though because AP don't sleep.
3169 if (ar->htt.target_version_major < 3 &&
3170 (ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)) &&
3171 !test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX, ar->fw_features))
3172 return ATH10K_HW_TXRX_MGMT;
3176 * Some wmi-tlv firmwares for qca6174 have broken Tx key selection for
3177 * NativeWifi txmode - it selects AP key instead of peer key. It seems
3178 * to work with Ethernet txmode so use it.
3180 * FIXME: Check if raw mode works with TDLS.
3182 if (ieee80211_is_data_present(fc) && sta && sta->tdls)
3183 return ATH10K_HW_TXRX_ETHERNET;
3185 if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
3186 return ATH10K_HW_TXRX_RAW;
3188 return ATH10K_HW_TXRX_NATIVE_WIFI;
3191 static bool ath10k_tx_h_use_hwcrypto(struct ieee80211_vif *vif,
3192 struct sk_buff *skb) {
3193 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3194 const u32 mask = IEEE80211_TX_INTFL_DONT_ENCRYPT |
3195 IEEE80211_TX_CTL_INJECTED;
3196 if ((info->flags & mask) == mask)
3199 return !ath10k_vif_to_arvif(vif)->nohwcrypt;
3203 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
3204 * Control in the header.
3206 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
3208 struct ieee80211_hdr *hdr = (void *)skb->data;
3209 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
3212 if (!ieee80211_is_data_qos(hdr->frame_control))
3215 qos_ctl = ieee80211_get_qos_ctl(hdr);
3216 memmove(skb->data + IEEE80211_QOS_CTL_LEN,
3217 skb->data, (void *)qos_ctl - (void *)skb->data);
3218 skb_pull(skb, IEEE80211_QOS_CTL_LEN);
3220 /* Some firmware revisions don't handle sending QoS NullFunc well.
3221 * These frames are mainly used for CQM purposes so it doesn't really
3222 * matter whether QoS NullFunc or NullFunc are sent.
3224 hdr = (void *)skb->data;
3225 if (ieee80211_is_qos_nullfunc(hdr->frame_control))
3226 cb->htt.tid = HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
3228 hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
3231 static void ath10k_tx_h_8023(struct sk_buff *skb)
3233 struct ieee80211_hdr *hdr;
3234 struct rfc1042_hdr *rfc1042;
3241 hdr = (void *)skb->data;
3242 hdrlen = ieee80211_hdrlen(hdr->frame_control);
3243 rfc1042 = (void *)skb->data + hdrlen;
3245 ether_addr_copy(da, ieee80211_get_DA(hdr));
3246 ether_addr_copy(sa, ieee80211_get_SA(hdr));
3247 type = rfc1042->snap_type;
3249 skb_pull(skb, hdrlen + sizeof(*rfc1042));
3250 skb_push(skb, sizeof(*eth));
3252 eth = (void *)skb->data;
3253 ether_addr_copy(eth->h_dest, da);
3254 ether_addr_copy(eth->h_source, sa);
3255 eth->h_proto = type;
3258 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
3259 struct ieee80211_vif *vif,
3260 struct sk_buff *skb)
3262 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
3263 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3265 /* This is case only for P2P_GO */
3266 if (arvif->vdev_type != WMI_VDEV_TYPE_AP ||
3267 arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO)
3270 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
3271 spin_lock_bh(&ar->data_lock);
3272 if (arvif->u.ap.noa_data)
3273 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
3275 memcpy(skb_put(skb, arvif->u.ap.noa_len),
3276 arvif->u.ap.noa_data,
3277 arvif->u.ap.noa_len);
3278 spin_unlock_bh(&ar->data_lock);
3282 static bool ath10k_mac_need_offchan_tx_work(struct ath10k *ar)
3284 /* FIXME: Not really sure since when the behaviour changed. At some
3285 * point new firmware stopped requiring creation of peer entries for
3286 * offchannel tx (and actually creating them causes issues with wmi-htc
3287 * tx credit replenishment and reliability). Assuming it's at least 3.4
3288 * because that's when the `freq` was introduced to TX_FRM HTT command.
3290 return !(ar->htt.target_version_major >= 3 &&
3291 ar->htt.target_version_minor >= 4);
3294 static int ath10k_mac_tx_wmi_mgmt(struct ath10k *ar, struct sk_buff *skb)
3296 struct sk_buff_head *q = &ar->wmi_mgmt_tx_queue;
3299 spin_lock_bh(&ar->data_lock);
3301 if (skb_queue_len(q) == ATH10K_MAX_NUM_MGMT_PENDING) {
3302 ath10k_warn(ar, "wmi mgmt tx queue is full\n");
3307 __skb_queue_tail(q, skb);
3308 ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
3311 spin_unlock_bh(&ar->data_lock);
3316 static void ath10k_mac_tx(struct ath10k *ar, struct sk_buff *skb)
3318 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
3319 struct ath10k_htt *htt = &ar->htt;
3322 switch (cb->txmode) {
3323 case ATH10K_HW_TXRX_RAW:
3324 case ATH10K_HW_TXRX_NATIVE_WIFI:
3325 case ATH10K_HW_TXRX_ETHERNET:
3326 ret = ath10k_htt_tx(htt, skb);
3328 case ATH10K_HW_TXRX_MGMT:
3329 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
3331 ret = ath10k_mac_tx_wmi_mgmt(ar, skb);
3332 else if (ar->htt.target_version_major >= 3)
3333 ret = ath10k_htt_tx(htt, skb);
3335 ret = ath10k_htt_mgmt_tx(htt, skb);
3340 ath10k_warn(ar, "failed to transmit packet, dropping: %d\n",
3342 ieee80211_free_txskb(ar->hw, skb);
3346 void ath10k_offchan_tx_purge(struct ath10k *ar)
3348 struct sk_buff *skb;
3351 skb = skb_dequeue(&ar->offchan_tx_queue);
3355 ieee80211_free_txskb(ar->hw, skb);
3359 void ath10k_offchan_tx_work(struct work_struct *work)
3361 struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
3362 struct ath10k_peer *peer;
3363 struct ieee80211_hdr *hdr;
3364 struct sk_buff *skb;
3365 const u8 *peer_addr;
3368 unsigned long time_left;
3369 bool tmp_peer_created = false;
3371 /* FW requirement: We must create a peer before FW will send out
3372 * an offchannel frame. Otherwise the frame will be stuck and
3373 * never transmitted. We delete the peer upon tx completion.
3374 * It is unlikely that a peer for offchannel tx will already be
3375 * present. However it may be in some rare cases so account for that.
3376 * Otherwise we might remove a legitimate peer and break stuff. */
3379 skb = skb_dequeue(&ar->offchan_tx_queue);
3383 mutex_lock(&ar->conf_mutex);
3385 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %p\n",
3388 hdr = (struct ieee80211_hdr *)skb->data;
3389 peer_addr = ieee80211_get_DA(hdr);
3390 vdev_id = ATH10K_SKB_CB(skb)->vdev_id;
3392 spin_lock_bh(&ar->data_lock);
3393 peer = ath10k_peer_find(ar, vdev_id, peer_addr);
3394 spin_unlock_bh(&ar->data_lock);
3397 /* FIXME: should this use ath10k_warn()? */
3398 ath10k_dbg(ar, ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
3399 peer_addr, vdev_id);
3402 ret = ath10k_peer_create(ar, vdev_id, peer_addr,
3403 WMI_PEER_TYPE_DEFAULT);
3405 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n",
3406 peer_addr, vdev_id, ret);
3407 tmp_peer_created = (ret == 0);
3410 spin_lock_bh(&ar->data_lock);
3411 reinit_completion(&ar->offchan_tx_completed);
3412 ar->offchan_tx_skb = skb;
3413 spin_unlock_bh(&ar->data_lock);
3415 ath10k_mac_tx(ar, skb);
3418 wait_for_completion_timeout(&ar->offchan_tx_completed, 3 * HZ);
3420 ath10k_warn(ar, "timed out waiting for offchannel skb %p\n",
3423 if (!peer && tmp_peer_created) {
3424 ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
3426 ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n",
3427 peer_addr, vdev_id, ret);
3430 mutex_unlock(&ar->conf_mutex);
3434 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
3436 struct sk_buff *skb;
3439 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
3443 ieee80211_free_txskb(ar->hw, skb);
3447 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
3449 struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
3450 struct sk_buff *skb;
3454 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
3458 ret = ath10k_wmi_mgmt_tx(ar, skb);
3460 ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n",
3462 ieee80211_free_txskb(ar->hw, skb);
3471 void __ath10k_scan_finish(struct ath10k *ar)
3473 lockdep_assert_held(&ar->data_lock);
3475 switch (ar->scan.state) {
3476 case ATH10K_SCAN_IDLE:
3478 case ATH10K_SCAN_RUNNING:
3479 case ATH10K_SCAN_ABORTING:
3480 if (!ar->scan.is_roc)
3481 ieee80211_scan_completed(ar->hw,
3483 ATH10K_SCAN_ABORTING));
3484 else if (ar->scan.roc_notify)
3485 ieee80211_remain_on_channel_expired(ar->hw);
3487 case ATH10K_SCAN_STARTING:
3488 ar->scan.state = ATH10K_SCAN_IDLE;
3489 ar->scan_channel = NULL;
3490 ath10k_offchan_tx_purge(ar);
3491 cancel_delayed_work(&ar->scan.timeout);
3492 complete_all(&ar->scan.completed);
3497 void ath10k_scan_finish(struct ath10k *ar)
3499 spin_lock_bh(&ar->data_lock);
3500 __ath10k_scan_finish(ar);
3501 spin_unlock_bh(&ar->data_lock);
3504 static int ath10k_scan_stop(struct ath10k *ar)
3506 struct wmi_stop_scan_arg arg = {
3507 .req_id = 1, /* FIXME */
3508 .req_type = WMI_SCAN_STOP_ONE,
3509 .u.scan_id = ATH10K_SCAN_ID,
3513 lockdep_assert_held(&ar->conf_mutex);
3515 ret = ath10k_wmi_stop_scan(ar, &arg);
3517 ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret);
3521 ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ);
3523 ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n");
3525 } else if (ret > 0) {
3530 /* Scan state should be updated upon scan completion but in case
3531 * firmware fails to deliver the event (for whatever reason) it is
3532 * desired to clean up scan state anyway. Firmware may have just
3533 * dropped the scan completion event delivery due to transport pipe
3534 * being overflown with data and/or it can recover on its own before
3535 * next scan request is submitted.
3537 spin_lock_bh(&ar->data_lock);
3538 if (ar->scan.state != ATH10K_SCAN_IDLE)
3539 __ath10k_scan_finish(ar);
3540 spin_unlock_bh(&ar->data_lock);
3545 static void ath10k_scan_abort(struct ath10k *ar)
3549 lockdep_assert_held(&ar->conf_mutex);
3551 spin_lock_bh(&ar->data_lock);
3553 switch (ar->scan.state) {
3554 case ATH10K_SCAN_IDLE:
3555 /* This can happen if timeout worker kicked in and called
3556 * abortion while scan completion was being processed.
3559 case ATH10K_SCAN_STARTING:
3560 case ATH10K_SCAN_ABORTING:
3561 ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n",
3562 ath10k_scan_state_str(ar->scan.state),
3565 case ATH10K_SCAN_RUNNING:
3566 ar->scan.state = ATH10K_SCAN_ABORTING;
3567 spin_unlock_bh(&ar->data_lock);
3569 ret = ath10k_scan_stop(ar);
3571 ath10k_warn(ar, "failed to abort scan: %d\n", ret);
3573 spin_lock_bh(&ar->data_lock);
3577 spin_unlock_bh(&ar->data_lock);
3580 void ath10k_scan_timeout_work(struct work_struct *work)
3582 struct ath10k *ar = container_of(work, struct ath10k,
3585 mutex_lock(&ar->conf_mutex);
3586 ath10k_scan_abort(ar);
3587 mutex_unlock(&ar->conf_mutex);
3590 static int ath10k_start_scan(struct ath10k *ar,
3591 const struct wmi_start_scan_arg *arg)
3595 lockdep_assert_held(&ar->conf_mutex);
3597 ret = ath10k_wmi_start_scan(ar, arg);
3601 ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ);
3603 ret = ath10k_scan_stop(ar);
3605 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
3610 /* If we failed to start the scan, return error code at
3611 * this point. This is probably due to some issue in the
3612 * firmware, but no need to wedge the driver due to that...
3614 spin_lock_bh(&ar->data_lock);
3615 if (ar->scan.state == ATH10K_SCAN_IDLE) {
3616 spin_unlock_bh(&ar->data_lock);
3619 spin_unlock_bh(&ar->data_lock);
3624 /**********************/
3625 /* mac80211 callbacks */
3626 /**********************/
3628 static void ath10k_tx(struct ieee80211_hw *hw,
3629 struct ieee80211_tx_control *control,
3630 struct sk_buff *skb)
3632 struct ath10k *ar = hw->priv;
3633 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3634 struct ieee80211_vif *vif = info->control.vif;
3635 struct ieee80211_sta *sta = control->sta;
3636 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
3637 __le16 fc = hdr->frame_control;
3639 /* We should disable CCK RATE due to P2P */
3640 if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
3641 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
3643 ATH10K_SKB_CB(skb)->htt.is_offchan = false;
3644 ATH10K_SKB_CB(skb)->htt.freq = 0;
3645 ATH10K_SKB_CB(skb)->htt.tid = ath10k_tx_h_get_tid(hdr);
3646 ATH10K_SKB_CB(skb)->htt.nohwcrypt = !ath10k_tx_h_use_hwcrypto(vif, skb);
3647 ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif);
3648 ATH10K_SKB_CB(skb)->txmode = ath10k_tx_h_get_txmode(ar, vif, sta, skb);
3649 ATH10K_SKB_CB(skb)->is_protected = ieee80211_has_protected(fc);
3651 switch (ATH10K_SKB_CB(skb)->txmode) {
3652 case ATH10K_HW_TXRX_MGMT:
3653 case ATH10K_HW_TXRX_NATIVE_WIFI:
3654 ath10k_tx_h_nwifi(hw, skb);
3655 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
3656 ath10k_tx_h_seq_no(vif, skb);
3658 case ATH10K_HW_TXRX_ETHERNET:
3659 ath10k_tx_h_8023(skb);
3661 case ATH10K_HW_TXRX_RAW:
3662 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
3664 ieee80211_free_txskb(hw, skb);
3669 if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
3670 spin_lock_bh(&ar->data_lock);
3671 ATH10K_SKB_CB(skb)->htt.freq = ar->scan.roc_freq;
3672 ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id;
3673 spin_unlock_bh(&ar->data_lock);
3675 if (ath10k_mac_need_offchan_tx_work(ar)) {
3676 ATH10K_SKB_CB(skb)->htt.freq = 0;
3677 ATH10K_SKB_CB(skb)->htt.is_offchan = true;
3679 ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n",
3682 skb_queue_tail(&ar->offchan_tx_queue, skb);
3683 ieee80211_queue_work(hw, &ar->offchan_tx_work);
3688 ath10k_mac_tx(ar, skb);
3691 /* Must not be called with conf_mutex held as workers can use that also. */
3692 void ath10k_drain_tx(struct ath10k *ar)
3694 /* make sure rcu-protected mac80211 tx path itself is drained */
3697 ath10k_offchan_tx_purge(ar);
3698 ath10k_mgmt_over_wmi_tx_purge(ar);
3700 cancel_work_sync(&ar->offchan_tx_work);
3701 cancel_work_sync(&ar->wmi_mgmt_tx_work);
3704 void ath10k_halt(struct ath10k *ar)
3706 struct ath10k_vif *arvif;
3708 lockdep_assert_held(&ar->conf_mutex);
3710 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
3711 ar->filter_flags = 0;
3712 ar->monitor = false;
3713 ar->monitor_arvif = NULL;
3715 if (ar->monitor_started)
3716 ath10k_monitor_stop(ar);
3718 ar->monitor_started = false;
3721 ath10k_scan_finish(ar);
3722 ath10k_peer_cleanup_all(ar);
3723 ath10k_core_stop(ar);
3724 ath10k_hif_power_down(ar);
3726 spin_lock_bh(&ar->data_lock);
3727 list_for_each_entry(arvif, &ar->arvifs, list)
3728 ath10k_mac_vif_beacon_cleanup(arvif);
3729 spin_unlock_bh(&ar->data_lock);
3732 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
3734 struct ath10k *ar = hw->priv;
3736 mutex_lock(&ar->conf_mutex);
3738 if (ar->cfg_tx_chainmask) {
3739 *tx_ant = ar->cfg_tx_chainmask;
3740 *rx_ant = ar->cfg_rx_chainmask;
3742 *tx_ant = ar->supp_tx_chainmask;
3743 *rx_ant = ar->supp_rx_chainmask;
3746 mutex_unlock(&ar->conf_mutex);
3751 static void ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg)
3753 /* It is not clear that allowing gaps in chainmask
3754 * is helpful. Probably it will not do what user
3755 * is hoping for, so warn in that case.
3757 if (cm == 15 || cm == 7 || cm == 3 || cm == 1 || cm == 0)
3760 ath10k_warn(ar, "mac %s antenna chainmask may be invalid: 0x%x. Suggested values: 15, 7, 3, 1 or 0.\n",
3764 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
3768 lockdep_assert_held(&ar->conf_mutex);
3770 ath10k_check_chain_mask(ar, tx_ant, "tx");
3771 ath10k_check_chain_mask(ar, rx_ant, "rx");
3773 ar->cfg_tx_chainmask = tx_ant;
3774 ar->cfg_rx_chainmask = rx_ant;
3776 if ((ar->state != ATH10K_STATE_ON) &&
3777 (ar->state != ATH10K_STATE_RESTARTED))
3780 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
3783 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n",
3788 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
3791 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n",
3799 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
3801 struct ath10k *ar = hw->priv;
3804 mutex_lock(&ar->conf_mutex);
3805 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
3806 mutex_unlock(&ar->conf_mutex);
3810 static int ath10k_start(struct ieee80211_hw *hw)
3812 struct ath10k *ar = hw->priv;
3817 * This makes sense only when restarting hw. It is harmless to call
3818 * uncoditionally. This is necessary to make sure no HTT/WMI tx
3819 * commands will be submitted while restarting.
3821 ath10k_drain_tx(ar);
3823 mutex_lock(&ar->conf_mutex);
3825 switch (ar->state) {
3826 case ATH10K_STATE_OFF:
3827 ar->state = ATH10K_STATE_ON;
3829 case ATH10K_STATE_RESTARTING:
3831 ar->state = ATH10K_STATE_RESTARTED;
3833 case ATH10K_STATE_ON:
3834 case ATH10K_STATE_RESTARTED:
3835 case ATH10K_STATE_WEDGED:
3839 case ATH10K_STATE_UTF:
3844 ret = ath10k_hif_power_up(ar);
3846 ath10k_err(ar, "Could not init hif: %d\n", ret);
3850 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL);
3852 ath10k_err(ar, "Could not init core: %d\n", ret);
3853 goto err_power_down;
3856 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pmf_qos, 1);
3858 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret);
3862 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->dynamic_bw, 1);
3864 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret);
3868 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
3869 ret = ath10k_wmi_adaptive_qcs(ar, true);
3871 ath10k_warn(ar, "failed to enable adaptive qcs: %d\n",
3877 if (test_bit(WMI_SERVICE_BURST, ar->wmi.svc_map)) {
3878 burst_enable = ar->wmi.pdev_param->burst_enable;
3879 ret = ath10k_wmi_pdev_set_param(ar, burst_enable, 0);
3881 ath10k_warn(ar, "failed to disable burst: %d\n", ret);
3886 if (ar->cfg_tx_chainmask)
3887 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask,
3888 ar->cfg_rx_chainmask);
3891 * By default FW set ARP frames ac to voice (6). In that case ARP
3892 * exchange is not working properly for UAPSD enabled AP. ARP requests
3893 * which arrives with access category 0 are processed by network stack
3894 * and send back with access category 0, but FW changes access category
3895 * to 6. Set ARP frames access category to best effort (0) solves
3899 ret = ath10k_wmi_pdev_set_param(ar,
3900 ar->wmi.pdev_param->arp_ac_override, 0);
3902 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n",
3907 ret = ath10k_wmi_pdev_set_param(ar,
3908 ar->wmi.pdev_param->ani_enable, 1);
3910 ath10k_warn(ar, "failed to enable ani by default: %d\n",
3915 ar->ani_enabled = true;
3917 ar->num_started_vdevs = 0;
3918 ath10k_regd_update(ar);
3920 ath10k_spectral_start(ar);
3921 ath10k_thermal_set_throttling(ar);
3923 mutex_unlock(&ar->conf_mutex);
3927 ath10k_core_stop(ar);
3930 ath10k_hif_power_down(ar);
3933 ar->state = ATH10K_STATE_OFF;
3936 mutex_unlock(&ar->conf_mutex);
3940 static void ath10k_stop(struct ieee80211_hw *hw)
3942 struct ath10k *ar = hw->priv;
3944 ath10k_drain_tx(ar);
3946 mutex_lock(&ar->conf_mutex);
3947 if (ar->state != ATH10K_STATE_OFF) {
3949 ar->state = ATH10K_STATE_OFF;
3951 mutex_unlock(&ar->conf_mutex);
3953 cancel_delayed_work_sync(&ar->scan.timeout);
3954 cancel_work_sync(&ar->restart_work);
3957 static int ath10k_config_ps(struct ath10k *ar)
3959 struct ath10k_vif *arvif;
3962 lockdep_assert_held(&ar->conf_mutex);
3964 list_for_each_entry(arvif, &ar->arvifs, list) {
3965 ret = ath10k_mac_vif_setup_ps(arvif);
3967 ath10k_warn(ar, "failed to setup powersave: %d\n", ret);
3975 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
3980 lockdep_assert_held(&ar->conf_mutex);
3982 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower);
3984 param = ar->wmi.pdev_param->txpower_limit2g;
3985 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
3987 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
3992 param = ar->wmi.pdev_param->txpower_limit5g;
3993 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
3995 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
4003 static int ath10k_mac_txpower_recalc(struct ath10k *ar)
4005 struct ath10k_vif *arvif;
4006 int ret, txpower = -1;
4008 lockdep_assert_held(&ar->conf_mutex);
4010 list_for_each_entry(arvif, &ar->arvifs, list) {
4011 WARN_ON(arvif->txpower < 0);
4014 txpower = arvif->txpower;
4016 txpower = min(txpower, arvif->txpower);
4019 if (WARN_ON(txpower == -1))
4022 ret = ath10k_mac_txpower_setup(ar, txpower);
4024 ath10k_warn(ar, "failed to setup tx power %d: %d\n",
4032 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
4034 struct ath10k *ar = hw->priv;
4035 struct ieee80211_conf *conf = &hw->conf;
4038 mutex_lock(&ar->conf_mutex);
4040 if (changed & IEEE80211_CONF_CHANGE_PS)
4041 ath10k_config_ps(ar);
4043 if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
4044 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR;
4045 ret = ath10k_monitor_recalc(ar);
4047 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4050 mutex_unlock(&ar->conf_mutex);
4054 static u32 get_nss_from_chainmask(u16 chain_mask)
4056 if ((chain_mask & 0x15) == 0x15)
4058 else if ((chain_mask & 0x7) == 0x7)
4060 else if ((chain_mask & 0x3) == 0x3)
4065 static int ath10k_mac_get_vht_cap_bf_sts(struct ath10k *ar)
4067 int nsts = ar->vht_cap_info;
4069 nsts &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
4070 nsts >>= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
4072 /* If firmware does not deliver to host number of space-time
4073 * streams supported, assume it support up to 4 BF STS and return
4074 * the value for VHT CAP: nsts-1)
4082 static int ath10k_mac_get_vht_cap_bf_sound_dim(struct ath10k *ar)
4084 int sound_dim = ar->vht_cap_info;
4086 sound_dim &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
4087 sound_dim >>= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
4089 /* If the sounding dimension is not advertised by the firmware,
4090 * let's use a default value of 1
4098 static int ath10k_mac_set_txbf_conf(struct ath10k_vif *arvif)
4101 struct ath10k *ar = arvif->ar;
4105 if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_BEFORE_ASSOC)
4108 nsts = ath10k_mac_get_vht_cap_bf_sts(ar);
4109 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
4110 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE))
4111 value |= SM(nsts, WMI_TXBF_STS_CAP_OFFSET);
4113 sound_dim = ath10k_mac_get_vht_cap_bf_sound_dim(ar);
4114 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
4115 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE))
4116 value |= SM(sound_dim, WMI_BF_SOUND_DIM_OFFSET);
4121 if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
4122 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
4124 if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
4125 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFER |
4126 WMI_VDEV_PARAM_TXBF_SU_TX_BFER);
4128 if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
4129 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
4131 if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
4132 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFEE |
4133 WMI_VDEV_PARAM_TXBF_SU_TX_BFEE);
4135 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4136 ar->wmi.vdev_param->txbf, value);
4141 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
4142 * because we will send mgmt frames without CCK. This requirement
4143 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
4146 static int ath10k_add_interface(struct ieee80211_hw *hw,
4147 struct ieee80211_vif *vif)
4149 struct ath10k *ar = hw->priv;
4150 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4151 enum wmi_sta_powersave_param param;
4158 vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
4160 mutex_lock(&ar->conf_mutex);
4162 memset(arvif, 0, sizeof(*arvif));
4167 INIT_LIST_HEAD(&arvif->list);
4168 INIT_WORK(&arvif->ap_csa_work, ath10k_mac_vif_ap_csa_work);
4169 INIT_DELAYED_WORK(&arvif->connection_loss_work,
4170 ath10k_mac_vif_sta_connection_loss_work);
4172 for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
4173 arvif->bitrate_mask.control[i].legacy = 0xffffffff;
4174 memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff,
4175 sizeof(arvif->bitrate_mask.control[i].ht_mcs));
4176 memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff,
4177 sizeof(arvif->bitrate_mask.control[i].vht_mcs));
4180 if (ar->num_peers >= ar->max_num_peers) {
4181 ath10k_warn(ar, "refusing vdev creation due to insufficient peer entry resources in firmware\n");
4186 if (ar->free_vdev_map == 0) {
4187 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
4191 bit = __ffs64(ar->free_vdev_map);
4193 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
4194 bit, ar->free_vdev_map);
4196 arvif->vdev_id = bit;
4197 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
4199 switch (vif->type) {
4200 case NL80211_IFTYPE_P2P_DEVICE:
4201 arvif->vdev_type = WMI_VDEV_TYPE_STA;
4202 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE;
4204 case NL80211_IFTYPE_UNSPECIFIED:
4205 case NL80211_IFTYPE_STATION:
4206 arvif->vdev_type = WMI_VDEV_TYPE_STA;
4208 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT;
4210 case NL80211_IFTYPE_ADHOC:
4211 arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
4213 case NL80211_IFTYPE_MESH_POINT:
4214 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
4216 ath10k_warn(ar, "must load driver with rawmode=1 to add mesh interfaces\n");
4219 arvif->vdev_type = WMI_VDEV_TYPE_AP;
4221 case NL80211_IFTYPE_AP:
4222 arvif->vdev_type = WMI_VDEV_TYPE_AP;
4225 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO;
4227 case NL80211_IFTYPE_MONITOR:
4228 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
4235 /* Using vdev_id as queue number will make it very easy to do per-vif
4236 * tx queue locking. This shouldn't wrap due to interface combinations
4237 * but do a modulo for correctness sake and prevent using offchannel tx
4238 * queues for regular vif tx.
4240 vif->cab_queue = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
4241 for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++)
4242 vif->hw_queue[i] = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
4244 /* Some firmware revisions don't wait for beacon tx completion before
4245 * sending another SWBA event. This could lead to hardware using old
4246 * (freed) beacon data in some cases, e.g. tx credit starvation
4247 * combined with missed TBTT. This is very very rare.
4249 * On non-IOMMU-enabled hosts this could be a possible security issue
4250 * because hw could beacon some random data on the air. On
4251 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
4252 * device would crash.
4254 * Since there are no beacon tx completions (implicit nor explicit)
4255 * propagated to host the only workaround for this is to allocate a
4256 * DMA-coherent buffer for a lifetime of a vif and use it for all
4257 * beacon tx commands. Worst case for this approach is some beacons may
4258 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
4260 if (vif->type == NL80211_IFTYPE_ADHOC ||
4261 vif->type == NL80211_IFTYPE_MESH_POINT ||
4262 vif->type == NL80211_IFTYPE_AP) {
4263 arvif->beacon_buf = dma_zalloc_coherent(ar->dev,
4264 IEEE80211_MAX_FRAME_LEN,
4265 &arvif->beacon_paddr,
4267 if (!arvif->beacon_buf) {
4269 ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
4274 if (test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags))
4275 arvif->nohwcrypt = true;
4277 if (arvif->nohwcrypt &&
4278 !test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
4279 ath10k_warn(ar, "cryptmode module param needed for sw crypto\n");
4283 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
4284 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
4285 arvif->beacon_buf ? "single-buf" : "per-skb");
4287 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
4288 arvif->vdev_subtype, vif->addr);
4290 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
4291 arvif->vdev_id, ret);
4295 ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
4296 list_add(&arvif->list, &ar->arvifs);
4298 /* It makes no sense to have firmware do keepalives. mac80211 already
4299 * takes care of this with idle connection polling.
4301 ret = ath10k_mac_vif_disable_keepalive(arvif);
4303 ath10k_warn(ar, "failed to disable keepalive on vdev %i: %d\n",
4304 arvif->vdev_id, ret);
4305 goto err_vdev_delete;
4308 arvif->def_wep_key_idx = -1;
4310 vdev_param = ar->wmi.vdev_param->tx_encap_type;
4311 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4312 ATH10K_HW_TXRX_NATIVE_WIFI);
4313 /* 10.X firmware does not support this VDEV parameter. Do not warn */
4314 if (ret && ret != -EOPNOTSUPP) {
4315 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
4316 arvif->vdev_id, ret);
4317 goto err_vdev_delete;
4320 if (ar->cfg_tx_chainmask) {
4321 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4323 vdev_param = ar->wmi.vdev_param->nss;
4324 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4327 ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
4328 arvif->vdev_id, ar->cfg_tx_chainmask, nss,
4330 goto err_vdev_delete;
4334 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4335 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4336 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr,
4337 WMI_PEER_TYPE_DEFAULT);
4339 ath10k_warn(ar, "failed to create vdev %i peer for AP/IBSS: %d\n",
4340 arvif->vdev_id, ret);
4341 goto err_vdev_delete;
4345 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
4346 ret = ath10k_mac_set_kickout(arvif);
4348 ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
4349 arvif->vdev_id, ret);
4350 goto err_peer_delete;
4354 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
4355 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
4356 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
4357 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
4360 ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
4361 arvif->vdev_id, ret);
4362 goto err_peer_delete;
4365 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
4367 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
4368 arvif->vdev_id, ret);
4369 goto err_peer_delete;
4372 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
4374 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
4375 arvif->vdev_id, ret);
4376 goto err_peer_delete;
4380 ret = ath10k_mac_set_txbf_conf(arvif);
4382 ath10k_warn(ar, "failed to set txbf for vdev %d: %d\n",
4383 arvif->vdev_id, ret);
4384 goto err_peer_delete;
4387 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
4389 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
4390 arvif->vdev_id, ret);
4391 goto err_peer_delete;
4394 arvif->txpower = vif->bss_conf.txpower;
4395 ret = ath10k_mac_txpower_recalc(ar);
4397 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
4398 goto err_peer_delete;
4401 if (vif->type == NL80211_IFTYPE_MONITOR) {
4402 ar->monitor_arvif = arvif;
4403 ret = ath10k_monitor_recalc(ar);
4405 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4406 goto err_peer_delete;
4410 spin_lock_bh(&ar->htt.tx_lock);
4412 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
4413 spin_unlock_bh(&ar->htt.tx_lock);
4415 mutex_unlock(&ar->conf_mutex);
4419 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4420 arvif->vdev_type == WMI_VDEV_TYPE_IBSS)
4421 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
4424 ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
4425 ar->free_vdev_map |= 1LL << arvif->vdev_id;
4426 list_del(&arvif->list);
4429 if (arvif->beacon_buf) {
4430 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
4431 arvif->beacon_buf, arvif->beacon_paddr);
4432 arvif->beacon_buf = NULL;
4435 mutex_unlock(&ar->conf_mutex);
4440 static void ath10k_mac_vif_tx_unlock_all(struct ath10k_vif *arvif)
4444 for (i = 0; i < BITS_PER_LONG; i++)
4445 ath10k_mac_vif_tx_unlock(arvif, i);
4448 static void ath10k_remove_interface(struct ieee80211_hw *hw,
4449 struct ieee80211_vif *vif)
4451 struct ath10k *ar = hw->priv;
4452 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4455 cancel_work_sync(&arvif->ap_csa_work);
4456 cancel_delayed_work_sync(&arvif->connection_loss_work);
4458 mutex_lock(&ar->conf_mutex);
4460 spin_lock_bh(&ar->data_lock);
4461 ath10k_mac_vif_beacon_cleanup(arvif);
4462 spin_unlock_bh(&ar->data_lock);
4464 ret = ath10k_spectral_vif_stop(arvif);
4466 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
4467 arvif->vdev_id, ret);
4469 ar->free_vdev_map |= 1LL << arvif->vdev_id;
4470 list_del(&arvif->list);
4472 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4473 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4474 ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id,
4477 ath10k_warn(ar, "failed to submit AP/IBSS self-peer removal on vdev %i: %d\n",
4478 arvif->vdev_id, ret);
4480 kfree(arvif->u.ap.noa_data);
4483 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
4486 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
4488 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
4489 arvif->vdev_id, ret);
4491 /* Some firmware revisions don't notify host about self-peer removal
4492 * until after associated vdev is deleted.
4494 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4495 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4496 ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id,
4499 ath10k_warn(ar, "failed to remove AP self-peer on vdev %i: %d\n",
4500 arvif->vdev_id, ret);
4502 spin_lock_bh(&ar->data_lock);
4504 spin_unlock_bh(&ar->data_lock);
4507 ath10k_peer_cleanup(ar, arvif->vdev_id);
4509 if (vif->type == NL80211_IFTYPE_MONITOR) {
4510 ar->monitor_arvif = NULL;
4511 ret = ath10k_monitor_recalc(ar);
4513 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4516 spin_lock_bh(&ar->htt.tx_lock);
4517 ath10k_mac_vif_tx_unlock_all(arvif);
4518 spin_unlock_bh(&ar->htt.tx_lock);
4520 mutex_unlock(&ar->conf_mutex);
4524 * FIXME: Has to be verified.
4526 #define SUPPORTED_FILTERS \
4531 FIF_BCN_PRBRESP_PROMISC | \
4535 static void ath10k_configure_filter(struct ieee80211_hw *hw,
4536 unsigned int changed_flags,
4537 unsigned int *total_flags,
4540 struct ath10k *ar = hw->priv;
4543 mutex_lock(&ar->conf_mutex);
4545 changed_flags &= SUPPORTED_FILTERS;
4546 *total_flags &= SUPPORTED_FILTERS;
4547 ar->filter_flags = *total_flags;
4549 ret = ath10k_monitor_recalc(ar);
4551 ath10k_warn(ar, "failed to recalc montior: %d\n", ret);
4553 mutex_unlock(&ar->conf_mutex);
4556 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
4557 struct ieee80211_vif *vif,
4558 struct ieee80211_bss_conf *info,
4561 struct ath10k *ar = hw->priv;
4562 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4564 u32 vdev_param, pdev_param, slottime, preamble;
4566 mutex_lock(&ar->conf_mutex);
4568 if (changed & BSS_CHANGED_IBSS)
4569 ath10k_control_ibss(arvif, info, vif->addr);
4571 if (changed & BSS_CHANGED_BEACON_INT) {
4572 arvif->beacon_interval = info->beacon_int;
4573 vdev_param = ar->wmi.vdev_param->beacon_interval;
4574 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4575 arvif->beacon_interval);
4576 ath10k_dbg(ar, ATH10K_DBG_MAC,
4577 "mac vdev %d beacon_interval %d\n",
4578 arvif->vdev_id, arvif->beacon_interval);
4581 ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
4582 arvif->vdev_id, ret);
4585 if (changed & BSS_CHANGED_BEACON) {
4586 ath10k_dbg(ar, ATH10K_DBG_MAC,
4587 "vdev %d set beacon tx mode to staggered\n",
4590 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
4591 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
4592 WMI_BEACON_STAGGERED_MODE);
4594 ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
4595 arvif->vdev_id, ret);
4597 ret = ath10k_mac_setup_bcn_tmpl(arvif);
4599 ath10k_warn(ar, "failed to update beacon template: %d\n",
4602 if (ieee80211_vif_is_mesh(vif)) {
4603 /* mesh doesn't use SSID but firmware needs it */
4604 strncpy(arvif->u.ap.ssid, "mesh",
4605 sizeof(arvif->u.ap.ssid));
4606 arvif->u.ap.ssid_len = 4;
4610 if (changed & BSS_CHANGED_AP_PROBE_RESP) {
4611 ret = ath10k_mac_setup_prb_tmpl(arvif);
4613 ath10k_warn(ar, "failed to setup probe resp template on vdev %i: %d\n",
4614 arvif->vdev_id, ret);
4617 if (changed & (BSS_CHANGED_BEACON_INFO | BSS_CHANGED_BEACON)) {
4618 arvif->dtim_period = info->dtim_period;
4620 ath10k_dbg(ar, ATH10K_DBG_MAC,
4621 "mac vdev %d dtim_period %d\n",
4622 arvif->vdev_id, arvif->dtim_period);
4624 vdev_param = ar->wmi.vdev_param->dtim_period;
4625 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4626 arvif->dtim_period);
4628 ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
4629 arvif->vdev_id, ret);
4632 if (changed & BSS_CHANGED_SSID &&
4633 vif->type == NL80211_IFTYPE_AP) {
4634 arvif->u.ap.ssid_len = info->ssid_len;
4636 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
4637 arvif->u.ap.hidden_ssid = info->hidden_ssid;
4640 if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
4641 ether_addr_copy(arvif->bssid, info->bssid);
4643 if (changed & BSS_CHANGED_BEACON_ENABLED)
4644 ath10k_control_beaconing(arvif, info);
4646 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
4647 arvif->use_cts_prot = info->use_cts_prot;
4648 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
4649 arvif->vdev_id, info->use_cts_prot);
4651 ret = ath10k_recalc_rtscts_prot(arvif);
4653 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
4654 arvif->vdev_id, ret);
4656 vdev_param = ar->wmi.vdev_param->protection_mode;
4657 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4658 info->use_cts_prot ? 1 : 0);
4660 ath10k_warn(ar, "failed to set protection mode %d on vdev %i: %d\n",
4661 info->use_cts_prot, arvif->vdev_id, ret);
4664 if (changed & BSS_CHANGED_ERP_SLOT) {
4665 if (info->use_short_slot)
4666 slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
4669 slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
4671 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
4672 arvif->vdev_id, slottime);
4674 vdev_param = ar->wmi.vdev_param->slot_time;
4675 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4678 ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
4679 arvif->vdev_id, ret);
4682 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
4683 if (info->use_short_preamble)
4684 preamble = WMI_VDEV_PREAMBLE_SHORT;
4686 preamble = WMI_VDEV_PREAMBLE_LONG;
4688 ath10k_dbg(ar, ATH10K_DBG_MAC,
4689 "mac vdev %d preamble %dn",
4690 arvif->vdev_id, preamble);
4692 vdev_param = ar->wmi.vdev_param->preamble;
4693 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4696 ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
4697 arvif->vdev_id, ret);
4700 if (changed & BSS_CHANGED_ASSOC) {
4702 /* Workaround: Make sure monitor vdev is not running
4703 * when associating to prevent some firmware revisions
4704 * (e.g. 10.1 and 10.2) from crashing.
4706 if (ar->monitor_started)
4707 ath10k_monitor_stop(ar);
4708 ath10k_bss_assoc(hw, vif, info);
4709 ath10k_monitor_recalc(ar);
4711 ath10k_bss_disassoc(hw, vif);
4715 if (changed & BSS_CHANGED_TXPOWER) {
4716 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
4717 arvif->vdev_id, info->txpower);
4719 arvif->txpower = info->txpower;
4720 ret = ath10k_mac_txpower_recalc(ar);
4722 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
4725 if (changed & BSS_CHANGED_PS) {
4726 arvif->ps = vif->bss_conf.ps;
4728 ret = ath10k_config_ps(ar);
4730 ath10k_warn(ar, "failed to setup ps on vdev %i: %d\n",
4731 arvif->vdev_id, ret);
4734 mutex_unlock(&ar->conf_mutex);
4737 static int ath10k_hw_scan(struct ieee80211_hw *hw,
4738 struct ieee80211_vif *vif,
4739 struct ieee80211_scan_request *hw_req)
4741 struct ath10k *ar = hw->priv;
4742 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4743 struct cfg80211_scan_request *req = &hw_req->req;
4744 struct wmi_start_scan_arg arg;
4748 mutex_lock(&ar->conf_mutex);
4750 spin_lock_bh(&ar->data_lock);
4751 switch (ar->scan.state) {
4752 case ATH10K_SCAN_IDLE:
4753 reinit_completion(&ar->scan.started);
4754 reinit_completion(&ar->scan.completed);
4755 ar->scan.state = ATH10K_SCAN_STARTING;
4756 ar->scan.is_roc = false;
4757 ar->scan.vdev_id = arvif->vdev_id;
4760 case ATH10K_SCAN_STARTING:
4761 case ATH10K_SCAN_RUNNING:
4762 case ATH10K_SCAN_ABORTING:
4766 spin_unlock_bh(&ar->data_lock);
4771 memset(&arg, 0, sizeof(arg));
4772 ath10k_wmi_start_scan_init(ar, &arg);
4773 arg.vdev_id = arvif->vdev_id;
4774 arg.scan_id = ATH10K_SCAN_ID;
4777 arg.ie_len = req->ie_len;
4778 memcpy(arg.ie, req->ie, arg.ie_len);
4782 arg.n_ssids = req->n_ssids;
4783 for (i = 0; i < arg.n_ssids; i++) {
4784 arg.ssids[i].len = req->ssids[i].ssid_len;
4785 arg.ssids[i].ssid = req->ssids[i].ssid;
4788 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
4791 if (req->n_channels) {
4792 arg.n_channels = req->n_channels;
4793 for (i = 0; i < arg.n_channels; i++)
4794 arg.channels[i] = req->channels[i]->center_freq;
4797 ret = ath10k_start_scan(ar, &arg);
4799 ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
4800 spin_lock_bh(&ar->data_lock);
4801 ar->scan.state = ATH10K_SCAN_IDLE;
4802 spin_unlock_bh(&ar->data_lock);
4805 /* Add a 200ms margin to account for event/command processing */
4806 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
4807 msecs_to_jiffies(arg.max_scan_time +
4811 mutex_unlock(&ar->conf_mutex);
4815 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
4816 struct ieee80211_vif *vif)
4818 struct ath10k *ar = hw->priv;
4820 mutex_lock(&ar->conf_mutex);
4821 ath10k_scan_abort(ar);
4822 mutex_unlock(&ar->conf_mutex);
4824 cancel_delayed_work_sync(&ar->scan.timeout);
4827 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
4828 struct ath10k_vif *arvif,
4829 enum set_key_cmd cmd,
4830 struct ieee80211_key_conf *key)
4832 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
4835 /* 10.1 firmware branch requires default key index to be set to group
4836 * key index after installing it. Otherwise FW/HW Txes corrupted
4837 * frames with multi-vif APs. This is not required for main firmware
4838 * branch (e.g. 636).
4840 * This is also needed for 636 fw for IBSS-RSN to work more reliably.
4842 * FIXME: It remains unknown if this is required for multi-vif STA
4843 * interfaces on 10.1.
4846 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
4847 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
4850 if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
4853 if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
4856 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
4862 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4865 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
4866 arvif->vdev_id, ret);
4869 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
4870 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
4871 struct ieee80211_key_conf *key)
4873 struct ath10k *ar = hw->priv;
4874 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4875 struct ath10k_peer *peer;
4876 const u8 *peer_addr;
4877 bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
4878 key->cipher == WLAN_CIPHER_SUITE_WEP104;
4884 /* this one needs to be done in software */
4885 if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC)
4888 if (arvif->nohwcrypt)
4891 if (key->keyidx > WMI_MAX_KEY_INDEX)
4894 mutex_lock(&ar->conf_mutex);
4897 peer_addr = sta->addr;
4898 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
4899 peer_addr = vif->bss_conf.bssid;
4901 peer_addr = vif->addr;
4903 key->hw_key_idx = key->keyidx;
4907 arvif->wep_keys[key->keyidx] = key;
4909 arvif->wep_keys[key->keyidx] = NULL;
4912 /* the peer should not disappear in mid-way (unless FW goes awry) since
4913 * we already hold conf_mutex. we just make sure its there now. */
4914 spin_lock_bh(&ar->data_lock);
4915 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
4916 spin_unlock_bh(&ar->data_lock);
4919 if (cmd == SET_KEY) {
4920 ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
4925 /* if the peer doesn't exist there is no key to disable
4931 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
4932 flags |= WMI_KEY_PAIRWISE;
4934 flags |= WMI_KEY_GROUP;
4937 if (cmd == DISABLE_KEY)
4938 ath10k_clear_vdev_key(arvif, key);
4940 /* When WEP keys are uploaded it's possible that there are
4941 * stations associated already (e.g. when merging) without any
4942 * keys. Static WEP needs an explicit per-peer key upload.
4944 if (vif->type == NL80211_IFTYPE_ADHOC &&
4946 ath10k_mac_vif_update_wep_key(arvif, key);
4948 /* 802.1x never sets the def_wep_key_idx so each set_key()
4949 * call changes default tx key.
4951 * Static WEP sets def_wep_key_idx via .set_default_unicast_key
4952 * after first set_key().
4954 if (cmd == SET_KEY && arvif->def_wep_key_idx == -1)
4955 flags |= WMI_KEY_TX_USAGE;
4958 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags);
4961 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
4962 arvif->vdev_id, peer_addr, ret);
4966 /* mac80211 sets static WEP keys as groupwise while firmware requires
4967 * them to be installed twice as both pairwise and groupwise.
4969 if (is_wep && !sta && vif->type == NL80211_IFTYPE_STATION) {
4971 flags2 &= ~WMI_KEY_GROUP;
4972 flags2 |= WMI_KEY_PAIRWISE;
4974 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags2);
4977 ath10k_warn(ar, "failed to install (ucast) key for vdev %i peer %pM: %d\n",
4978 arvif->vdev_id, peer_addr, ret);
4979 ret2 = ath10k_install_key(arvif, key, DISABLE_KEY,
4983 ath10k_warn(ar, "failed to disable (mcast) key for vdev %i peer %pM: %d\n",
4984 arvif->vdev_id, peer_addr, ret2);
4990 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
4992 spin_lock_bh(&ar->data_lock);
4993 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
4994 if (peer && cmd == SET_KEY)
4995 peer->keys[key->keyidx] = key;
4996 else if (peer && cmd == DISABLE_KEY)
4997 peer->keys[key->keyidx] = NULL;
4998 else if (peer == NULL)
4999 /* impossible unless FW goes crazy */
5000 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
5001 spin_unlock_bh(&ar->data_lock);
5004 mutex_unlock(&ar->conf_mutex);
5008 static void ath10k_set_default_unicast_key(struct ieee80211_hw *hw,
5009 struct ieee80211_vif *vif,
5012 struct ath10k *ar = hw->priv;
5013 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5016 mutex_lock(&arvif->ar->conf_mutex);
5018 if (arvif->ar->state != ATH10K_STATE_ON)
5021 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
5022 arvif->vdev_id, keyidx);
5024 ret = ath10k_wmi_vdev_set_param(arvif->ar,
5026 arvif->ar->wmi.vdev_param->def_keyid,
5030 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
5036 arvif->def_wep_key_idx = keyidx;
5039 mutex_unlock(&arvif->ar->conf_mutex);
5042 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
5045 struct ath10k_vif *arvif;
5046 struct ath10k_sta *arsta;
5047 struct ieee80211_sta *sta;
5048 struct cfg80211_chan_def def;
5049 enum ieee80211_band band;
5050 const u8 *ht_mcs_mask;
5051 const u16 *vht_mcs_mask;
5052 u32 changed, bw, nss, smps;
5055 arsta = container_of(wk, struct ath10k_sta, update_wk);
5056 sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
5057 arvif = arsta->arvif;
5060 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
5063 band = def.chan->band;
5064 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
5065 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
5067 spin_lock_bh(&ar->data_lock);
5069 changed = arsta->changed;
5076 spin_unlock_bh(&ar->data_lock);
5078 mutex_lock(&ar->conf_mutex);
5080 nss = max_t(u32, 1, nss);
5081 nss = min(nss, max(ath10k_mac_max_ht_nss(ht_mcs_mask),
5082 ath10k_mac_max_vht_nss(vht_mcs_mask)));
5084 if (changed & IEEE80211_RC_BW_CHANGED) {
5085 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
5088 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5089 WMI_PEER_CHAN_WIDTH, bw);
5091 ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
5092 sta->addr, bw, err);
5095 if (changed & IEEE80211_RC_NSS_CHANGED) {
5096 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
5099 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5102 ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
5103 sta->addr, nss, err);
5106 if (changed & IEEE80211_RC_SMPS_CHANGED) {
5107 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
5110 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5111 WMI_PEER_SMPS_STATE, smps);
5113 ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
5114 sta->addr, smps, err);
5117 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED ||
5118 changed & IEEE80211_RC_NSS_CHANGED) {
5119 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates/nss\n",
5122 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
5124 ath10k_warn(ar, "failed to reassociate station: %pM\n",
5128 mutex_unlock(&ar->conf_mutex);
5131 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif,
5132 struct ieee80211_sta *sta)
5134 struct ath10k *ar = arvif->ar;
5136 lockdep_assert_held(&ar->conf_mutex);
5138 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
5141 if (ar->num_stations >= ar->max_num_stations)
5149 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif,
5150 struct ieee80211_sta *sta)
5152 struct ath10k *ar = arvif->ar;
5154 lockdep_assert_held(&ar->conf_mutex);
5156 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
5162 struct ath10k_mac_tdls_iter_data {
5163 u32 num_tdls_stations;
5164 struct ieee80211_vif *curr_vif;
5167 static void ath10k_mac_tdls_vif_stations_count_iter(void *data,
5168 struct ieee80211_sta *sta)
5170 struct ath10k_mac_tdls_iter_data *iter_data = data;
5171 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5172 struct ieee80211_vif *sta_vif = arsta->arvif->vif;
5174 if (sta->tdls && sta_vif == iter_data->curr_vif)
5175 iter_data->num_tdls_stations++;
5178 static int ath10k_mac_tdls_vif_stations_count(struct ieee80211_hw *hw,
5179 struct ieee80211_vif *vif)
5181 struct ath10k_mac_tdls_iter_data data = {};
5183 data.curr_vif = vif;
5185 ieee80211_iterate_stations_atomic(hw,
5186 ath10k_mac_tdls_vif_stations_count_iter,
5188 return data.num_tdls_stations;
5191 static void ath10k_mac_tdls_vifs_count_iter(void *data, u8 *mac,
5192 struct ieee80211_vif *vif)
5194 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5195 int *num_tdls_vifs = data;
5197 if (vif->type != NL80211_IFTYPE_STATION)
5200 if (ath10k_mac_tdls_vif_stations_count(arvif->ar->hw, vif) > 0)
5204 static int ath10k_mac_tdls_vifs_count(struct ieee80211_hw *hw)
5206 int num_tdls_vifs = 0;
5208 ieee80211_iterate_active_interfaces_atomic(hw,
5209 IEEE80211_IFACE_ITER_NORMAL,
5210 ath10k_mac_tdls_vifs_count_iter,
5212 return num_tdls_vifs;
5215 static int ath10k_sta_state(struct ieee80211_hw *hw,
5216 struct ieee80211_vif *vif,
5217 struct ieee80211_sta *sta,
5218 enum ieee80211_sta_state old_state,
5219 enum ieee80211_sta_state new_state)
5221 struct ath10k *ar = hw->priv;
5222 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5223 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5226 if (old_state == IEEE80211_STA_NOTEXIST &&
5227 new_state == IEEE80211_STA_NONE) {
5228 memset(arsta, 0, sizeof(*arsta));
5229 arsta->arvif = arvif;
5230 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
5233 /* cancel must be done outside the mutex to avoid deadlock */
5234 if ((old_state == IEEE80211_STA_NONE &&
5235 new_state == IEEE80211_STA_NOTEXIST))
5236 cancel_work_sync(&arsta->update_wk);
5238 mutex_lock(&ar->conf_mutex);
5240 if (old_state == IEEE80211_STA_NOTEXIST &&
5241 new_state == IEEE80211_STA_NONE) {
5243 * New station addition.
5245 enum wmi_peer_type peer_type = WMI_PEER_TYPE_DEFAULT;
5246 u32 num_tdls_stations;
5249 ath10k_dbg(ar, ATH10K_DBG_MAC,
5250 "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
5251 arvif->vdev_id, sta->addr,
5252 ar->num_stations + 1, ar->max_num_stations,
5253 ar->num_peers + 1, ar->max_num_peers);
5255 ret = ath10k_mac_inc_num_stations(arvif, sta);
5257 ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n",
5258 ar->max_num_stations);
5263 peer_type = WMI_PEER_TYPE_TDLS;
5265 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr,
5268 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
5269 sta->addr, arvif->vdev_id, ret);
5270 ath10k_mac_dec_num_stations(arvif, sta);
5277 num_tdls_stations = ath10k_mac_tdls_vif_stations_count(hw, vif);
5278 num_tdls_vifs = ath10k_mac_tdls_vifs_count(hw);
5280 if (num_tdls_vifs >= ar->max_num_tdls_vdevs &&
5281 num_tdls_stations == 0) {
5282 ath10k_warn(ar, "vdev %i exceeded maximum number of tdls vdevs %i\n",
5283 arvif->vdev_id, ar->max_num_tdls_vdevs);
5284 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5285 ath10k_mac_dec_num_stations(arvif, sta);
5290 if (num_tdls_stations == 0) {
5291 /* This is the first tdls peer in current vif */
5292 enum wmi_tdls_state state = WMI_TDLS_ENABLE_ACTIVE;
5294 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5297 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
5298 arvif->vdev_id, ret);
5299 ath10k_peer_delete(ar, arvif->vdev_id,
5301 ath10k_mac_dec_num_stations(arvif, sta);
5306 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
5307 WMI_TDLS_PEER_STATE_PEERING);
5310 "failed to update tdls peer %pM for vdev %d when adding a new sta: %i\n",
5311 sta->addr, arvif->vdev_id, ret);
5312 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5313 ath10k_mac_dec_num_stations(arvif, sta);
5315 if (num_tdls_stations != 0)
5317 ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5320 } else if ((old_state == IEEE80211_STA_NONE &&
5321 new_state == IEEE80211_STA_NOTEXIST)) {
5323 * Existing station deletion.
5325 ath10k_dbg(ar, ATH10K_DBG_MAC,
5326 "mac vdev %d peer delete %pM (sta gone)\n",
5327 arvif->vdev_id, sta->addr);
5329 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5331 ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
5332 sta->addr, arvif->vdev_id, ret);
5334 ath10k_mac_dec_num_stations(arvif, sta);
5339 if (ath10k_mac_tdls_vif_stations_count(hw, vif))
5342 /* This was the last tdls peer in current vif */
5343 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5346 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
5347 arvif->vdev_id, ret);
5349 } else if (old_state == IEEE80211_STA_AUTH &&
5350 new_state == IEEE80211_STA_ASSOC &&
5351 (vif->type == NL80211_IFTYPE_AP ||
5352 vif->type == NL80211_IFTYPE_MESH_POINT ||
5353 vif->type == NL80211_IFTYPE_ADHOC)) {
5357 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n",
5360 ret = ath10k_station_assoc(ar, vif, sta, false);
5362 ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
5363 sta->addr, arvif->vdev_id, ret);
5364 } else if (old_state == IEEE80211_STA_ASSOC &&
5365 new_state == IEEE80211_STA_AUTHORIZED &&
5368 * Tdls station authorized.
5370 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac tdls sta %pM authorized\n",
5373 ret = ath10k_station_assoc(ar, vif, sta, false);
5375 ath10k_warn(ar, "failed to associate tdls station %pM for vdev %i: %i\n",
5376 sta->addr, arvif->vdev_id, ret);
5380 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
5381 WMI_TDLS_PEER_STATE_CONNECTED);
5383 ath10k_warn(ar, "failed to update tdls peer %pM for vdev %i: %i\n",
5384 sta->addr, arvif->vdev_id, ret);
5385 } else if (old_state == IEEE80211_STA_ASSOC &&
5386 new_state == IEEE80211_STA_AUTH &&
5387 (vif->type == NL80211_IFTYPE_AP ||
5388 vif->type == NL80211_IFTYPE_MESH_POINT ||
5389 vif->type == NL80211_IFTYPE_ADHOC)) {
5393 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
5396 ret = ath10k_station_disassoc(ar, vif, sta);
5398 ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
5399 sta->addr, arvif->vdev_id, ret);
5402 mutex_unlock(&ar->conf_mutex);
5406 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
5407 u16 ac, bool enable)
5409 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5410 struct wmi_sta_uapsd_auto_trig_arg arg = {};
5411 u32 prio = 0, acc = 0;
5415 lockdep_assert_held(&ar->conf_mutex);
5417 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
5421 case IEEE80211_AC_VO:
5422 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
5423 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
5427 case IEEE80211_AC_VI:
5428 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
5429 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
5433 case IEEE80211_AC_BE:
5434 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
5435 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
5439 case IEEE80211_AC_BK:
5440 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
5441 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
5448 arvif->u.sta.uapsd |= value;
5450 arvif->u.sta.uapsd &= ~value;
5452 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5453 WMI_STA_PS_PARAM_UAPSD,
5454 arvif->u.sta.uapsd);
5456 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
5460 if (arvif->u.sta.uapsd)
5461 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
5463 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
5465 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5466 WMI_STA_PS_PARAM_RX_WAKE_POLICY,
5469 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
5471 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
5473 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
5474 arvif->vdev_id, ret);
5478 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
5480 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
5481 arvif->vdev_id, ret);
5485 if (test_bit(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, ar->wmi.svc_map) ||
5486 test_bit(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, ar->wmi.svc_map)) {
5487 /* Only userspace can make an educated decision when to send
5488 * trigger frame. The following effectively disables u-UAPSD
5489 * autotrigger in firmware (which is enabled by default
5490 * provided the autotrigger service is available).
5494 arg.user_priority = prio;
5495 arg.service_interval = 0;
5496 arg.suspend_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
5497 arg.delay_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
5499 ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id,
5500 arvif->bssid, &arg, 1);
5502 ath10k_warn(ar, "failed to set uapsd auto trigger %d\n",
5512 static int ath10k_conf_tx(struct ieee80211_hw *hw,
5513 struct ieee80211_vif *vif, u16 ac,
5514 const struct ieee80211_tx_queue_params *params)
5516 struct ath10k *ar = hw->priv;
5517 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5518 struct wmi_wmm_params_arg *p = NULL;
5521 mutex_lock(&ar->conf_mutex);
5524 case IEEE80211_AC_VO:
5525 p = &arvif->wmm_params.ac_vo;
5527 case IEEE80211_AC_VI:
5528 p = &arvif->wmm_params.ac_vi;
5530 case IEEE80211_AC_BE:
5531 p = &arvif->wmm_params.ac_be;
5533 case IEEE80211_AC_BK:
5534 p = &arvif->wmm_params.ac_bk;
5543 p->cwmin = params->cw_min;
5544 p->cwmax = params->cw_max;
5545 p->aifs = params->aifs;
5548 * The channel time duration programmed in the HW is in absolute
5549 * microseconds, while mac80211 gives the txop in units of
5552 p->txop = params->txop * 32;
5554 if (ar->wmi.ops->gen_vdev_wmm_conf) {
5555 ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id,
5556 &arvif->wmm_params);
5558 ath10k_warn(ar, "failed to set vdev wmm params on vdev %i: %d\n",
5559 arvif->vdev_id, ret);
5563 /* This won't work well with multi-interface cases but it's
5564 * better than nothing.
5566 ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params);
5568 ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
5573 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
5575 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
5578 mutex_unlock(&ar->conf_mutex);
5582 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
5584 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
5585 struct ieee80211_vif *vif,
5586 struct ieee80211_channel *chan,
5588 enum ieee80211_roc_type type)
5590 struct ath10k *ar = hw->priv;
5591 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5592 struct wmi_start_scan_arg arg;
5596 mutex_lock(&ar->conf_mutex);
5598 spin_lock_bh(&ar->data_lock);
5599 switch (ar->scan.state) {
5600 case ATH10K_SCAN_IDLE:
5601 reinit_completion(&ar->scan.started);
5602 reinit_completion(&ar->scan.completed);
5603 reinit_completion(&ar->scan.on_channel);
5604 ar->scan.state = ATH10K_SCAN_STARTING;
5605 ar->scan.is_roc = true;
5606 ar->scan.vdev_id = arvif->vdev_id;
5607 ar->scan.roc_freq = chan->center_freq;
5608 ar->scan.roc_notify = true;
5611 case ATH10K_SCAN_STARTING:
5612 case ATH10K_SCAN_RUNNING:
5613 case ATH10K_SCAN_ABORTING:
5617 spin_unlock_bh(&ar->data_lock);
5622 scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;
5624 memset(&arg, 0, sizeof(arg));
5625 ath10k_wmi_start_scan_init(ar, &arg);
5626 arg.vdev_id = arvif->vdev_id;
5627 arg.scan_id = ATH10K_SCAN_ID;
5629 arg.channels[0] = chan->center_freq;
5630 arg.dwell_time_active = scan_time_msec;
5631 arg.dwell_time_passive = scan_time_msec;
5632 arg.max_scan_time = scan_time_msec;
5633 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
5634 arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
5635 arg.burst_duration_ms = duration;
5637 ret = ath10k_start_scan(ar, &arg);
5639 ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
5640 spin_lock_bh(&ar->data_lock);
5641 ar->scan.state = ATH10K_SCAN_IDLE;
5642 spin_unlock_bh(&ar->data_lock);
5646 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
5648 ath10k_warn(ar, "failed to switch to channel for roc scan\n");
5650 ret = ath10k_scan_stop(ar);
5652 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
5658 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
5659 msecs_to_jiffies(duration));
5663 mutex_unlock(&ar->conf_mutex);
5667 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
5669 struct ath10k *ar = hw->priv;
5671 mutex_lock(&ar->conf_mutex);
5673 spin_lock_bh(&ar->data_lock);
5674 ar->scan.roc_notify = false;
5675 spin_unlock_bh(&ar->data_lock);
5677 ath10k_scan_abort(ar);
5679 mutex_unlock(&ar->conf_mutex);
5681 cancel_delayed_work_sync(&ar->scan.timeout);
5687 * Both RTS and Fragmentation threshold are interface-specific
5688 * in ath10k, but device-specific in mac80211.
5691 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
5693 struct ath10k *ar = hw->priv;
5694 struct ath10k_vif *arvif;
5697 mutex_lock(&ar->conf_mutex);
5698 list_for_each_entry(arvif, &ar->arvifs, list) {
5699 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
5700 arvif->vdev_id, value);
5702 ret = ath10k_mac_set_rts(arvif, value);
5704 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
5705 arvif->vdev_id, ret);
5709 mutex_unlock(&ar->conf_mutex);
5714 static int ath10k_mac_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
5716 /* Even though there's a WMI enum for fragmentation threshold no known
5717 * firmware actually implements it. Moreover it is not possible to rely
5718 * frame fragmentation to mac80211 because firmware clears the "more
5719 * fragments" bit in frame control making it impossible for remote
5720 * devices to reassemble frames.
5722 * Hence implement a dummy callback just to say fragmentation isn't
5723 * supported. This effectively prevents mac80211 from doing frame
5724 * fragmentation in software.
5729 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
5730 u32 queues, bool drop)
5732 struct ath10k *ar = hw->priv;
5736 /* mac80211 doesn't care if we really xmit queued frames or not
5737 * we'll collect those frames either way if we stop/delete vdevs */
5741 mutex_lock(&ar->conf_mutex);
5743 if (ar->state == ATH10K_STATE_WEDGED)
5746 time_left = wait_event_timeout(ar->htt.empty_tx_wq, ({
5749 spin_lock_bh(&ar->htt.tx_lock);
5750 empty = (ar->htt.num_pending_tx == 0);
5751 spin_unlock_bh(&ar->htt.tx_lock);
5753 skip = (ar->state == ATH10K_STATE_WEDGED) ||
5754 test_bit(ATH10K_FLAG_CRASH_FLUSH,
5758 }), ATH10K_FLUSH_TIMEOUT_HZ);
5760 if (time_left == 0 || skip)
5761 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %ld\n",
5762 skip, ar->state, time_left);
5765 mutex_unlock(&ar->conf_mutex);
5768 /* TODO: Implement this function properly
5769 * For now it is needed to reply to Probe Requests in IBSS mode.
5770 * Propably we need this information from FW.
5772 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
5777 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
5778 enum ieee80211_reconfig_type reconfig_type)
5780 struct ath10k *ar = hw->priv;
5782 if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
5785 mutex_lock(&ar->conf_mutex);
5787 /* If device failed to restart it will be in a different state, e.g.
5788 * ATH10K_STATE_WEDGED */
5789 if (ar->state == ATH10K_STATE_RESTARTED) {
5790 ath10k_info(ar, "device successfully recovered\n");
5791 ar->state = ATH10K_STATE_ON;
5792 ieee80211_wake_queues(ar->hw);
5795 mutex_unlock(&ar->conf_mutex);
5798 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
5799 struct survey_info *survey)
5801 struct ath10k *ar = hw->priv;
5802 struct ieee80211_supported_band *sband;
5803 struct survey_info *ar_survey = &ar->survey[idx];
5806 mutex_lock(&ar->conf_mutex);
5808 sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
5809 if (sband && idx >= sband->n_channels) {
5810 idx -= sband->n_channels;
5815 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
5817 if (!sband || idx >= sband->n_channels) {
5822 spin_lock_bh(&ar->data_lock);
5823 memcpy(survey, ar_survey, sizeof(*survey));
5824 spin_unlock_bh(&ar->data_lock);
5826 survey->channel = &sband->channels[idx];
5828 if (ar->rx_channel == survey->channel)
5829 survey->filled |= SURVEY_INFO_IN_USE;
5832 mutex_unlock(&ar->conf_mutex);
5837 ath10k_mac_bitrate_mask_has_single_rate(struct ath10k *ar,
5838 enum ieee80211_band band,
5839 const struct cfg80211_bitrate_mask *mask)
5844 num_rates += hweight32(mask->control[band].legacy);
5846 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++)
5847 num_rates += hweight8(mask->control[band].ht_mcs[i]);
5849 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++)
5850 num_rates += hweight16(mask->control[band].vht_mcs[i]);
5852 return num_rates == 1;
5856 ath10k_mac_bitrate_mask_get_single_nss(struct ath10k *ar,
5857 enum ieee80211_band band,
5858 const struct cfg80211_bitrate_mask *mask,
5861 struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
5862 u16 vht_mcs_map = le16_to_cpu(sband->vht_cap.vht_mcs.tx_mcs_map);
5864 u8 vht_nss_mask = 0;
5867 if (mask->control[band].legacy)
5870 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
5871 if (mask->control[band].ht_mcs[i] == 0)
5873 else if (mask->control[band].ht_mcs[i] ==
5874 sband->ht_cap.mcs.rx_mask[i])
5875 ht_nss_mask |= BIT(i);
5880 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
5881 if (mask->control[band].vht_mcs[i] == 0)
5883 else if (mask->control[band].vht_mcs[i] ==
5884 ath10k_mac_get_max_vht_mcs_map(vht_mcs_map, i))
5885 vht_nss_mask |= BIT(i);
5890 if (ht_nss_mask != vht_nss_mask)
5893 if (ht_nss_mask == 0)
5896 if (BIT(fls(ht_nss_mask)) - 1 != ht_nss_mask)
5899 *nss = fls(ht_nss_mask);
5905 ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
5906 enum ieee80211_band band,
5907 const struct cfg80211_bitrate_mask *mask,
5910 struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
5917 if (hweight32(mask->control[band].legacy) == 1) {
5918 rate_idx = ffs(mask->control[band].legacy) - 1;
5920 hw_rate = sband->bitrates[rate_idx].hw_value;
5921 bitrate = sband->bitrates[rate_idx].bitrate;
5923 if (ath10k_mac_bitrate_is_cck(bitrate))
5924 preamble = WMI_RATE_PREAMBLE_CCK;
5926 preamble = WMI_RATE_PREAMBLE_OFDM;
5929 *rate = preamble << 6 |
5936 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
5937 if (hweight8(mask->control[band].ht_mcs[i]) == 1) {
5939 *rate = WMI_RATE_PREAMBLE_HT << 6 |
5941 (ffs(mask->control[band].ht_mcs[i]) - 1);
5947 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
5948 if (hweight16(mask->control[band].vht_mcs[i]) == 1) {
5950 *rate = WMI_RATE_PREAMBLE_VHT << 6 |
5952 (ffs(mask->control[band].vht_mcs[i]) - 1);
5961 static int ath10k_mac_set_fixed_rate_params(struct ath10k_vif *arvif,
5962 u8 rate, u8 nss, u8 sgi, u8 ldpc)
5964 struct ath10k *ar = arvif->ar;
5968 lockdep_assert_held(&ar->conf_mutex);
5970 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02hhx nss %hhu sgi %hhu\n",
5971 arvif->vdev_id, rate, nss, sgi);
5973 vdev_param = ar->wmi.vdev_param->fixed_rate;
5974 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate);
5976 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
5981 vdev_param = ar->wmi.vdev_param->nss;
5982 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, nss);
5984 ath10k_warn(ar, "failed to set nss param %d: %d\n", nss, ret);
5988 vdev_param = ar->wmi.vdev_param->sgi;
5989 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, sgi);
5991 ath10k_warn(ar, "failed to set sgi param %d: %d\n", sgi, ret);
5995 vdev_param = ar->wmi.vdev_param->ldpc;
5996 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, ldpc);
5998 ath10k_warn(ar, "failed to set ldpc param %d: %d\n", ldpc, ret);
6006 ath10k_mac_can_set_bitrate_mask(struct ath10k *ar,
6007 enum ieee80211_band band,
6008 const struct cfg80211_bitrate_mask *mask)
6013 /* Due to firmware limitation in WMI_PEER_ASSOC_CMDID it is impossible
6014 * to express all VHT MCS rate masks. Effectively only the following
6015 * ranges can be used: none, 0-7, 0-8 and 0-9.
6017 for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
6018 vht_mcs = mask->control[band].vht_mcs[i];
6027 ath10k_warn(ar, "refusing bitrate mask with missing 0-7 VHT MCS rates\n");
6035 static void ath10k_mac_set_bitrate_mask_iter(void *data,
6036 struct ieee80211_sta *sta)
6038 struct ath10k_vif *arvif = data;
6039 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
6040 struct ath10k *ar = arvif->ar;
6042 if (arsta->arvif != arvif)
6045 spin_lock_bh(&ar->data_lock);
6046 arsta->changed |= IEEE80211_RC_SUPP_RATES_CHANGED;
6047 spin_unlock_bh(&ar->data_lock);
6049 ieee80211_queue_work(ar->hw, &arsta->update_wk);
6052 static int ath10k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
6053 struct ieee80211_vif *vif,
6054 const struct cfg80211_bitrate_mask *mask)
6056 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6057 struct cfg80211_chan_def def;
6058 struct ath10k *ar = arvif->ar;
6059 enum ieee80211_band band;
6060 const u8 *ht_mcs_mask;
6061 const u16 *vht_mcs_mask;
6069 if (ath10k_mac_vif_chan(vif, &def))
6072 band = def.chan->band;
6073 ht_mcs_mask = mask->control[band].ht_mcs;
6074 vht_mcs_mask = mask->control[band].vht_mcs;
6075 ldpc = !!(ar->ht_cap_info & WMI_HT_CAP_LDPC);
6077 sgi = mask->control[band].gi;
6078 if (sgi == NL80211_TXRATE_FORCE_LGI)
6081 if (ath10k_mac_bitrate_mask_has_single_rate(ar, band, mask)) {
6082 ret = ath10k_mac_bitrate_mask_get_single_rate(ar, band, mask,
6085 ath10k_warn(ar, "failed to get single rate for vdev %i: %d\n",
6086 arvif->vdev_id, ret);
6089 } else if (ath10k_mac_bitrate_mask_get_single_nss(ar, band, mask,
6091 rate = WMI_FIXED_RATE_NONE;
6094 rate = WMI_FIXED_RATE_NONE;
6095 nss = min(ar->num_rf_chains,
6096 max(ath10k_mac_max_ht_nss(ht_mcs_mask),
6097 ath10k_mac_max_vht_nss(vht_mcs_mask)));
6099 if (!ath10k_mac_can_set_bitrate_mask(ar, band, mask))
6102 mutex_lock(&ar->conf_mutex);
6104 arvif->bitrate_mask = *mask;
6105 ieee80211_iterate_stations_atomic(ar->hw,
6106 ath10k_mac_set_bitrate_mask_iter,
6109 mutex_unlock(&ar->conf_mutex);
6112 mutex_lock(&ar->conf_mutex);
6114 ret = ath10k_mac_set_fixed_rate_params(arvif, rate, nss, sgi, ldpc);
6116 ath10k_warn(ar, "failed to set fixed rate params on vdev %i: %d\n",
6117 arvif->vdev_id, ret);
6122 mutex_unlock(&ar->conf_mutex);
6127 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
6128 struct ieee80211_vif *vif,
6129 struct ieee80211_sta *sta,
6132 struct ath10k *ar = hw->priv;
6133 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
6136 spin_lock_bh(&ar->data_lock);
6138 ath10k_dbg(ar, ATH10K_DBG_MAC,
6139 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
6140 sta->addr, changed, sta->bandwidth, sta->rx_nss,
6143 if (changed & IEEE80211_RC_BW_CHANGED) {
6144 bw = WMI_PEER_CHWIDTH_20MHZ;
6146 switch (sta->bandwidth) {
6147 case IEEE80211_STA_RX_BW_20:
6148 bw = WMI_PEER_CHWIDTH_20MHZ;
6150 case IEEE80211_STA_RX_BW_40:
6151 bw = WMI_PEER_CHWIDTH_40MHZ;
6153 case IEEE80211_STA_RX_BW_80:
6154 bw = WMI_PEER_CHWIDTH_80MHZ;
6156 case IEEE80211_STA_RX_BW_160:
6157 ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n",
6158 sta->bandwidth, sta->addr);
6159 bw = WMI_PEER_CHWIDTH_20MHZ;
6166 if (changed & IEEE80211_RC_NSS_CHANGED)
6167 arsta->nss = sta->rx_nss;
6169 if (changed & IEEE80211_RC_SMPS_CHANGED) {
6170 smps = WMI_PEER_SMPS_PS_NONE;
6172 switch (sta->smps_mode) {
6173 case IEEE80211_SMPS_AUTOMATIC:
6174 case IEEE80211_SMPS_OFF:
6175 smps = WMI_PEER_SMPS_PS_NONE;
6177 case IEEE80211_SMPS_STATIC:
6178 smps = WMI_PEER_SMPS_STATIC;
6180 case IEEE80211_SMPS_DYNAMIC:
6181 smps = WMI_PEER_SMPS_DYNAMIC;
6183 case IEEE80211_SMPS_NUM_MODES:
6184 ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
6185 sta->smps_mode, sta->addr);
6186 smps = WMI_PEER_SMPS_PS_NONE;
6193 arsta->changed |= changed;
6195 spin_unlock_bh(&ar->data_lock);
6197 ieee80211_queue_work(hw, &arsta->update_wk);
6200 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
6203 * FIXME: Return 0 for time being. Need to figure out whether FW
6204 * has the API to fetch 64-bit local TSF
6210 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
6211 struct ieee80211_vif *vif,
6212 enum ieee80211_ampdu_mlme_action action,
6213 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
6216 struct ath10k *ar = hw->priv;
6217 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6219 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
6220 arvif->vdev_id, sta->addr, tid, action);
6223 case IEEE80211_AMPDU_RX_START:
6224 case IEEE80211_AMPDU_RX_STOP:
6225 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
6226 * creation/removal. Do we need to verify this?
6229 case IEEE80211_AMPDU_TX_START:
6230 case IEEE80211_AMPDU_TX_STOP_CONT:
6231 case IEEE80211_AMPDU_TX_STOP_FLUSH:
6232 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
6233 case IEEE80211_AMPDU_TX_OPERATIONAL:
6234 /* Firmware offloads Tx aggregation entirely so deny mac80211
6235 * Tx aggregation requests.
6244 ath10k_mac_update_rx_channel(struct ath10k *ar,
6245 struct ieee80211_chanctx_conf *ctx,
6246 struct ieee80211_vif_chanctx_switch *vifs,
6249 struct cfg80211_chan_def *def = NULL;
6251 /* Both locks are required because ar->rx_channel is modified. This
6252 * allows readers to hold either lock.
6254 lockdep_assert_held(&ar->conf_mutex);
6255 lockdep_assert_held(&ar->data_lock);
6257 WARN_ON(ctx && vifs);
6258 WARN_ON(vifs && n_vifs != 1);
6260 /* FIXME: Sort of an optimization and a workaround. Peers and vifs are
6261 * on a linked list now. Doing a lookup peer -> vif -> chanctx for each
6262 * ppdu on Rx may reduce performance on low-end systems. It should be
6263 * possible to make tables/hashmaps to speed the lookup up (be vary of
6264 * cpu data cache lines though regarding sizes) but to keep the initial
6265 * implementation simple and less intrusive fallback to the slow lookup
6266 * only for multi-channel cases. Single-channel cases will remain to
6267 * use the old channel derival and thus performance should not be
6271 if (!ctx && ath10k_mac_num_chanctxs(ar) == 1) {
6272 ieee80211_iter_chan_contexts_atomic(ar->hw,
6273 ath10k_mac_get_any_chandef_iter,
6277 def = &vifs[0].new_ctx->def;
6279 ar->rx_channel = def->chan;
6280 } else if (ctx && ath10k_mac_num_chanctxs(ar) == 0) {
6281 ar->rx_channel = ctx->def.chan;
6283 ar->rx_channel = NULL;
6289 ath10k_mac_update_vif_chan(struct ath10k *ar,
6290 struct ieee80211_vif_chanctx_switch *vifs,
6293 struct ath10k_vif *arvif;
6297 lockdep_assert_held(&ar->conf_mutex);
6299 /* First stop monitor interface. Some FW versions crash if there's a
6300 * lone monitor interface.
6302 if (ar->monitor_started)
6303 ath10k_monitor_stop(ar);
6305 for (i = 0; i < n_vifs; i++) {
6306 arvif = ath10k_vif_to_arvif(vifs[i].vif);
6308 ath10k_dbg(ar, ATH10K_DBG_MAC,
6309 "mac chanctx switch vdev_id %i freq %hu->%hu width %d->%d\n",
6311 vifs[i].old_ctx->def.chan->center_freq,
6312 vifs[i].new_ctx->def.chan->center_freq,
6313 vifs[i].old_ctx->def.width,
6314 vifs[i].new_ctx->def.width);
6316 if (WARN_ON(!arvif->is_started))
6319 if (WARN_ON(!arvif->is_up))
6322 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
6324 ath10k_warn(ar, "failed to down vdev %d: %d\n",
6325 arvif->vdev_id, ret);
6330 /* All relevant vdevs are downed and associated channel resources
6331 * should be available for the channel switch now.
6334 spin_lock_bh(&ar->data_lock);
6335 ath10k_mac_update_rx_channel(ar, NULL, vifs, n_vifs);
6336 spin_unlock_bh(&ar->data_lock);
6338 for (i = 0; i < n_vifs; i++) {
6339 arvif = ath10k_vif_to_arvif(vifs[i].vif);
6341 if (WARN_ON(!arvif->is_started))
6344 if (WARN_ON(!arvif->is_up))
6347 ret = ath10k_mac_setup_bcn_tmpl(arvif);
6349 ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
6352 ret = ath10k_mac_setup_prb_tmpl(arvif);
6354 ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
6357 ret = ath10k_vdev_restart(arvif, &vifs[i].new_ctx->def);
6359 ath10k_warn(ar, "failed to restart vdev %d: %d\n",
6360 arvif->vdev_id, ret);
6364 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
6367 ath10k_warn(ar, "failed to bring vdev up %d: %d\n",
6368 arvif->vdev_id, ret);
6373 ath10k_monitor_recalc(ar);
6377 ath10k_mac_op_add_chanctx(struct ieee80211_hw *hw,
6378 struct ieee80211_chanctx_conf *ctx)
6380 struct ath10k *ar = hw->priv;
6382 ath10k_dbg(ar, ATH10K_DBG_MAC,
6383 "mac chanctx add freq %hu width %d ptr %p\n",
6384 ctx->def.chan->center_freq, ctx->def.width, ctx);
6386 mutex_lock(&ar->conf_mutex);
6388 spin_lock_bh(&ar->data_lock);
6389 ath10k_mac_update_rx_channel(ar, ctx, NULL, 0);
6390 spin_unlock_bh(&ar->data_lock);
6392 ath10k_recalc_radar_detection(ar);
6393 ath10k_monitor_recalc(ar);
6395 mutex_unlock(&ar->conf_mutex);
6401 ath10k_mac_op_remove_chanctx(struct ieee80211_hw *hw,
6402 struct ieee80211_chanctx_conf *ctx)
6404 struct ath10k *ar = hw->priv;
6406 ath10k_dbg(ar, ATH10K_DBG_MAC,
6407 "mac chanctx remove freq %hu width %d ptr %p\n",
6408 ctx->def.chan->center_freq, ctx->def.width, ctx);
6410 mutex_lock(&ar->conf_mutex);
6412 spin_lock_bh(&ar->data_lock);
6413 ath10k_mac_update_rx_channel(ar, NULL, NULL, 0);
6414 spin_unlock_bh(&ar->data_lock);
6416 ath10k_recalc_radar_detection(ar);
6417 ath10k_monitor_recalc(ar);
6419 mutex_unlock(&ar->conf_mutex);
6422 struct ath10k_mac_change_chanctx_arg {
6423 struct ieee80211_chanctx_conf *ctx;
6424 struct ieee80211_vif_chanctx_switch *vifs;
6430 ath10k_mac_change_chanctx_cnt_iter(void *data, u8 *mac,
6431 struct ieee80211_vif *vif)
6433 struct ath10k_mac_change_chanctx_arg *arg = data;
6435 if (rcu_access_pointer(vif->chanctx_conf) != arg->ctx)
6442 ath10k_mac_change_chanctx_fill_iter(void *data, u8 *mac,
6443 struct ieee80211_vif *vif)
6445 struct ath10k_mac_change_chanctx_arg *arg = data;
6446 struct ieee80211_chanctx_conf *ctx;
6448 ctx = rcu_access_pointer(vif->chanctx_conf);
6449 if (ctx != arg->ctx)
6452 if (WARN_ON(arg->next_vif == arg->n_vifs))
6455 arg->vifs[arg->next_vif].vif = vif;
6456 arg->vifs[arg->next_vif].old_ctx = ctx;
6457 arg->vifs[arg->next_vif].new_ctx = ctx;
6462 ath10k_mac_op_change_chanctx(struct ieee80211_hw *hw,
6463 struct ieee80211_chanctx_conf *ctx,
6466 struct ath10k *ar = hw->priv;
6467 struct ath10k_mac_change_chanctx_arg arg = { .ctx = ctx };
6469 mutex_lock(&ar->conf_mutex);
6471 ath10k_dbg(ar, ATH10K_DBG_MAC,
6472 "mac chanctx change freq %hu width %d ptr %p changed %x\n",
6473 ctx->def.chan->center_freq, ctx->def.width, ctx, changed);
6475 /* This shouldn't really happen because channel switching should use
6476 * switch_vif_chanctx().
6478 if (WARN_ON(changed & IEEE80211_CHANCTX_CHANGE_CHANNEL))
6481 if (changed & IEEE80211_CHANCTX_CHANGE_WIDTH) {
6482 ieee80211_iterate_active_interfaces_atomic(
6484 IEEE80211_IFACE_ITER_NORMAL,
6485 ath10k_mac_change_chanctx_cnt_iter,
6487 if (arg.n_vifs == 0)
6490 arg.vifs = kcalloc(arg.n_vifs, sizeof(arg.vifs[0]),
6495 ieee80211_iterate_active_interfaces_atomic(
6497 IEEE80211_IFACE_ITER_NORMAL,
6498 ath10k_mac_change_chanctx_fill_iter,
6500 ath10k_mac_update_vif_chan(ar, arg.vifs, arg.n_vifs);
6505 ath10k_recalc_radar_detection(ar);
6507 /* FIXME: How to configure Rx chains properly? */
6509 /* No other actions are actually necessary. Firmware maintains channel
6510 * definitions per vdev internally and there's no host-side channel
6511 * context abstraction to configure, e.g. channel width.
6515 mutex_unlock(&ar->conf_mutex);
6519 ath10k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
6520 struct ieee80211_vif *vif,
6521 struct ieee80211_chanctx_conf *ctx)
6523 struct ath10k *ar = hw->priv;
6524 struct ath10k_vif *arvif = (void *)vif->drv_priv;
6527 mutex_lock(&ar->conf_mutex);
6529 ath10k_dbg(ar, ATH10K_DBG_MAC,
6530 "mac chanctx assign ptr %p vdev_id %i\n",
6531 ctx, arvif->vdev_id);
6533 if (WARN_ON(arvif->is_started)) {
6534 mutex_unlock(&ar->conf_mutex);
6538 ret = ath10k_vdev_start(arvif, &ctx->def);
6540 ath10k_warn(ar, "failed to start vdev %i addr %pM on freq %d: %d\n",
6541 arvif->vdev_id, vif->addr,
6542 ctx->def.chan->center_freq, ret);
6546 arvif->is_started = true;
6548 ret = ath10k_mac_vif_setup_ps(arvif);
6550 ath10k_warn(ar, "failed to update vdev %i ps: %d\n",
6551 arvif->vdev_id, ret);
6555 if (vif->type == NL80211_IFTYPE_MONITOR) {
6556 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, 0, vif->addr);
6558 ath10k_warn(ar, "failed to up monitor vdev %i: %d\n",
6559 arvif->vdev_id, ret);
6563 arvif->is_up = true;
6566 mutex_unlock(&ar->conf_mutex);
6570 ath10k_vdev_stop(arvif);
6571 arvif->is_started = false;
6572 ath10k_mac_vif_setup_ps(arvif);
6575 mutex_unlock(&ar->conf_mutex);
6580 ath10k_mac_op_unassign_vif_chanctx(struct ieee80211_hw *hw,
6581 struct ieee80211_vif *vif,
6582 struct ieee80211_chanctx_conf *ctx)
6584 struct ath10k *ar = hw->priv;
6585 struct ath10k_vif *arvif = (void *)vif->drv_priv;
6588 mutex_lock(&ar->conf_mutex);
6590 ath10k_dbg(ar, ATH10K_DBG_MAC,
6591 "mac chanctx unassign ptr %p vdev_id %i\n",
6592 ctx, arvif->vdev_id);
6594 WARN_ON(!arvif->is_started);
6596 if (vif->type == NL80211_IFTYPE_MONITOR) {
6597 WARN_ON(!arvif->is_up);
6599 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
6601 ath10k_warn(ar, "failed to down monitor vdev %i: %d\n",
6602 arvif->vdev_id, ret);
6604 arvif->is_up = false;
6607 ret = ath10k_vdev_stop(arvif);
6609 ath10k_warn(ar, "failed to stop vdev %i: %d\n",
6610 arvif->vdev_id, ret);
6612 arvif->is_started = false;
6614 mutex_unlock(&ar->conf_mutex);
6618 ath10k_mac_op_switch_vif_chanctx(struct ieee80211_hw *hw,
6619 struct ieee80211_vif_chanctx_switch *vifs,
6621 enum ieee80211_chanctx_switch_mode mode)
6623 struct ath10k *ar = hw->priv;
6625 mutex_lock(&ar->conf_mutex);
6627 ath10k_dbg(ar, ATH10K_DBG_MAC,
6628 "mac chanctx switch n_vifs %d mode %d\n",
6630 ath10k_mac_update_vif_chan(ar, vifs, n_vifs);
6632 mutex_unlock(&ar->conf_mutex);
6636 static const struct ieee80211_ops ath10k_ops = {
6638 .start = ath10k_start,
6639 .stop = ath10k_stop,
6640 .config = ath10k_config,
6641 .add_interface = ath10k_add_interface,
6642 .remove_interface = ath10k_remove_interface,
6643 .configure_filter = ath10k_configure_filter,
6644 .bss_info_changed = ath10k_bss_info_changed,
6645 .hw_scan = ath10k_hw_scan,
6646 .cancel_hw_scan = ath10k_cancel_hw_scan,
6647 .set_key = ath10k_set_key,
6648 .set_default_unicast_key = ath10k_set_default_unicast_key,
6649 .sta_state = ath10k_sta_state,
6650 .conf_tx = ath10k_conf_tx,
6651 .remain_on_channel = ath10k_remain_on_channel,
6652 .cancel_remain_on_channel = ath10k_cancel_remain_on_channel,
6653 .set_rts_threshold = ath10k_set_rts_threshold,
6654 .set_frag_threshold = ath10k_mac_op_set_frag_threshold,
6655 .flush = ath10k_flush,
6656 .tx_last_beacon = ath10k_tx_last_beacon,
6657 .set_antenna = ath10k_set_antenna,
6658 .get_antenna = ath10k_get_antenna,
6659 .reconfig_complete = ath10k_reconfig_complete,
6660 .get_survey = ath10k_get_survey,
6661 .set_bitrate_mask = ath10k_mac_op_set_bitrate_mask,
6662 .sta_rc_update = ath10k_sta_rc_update,
6663 .get_tsf = ath10k_get_tsf,
6664 .ampdu_action = ath10k_ampdu_action,
6665 .get_et_sset_count = ath10k_debug_get_et_sset_count,
6666 .get_et_stats = ath10k_debug_get_et_stats,
6667 .get_et_strings = ath10k_debug_get_et_strings,
6668 .add_chanctx = ath10k_mac_op_add_chanctx,
6669 .remove_chanctx = ath10k_mac_op_remove_chanctx,
6670 .change_chanctx = ath10k_mac_op_change_chanctx,
6671 .assign_vif_chanctx = ath10k_mac_op_assign_vif_chanctx,
6672 .unassign_vif_chanctx = ath10k_mac_op_unassign_vif_chanctx,
6673 .switch_vif_chanctx = ath10k_mac_op_switch_vif_chanctx,
6675 CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
6678 .suspend = ath10k_wow_op_suspend,
6679 .resume = ath10k_wow_op_resume,
6681 #ifdef CONFIG_MAC80211_DEBUGFS
6682 .sta_add_debugfs = ath10k_sta_add_debugfs,
6686 #define CHAN2G(_channel, _freq, _flags) { \
6687 .band = IEEE80211_BAND_2GHZ, \
6688 .hw_value = (_channel), \
6689 .center_freq = (_freq), \
6690 .flags = (_flags), \
6691 .max_antenna_gain = 0, \
6695 #define CHAN5G(_channel, _freq, _flags) { \
6696 .band = IEEE80211_BAND_5GHZ, \
6697 .hw_value = (_channel), \
6698 .center_freq = (_freq), \
6699 .flags = (_flags), \
6700 .max_antenna_gain = 0, \
6704 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
6714 CHAN2G(10, 2457, 0),
6715 CHAN2G(11, 2462, 0),
6716 CHAN2G(12, 2467, 0),
6717 CHAN2G(13, 2472, 0),
6718 CHAN2G(14, 2484, 0),
6721 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
6722 CHAN5G(36, 5180, 0),
6723 CHAN5G(40, 5200, 0),
6724 CHAN5G(44, 5220, 0),
6725 CHAN5G(48, 5240, 0),
6726 CHAN5G(52, 5260, 0),
6727 CHAN5G(56, 5280, 0),
6728 CHAN5G(60, 5300, 0),
6729 CHAN5G(64, 5320, 0),
6730 CHAN5G(100, 5500, 0),
6731 CHAN5G(104, 5520, 0),
6732 CHAN5G(108, 5540, 0),
6733 CHAN5G(112, 5560, 0),
6734 CHAN5G(116, 5580, 0),
6735 CHAN5G(120, 5600, 0),
6736 CHAN5G(124, 5620, 0),
6737 CHAN5G(128, 5640, 0),
6738 CHAN5G(132, 5660, 0),
6739 CHAN5G(136, 5680, 0),
6740 CHAN5G(140, 5700, 0),
6741 CHAN5G(144, 5720, 0),
6742 CHAN5G(149, 5745, 0),
6743 CHAN5G(153, 5765, 0),
6744 CHAN5G(157, 5785, 0),
6745 CHAN5G(161, 5805, 0),
6746 CHAN5G(165, 5825, 0),
6749 struct ath10k *ath10k_mac_create(size_t priv_size)
6751 struct ieee80211_hw *hw;
6754 hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
6764 void ath10k_mac_destroy(struct ath10k *ar)
6766 ieee80211_free_hw(ar->hw);
6769 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
6772 .types = BIT(NL80211_IFTYPE_STATION)
6773 | BIT(NL80211_IFTYPE_P2P_CLIENT)
6777 .types = BIT(NL80211_IFTYPE_P2P_GO)
6781 .types = BIT(NL80211_IFTYPE_P2P_DEVICE)
6785 .types = BIT(NL80211_IFTYPE_AP)
6786 #ifdef CONFIG_MAC80211_MESH
6787 | BIT(NL80211_IFTYPE_MESH_POINT)
6792 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
6795 .types = BIT(NL80211_IFTYPE_AP)
6796 #ifdef CONFIG_MAC80211_MESH
6797 | BIT(NL80211_IFTYPE_MESH_POINT)
6802 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
6804 .limits = ath10k_if_limits,
6805 .n_limits = ARRAY_SIZE(ath10k_if_limits),
6806 .max_interfaces = 8,
6807 .num_different_channels = 1,
6808 .beacon_int_infra_match = true,
6812 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
6814 .limits = ath10k_10x_if_limits,
6815 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
6816 .max_interfaces = 8,
6817 .num_different_channels = 1,
6818 .beacon_int_infra_match = true,
6819 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
6820 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
6821 BIT(NL80211_CHAN_WIDTH_20) |
6822 BIT(NL80211_CHAN_WIDTH_40) |
6823 BIT(NL80211_CHAN_WIDTH_80),
6828 static const struct ieee80211_iface_limit ath10k_tlv_if_limit[] = {
6831 .types = BIT(NL80211_IFTYPE_STATION),
6835 .types = BIT(NL80211_IFTYPE_AP) |
6836 #ifdef CONFIG_MAC80211_MESH
6837 BIT(NL80211_IFTYPE_MESH_POINT) |
6839 BIT(NL80211_IFTYPE_P2P_CLIENT) |
6840 BIT(NL80211_IFTYPE_P2P_GO),
6844 .types = BIT(NL80211_IFTYPE_P2P_DEVICE),
6848 static const struct ieee80211_iface_limit ath10k_tlv_qcs_if_limit[] = {
6851 .types = BIT(NL80211_IFTYPE_STATION),
6855 .types = BIT(NL80211_IFTYPE_P2P_CLIENT),
6859 .types = BIT(NL80211_IFTYPE_AP) |
6860 #ifdef CONFIG_MAC80211_MESH
6861 BIT(NL80211_IFTYPE_MESH_POINT) |
6863 BIT(NL80211_IFTYPE_P2P_GO),
6867 .types = BIT(NL80211_IFTYPE_P2P_DEVICE),
6871 static const struct ieee80211_iface_limit ath10k_tlv_if_limit_ibss[] = {
6874 .types = BIT(NL80211_IFTYPE_STATION),
6878 .types = BIT(NL80211_IFTYPE_ADHOC),
6882 /* FIXME: This is not thouroughly tested. These combinations may over- or
6883 * underestimate hw/fw capabilities.
6885 static struct ieee80211_iface_combination ath10k_tlv_if_comb[] = {
6887 .limits = ath10k_tlv_if_limit,
6888 .num_different_channels = 1,
6889 .max_interfaces = 4,
6890 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
6893 .limits = ath10k_tlv_if_limit_ibss,
6894 .num_different_channels = 1,
6895 .max_interfaces = 2,
6896 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
6900 static struct ieee80211_iface_combination ath10k_tlv_qcs_if_comb[] = {
6902 .limits = ath10k_tlv_if_limit,
6903 .num_different_channels = 1,
6904 .max_interfaces = 4,
6905 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
6908 .limits = ath10k_tlv_qcs_if_limit,
6909 .num_different_channels = 2,
6910 .max_interfaces = 4,
6911 .n_limits = ARRAY_SIZE(ath10k_tlv_qcs_if_limit),
6914 .limits = ath10k_tlv_if_limit_ibss,
6915 .num_different_channels = 1,
6916 .max_interfaces = 2,
6917 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
6921 static const struct ieee80211_iface_limit ath10k_10_4_if_limits[] = {
6924 .types = BIT(NL80211_IFTYPE_STATION),
6928 .types = BIT(NL80211_IFTYPE_AP)
6929 #ifdef CONFIG_MAC80211_MESH
6930 | BIT(NL80211_IFTYPE_MESH_POINT)
6935 static const struct ieee80211_iface_combination ath10k_10_4_if_comb[] = {
6937 .limits = ath10k_10_4_if_limits,
6938 .n_limits = ARRAY_SIZE(ath10k_10_4_if_limits),
6939 .max_interfaces = 16,
6940 .num_different_channels = 1,
6941 .beacon_int_infra_match = true,
6942 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
6943 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
6944 BIT(NL80211_CHAN_WIDTH_20) |
6945 BIT(NL80211_CHAN_WIDTH_40) |
6946 BIT(NL80211_CHAN_WIDTH_80),
6951 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
6953 struct ieee80211_sta_vht_cap vht_cap = {0};
6958 vht_cap.vht_supported = 1;
6959 vht_cap.cap = ar->vht_cap_info;
6961 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
6962 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
6963 val = ath10k_mac_get_vht_cap_bf_sts(ar);
6964 val <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
6965 val &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
6970 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
6971 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
6972 val = ath10k_mac_get_vht_cap_bf_sound_dim(ar);
6973 val <<= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
6974 val &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
6980 for (i = 0; i < 8; i++) {
6981 if (i < ar->num_rf_chains)
6982 mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2);
6984 mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2);
6987 vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
6988 vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
6993 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
6996 struct ieee80211_sta_ht_cap ht_cap = {0};
6998 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
7001 ht_cap.ht_supported = 1;
7002 ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
7003 ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
7004 ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
7005 ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
7006 ht_cap.cap |= WLAN_HT_CAP_SM_PS_STATIC << IEEE80211_HT_CAP_SM_PS_SHIFT;
7008 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
7009 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
7011 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
7012 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
7014 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
7017 smps = WLAN_HT_CAP_SM_PS_DYNAMIC;
7018 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
7023 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
7024 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
7026 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
7029 stbc = ar->ht_cap_info;
7030 stbc &= WMI_HT_CAP_RX_STBC;
7031 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
7032 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
7033 stbc &= IEEE80211_HT_CAP_RX_STBC;
7038 if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
7039 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
7041 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
7042 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
7044 /* max AMSDU is implicitly taken from vht_cap_info */
7045 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
7046 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
7048 for (i = 0; i < ar->num_rf_chains; i++)
7049 ht_cap.mcs.rx_mask[i] = 0xFF;
7051 ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
7056 static void ath10k_get_arvif_iter(void *data, u8 *mac,
7057 struct ieee80211_vif *vif)
7059 struct ath10k_vif_iter *arvif_iter = data;
7060 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
7062 if (arvif->vdev_id == arvif_iter->vdev_id)
7063 arvif_iter->arvif = arvif;
7066 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
7068 struct ath10k_vif_iter arvif_iter;
7071 memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
7072 arvif_iter.vdev_id = vdev_id;
7074 flags = IEEE80211_IFACE_ITER_RESUME_ALL;
7075 ieee80211_iterate_active_interfaces_atomic(ar->hw,
7077 ath10k_get_arvif_iter,
7079 if (!arvif_iter.arvif) {
7080 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
7084 return arvif_iter.arvif;
7087 int ath10k_mac_register(struct ath10k *ar)
7089 static const u32 cipher_suites[] = {
7090 WLAN_CIPHER_SUITE_WEP40,
7091 WLAN_CIPHER_SUITE_WEP104,
7092 WLAN_CIPHER_SUITE_TKIP,
7093 WLAN_CIPHER_SUITE_CCMP,
7094 WLAN_CIPHER_SUITE_AES_CMAC,
7096 struct ieee80211_supported_band *band;
7097 struct ieee80211_sta_vht_cap vht_cap;
7098 struct ieee80211_sta_ht_cap ht_cap;
7102 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
7104 SET_IEEE80211_DEV(ar->hw, ar->dev);
7106 ht_cap = ath10k_get_ht_cap(ar);
7107 vht_cap = ath10k_create_vht_cap(ar);
7109 BUILD_BUG_ON((ARRAY_SIZE(ath10k_2ghz_channels) +
7110 ARRAY_SIZE(ath10k_5ghz_channels)) !=
7113 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
7114 channels = kmemdup(ath10k_2ghz_channels,
7115 sizeof(ath10k_2ghz_channels),
7122 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
7123 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
7124 band->channels = channels;
7125 band->n_bitrates = ath10k_g_rates_size;
7126 band->bitrates = ath10k_g_rates;
7127 band->ht_cap = ht_cap;
7129 /* Enable the VHT support at 2.4 GHz */
7130 band->vht_cap = vht_cap;
7132 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
7135 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
7136 channels = kmemdup(ath10k_5ghz_channels,
7137 sizeof(ath10k_5ghz_channels),
7144 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
7145 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
7146 band->channels = channels;
7147 band->n_bitrates = ath10k_a_rates_size;
7148 band->bitrates = ath10k_a_rates;
7149 band->ht_cap = ht_cap;
7150 band->vht_cap = vht_cap;
7151 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
7154 ar->hw->wiphy->interface_modes =
7155 BIT(NL80211_IFTYPE_STATION) |
7156 BIT(NL80211_IFTYPE_AP) |
7157 BIT(NL80211_IFTYPE_MESH_POINT);
7159 ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask;
7160 ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask;
7162 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
7163 ar->hw->wiphy->interface_modes |=
7164 BIT(NL80211_IFTYPE_P2P_DEVICE) |
7165 BIT(NL80211_IFTYPE_P2P_CLIENT) |
7166 BIT(NL80211_IFTYPE_P2P_GO);
7168 ieee80211_hw_set(ar->hw, SIGNAL_DBM);
7169 ieee80211_hw_set(ar->hw, SUPPORTS_PS);
7170 ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS);
7171 ieee80211_hw_set(ar->hw, MFP_CAPABLE);
7172 ieee80211_hw_set(ar->hw, REPORTS_TX_ACK_STATUS);
7173 ieee80211_hw_set(ar->hw, HAS_RATE_CONTROL);
7174 ieee80211_hw_set(ar->hw, AP_LINK_PS);
7175 ieee80211_hw_set(ar->hw, SPECTRUM_MGMT);
7176 ieee80211_hw_set(ar->hw, SUPPORT_FAST_XMIT);
7177 ieee80211_hw_set(ar->hw, CONNECTION_MONITOR);
7178 ieee80211_hw_set(ar->hw, SUPPORTS_PER_STA_GTK);
7179 ieee80211_hw_set(ar->hw, WANT_MONITOR_VIF);
7180 ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
7181 ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
7183 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
7184 ieee80211_hw_set(ar->hw, SW_CRYPTO_CONTROL);
7186 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
7187 ar->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
7189 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
7190 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
7192 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
7193 ieee80211_hw_set(ar->hw, AMPDU_AGGREGATION);
7194 ieee80211_hw_set(ar->hw, TX_AMPDU_SETUP_IN_HW);
7197 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
7198 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
7200 ar->hw->vif_data_size = sizeof(struct ath10k_vif);
7201 ar->hw->sta_data_size = sizeof(struct ath10k_sta);
7203 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
7205 if (test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) {
7206 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
7208 /* Firmware delivers WPS/P2P Probe Requests frames to driver so
7209 * that userspace (e.g. wpa_supplicant/hostapd) can generate
7210 * correct Probe Responses. This is more of a hack advert..
7212 ar->hw->wiphy->probe_resp_offload |=
7213 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
7214 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
7215 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
7218 if (test_bit(WMI_SERVICE_TDLS, ar->wmi.svc_map))
7219 ar->hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
7221 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
7222 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
7223 ar->hw->wiphy->max_remain_on_channel_duration = 5000;
7225 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
7226 ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
7228 ar->hw->wiphy->max_ap_assoc_sta = ar->max_num_stations;
7230 ret = ath10k_wow_init(ar);
7232 ath10k_warn(ar, "failed to init wow: %d\n", ret);
7236 wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
7239 * on LL hardware queues are managed entirely by the FW
7240 * so we only advertise to mac we can do the queues thing
7242 ar->hw->queues = IEEE80211_MAX_QUEUES;
7244 /* vdev_ids are used as hw queue numbers. Make sure offchan tx queue is
7245 * something that vdev_ids can't reach so that we don't stop the queue
7248 ar->hw->offchannel_tx_hw_queue = IEEE80211_MAX_QUEUES - 1;
7250 switch (ar->wmi.op_version) {
7251 case ATH10K_FW_WMI_OP_VERSION_MAIN:
7252 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
7253 ar->hw->wiphy->n_iface_combinations =
7254 ARRAY_SIZE(ath10k_if_comb);
7255 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
7257 case ATH10K_FW_WMI_OP_VERSION_TLV:
7258 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
7259 ar->hw->wiphy->iface_combinations =
7260 ath10k_tlv_qcs_if_comb;
7261 ar->hw->wiphy->n_iface_combinations =
7262 ARRAY_SIZE(ath10k_tlv_qcs_if_comb);
7264 ar->hw->wiphy->iface_combinations = ath10k_tlv_if_comb;
7265 ar->hw->wiphy->n_iface_combinations =
7266 ARRAY_SIZE(ath10k_tlv_if_comb);
7268 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
7270 case ATH10K_FW_WMI_OP_VERSION_10_1:
7271 case ATH10K_FW_WMI_OP_VERSION_10_2:
7272 case ATH10K_FW_WMI_OP_VERSION_10_2_4:
7273 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
7274 ar->hw->wiphy->n_iface_combinations =
7275 ARRAY_SIZE(ath10k_10x_if_comb);
7277 case ATH10K_FW_WMI_OP_VERSION_10_4:
7278 ar->hw->wiphy->iface_combinations = ath10k_10_4_if_comb;
7279 ar->hw->wiphy->n_iface_combinations =
7280 ARRAY_SIZE(ath10k_10_4_if_comb);
7282 case ATH10K_FW_WMI_OP_VERSION_UNSET:
7283 case ATH10K_FW_WMI_OP_VERSION_MAX:
7289 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
7290 ar->hw->netdev_features = NETIF_F_HW_CSUM;
7292 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
7293 /* Init ath dfs pattern detector */
7294 ar->ath_common.debug_mask = ATH_DBG_DFS;
7295 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
7298 if (!ar->dfs_detector)
7299 ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
7302 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
7303 ath10k_reg_notifier);
7305 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
7309 ar->hw->wiphy->cipher_suites = cipher_suites;
7310 ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
7312 ret = ieee80211_register_hw(ar->hw);
7314 ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
7318 if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
7319 ret = regulatory_hint(ar->hw->wiphy,
7320 ar->ath_common.regulatory.alpha2);
7322 goto err_unregister;
7328 ieee80211_unregister_hw(ar->hw);
7330 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
7331 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
7336 void ath10k_mac_unregister(struct ath10k *ar)
7338 ieee80211_unregister_hw(ar->hw);
7340 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
7341 ar->dfs_detector->exit(ar->dfs_detector);
7343 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
7344 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
7346 SET_IEEE80211_DEV(ar->hw, NULL);