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", ret);
1120 if (needed == ar->monitor_started)
1124 return ath10k_monitor_start(ar);
1126 return ath10k_monitor_stop(ar);
1129 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
1131 struct ath10k *ar = arvif->ar;
1132 u32 vdev_param, rts_cts = 0;
1134 lockdep_assert_held(&ar->conf_mutex);
1136 vdev_param = ar->wmi.vdev_param->enable_rtscts;
1138 rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
1140 if (arvif->num_legacy_stations > 0)
1141 rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
1142 WMI_RTSCTS_PROFILE);
1144 rts_cts |= SM(WMI_RTSCTS_FOR_SECOND_RATESERIES,
1145 WMI_RTSCTS_PROFILE);
1147 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
1151 static int ath10k_start_cac(struct ath10k *ar)
1155 lockdep_assert_held(&ar->conf_mutex);
1157 set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1159 ret = ath10k_monitor_recalc(ar);
1161 ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret);
1162 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1166 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
1167 ar->monitor_vdev_id);
1172 static int ath10k_stop_cac(struct ath10k *ar)
1174 lockdep_assert_held(&ar->conf_mutex);
1176 /* CAC is not running - do nothing */
1177 if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
1180 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1181 ath10k_monitor_stop(ar);
1183 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n");
1188 static void ath10k_mac_has_radar_iter(struct ieee80211_hw *hw,
1189 struct ieee80211_chanctx_conf *conf,
1194 if (!*ret && conf->radar_enabled)
1198 static bool ath10k_mac_has_radar_enabled(struct ath10k *ar)
1200 bool has_radar = false;
1202 ieee80211_iter_chan_contexts_atomic(ar->hw,
1203 ath10k_mac_has_radar_iter,
1209 static void ath10k_recalc_radar_detection(struct ath10k *ar)
1213 lockdep_assert_held(&ar->conf_mutex);
1215 ath10k_stop_cac(ar);
1217 if (!ath10k_mac_has_radar_enabled(ar))
1220 if (ar->num_started_vdevs > 0)
1223 ret = ath10k_start_cac(ar);
1226 * Not possible to start CAC on current channel so starting
1227 * radiation is not allowed, make this channel DFS_UNAVAILABLE
1228 * by indicating that radar was detected.
1230 ath10k_warn(ar, "failed to start CAC: %d\n", ret);
1231 ieee80211_radar_detected(ar->hw);
1235 static int ath10k_vdev_stop(struct ath10k_vif *arvif)
1237 struct ath10k *ar = arvif->ar;
1240 lockdep_assert_held(&ar->conf_mutex);
1242 reinit_completion(&ar->vdev_setup_done);
1244 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
1246 ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n",
1247 arvif->vdev_id, ret);
1251 ret = ath10k_vdev_setup_sync(ar);
1253 ath10k_warn(ar, "failed to syncronise setup for vdev %i: %d\n",
1254 arvif->vdev_id, ret);
1258 WARN_ON(ar->num_started_vdevs == 0);
1260 if (ar->num_started_vdevs != 0) {
1261 ar->num_started_vdevs--;
1262 ath10k_recalc_radar_detection(ar);
1268 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif,
1269 const struct cfg80211_chan_def *chandef,
1272 struct ath10k *ar = arvif->ar;
1273 struct wmi_vdev_start_request_arg arg = {};
1276 lockdep_assert_held(&ar->conf_mutex);
1278 reinit_completion(&ar->vdev_setup_done);
1280 arg.vdev_id = arvif->vdev_id;
1281 arg.dtim_period = arvif->dtim_period;
1282 arg.bcn_intval = arvif->beacon_interval;
1284 arg.channel.freq = chandef->chan->center_freq;
1285 arg.channel.band_center_freq1 = chandef->center_freq1;
1286 arg.channel.mode = chan_to_phymode(chandef);
1288 arg.channel.min_power = 0;
1289 arg.channel.max_power = chandef->chan->max_power * 2;
1290 arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
1291 arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
1293 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
1294 arg.ssid = arvif->u.ap.ssid;
1295 arg.ssid_len = arvif->u.ap.ssid_len;
1296 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
1298 /* For now allow DFS for AP mode */
1299 arg.channel.chan_radar =
1300 !!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
1301 } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
1302 arg.ssid = arvif->vif->bss_conf.ssid;
1303 arg.ssid_len = arvif->vif->bss_conf.ssid_len;
1306 ath10k_dbg(ar, ATH10K_DBG_MAC,
1307 "mac vdev %d start center_freq %d phymode %s\n",
1308 arg.vdev_id, arg.channel.freq,
1309 ath10k_wmi_phymode_str(arg.channel.mode));
1312 ret = ath10k_wmi_vdev_restart(ar, &arg);
1314 ret = ath10k_wmi_vdev_start(ar, &arg);
1317 ath10k_warn(ar, "failed to start WMI vdev %i: %d\n",
1322 ret = ath10k_vdev_setup_sync(ar);
1325 "failed to synchronize setup for vdev %i restart %d: %d\n",
1326 arg.vdev_id, restart, ret);
1330 ar->num_started_vdevs++;
1331 ath10k_recalc_radar_detection(ar);
1336 static int ath10k_vdev_start(struct ath10k_vif *arvif,
1337 const struct cfg80211_chan_def *def)
1339 return ath10k_vdev_start_restart(arvif, def, false);
1342 static int ath10k_vdev_restart(struct ath10k_vif *arvif,
1343 const struct cfg80211_chan_def *def)
1345 return ath10k_vdev_start_restart(arvif, def, true);
1348 static int ath10k_mac_setup_bcn_p2p_ie(struct ath10k_vif *arvif,
1349 struct sk_buff *bcn)
1351 struct ath10k *ar = arvif->ar;
1352 struct ieee80211_mgmt *mgmt;
1356 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1359 if (arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO)
1362 mgmt = (void *)bcn->data;
1363 p2p_ie = cfg80211_find_vendor_ie(WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P,
1364 mgmt->u.beacon.variable,
1365 bcn->len - (mgmt->u.beacon.variable -
1370 ret = ath10k_wmi_p2p_go_bcn_ie(ar, arvif->vdev_id, p2p_ie);
1372 ath10k_warn(ar, "failed to submit p2p go bcn ie for vdev %i: %d\n",
1373 arvif->vdev_id, ret);
1380 static int ath10k_mac_remove_vendor_ie(struct sk_buff *skb, unsigned int oui,
1381 u8 oui_type, size_t ie_offset)
1388 if (WARN_ON(skb->len < ie_offset))
1391 ie = (u8 *)cfg80211_find_vendor_ie(oui, oui_type,
1392 skb->data + ie_offset,
1393 skb->len - ie_offset);
1398 end = skb->data + skb->len;
1401 if (WARN_ON(next > end))
1404 memmove(ie, next, end - next);
1405 skb_trim(skb, skb->len - len);
1410 static int ath10k_mac_setup_bcn_tmpl(struct ath10k_vif *arvif)
1412 struct ath10k *ar = arvif->ar;
1413 struct ieee80211_hw *hw = ar->hw;
1414 struct ieee80211_vif *vif = arvif->vif;
1415 struct ieee80211_mutable_offsets offs = {};
1416 struct sk_buff *bcn;
1419 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1422 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
1423 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
1426 bcn = ieee80211_beacon_get_template(hw, vif, &offs);
1428 ath10k_warn(ar, "failed to get beacon template from mac80211\n");
1432 ret = ath10k_mac_setup_bcn_p2p_ie(arvif, bcn);
1434 ath10k_warn(ar, "failed to setup p2p go bcn ie: %d\n", ret);
1439 /* P2P IE is inserted by firmware automatically (as configured above)
1440 * so remove it from the base beacon template to avoid duplicate P2P
1441 * IEs in beacon frames.
1443 ath10k_mac_remove_vendor_ie(bcn, WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P,
1444 offsetof(struct ieee80211_mgmt,
1445 u.beacon.variable));
1447 ret = ath10k_wmi_bcn_tmpl(ar, arvif->vdev_id, offs.tim_offset, bcn, 0,
1452 ath10k_warn(ar, "failed to submit beacon template command: %d\n",
1460 static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif)
1462 struct ath10k *ar = arvif->ar;
1463 struct ieee80211_hw *hw = ar->hw;
1464 struct ieee80211_vif *vif = arvif->vif;
1465 struct sk_buff *prb;
1468 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1471 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1474 prb = ieee80211_proberesp_get(hw, vif);
1476 ath10k_warn(ar, "failed to get probe resp template from mac80211\n");
1480 ret = ath10k_wmi_prb_tmpl(ar, arvif->vdev_id, prb);
1484 ath10k_warn(ar, "failed to submit probe resp template command: %d\n",
1492 static int ath10k_mac_vif_fix_hidden_ssid(struct ath10k_vif *arvif)
1494 struct ath10k *ar = arvif->ar;
1495 struct cfg80211_chan_def def;
1498 /* When originally vdev is started during assign_vif_chanctx() some
1499 * information is missing, notably SSID. Firmware revisions with beacon
1500 * offloading require the SSID to be provided during vdev (re)start to
1501 * handle hidden SSID properly.
1503 * Vdev restart must be done after vdev has been both started and
1504 * upped. Otherwise some firmware revisions (at least 10.2) fail to
1505 * deliver vdev restart response event causing timeouts during vdev
1506 * syncing in ath10k.
1508 * Note: The vdev down/up and template reinstallation could be skipped
1509 * since only wmi-tlv firmware are known to have beacon offload and
1510 * wmi-tlv doesn't seem to misbehave like 10.2 wrt vdev restart
1511 * response delivery. It's probably more robust to keep it as is.
1513 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))
1516 if (WARN_ON(!arvif->is_started))
1519 if (WARN_ON(!arvif->is_up))
1522 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
1525 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1527 ath10k_warn(ar, "failed to bring down ap vdev %i: %d\n",
1528 arvif->vdev_id, ret);
1532 /* Vdev down reset beacon & presp templates. Reinstall them. Otherwise
1533 * firmware will crash upon vdev up.
1536 ret = ath10k_mac_setup_bcn_tmpl(arvif);
1538 ath10k_warn(ar, "failed to update beacon template: %d\n", ret);
1542 ret = ath10k_mac_setup_prb_tmpl(arvif);
1544 ath10k_warn(ar, "failed to update presp template: %d\n", ret);
1548 ret = ath10k_vdev_restart(arvif, &def);
1550 ath10k_warn(ar, "failed to restart ap vdev %i: %d\n",
1551 arvif->vdev_id, ret);
1555 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1558 ath10k_warn(ar, "failed to bring up ap vdev %i: %d\n",
1559 arvif->vdev_id, ret);
1566 static void ath10k_control_beaconing(struct ath10k_vif *arvif,
1567 struct ieee80211_bss_conf *info)
1569 struct ath10k *ar = arvif->ar;
1572 lockdep_assert_held(&arvif->ar->conf_mutex);
1574 if (!info->enable_beacon) {
1575 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1577 ath10k_warn(ar, "failed to down vdev_id %i: %d\n",
1578 arvif->vdev_id, ret);
1580 arvif->is_up = false;
1582 spin_lock_bh(&arvif->ar->data_lock);
1583 ath10k_mac_vif_beacon_free(arvif);
1584 spin_unlock_bh(&arvif->ar->data_lock);
1589 arvif->tx_seq_no = 0x1000;
1592 ether_addr_copy(arvif->bssid, info->bssid);
1594 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
1597 ath10k_warn(ar, "failed to bring up vdev %d: %i\n",
1598 arvif->vdev_id, ret);
1602 arvif->is_up = true;
1604 ret = ath10k_mac_vif_fix_hidden_ssid(arvif);
1606 ath10k_warn(ar, "failed to fix hidden ssid for vdev %i, expect trouble: %d\n",
1607 arvif->vdev_id, ret);
1611 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
1614 static void ath10k_control_ibss(struct ath10k_vif *arvif,
1615 struct ieee80211_bss_conf *info,
1616 const u8 self_peer[ETH_ALEN])
1618 struct ath10k *ar = arvif->ar;
1622 lockdep_assert_held(&arvif->ar->conf_mutex);
1624 if (!info->ibss_joined) {
1625 if (is_zero_ether_addr(arvif->bssid))
1628 eth_zero_addr(arvif->bssid);
1633 vdev_param = arvif->ar->wmi.vdev_param->atim_window;
1634 ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param,
1635 ATH10K_DEFAULT_ATIM);
1637 ath10k_warn(ar, "failed to set IBSS ATIM for vdev %d: %d\n",
1638 arvif->vdev_id, ret);
1641 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif)
1643 struct ath10k *ar = arvif->ar;
1648 lockdep_assert_held(&arvif->ar->conf_mutex);
1650 if (arvif->u.sta.uapsd)
1651 value = WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER;
1653 value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS;
1655 param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD;
1656 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, value);
1658 ath10k_warn(ar, "failed to submit ps wake threshold %u on vdev %i: %d\n",
1659 value, arvif->vdev_id, ret);
1666 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif)
1668 struct ath10k *ar = arvif->ar;
1673 lockdep_assert_held(&arvif->ar->conf_mutex);
1675 if (arvif->u.sta.uapsd)
1676 value = WMI_STA_PS_PSPOLL_COUNT_UAPSD;
1678 value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX;
1680 param = WMI_STA_PS_PARAM_PSPOLL_COUNT;
1681 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
1684 ath10k_warn(ar, "failed to submit ps poll count %u on vdev %i: %d\n",
1685 value, arvif->vdev_id, ret);
1692 static int ath10k_mac_num_vifs_started(struct ath10k *ar)
1694 struct ath10k_vif *arvif;
1697 lockdep_assert_held(&ar->conf_mutex);
1699 list_for_each_entry(arvif, &ar->arvifs, list)
1700 if (arvif->is_started)
1706 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
1708 struct ath10k *ar = arvif->ar;
1709 struct ieee80211_vif *vif = arvif->vif;
1710 struct ieee80211_conf *conf = &ar->hw->conf;
1711 enum wmi_sta_powersave_param param;
1712 enum wmi_sta_ps_mode psmode;
1717 lockdep_assert_held(&arvif->ar->conf_mutex);
1719 if (arvif->vif->type != NL80211_IFTYPE_STATION)
1722 enable_ps = arvif->ps;
1724 if (enable_ps && ath10k_mac_num_vifs_started(ar) > 1 &&
1725 !test_bit(ATH10K_FW_FEATURE_MULTI_VIF_PS_SUPPORT,
1727 ath10k_warn(ar, "refusing to enable ps on vdev %i: not supported by fw\n",
1732 if (!arvif->is_started) {
1733 /* mac80211 can update vif powersave state while disconnected.
1734 * Firmware doesn't behave nicely and consumes more power than
1735 * necessary if PS is disabled on a non-started vdev. Hence
1736 * force-enable PS for non-running vdevs.
1738 psmode = WMI_STA_PS_MODE_ENABLED;
1739 } else if (enable_ps) {
1740 psmode = WMI_STA_PS_MODE_ENABLED;
1741 param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1743 ps_timeout = conf->dynamic_ps_timeout;
1744 if (ps_timeout == 0) {
1745 /* Firmware doesn't like 0 */
1746 ps_timeout = ieee80211_tu_to_usec(
1747 vif->bss_conf.beacon_int) / 1000;
1750 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1753 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
1754 arvif->vdev_id, ret);
1758 psmode = WMI_STA_PS_MODE_DISABLED;
1761 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1762 arvif->vdev_id, psmode ? "enable" : "disable");
1764 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1766 ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n",
1767 psmode, arvif->vdev_id, ret);
1774 static int ath10k_mac_vif_disable_keepalive(struct ath10k_vif *arvif)
1776 struct ath10k *ar = arvif->ar;
1777 struct wmi_sta_keepalive_arg arg = {};
1780 lockdep_assert_held(&arvif->ar->conf_mutex);
1782 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
1785 if (!test_bit(WMI_SERVICE_STA_KEEP_ALIVE, ar->wmi.svc_map))
1788 /* Some firmware revisions have a bug and ignore the `enabled` field.
1789 * Instead use the interval to disable the keepalive.
1791 arg.vdev_id = arvif->vdev_id;
1793 arg.method = WMI_STA_KEEPALIVE_METHOD_NULL_FRAME;
1794 arg.interval = WMI_STA_KEEPALIVE_INTERVAL_DISABLE;
1796 ret = ath10k_wmi_sta_keepalive(ar, &arg);
1798 ath10k_warn(ar, "failed to submit keepalive on vdev %i: %d\n",
1799 arvif->vdev_id, ret);
1806 static void ath10k_mac_vif_ap_csa_count_down(struct ath10k_vif *arvif)
1808 struct ath10k *ar = arvif->ar;
1809 struct ieee80211_vif *vif = arvif->vif;
1812 lockdep_assert_held(&arvif->ar->conf_mutex);
1814 if (WARN_ON(!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)))
1817 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
1820 if (!vif->csa_active)
1826 if (!ieee80211_csa_is_complete(vif)) {
1827 ieee80211_csa_update_counter(vif);
1829 ret = ath10k_mac_setup_bcn_tmpl(arvif);
1831 ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
1834 ret = ath10k_mac_setup_prb_tmpl(arvif);
1836 ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
1839 ieee80211_csa_finish(vif);
1843 static void ath10k_mac_vif_ap_csa_work(struct work_struct *work)
1845 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1847 struct ath10k *ar = arvif->ar;
1849 mutex_lock(&ar->conf_mutex);
1850 ath10k_mac_vif_ap_csa_count_down(arvif);
1851 mutex_unlock(&ar->conf_mutex);
1854 static void ath10k_mac_handle_beacon_iter(void *data, u8 *mac,
1855 struct ieee80211_vif *vif)
1857 struct sk_buff *skb = data;
1858 struct ieee80211_mgmt *mgmt = (void *)skb->data;
1859 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1861 if (vif->type != NL80211_IFTYPE_STATION)
1864 if (!ether_addr_equal(mgmt->bssid, vif->bss_conf.bssid))
1867 cancel_delayed_work(&arvif->connection_loss_work);
1870 void ath10k_mac_handle_beacon(struct ath10k *ar, struct sk_buff *skb)
1872 ieee80211_iterate_active_interfaces_atomic(ar->hw,
1873 IEEE80211_IFACE_ITER_NORMAL,
1874 ath10k_mac_handle_beacon_iter,
1878 static void ath10k_mac_handle_beacon_miss_iter(void *data, u8 *mac,
1879 struct ieee80211_vif *vif)
1881 u32 *vdev_id = data;
1882 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1883 struct ath10k *ar = arvif->ar;
1884 struct ieee80211_hw *hw = ar->hw;
1886 if (arvif->vdev_id != *vdev_id)
1892 ieee80211_beacon_loss(vif);
1894 /* Firmware doesn't report beacon loss events repeatedly. If AP probe
1895 * (done by mac80211) succeeds but beacons do not resume then it
1896 * doesn't make sense to continue operation. Queue connection loss work
1897 * which can be cancelled when beacon is received.
1899 ieee80211_queue_delayed_work(hw, &arvif->connection_loss_work,
1900 ATH10K_CONNECTION_LOSS_HZ);
1903 void ath10k_mac_handle_beacon_miss(struct ath10k *ar, u32 vdev_id)
1905 ieee80211_iterate_active_interfaces_atomic(ar->hw,
1906 IEEE80211_IFACE_ITER_NORMAL,
1907 ath10k_mac_handle_beacon_miss_iter,
1911 static void ath10k_mac_vif_sta_connection_loss_work(struct work_struct *work)
1913 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1914 connection_loss_work.work);
1915 struct ieee80211_vif *vif = arvif->vif;
1920 ieee80211_connection_loss(vif);
1923 /**********************/
1924 /* Station management */
1925 /**********************/
1927 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar,
1928 struct ieee80211_vif *vif)
1930 /* Some firmware revisions have unstable STA powersave when listen
1931 * interval is set too high (e.g. 5). The symptoms are firmware doesn't
1932 * generate NullFunc frames properly even if buffered frames have been
1933 * indicated in Beacon TIM. Firmware would seldom wake up to pull
1934 * buffered frames. Often pinging the device from AP would simply fail.
1936 * As a workaround set it to 1.
1938 if (vif->type == NL80211_IFTYPE_STATION)
1941 return ar->hw->conf.listen_interval;
1944 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
1945 struct ieee80211_vif *vif,
1946 struct ieee80211_sta *sta,
1947 struct wmi_peer_assoc_complete_arg *arg)
1949 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1952 lockdep_assert_held(&ar->conf_mutex);
1954 if (vif->type == NL80211_IFTYPE_STATION)
1955 aid = vif->bss_conf.aid;
1959 ether_addr_copy(arg->addr, sta->addr);
1960 arg->vdev_id = arvif->vdev_id;
1961 arg->peer_aid = aid;
1962 arg->peer_flags |= WMI_PEER_AUTH;
1963 arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif);
1964 arg->peer_num_spatial_streams = 1;
1965 arg->peer_caps = vif->bss_conf.assoc_capability;
1968 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
1969 struct ieee80211_vif *vif,
1970 struct wmi_peer_assoc_complete_arg *arg)
1972 struct ieee80211_bss_conf *info = &vif->bss_conf;
1973 struct cfg80211_chan_def def;
1974 struct cfg80211_bss *bss;
1975 const u8 *rsnie = NULL;
1976 const u8 *wpaie = NULL;
1978 lockdep_assert_held(&ar->conf_mutex);
1980 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
1983 bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid, NULL, 0,
1984 IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY);
1986 const struct cfg80211_bss_ies *ies;
1989 rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
1991 ies = rcu_dereference(bss->ies);
1993 wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
1994 WLAN_OUI_TYPE_MICROSOFT_WPA,
1998 cfg80211_put_bss(ar->hw->wiphy, bss);
2001 /* FIXME: base on RSN IE/WPA IE is a correct idea? */
2002 if (rsnie || wpaie) {
2003 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
2004 arg->peer_flags |= WMI_PEER_NEED_PTK_4_WAY;
2008 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
2009 arg->peer_flags |= WMI_PEER_NEED_GTK_2_WAY;
2013 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
2014 struct ieee80211_vif *vif,
2015 struct ieee80211_sta *sta,
2016 struct wmi_peer_assoc_complete_arg *arg)
2018 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2019 struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
2020 struct cfg80211_chan_def def;
2021 const struct ieee80211_supported_band *sband;
2022 const struct ieee80211_rate *rates;
2023 enum ieee80211_band band;
2028 lockdep_assert_held(&ar->conf_mutex);
2030 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2033 band = def.chan->band;
2034 sband = ar->hw->wiphy->bands[band];
2035 ratemask = sta->supp_rates[band];
2036 ratemask &= arvif->bitrate_mask.control[band].legacy;
2037 rates = sband->bitrates;
2039 rateset->num_rates = 0;
2041 for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
2042 if (!(ratemask & 1))
2045 rate = ath10k_mac_bitrate_to_rate(rates->bitrate);
2046 rateset->rates[rateset->num_rates] = rate;
2047 rateset->num_rates++;
2052 ath10k_peer_assoc_h_ht_masked(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
2056 for (nss = 0; nss < IEEE80211_HT_MCS_MASK_LEN; nss++)
2057 if (ht_mcs_mask[nss])
2064 ath10k_peer_assoc_h_vht_masked(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
2068 for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++)
2069 if (vht_mcs_mask[nss])
2075 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
2076 struct ieee80211_vif *vif,
2077 struct ieee80211_sta *sta,
2078 struct wmi_peer_assoc_complete_arg *arg)
2080 const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
2081 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2082 struct cfg80211_chan_def def;
2083 enum ieee80211_band band;
2084 const u8 *ht_mcs_mask;
2085 const u16 *vht_mcs_mask;
2089 lockdep_assert_held(&ar->conf_mutex);
2091 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2094 if (!ht_cap->ht_supported)
2097 band = def.chan->band;
2098 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2099 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2101 if (ath10k_peer_assoc_h_ht_masked(ht_mcs_mask) &&
2102 ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
2105 arg->peer_flags |= WMI_PEER_HT;
2106 arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
2107 ht_cap->ampdu_factor)) - 1;
2109 arg->peer_mpdu_density =
2110 ath10k_parse_mpdudensity(ht_cap->ampdu_density);
2112 arg->peer_ht_caps = ht_cap->cap;
2113 arg->peer_rate_caps |= WMI_RC_HT_FLAG;
2115 if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
2116 arg->peer_flags |= WMI_PEER_LDPC;
2118 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
2119 arg->peer_flags |= WMI_PEER_40MHZ;
2120 arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
2123 if (arvif->bitrate_mask.control[band].gi != NL80211_TXRATE_FORCE_LGI) {
2124 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
2125 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
2127 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
2128 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
2131 if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
2132 arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
2133 arg->peer_flags |= WMI_PEER_STBC;
2136 if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
2137 stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
2138 stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
2139 stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
2140 arg->peer_rate_caps |= stbc;
2141 arg->peer_flags |= WMI_PEER_STBC;
2144 if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
2145 arg->peer_rate_caps |= WMI_RC_TS_FLAG;
2146 else if (ht_cap->mcs.rx_mask[1])
2147 arg->peer_rate_caps |= WMI_RC_DS_FLAG;
2149 for (i = 0, n = 0, max_nss = 0; i < IEEE80211_HT_MCS_MASK_LEN * 8; i++)
2150 if ((ht_cap->mcs.rx_mask[i / 8] & BIT(i % 8)) &&
2151 (ht_mcs_mask[i / 8] & BIT(i % 8))) {
2152 max_nss = (i / 8) + 1;
2153 arg->peer_ht_rates.rates[n++] = i;
2157 * This is a workaround for HT-enabled STAs which break the spec
2158 * and have no HT capabilities RX mask (no HT RX MCS map).
2160 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
2161 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
2163 * Firmware asserts if such situation occurs.
2166 arg->peer_ht_rates.num_rates = 8;
2167 for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
2168 arg->peer_ht_rates.rates[i] = i;
2170 arg->peer_ht_rates.num_rates = n;
2171 arg->peer_num_spatial_streams = max_nss;
2174 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
2176 arg->peer_ht_rates.num_rates,
2177 arg->peer_num_spatial_streams);
2180 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
2181 struct ath10k_vif *arvif,
2182 struct ieee80211_sta *sta)
2188 lockdep_assert_held(&ar->conf_mutex);
2190 if (sta->wme && sta->uapsd_queues) {
2191 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
2192 sta->uapsd_queues, sta->max_sp);
2194 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
2195 uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
2196 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
2197 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
2198 uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
2199 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
2200 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
2201 uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
2202 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
2203 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
2204 uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
2205 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
2207 if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
2208 max_sp = sta->max_sp;
2210 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
2212 WMI_AP_PS_PEER_PARAM_UAPSD,
2215 ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n",
2216 arvif->vdev_id, ret);
2220 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
2222 WMI_AP_PS_PEER_PARAM_MAX_SP,
2225 ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n",
2226 arvif->vdev_id, ret);
2230 /* TODO setup this based on STA listen interval and
2231 beacon interval. Currently we don't know
2232 sta->listen_interval - mac80211 patch required.
2233 Currently use 10 seconds */
2234 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
2235 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME,
2238 ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n",
2239 arvif->vdev_id, ret);
2248 ath10k_peer_assoc_h_vht_limit(u16 tx_mcs_set,
2249 const u16 vht_mcs_limit[NL80211_VHT_NSS_MAX])
2256 for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++) {
2257 mcs_map = ath10k_mac_get_max_vht_mcs_map(tx_mcs_set, nss) &
2261 idx_limit = fls(mcs_map) - 1;
2265 switch (idx_limit) {
2266 case 0: /* fall through */
2267 case 1: /* fall through */
2268 case 2: /* fall through */
2269 case 3: /* fall through */
2270 case 4: /* fall through */
2271 case 5: /* fall through */
2272 case 6: /* fall through */
2274 /* see ath10k_mac_can_set_bitrate_mask() */
2278 mcs = IEEE80211_VHT_MCS_NOT_SUPPORTED;
2281 mcs = IEEE80211_VHT_MCS_SUPPORT_0_7;
2284 mcs = IEEE80211_VHT_MCS_SUPPORT_0_8;
2287 mcs = IEEE80211_VHT_MCS_SUPPORT_0_9;
2291 tx_mcs_set &= ~(0x3 << (nss * 2));
2292 tx_mcs_set |= mcs << (nss * 2);
2298 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
2299 struct ieee80211_vif *vif,
2300 struct ieee80211_sta *sta,
2301 struct wmi_peer_assoc_complete_arg *arg)
2303 const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
2304 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2305 struct cfg80211_chan_def def;
2306 enum ieee80211_band band;
2307 const u16 *vht_mcs_mask;
2310 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2313 if (!vht_cap->vht_supported)
2316 band = def.chan->band;
2317 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2319 if (ath10k_peer_assoc_h_vht_masked(vht_mcs_mask))
2322 arg->peer_flags |= WMI_PEER_VHT;
2324 if (def.chan->band == IEEE80211_BAND_2GHZ)
2325 arg->peer_flags |= WMI_PEER_VHT_2G;
2327 arg->peer_vht_caps = vht_cap->cap;
2329 ampdu_factor = (vht_cap->cap &
2330 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
2331 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
2333 /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
2334 * zero in VHT IE. Using it would result in degraded throughput.
2335 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
2336 * it if VHT max_mpdu is smaller. */
2337 arg->peer_max_mpdu = max(arg->peer_max_mpdu,
2338 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
2339 ampdu_factor)) - 1);
2341 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
2342 arg->peer_flags |= WMI_PEER_80MHZ;
2344 arg->peer_vht_rates.rx_max_rate =
2345 __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
2346 arg->peer_vht_rates.rx_mcs_set =
2347 __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
2348 arg->peer_vht_rates.tx_max_rate =
2349 __le16_to_cpu(vht_cap->vht_mcs.tx_highest);
2350 arg->peer_vht_rates.tx_mcs_set = ath10k_peer_assoc_h_vht_limit(
2351 __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map), vht_mcs_mask);
2353 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
2354 sta->addr, arg->peer_max_mpdu, arg->peer_flags);
2357 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
2358 struct ieee80211_vif *vif,
2359 struct ieee80211_sta *sta,
2360 struct wmi_peer_assoc_complete_arg *arg)
2362 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2364 switch (arvif->vdev_type) {
2365 case WMI_VDEV_TYPE_AP:
2367 arg->peer_flags |= WMI_PEER_QOS;
2369 if (sta->wme && sta->uapsd_queues) {
2370 arg->peer_flags |= WMI_PEER_APSD;
2371 arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
2374 case WMI_VDEV_TYPE_STA:
2375 if (vif->bss_conf.qos)
2376 arg->peer_flags |= WMI_PEER_QOS;
2378 case WMI_VDEV_TYPE_IBSS:
2380 arg->peer_flags |= WMI_PEER_QOS;
2386 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM qos %d\n",
2387 sta->addr, !!(arg->peer_flags & WMI_PEER_QOS));
2390 static bool ath10k_mac_sta_has_ofdm_only(struct ieee80211_sta *sta)
2392 return sta->supp_rates[IEEE80211_BAND_2GHZ] >>
2393 ATH10K_MAC_FIRST_OFDM_RATE_IDX;
2396 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
2397 struct ieee80211_vif *vif,
2398 struct ieee80211_sta *sta,
2399 struct wmi_peer_assoc_complete_arg *arg)
2401 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2402 struct cfg80211_chan_def def;
2403 enum ieee80211_band band;
2404 const u8 *ht_mcs_mask;
2405 const u16 *vht_mcs_mask;
2406 enum wmi_phy_mode phymode = MODE_UNKNOWN;
2408 if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
2411 band = def.chan->band;
2412 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
2413 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
2416 case IEEE80211_BAND_2GHZ:
2417 if (sta->vht_cap.vht_supported &&
2418 !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
2419 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2420 phymode = MODE_11AC_VHT40;
2422 phymode = MODE_11AC_VHT20;
2423 } else if (sta->ht_cap.ht_supported &&
2424 !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
2425 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2426 phymode = MODE_11NG_HT40;
2428 phymode = MODE_11NG_HT20;
2429 } else if (ath10k_mac_sta_has_ofdm_only(sta)) {
2436 case IEEE80211_BAND_5GHZ:
2440 if (sta->vht_cap.vht_supported &&
2441 !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
2442 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
2443 phymode = MODE_11AC_VHT80;
2444 else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
2445 phymode = MODE_11AC_VHT40;
2446 else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
2447 phymode = MODE_11AC_VHT20;
2448 } else if (sta->ht_cap.ht_supported &&
2449 !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
2450 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40)
2451 phymode = MODE_11NA_HT40;
2453 phymode = MODE_11NA_HT20;
2463 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
2464 sta->addr, ath10k_wmi_phymode_str(phymode));
2466 arg->peer_phymode = phymode;
2467 WARN_ON(phymode == MODE_UNKNOWN);
2470 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
2471 struct ieee80211_vif *vif,
2472 struct ieee80211_sta *sta,
2473 struct wmi_peer_assoc_complete_arg *arg)
2475 lockdep_assert_held(&ar->conf_mutex);
2477 memset(arg, 0, sizeof(*arg));
2479 ath10k_peer_assoc_h_basic(ar, vif, sta, arg);
2480 ath10k_peer_assoc_h_crypto(ar, vif, arg);
2481 ath10k_peer_assoc_h_rates(ar, vif, sta, arg);
2482 ath10k_peer_assoc_h_ht(ar, vif, sta, arg);
2483 ath10k_peer_assoc_h_vht(ar, vif, sta, arg);
2484 ath10k_peer_assoc_h_qos(ar, vif, sta, arg);
2485 ath10k_peer_assoc_h_phymode(ar, vif, sta, arg);
2490 static const u32 ath10k_smps_map[] = {
2491 [WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
2492 [WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
2493 [WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
2494 [WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
2497 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
2499 const struct ieee80211_sta_ht_cap *ht_cap)
2503 if (!ht_cap->ht_supported)
2506 smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
2507 smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
2509 if (smps >= ARRAY_SIZE(ath10k_smps_map))
2512 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
2513 WMI_PEER_SMPS_STATE,
2514 ath10k_smps_map[smps]);
2517 static int ath10k_mac_vif_recalc_txbf(struct ath10k *ar,
2518 struct ieee80211_vif *vif,
2519 struct ieee80211_sta_vht_cap vht_cap)
2521 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2526 if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_AFTER_ASSOC)
2529 if (!(ar->vht_cap_info &
2530 (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
2531 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE |
2532 IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
2533 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)))
2536 param = ar->wmi.vdev_param->txbf;
2539 if (WARN_ON(param == WMI_VDEV_PARAM_UNSUPPORTED))
2542 /* The following logic is correct. If a remote STA advertises support
2543 * for being a beamformer then we should enable us being a beamformee.
2546 if (ar->vht_cap_info &
2547 (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
2548 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
2549 if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
2550 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
2552 if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
2553 value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFEE;
2556 if (ar->vht_cap_info &
2557 (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
2558 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
2559 if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
2560 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
2562 if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
2563 value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFER;
2566 if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFEE)
2567 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
2569 if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFER)
2570 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
2572 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, value);
2574 ath10k_warn(ar, "failed to submit vdev param txbf 0x%x: %d\n",
2582 /* can be called only in mac80211 callbacks due to `key_count` usage */
2583 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
2584 struct ieee80211_vif *vif,
2585 struct ieee80211_bss_conf *bss_conf)
2587 struct ath10k *ar = hw->priv;
2588 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2589 struct ieee80211_sta_ht_cap ht_cap;
2590 struct ieee80211_sta_vht_cap vht_cap;
2591 struct wmi_peer_assoc_complete_arg peer_arg;
2592 struct ieee80211_sta *ap_sta;
2595 lockdep_assert_held(&ar->conf_mutex);
2597 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n",
2598 arvif->vdev_id, arvif->bssid, arvif->aid);
2602 ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
2604 ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n",
2605 bss_conf->bssid, arvif->vdev_id);
2610 /* ap_sta must be accessed only within rcu section which must be left
2611 * before calling ath10k_setup_peer_smps() which might sleep. */
2612 ht_cap = ap_sta->ht_cap;
2613 vht_cap = ap_sta->vht_cap;
2615 ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg);
2617 ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n",
2618 bss_conf->bssid, arvif->vdev_id, ret);
2625 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
2627 ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n",
2628 bss_conf->bssid, arvif->vdev_id, ret);
2632 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
2634 ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n",
2635 arvif->vdev_id, ret);
2639 ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap);
2641 ath10k_warn(ar, "failed to recalc txbf for vdev %i on bss %pM: %d\n",
2642 arvif->vdev_id, bss_conf->bssid, ret);
2646 ath10k_dbg(ar, ATH10K_DBG_MAC,
2647 "mac vdev %d up (associated) bssid %pM aid %d\n",
2648 arvif->vdev_id, bss_conf->bssid, bss_conf->aid);
2650 WARN_ON(arvif->is_up);
2652 arvif->aid = bss_conf->aid;
2653 ether_addr_copy(arvif->bssid, bss_conf->bssid);
2655 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
2657 ath10k_warn(ar, "failed to set vdev %d up: %d\n",
2658 arvif->vdev_id, ret);
2662 arvif->is_up = true;
2664 /* Workaround: Some firmware revisions (tested with qca6174
2665 * WLAN.RM.2.0-00073) have buggy powersave state machine and must be
2666 * poked with peer param command.
2668 ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid,
2669 WMI_PEER_DUMMY_VAR, 1);
2671 ath10k_warn(ar, "failed to poke peer %pM param for ps workaround on vdev %i: %d\n",
2672 arvif->bssid, arvif->vdev_id, ret);
2677 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
2678 struct ieee80211_vif *vif)
2680 struct ath10k *ar = hw->priv;
2681 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2682 struct ieee80211_sta_vht_cap vht_cap = {};
2685 lockdep_assert_held(&ar->conf_mutex);
2687 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n",
2688 arvif->vdev_id, arvif->bssid);
2690 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
2692 ath10k_warn(ar, "faield to down vdev %i: %d\n",
2693 arvif->vdev_id, ret);
2695 arvif->def_wep_key_idx = -1;
2697 ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap);
2699 ath10k_warn(ar, "failed to recalc txbf for vdev %i: %d\n",
2700 arvif->vdev_id, ret);
2704 arvif->is_up = false;
2706 cancel_delayed_work_sync(&arvif->connection_loss_work);
2709 static int ath10k_station_assoc(struct ath10k *ar,
2710 struct ieee80211_vif *vif,
2711 struct ieee80211_sta *sta,
2714 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2715 struct wmi_peer_assoc_complete_arg peer_arg;
2718 lockdep_assert_held(&ar->conf_mutex);
2720 ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg);
2722 ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
2723 sta->addr, arvif->vdev_id, ret);
2727 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
2729 ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n",
2730 sta->addr, arvif->vdev_id, ret);
2734 /* Re-assoc is run only to update supported rates for given station. It
2735 * doesn't make much sense to reconfigure the peer completely.
2738 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
2741 ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
2742 arvif->vdev_id, ret);
2746 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
2748 ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
2749 sta->addr, arvif->vdev_id, ret);
2754 arvif->num_legacy_stations++;
2755 ret = ath10k_recalc_rtscts_prot(arvif);
2757 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
2758 arvif->vdev_id, ret);
2763 /* Plumb cached keys only for static WEP */
2764 if (arvif->def_wep_key_idx != -1) {
2765 ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
2767 ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
2768 arvif->vdev_id, ret);
2777 static int ath10k_station_disassoc(struct ath10k *ar,
2778 struct ieee80211_vif *vif,
2779 struct ieee80211_sta *sta)
2781 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2784 lockdep_assert_held(&ar->conf_mutex);
2787 arvif->num_legacy_stations--;
2788 ret = ath10k_recalc_rtscts_prot(arvif);
2790 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
2791 arvif->vdev_id, ret);
2796 ret = ath10k_clear_peer_keys(arvif, sta->addr);
2798 ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n",
2799 arvif->vdev_id, ret);
2810 static int ath10k_update_channel_list(struct ath10k *ar)
2812 struct ieee80211_hw *hw = ar->hw;
2813 struct ieee80211_supported_band **bands;
2814 enum ieee80211_band band;
2815 struct ieee80211_channel *channel;
2816 struct wmi_scan_chan_list_arg arg = {0};
2817 struct wmi_channel_arg *ch;
2823 lockdep_assert_held(&ar->conf_mutex);
2825 bands = hw->wiphy->bands;
2826 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
2830 for (i = 0; i < bands[band]->n_channels; i++) {
2831 if (bands[band]->channels[i].flags &
2832 IEEE80211_CHAN_DISABLED)
2839 len = sizeof(struct wmi_channel_arg) * arg.n_channels;
2840 arg.channels = kzalloc(len, GFP_KERNEL);
2845 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
2849 for (i = 0; i < bands[band]->n_channels; i++) {
2850 channel = &bands[band]->channels[i];
2852 if (channel->flags & IEEE80211_CHAN_DISABLED)
2855 ch->allow_ht = true;
2857 /* FIXME: when should we really allow VHT? */
2858 ch->allow_vht = true;
2861 !(channel->flags & IEEE80211_CHAN_NO_IR);
2864 !(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
2867 !!(channel->flags & IEEE80211_CHAN_RADAR);
2869 passive = channel->flags & IEEE80211_CHAN_NO_IR;
2870 ch->passive = passive;
2872 ch->freq = channel->center_freq;
2873 ch->band_center_freq1 = channel->center_freq;
2875 ch->max_power = channel->max_power * 2;
2876 ch->max_reg_power = channel->max_reg_power * 2;
2877 ch->max_antenna_gain = channel->max_antenna_gain * 2;
2878 ch->reg_class_id = 0; /* FIXME */
2880 /* FIXME: why use only legacy modes, why not any
2881 * HT/VHT modes? Would that even make any
2883 if (channel->band == IEEE80211_BAND_2GHZ)
2884 ch->mode = MODE_11G;
2886 ch->mode = MODE_11A;
2888 if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
2891 ath10k_dbg(ar, ATH10K_DBG_WMI,
2892 "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
2893 ch - arg.channels, arg.n_channels,
2894 ch->freq, ch->max_power, ch->max_reg_power,
2895 ch->max_antenna_gain, ch->mode);
2901 ret = ath10k_wmi_scan_chan_list(ar, &arg);
2902 kfree(arg.channels);
2907 static enum wmi_dfs_region
2908 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
2910 switch (dfs_region) {
2911 case NL80211_DFS_UNSET:
2912 return WMI_UNINIT_DFS_DOMAIN;
2913 case NL80211_DFS_FCC:
2914 return WMI_FCC_DFS_DOMAIN;
2915 case NL80211_DFS_ETSI:
2916 return WMI_ETSI_DFS_DOMAIN;
2917 case NL80211_DFS_JP:
2918 return WMI_MKK4_DFS_DOMAIN;
2920 return WMI_UNINIT_DFS_DOMAIN;
2923 static void ath10k_regd_update(struct ath10k *ar)
2925 struct reg_dmn_pair_mapping *regpair;
2927 enum wmi_dfs_region wmi_dfs_reg;
2928 enum nl80211_dfs_regions nl_dfs_reg;
2930 lockdep_assert_held(&ar->conf_mutex);
2932 ret = ath10k_update_channel_list(ar);
2934 ath10k_warn(ar, "failed to update channel list: %d\n", ret);
2936 regpair = ar->ath_common.regulatory.regpair;
2938 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
2939 nl_dfs_reg = ar->dfs_detector->region;
2940 wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
2942 wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
2945 /* Target allows setting up per-band regdomain but ath_common provides
2946 * a combined one only */
2947 ret = ath10k_wmi_pdev_set_regdomain(ar,
2948 regpair->reg_domain,
2949 regpair->reg_domain, /* 2ghz */
2950 regpair->reg_domain, /* 5ghz */
2951 regpair->reg_2ghz_ctl,
2952 regpair->reg_5ghz_ctl,
2955 ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret);
2958 static void ath10k_reg_notifier(struct wiphy *wiphy,
2959 struct regulatory_request *request)
2961 struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
2962 struct ath10k *ar = hw->priv;
2965 ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
2967 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
2968 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
2969 request->dfs_region);
2970 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
2971 request->dfs_region);
2973 ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n",
2974 request->dfs_region);
2977 mutex_lock(&ar->conf_mutex);
2978 if (ar->state == ATH10K_STATE_ON)
2979 ath10k_regd_update(ar);
2980 mutex_unlock(&ar->conf_mutex);
2987 void ath10k_mac_tx_lock(struct ath10k *ar, int reason)
2989 lockdep_assert_held(&ar->htt.tx_lock);
2991 WARN_ON(reason >= ATH10K_TX_PAUSE_MAX);
2992 ar->tx_paused |= BIT(reason);
2993 ieee80211_stop_queues(ar->hw);
2996 static void ath10k_mac_tx_unlock_iter(void *data, u8 *mac,
2997 struct ieee80211_vif *vif)
2999 struct ath10k *ar = data;
3000 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3002 if (arvif->tx_paused)
3005 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
3008 void ath10k_mac_tx_unlock(struct ath10k *ar, int reason)
3010 lockdep_assert_held(&ar->htt.tx_lock);
3012 WARN_ON(reason >= ATH10K_TX_PAUSE_MAX);
3013 ar->tx_paused &= ~BIT(reason);
3018 ieee80211_iterate_active_interfaces_atomic(ar->hw,
3019 IEEE80211_IFACE_ITER_RESUME_ALL,
3020 ath10k_mac_tx_unlock_iter,
3023 ieee80211_wake_queue(ar->hw, ar->hw->offchannel_tx_hw_queue);
3026 void ath10k_mac_vif_tx_lock(struct ath10k_vif *arvif, int reason)
3028 struct ath10k *ar = arvif->ar;
3030 lockdep_assert_held(&ar->htt.tx_lock);
3032 WARN_ON(reason >= BITS_PER_LONG);
3033 arvif->tx_paused |= BIT(reason);
3034 ieee80211_stop_queue(ar->hw, arvif->vdev_id);
3037 void ath10k_mac_vif_tx_unlock(struct ath10k_vif *arvif, int reason)
3039 struct ath10k *ar = arvif->ar;
3041 lockdep_assert_held(&ar->htt.tx_lock);
3043 WARN_ON(reason >= BITS_PER_LONG);
3044 arvif->tx_paused &= ~BIT(reason);
3049 if (arvif->tx_paused)
3052 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
3055 static void ath10k_mac_vif_handle_tx_pause(struct ath10k_vif *arvif,
3056 enum wmi_tlv_tx_pause_id pause_id,
3057 enum wmi_tlv_tx_pause_action action)
3059 struct ath10k *ar = arvif->ar;
3061 lockdep_assert_held(&ar->htt.tx_lock);
3064 case WMI_TLV_TX_PAUSE_ACTION_STOP:
3065 ath10k_mac_vif_tx_lock(arvif, pause_id);
3067 case WMI_TLV_TX_PAUSE_ACTION_WAKE:
3068 ath10k_mac_vif_tx_unlock(arvif, pause_id);
3071 ath10k_warn(ar, "received unknown tx pause action %d on vdev %i, ignoring\n",
3072 action, arvif->vdev_id);
3077 struct ath10k_mac_tx_pause {
3079 enum wmi_tlv_tx_pause_id pause_id;
3080 enum wmi_tlv_tx_pause_action action;
3083 static void ath10k_mac_handle_tx_pause_iter(void *data, u8 *mac,
3084 struct ieee80211_vif *vif)
3086 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3087 struct ath10k_mac_tx_pause *arg = data;
3089 if (arvif->vdev_id != arg->vdev_id)
3092 ath10k_mac_vif_handle_tx_pause(arvif, arg->pause_id, arg->action);
3095 void ath10k_mac_handle_tx_pause_vdev(struct ath10k *ar, u32 vdev_id,
3096 enum wmi_tlv_tx_pause_id pause_id,
3097 enum wmi_tlv_tx_pause_action action)
3099 struct ath10k_mac_tx_pause arg = {
3101 .pause_id = pause_id,
3105 spin_lock_bh(&ar->htt.tx_lock);
3106 ieee80211_iterate_active_interfaces_atomic(ar->hw,
3107 IEEE80211_IFACE_ITER_RESUME_ALL,
3108 ath10k_mac_handle_tx_pause_iter,
3110 spin_unlock_bh(&ar->htt.tx_lock);
3113 static u8 ath10k_tx_h_get_tid(struct ieee80211_hdr *hdr)
3115 if (ieee80211_is_mgmt(hdr->frame_control))
3116 return HTT_DATA_TX_EXT_TID_MGMT;
3118 if (!ieee80211_is_data_qos(hdr->frame_control))
3119 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
3121 if (!is_unicast_ether_addr(ieee80211_get_DA(hdr)))
3122 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
3124 return ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
3127 static u8 ath10k_tx_h_get_vdev_id(struct ath10k *ar, struct ieee80211_vif *vif)
3130 return ath10k_vif_to_arvif(vif)->vdev_id;
3132 if (ar->monitor_started)
3133 return ar->monitor_vdev_id;
3135 ath10k_warn(ar, "failed to resolve vdev id\n");
3139 static enum ath10k_hw_txrx_mode
3140 ath10k_tx_h_get_txmode(struct ath10k *ar, struct ieee80211_vif *vif,
3141 struct ieee80211_sta *sta, struct sk_buff *skb)
3143 const struct ieee80211_hdr *hdr = (void *)skb->data;
3144 __le16 fc = hdr->frame_control;
3146 if (!vif || vif->type == NL80211_IFTYPE_MONITOR)
3147 return ATH10K_HW_TXRX_RAW;
3149 if (ieee80211_is_mgmt(fc))
3150 return ATH10K_HW_TXRX_MGMT;
3154 * NullFunc frames are mostly used to ping if a client or AP are still
3155 * reachable and responsive. This implies tx status reports must be
3156 * accurate - otherwise either mac80211 or userspace (e.g. hostapd) can
3157 * come to a conclusion that the other end disappeared and tear down
3158 * BSS connection or it can never disconnect from BSS/client (which is
3161 * Firmware with HTT older than 3.0 delivers incorrect tx status for
3162 * NullFunc frames to driver. However there's a HTT Mgmt Tx command
3163 * which seems to deliver correct tx reports for NullFunc frames. The
3164 * downside of using it is it ignores client powersave state so it can
3165 * end up disconnecting sleeping clients in AP mode. It should fix STA
3166 * mode though because AP don't sleep.
3168 if (ar->htt.target_version_major < 3 &&
3169 (ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)) &&
3170 !test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX, ar->fw_features))
3171 return ATH10K_HW_TXRX_MGMT;
3175 * Some wmi-tlv firmwares for qca6174 have broken Tx key selection for
3176 * NativeWifi txmode - it selects AP key instead of peer key. It seems
3177 * to work with Ethernet txmode so use it.
3179 * FIXME: Check if raw mode works with TDLS.
3181 if (ieee80211_is_data_present(fc) && sta && sta->tdls)
3182 return ATH10K_HW_TXRX_ETHERNET;
3184 if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
3185 return ATH10K_HW_TXRX_RAW;
3187 return ATH10K_HW_TXRX_NATIVE_WIFI;
3190 static bool ath10k_tx_h_use_hwcrypto(struct ieee80211_vif *vif,
3191 struct sk_buff *skb) {
3192 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3193 const u32 mask = IEEE80211_TX_INTFL_DONT_ENCRYPT |
3194 IEEE80211_TX_CTL_INJECTED;
3195 if ((info->flags & mask) == mask)
3198 return !ath10k_vif_to_arvif(vif)->nohwcrypt;
3202 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
3203 * Control in the header.
3205 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
3207 struct ieee80211_hdr *hdr = (void *)skb->data;
3208 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
3211 if (!ieee80211_is_data_qos(hdr->frame_control))
3214 qos_ctl = ieee80211_get_qos_ctl(hdr);
3215 memmove(skb->data + IEEE80211_QOS_CTL_LEN,
3216 skb->data, (void *)qos_ctl - (void *)skb->data);
3217 skb_pull(skb, IEEE80211_QOS_CTL_LEN);
3219 /* Some firmware revisions don't handle sending QoS NullFunc well.
3220 * These frames are mainly used for CQM purposes so it doesn't really
3221 * matter whether QoS NullFunc or NullFunc are sent.
3223 hdr = (void *)skb->data;
3224 if (ieee80211_is_qos_nullfunc(hdr->frame_control))
3225 cb->htt.tid = HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
3227 hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
3230 static void ath10k_tx_h_8023(struct sk_buff *skb)
3232 struct ieee80211_hdr *hdr;
3233 struct rfc1042_hdr *rfc1042;
3240 hdr = (void *)skb->data;
3241 hdrlen = ieee80211_hdrlen(hdr->frame_control);
3242 rfc1042 = (void *)skb->data + hdrlen;
3244 ether_addr_copy(da, ieee80211_get_DA(hdr));
3245 ether_addr_copy(sa, ieee80211_get_SA(hdr));
3246 type = rfc1042->snap_type;
3248 skb_pull(skb, hdrlen + sizeof(*rfc1042));
3249 skb_push(skb, sizeof(*eth));
3251 eth = (void *)skb->data;
3252 ether_addr_copy(eth->h_dest, da);
3253 ether_addr_copy(eth->h_source, sa);
3254 eth->h_proto = type;
3257 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
3258 struct ieee80211_vif *vif,
3259 struct sk_buff *skb)
3261 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
3262 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3264 /* This is case only for P2P_GO */
3265 if (arvif->vdev_type != WMI_VDEV_TYPE_AP ||
3266 arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO)
3269 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
3270 spin_lock_bh(&ar->data_lock);
3271 if (arvif->u.ap.noa_data)
3272 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
3274 memcpy(skb_put(skb, arvif->u.ap.noa_len),
3275 arvif->u.ap.noa_data,
3276 arvif->u.ap.noa_len);
3277 spin_unlock_bh(&ar->data_lock);
3281 static bool ath10k_mac_need_offchan_tx_work(struct ath10k *ar)
3283 /* FIXME: Not really sure since when the behaviour changed. At some
3284 * point new firmware stopped requiring creation of peer entries for
3285 * offchannel tx (and actually creating them causes issues with wmi-htc
3286 * tx credit replenishment and reliability). Assuming it's at least 3.4
3287 * because that's when the `freq` was introduced to TX_FRM HTT command.
3289 return !(ar->htt.target_version_major >= 3 &&
3290 ar->htt.target_version_minor >= 4);
3293 static int ath10k_mac_tx_wmi_mgmt(struct ath10k *ar, struct sk_buff *skb)
3295 struct sk_buff_head *q = &ar->wmi_mgmt_tx_queue;
3298 spin_lock_bh(&ar->data_lock);
3300 if (skb_queue_len(q) == ATH10K_MAX_NUM_MGMT_PENDING) {
3301 ath10k_warn(ar, "wmi mgmt tx queue is full\n");
3306 __skb_queue_tail(q, skb);
3307 ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
3310 spin_unlock_bh(&ar->data_lock);
3315 static void ath10k_mac_tx(struct ath10k *ar, struct sk_buff *skb)
3317 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
3318 struct ath10k_htt *htt = &ar->htt;
3321 switch (cb->txmode) {
3322 case ATH10K_HW_TXRX_RAW:
3323 case ATH10K_HW_TXRX_NATIVE_WIFI:
3324 case ATH10K_HW_TXRX_ETHERNET:
3325 ret = ath10k_htt_tx(htt, skb);
3327 case ATH10K_HW_TXRX_MGMT:
3328 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
3330 ret = ath10k_mac_tx_wmi_mgmt(ar, skb);
3331 else if (ar->htt.target_version_major >= 3)
3332 ret = ath10k_htt_tx(htt, skb);
3334 ret = ath10k_htt_mgmt_tx(htt, skb);
3339 ath10k_warn(ar, "failed to transmit packet, dropping: %d\n",
3341 ieee80211_free_txskb(ar->hw, skb);
3345 void ath10k_offchan_tx_purge(struct ath10k *ar)
3347 struct sk_buff *skb;
3350 skb = skb_dequeue(&ar->offchan_tx_queue);
3354 ieee80211_free_txskb(ar->hw, skb);
3358 void ath10k_offchan_tx_work(struct work_struct *work)
3360 struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
3361 struct ath10k_peer *peer;
3362 struct ieee80211_hdr *hdr;
3363 struct sk_buff *skb;
3364 const u8 *peer_addr;
3367 unsigned long time_left;
3368 bool tmp_peer_created = false;
3370 /* FW requirement: We must create a peer before FW will send out
3371 * an offchannel frame. Otherwise the frame will be stuck and
3372 * never transmitted. We delete the peer upon tx completion.
3373 * It is unlikely that a peer for offchannel tx will already be
3374 * present. However it may be in some rare cases so account for that.
3375 * Otherwise we might remove a legitimate peer and break stuff. */
3378 skb = skb_dequeue(&ar->offchan_tx_queue);
3382 mutex_lock(&ar->conf_mutex);
3384 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %p\n",
3387 hdr = (struct ieee80211_hdr *)skb->data;
3388 peer_addr = ieee80211_get_DA(hdr);
3389 vdev_id = ATH10K_SKB_CB(skb)->vdev_id;
3391 spin_lock_bh(&ar->data_lock);
3392 peer = ath10k_peer_find(ar, vdev_id, peer_addr);
3393 spin_unlock_bh(&ar->data_lock);
3396 /* FIXME: should this use ath10k_warn()? */
3397 ath10k_dbg(ar, ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
3398 peer_addr, vdev_id);
3401 ret = ath10k_peer_create(ar, vdev_id, peer_addr,
3402 WMI_PEER_TYPE_DEFAULT);
3404 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n",
3405 peer_addr, vdev_id, ret);
3406 tmp_peer_created = (ret == 0);
3409 spin_lock_bh(&ar->data_lock);
3410 reinit_completion(&ar->offchan_tx_completed);
3411 ar->offchan_tx_skb = skb;
3412 spin_unlock_bh(&ar->data_lock);
3414 ath10k_mac_tx(ar, skb);
3417 wait_for_completion_timeout(&ar->offchan_tx_completed, 3 * HZ);
3419 ath10k_warn(ar, "timed out waiting for offchannel skb %p\n",
3422 if (!peer && tmp_peer_created) {
3423 ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
3425 ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n",
3426 peer_addr, vdev_id, ret);
3429 mutex_unlock(&ar->conf_mutex);
3433 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
3435 struct sk_buff *skb;
3438 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
3442 ieee80211_free_txskb(ar->hw, skb);
3446 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
3448 struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
3449 struct sk_buff *skb;
3453 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
3457 ret = ath10k_wmi_mgmt_tx(ar, skb);
3459 ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n",
3461 ieee80211_free_txskb(ar->hw, skb);
3470 void __ath10k_scan_finish(struct ath10k *ar)
3472 lockdep_assert_held(&ar->data_lock);
3474 switch (ar->scan.state) {
3475 case ATH10K_SCAN_IDLE:
3477 case ATH10K_SCAN_RUNNING:
3478 case ATH10K_SCAN_ABORTING:
3479 if (!ar->scan.is_roc)
3480 ieee80211_scan_completed(ar->hw,
3482 ATH10K_SCAN_ABORTING));
3483 else if (ar->scan.roc_notify)
3484 ieee80211_remain_on_channel_expired(ar->hw);
3486 case ATH10K_SCAN_STARTING:
3487 ar->scan.state = ATH10K_SCAN_IDLE;
3488 ar->scan_channel = NULL;
3489 ath10k_offchan_tx_purge(ar);
3490 cancel_delayed_work(&ar->scan.timeout);
3491 complete_all(&ar->scan.completed);
3496 void ath10k_scan_finish(struct ath10k *ar)
3498 spin_lock_bh(&ar->data_lock);
3499 __ath10k_scan_finish(ar);
3500 spin_unlock_bh(&ar->data_lock);
3503 static int ath10k_scan_stop(struct ath10k *ar)
3505 struct wmi_stop_scan_arg arg = {
3506 .req_id = 1, /* FIXME */
3507 .req_type = WMI_SCAN_STOP_ONE,
3508 .u.scan_id = ATH10K_SCAN_ID,
3512 lockdep_assert_held(&ar->conf_mutex);
3514 ret = ath10k_wmi_stop_scan(ar, &arg);
3516 ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret);
3520 ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ);
3522 ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n");
3524 } else if (ret > 0) {
3529 /* Scan state should be updated upon scan completion but in case
3530 * firmware fails to deliver the event (for whatever reason) it is
3531 * desired to clean up scan state anyway. Firmware may have just
3532 * dropped the scan completion event delivery due to transport pipe
3533 * being overflown with data and/or it can recover on its own before
3534 * next scan request is submitted.
3536 spin_lock_bh(&ar->data_lock);
3537 if (ar->scan.state != ATH10K_SCAN_IDLE)
3538 __ath10k_scan_finish(ar);
3539 spin_unlock_bh(&ar->data_lock);
3544 static void ath10k_scan_abort(struct ath10k *ar)
3548 lockdep_assert_held(&ar->conf_mutex);
3550 spin_lock_bh(&ar->data_lock);
3552 switch (ar->scan.state) {
3553 case ATH10K_SCAN_IDLE:
3554 /* This can happen if timeout worker kicked in and called
3555 * abortion while scan completion was being processed.
3558 case ATH10K_SCAN_STARTING:
3559 case ATH10K_SCAN_ABORTING:
3560 ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n",
3561 ath10k_scan_state_str(ar->scan.state),
3564 case ATH10K_SCAN_RUNNING:
3565 ar->scan.state = ATH10K_SCAN_ABORTING;
3566 spin_unlock_bh(&ar->data_lock);
3568 ret = ath10k_scan_stop(ar);
3570 ath10k_warn(ar, "failed to abort scan: %d\n", ret);
3572 spin_lock_bh(&ar->data_lock);
3576 spin_unlock_bh(&ar->data_lock);
3579 void ath10k_scan_timeout_work(struct work_struct *work)
3581 struct ath10k *ar = container_of(work, struct ath10k,
3584 mutex_lock(&ar->conf_mutex);
3585 ath10k_scan_abort(ar);
3586 mutex_unlock(&ar->conf_mutex);
3589 static int ath10k_start_scan(struct ath10k *ar,
3590 const struct wmi_start_scan_arg *arg)
3594 lockdep_assert_held(&ar->conf_mutex);
3596 ret = ath10k_wmi_start_scan(ar, arg);
3600 ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ);
3602 ret = ath10k_scan_stop(ar);
3604 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
3609 /* If we failed to start the scan, return error code at
3610 * this point. This is probably due to some issue in the
3611 * firmware, but no need to wedge the driver due to that...
3613 spin_lock_bh(&ar->data_lock);
3614 if (ar->scan.state == ATH10K_SCAN_IDLE) {
3615 spin_unlock_bh(&ar->data_lock);
3618 spin_unlock_bh(&ar->data_lock);
3623 /**********************/
3624 /* mac80211 callbacks */
3625 /**********************/
3627 static void ath10k_tx(struct ieee80211_hw *hw,
3628 struct ieee80211_tx_control *control,
3629 struct sk_buff *skb)
3631 struct ath10k *ar = hw->priv;
3632 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3633 struct ieee80211_vif *vif = info->control.vif;
3634 struct ieee80211_sta *sta = control->sta;
3635 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
3636 __le16 fc = hdr->frame_control;
3638 /* We should disable CCK RATE due to P2P */
3639 if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
3640 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
3642 ATH10K_SKB_CB(skb)->htt.is_offchan = false;
3643 ATH10K_SKB_CB(skb)->htt.freq = 0;
3644 ATH10K_SKB_CB(skb)->htt.tid = ath10k_tx_h_get_tid(hdr);
3645 ATH10K_SKB_CB(skb)->htt.nohwcrypt = !ath10k_tx_h_use_hwcrypto(vif, skb);
3646 ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif);
3647 ATH10K_SKB_CB(skb)->txmode = ath10k_tx_h_get_txmode(ar, vif, sta, skb);
3648 ATH10K_SKB_CB(skb)->is_protected = ieee80211_has_protected(fc);
3650 switch (ATH10K_SKB_CB(skb)->txmode) {
3651 case ATH10K_HW_TXRX_MGMT:
3652 case ATH10K_HW_TXRX_NATIVE_WIFI:
3653 ath10k_tx_h_nwifi(hw, skb);
3654 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
3655 ath10k_tx_h_seq_no(vif, skb);
3657 case ATH10K_HW_TXRX_ETHERNET:
3658 ath10k_tx_h_8023(skb);
3660 case ATH10K_HW_TXRX_RAW:
3661 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
3663 ieee80211_free_txskb(hw, skb);
3668 if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
3669 spin_lock_bh(&ar->data_lock);
3670 ATH10K_SKB_CB(skb)->htt.freq = ar->scan.roc_freq;
3671 ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id;
3672 spin_unlock_bh(&ar->data_lock);
3674 if (ath10k_mac_need_offchan_tx_work(ar)) {
3675 ATH10K_SKB_CB(skb)->htt.freq = 0;
3676 ATH10K_SKB_CB(skb)->htt.is_offchan = true;
3678 ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n",
3681 skb_queue_tail(&ar->offchan_tx_queue, skb);
3682 ieee80211_queue_work(hw, &ar->offchan_tx_work);
3687 ath10k_mac_tx(ar, skb);
3690 /* Must not be called with conf_mutex held as workers can use that also. */
3691 void ath10k_drain_tx(struct ath10k *ar)
3693 /* make sure rcu-protected mac80211 tx path itself is drained */
3696 ath10k_offchan_tx_purge(ar);
3697 ath10k_mgmt_over_wmi_tx_purge(ar);
3699 cancel_work_sync(&ar->offchan_tx_work);
3700 cancel_work_sync(&ar->wmi_mgmt_tx_work);
3703 void ath10k_halt(struct ath10k *ar)
3705 struct ath10k_vif *arvif;
3707 lockdep_assert_held(&ar->conf_mutex);
3709 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
3710 ar->filter_flags = 0;
3711 ar->monitor = false;
3712 ar->monitor_arvif = NULL;
3714 if (ar->monitor_started)
3715 ath10k_monitor_stop(ar);
3717 ar->monitor_started = false;
3720 ath10k_scan_finish(ar);
3721 ath10k_peer_cleanup_all(ar);
3722 ath10k_core_stop(ar);
3723 ath10k_hif_power_down(ar);
3725 spin_lock_bh(&ar->data_lock);
3726 list_for_each_entry(arvif, &ar->arvifs, list)
3727 ath10k_mac_vif_beacon_cleanup(arvif);
3728 spin_unlock_bh(&ar->data_lock);
3731 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
3733 struct ath10k *ar = hw->priv;
3735 mutex_lock(&ar->conf_mutex);
3737 if (ar->cfg_tx_chainmask) {
3738 *tx_ant = ar->cfg_tx_chainmask;
3739 *rx_ant = ar->cfg_rx_chainmask;
3741 *tx_ant = ar->supp_tx_chainmask;
3742 *rx_ant = ar->supp_rx_chainmask;
3745 mutex_unlock(&ar->conf_mutex);
3750 static void ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg)
3752 /* It is not clear that allowing gaps in chainmask
3753 * is helpful. Probably it will not do what user
3754 * is hoping for, so warn in that case.
3756 if (cm == 15 || cm == 7 || cm == 3 || cm == 1 || cm == 0)
3759 ath10k_warn(ar, "mac %s antenna chainmask may be invalid: 0x%x. Suggested values: 15, 7, 3, 1 or 0.\n",
3763 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
3767 lockdep_assert_held(&ar->conf_mutex);
3769 ath10k_check_chain_mask(ar, tx_ant, "tx");
3770 ath10k_check_chain_mask(ar, rx_ant, "rx");
3772 ar->cfg_tx_chainmask = tx_ant;
3773 ar->cfg_rx_chainmask = rx_ant;
3775 if ((ar->state != ATH10K_STATE_ON) &&
3776 (ar->state != ATH10K_STATE_RESTARTED))
3779 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
3782 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n",
3787 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
3790 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n",
3798 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
3800 struct ath10k *ar = hw->priv;
3803 mutex_lock(&ar->conf_mutex);
3804 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
3805 mutex_unlock(&ar->conf_mutex);
3809 static int ath10k_start(struct ieee80211_hw *hw)
3811 struct ath10k *ar = hw->priv;
3816 * This makes sense only when restarting hw. It is harmless to call
3817 * uncoditionally. This is necessary to make sure no HTT/WMI tx
3818 * commands will be submitted while restarting.
3820 ath10k_drain_tx(ar);
3822 mutex_lock(&ar->conf_mutex);
3824 switch (ar->state) {
3825 case ATH10K_STATE_OFF:
3826 ar->state = ATH10K_STATE_ON;
3828 case ATH10K_STATE_RESTARTING:
3830 ar->state = ATH10K_STATE_RESTARTED;
3832 case ATH10K_STATE_ON:
3833 case ATH10K_STATE_RESTARTED:
3834 case ATH10K_STATE_WEDGED:
3838 case ATH10K_STATE_UTF:
3843 ret = ath10k_hif_power_up(ar);
3845 ath10k_err(ar, "Could not init hif: %d\n", ret);
3849 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL);
3851 ath10k_err(ar, "Could not init core: %d\n", ret);
3852 goto err_power_down;
3855 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pmf_qos, 1);
3857 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret);
3861 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->dynamic_bw, 1);
3863 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret);
3867 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
3868 ret = ath10k_wmi_adaptive_qcs(ar, true);
3870 ath10k_warn(ar, "failed to enable adaptive qcs: %d\n",
3876 if (test_bit(WMI_SERVICE_BURST, ar->wmi.svc_map)) {
3877 burst_enable = ar->wmi.pdev_param->burst_enable;
3878 ret = ath10k_wmi_pdev_set_param(ar, burst_enable, 0);
3880 ath10k_warn(ar, "failed to disable burst: %d\n", ret);
3885 if (ar->cfg_tx_chainmask)
3886 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask,
3887 ar->cfg_rx_chainmask);
3890 * By default FW set ARP frames ac to voice (6). In that case ARP
3891 * exchange is not working properly for UAPSD enabled AP. ARP requests
3892 * which arrives with access category 0 are processed by network stack
3893 * and send back with access category 0, but FW changes access category
3894 * to 6. Set ARP frames access category to best effort (0) solves
3898 ret = ath10k_wmi_pdev_set_param(ar,
3899 ar->wmi.pdev_param->arp_ac_override, 0);
3901 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n",
3906 ret = ath10k_wmi_pdev_set_param(ar,
3907 ar->wmi.pdev_param->ani_enable, 1);
3909 ath10k_warn(ar, "failed to enable ani by default: %d\n",
3914 ar->ani_enabled = true;
3916 ar->num_started_vdevs = 0;
3917 ath10k_regd_update(ar);
3919 ath10k_spectral_start(ar);
3920 ath10k_thermal_set_throttling(ar);
3922 mutex_unlock(&ar->conf_mutex);
3926 ath10k_core_stop(ar);
3929 ath10k_hif_power_down(ar);
3932 ar->state = ATH10K_STATE_OFF;
3935 mutex_unlock(&ar->conf_mutex);
3939 static void ath10k_stop(struct ieee80211_hw *hw)
3941 struct ath10k *ar = hw->priv;
3943 ath10k_drain_tx(ar);
3945 mutex_lock(&ar->conf_mutex);
3946 if (ar->state != ATH10K_STATE_OFF) {
3948 ar->state = ATH10K_STATE_OFF;
3950 mutex_unlock(&ar->conf_mutex);
3952 cancel_delayed_work_sync(&ar->scan.timeout);
3953 cancel_work_sync(&ar->restart_work);
3956 static int ath10k_config_ps(struct ath10k *ar)
3958 struct ath10k_vif *arvif;
3961 lockdep_assert_held(&ar->conf_mutex);
3963 list_for_each_entry(arvif, &ar->arvifs, list) {
3964 ret = ath10k_mac_vif_setup_ps(arvif);
3966 ath10k_warn(ar, "failed to setup powersave: %d\n", ret);
3974 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
3979 lockdep_assert_held(&ar->conf_mutex);
3981 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower);
3983 param = ar->wmi.pdev_param->txpower_limit2g;
3984 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
3986 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
3991 param = ar->wmi.pdev_param->txpower_limit5g;
3992 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
3994 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
4002 static int ath10k_mac_txpower_recalc(struct ath10k *ar)
4004 struct ath10k_vif *arvif;
4005 int ret, txpower = -1;
4007 lockdep_assert_held(&ar->conf_mutex);
4009 list_for_each_entry(arvif, &ar->arvifs, list) {
4010 WARN_ON(arvif->txpower < 0);
4013 txpower = arvif->txpower;
4015 txpower = min(txpower, arvif->txpower);
4018 if (WARN_ON(txpower == -1))
4021 ret = ath10k_mac_txpower_setup(ar, txpower);
4023 ath10k_warn(ar, "failed to setup tx power %d: %d\n",
4031 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
4033 struct ath10k *ar = hw->priv;
4034 struct ieee80211_conf *conf = &hw->conf;
4037 mutex_lock(&ar->conf_mutex);
4039 if (changed & IEEE80211_CONF_CHANGE_PS)
4040 ath10k_config_ps(ar);
4042 if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
4043 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR;
4044 ret = ath10k_monitor_recalc(ar);
4046 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4049 mutex_unlock(&ar->conf_mutex);
4053 static u32 get_nss_from_chainmask(u16 chain_mask)
4055 if ((chain_mask & 0x15) == 0x15)
4057 else if ((chain_mask & 0x7) == 0x7)
4059 else if ((chain_mask & 0x3) == 0x3)
4064 static int ath10k_mac_get_vht_cap_bf_sts(struct ath10k *ar)
4066 int nsts = ar->vht_cap_info;
4068 nsts &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
4069 nsts >>= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
4071 /* If firmware does not deliver to host number of space-time
4072 * streams supported, assume it support up to 4 BF STS and return
4073 * the value for VHT CAP: nsts-1)
4081 static int ath10k_mac_get_vht_cap_bf_sound_dim(struct ath10k *ar)
4083 int sound_dim = ar->vht_cap_info;
4085 sound_dim &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
4086 sound_dim >>= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
4088 /* If the sounding dimension is not advertised by the firmware,
4089 * let's use a default value of 1
4097 static int ath10k_mac_set_txbf_conf(struct ath10k_vif *arvif)
4100 struct ath10k *ar = arvif->ar;
4104 if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_BEFORE_ASSOC)
4107 nsts = ath10k_mac_get_vht_cap_bf_sts(ar);
4108 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
4109 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE))
4110 value |= SM(nsts, WMI_TXBF_STS_CAP_OFFSET);
4112 sound_dim = ath10k_mac_get_vht_cap_bf_sound_dim(ar);
4113 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
4114 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE))
4115 value |= SM(sound_dim, WMI_BF_SOUND_DIM_OFFSET);
4120 if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
4121 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
4123 if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
4124 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFER |
4125 WMI_VDEV_PARAM_TXBF_SU_TX_BFER);
4127 if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
4128 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
4130 if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
4131 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFEE |
4132 WMI_VDEV_PARAM_TXBF_SU_TX_BFEE);
4134 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4135 ar->wmi.vdev_param->txbf, value);
4140 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
4141 * because we will send mgmt frames without CCK. This requirement
4142 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
4145 static int ath10k_add_interface(struct ieee80211_hw *hw,
4146 struct ieee80211_vif *vif)
4148 struct ath10k *ar = hw->priv;
4149 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4150 enum wmi_sta_powersave_param param;
4157 vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
4159 mutex_lock(&ar->conf_mutex);
4161 memset(arvif, 0, sizeof(*arvif));
4166 INIT_LIST_HEAD(&arvif->list);
4167 INIT_WORK(&arvif->ap_csa_work, ath10k_mac_vif_ap_csa_work);
4168 INIT_DELAYED_WORK(&arvif->connection_loss_work,
4169 ath10k_mac_vif_sta_connection_loss_work);
4171 for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
4172 arvif->bitrate_mask.control[i].legacy = 0xffffffff;
4173 memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff,
4174 sizeof(arvif->bitrate_mask.control[i].ht_mcs));
4175 memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff,
4176 sizeof(arvif->bitrate_mask.control[i].vht_mcs));
4179 if (ar->num_peers >= ar->max_num_peers) {
4180 ath10k_warn(ar, "refusing vdev creation due to insufficient peer entry resources in firmware\n");
4185 if (ar->free_vdev_map == 0) {
4186 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
4190 bit = __ffs64(ar->free_vdev_map);
4192 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
4193 bit, ar->free_vdev_map);
4195 arvif->vdev_id = bit;
4196 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
4198 switch (vif->type) {
4199 case NL80211_IFTYPE_P2P_DEVICE:
4200 arvif->vdev_type = WMI_VDEV_TYPE_STA;
4201 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE;
4203 case NL80211_IFTYPE_UNSPECIFIED:
4204 case NL80211_IFTYPE_STATION:
4205 arvif->vdev_type = WMI_VDEV_TYPE_STA;
4207 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT;
4209 case NL80211_IFTYPE_ADHOC:
4210 arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
4212 case NL80211_IFTYPE_MESH_POINT:
4213 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
4215 ath10k_warn(ar, "must load driver with rawmode=1 to add mesh interfaces\n");
4218 arvif->vdev_type = WMI_VDEV_TYPE_AP;
4220 case NL80211_IFTYPE_AP:
4221 arvif->vdev_type = WMI_VDEV_TYPE_AP;
4224 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO;
4226 case NL80211_IFTYPE_MONITOR:
4227 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
4234 /* Using vdev_id as queue number will make it very easy to do per-vif
4235 * tx queue locking. This shouldn't wrap due to interface combinations
4236 * but do a modulo for correctness sake and prevent using offchannel tx
4237 * queues for regular vif tx.
4239 vif->cab_queue = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
4240 for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++)
4241 vif->hw_queue[i] = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
4243 /* Some firmware revisions don't wait for beacon tx completion before
4244 * sending another SWBA event. This could lead to hardware using old
4245 * (freed) beacon data in some cases, e.g. tx credit starvation
4246 * combined with missed TBTT. This is very very rare.
4248 * On non-IOMMU-enabled hosts this could be a possible security issue
4249 * because hw could beacon some random data on the air. On
4250 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
4251 * device would crash.
4253 * Since there are no beacon tx completions (implicit nor explicit)
4254 * propagated to host the only workaround for this is to allocate a
4255 * DMA-coherent buffer for a lifetime of a vif and use it for all
4256 * beacon tx commands. Worst case for this approach is some beacons may
4257 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
4259 if (vif->type == NL80211_IFTYPE_ADHOC ||
4260 vif->type == NL80211_IFTYPE_MESH_POINT ||
4261 vif->type == NL80211_IFTYPE_AP) {
4262 arvif->beacon_buf = dma_zalloc_coherent(ar->dev,
4263 IEEE80211_MAX_FRAME_LEN,
4264 &arvif->beacon_paddr,
4266 if (!arvif->beacon_buf) {
4268 ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
4273 if (test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags))
4274 arvif->nohwcrypt = true;
4276 if (arvif->nohwcrypt &&
4277 !test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
4278 ath10k_warn(ar, "cryptmode module param needed for sw crypto\n");
4282 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
4283 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
4284 arvif->beacon_buf ? "single-buf" : "per-skb");
4286 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
4287 arvif->vdev_subtype, vif->addr);
4289 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
4290 arvif->vdev_id, ret);
4294 ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
4295 list_add(&arvif->list, &ar->arvifs);
4297 /* It makes no sense to have firmware do keepalives. mac80211 already
4298 * takes care of this with idle connection polling.
4300 ret = ath10k_mac_vif_disable_keepalive(arvif);
4302 ath10k_warn(ar, "failed to disable keepalive on vdev %i: %d\n",
4303 arvif->vdev_id, ret);
4304 goto err_vdev_delete;
4307 arvif->def_wep_key_idx = -1;
4309 vdev_param = ar->wmi.vdev_param->tx_encap_type;
4310 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4311 ATH10K_HW_TXRX_NATIVE_WIFI);
4312 /* 10.X firmware does not support this VDEV parameter. Do not warn */
4313 if (ret && ret != -EOPNOTSUPP) {
4314 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
4315 arvif->vdev_id, ret);
4316 goto err_vdev_delete;
4319 if (ar->cfg_tx_chainmask) {
4320 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4322 vdev_param = ar->wmi.vdev_param->nss;
4323 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4326 ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
4327 arvif->vdev_id, ar->cfg_tx_chainmask, nss,
4329 goto err_vdev_delete;
4333 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4334 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4335 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr,
4336 WMI_PEER_TYPE_DEFAULT);
4338 ath10k_warn(ar, "failed to create vdev %i peer for AP/IBSS: %d\n",
4339 arvif->vdev_id, ret);
4340 goto err_vdev_delete;
4344 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
4345 ret = ath10k_mac_set_kickout(arvif);
4347 ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
4348 arvif->vdev_id, ret);
4349 goto err_peer_delete;
4353 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
4354 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
4355 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
4356 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
4359 ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
4360 arvif->vdev_id, ret);
4361 goto err_peer_delete;
4364 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
4366 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
4367 arvif->vdev_id, ret);
4368 goto err_peer_delete;
4371 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
4373 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
4374 arvif->vdev_id, ret);
4375 goto err_peer_delete;
4379 ret = ath10k_mac_set_txbf_conf(arvif);
4381 ath10k_warn(ar, "failed to set txbf for vdev %d: %d\n",
4382 arvif->vdev_id, ret);
4383 goto err_peer_delete;
4386 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
4388 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
4389 arvif->vdev_id, ret);
4390 goto err_peer_delete;
4393 arvif->txpower = vif->bss_conf.txpower;
4394 ret = ath10k_mac_txpower_recalc(ar);
4396 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
4397 goto err_peer_delete;
4400 if (vif->type == NL80211_IFTYPE_MONITOR) {
4401 ar->monitor_arvif = arvif;
4402 ret = ath10k_monitor_recalc(ar);
4404 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4405 goto err_peer_delete;
4409 spin_lock_bh(&ar->htt.tx_lock);
4411 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
4412 spin_unlock_bh(&ar->htt.tx_lock);
4414 mutex_unlock(&ar->conf_mutex);
4418 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4419 arvif->vdev_type == WMI_VDEV_TYPE_IBSS)
4420 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
4423 ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
4424 ar->free_vdev_map |= 1LL << arvif->vdev_id;
4425 list_del(&arvif->list);
4428 if (arvif->beacon_buf) {
4429 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
4430 arvif->beacon_buf, arvif->beacon_paddr);
4431 arvif->beacon_buf = NULL;
4434 mutex_unlock(&ar->conf_mutex);
4439 static void ath10k_mac_vif_tx_unlock_all(struct ath10k_vif *arvif)
4443 for (i = 0; i < BITS_PER_LONG; i++)
4444 ath10k_mac_vif_tx_unlock(arvif, i);
4447 static void ath10k_remove_interface(struct ieee80211_hw *hw,
4448 struct ieee80211_vif *vif)
4450 struct ath10k *ar = hw->priv;
4451 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4454 cancel_work_sync(&arvif->ap_csa_work);
4455 cancel_delayed_work_sync(&arvif->connection_loss_work);
4457 mutex_lock(&ar->conf_mutex);
4459 spin_lock_bh(&ar->data_lock);
4460 ath10k_mac_vif_beacon_cleanup(arvif);
4461 spin_unlock_bh(&ar->data_lock);
4463 ret = ath10k_spectral_vif_stop(arvif);
4465 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
4466 arvif->vdev_id, ret);
4468 ar->free_vdev_map |= 1LL << arvif->vdev_id;
4469 list_del(&arvif->list);
4471 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4472 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4473 ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id,
4476 ath10k_warn(ar, "failed to submit AP/IBSS self-peer removal on vdev %i: %d\n",
4477 arvif->vdev_id, ret);
4479 kfree(arvif->u.ap.noa_data);
4482 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
4485 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
4487 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
4488 arvif->vdev_id, ret);
4490 /* Some firmware revisions don't notify host about self-peer removal
4491 * until after associated vdev is deleted.
4493 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4494 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4495 ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id,
4498 ath10k_warn(ar, "failed to remove AP self-peer on vdev %i: %d\n",
4499 arvif->vdev_id, ret);
4501 spin_lock_bh(&ar->data_lock);
4503 spin_unlock_bh(&ar->data_lock);
4506 ath10k_peer_cleanup(ar, arvif->vdev_id);
4508 if (vif->type == NL80211_IFTYPE_MONITOR) {
4509 ar->monitor_arvif = NULL;
4510 ret = ath10k_monitor_recalc(ar);
4512 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4515 spin_lock_bh(&ar->htt.tx_lock);
4516 ath10k_mac_vif_tx_unlock_all(arvif);
4517 spin_unlock_bh(&ar->htt.tx_lock);
4519 mutex_unlock(&ar->conf_mutex);
4523 * FIXME: Has to be verified.
4525 #define SUPPORTED_FILTERS \
4530 FIF_BCN_PRBRESP_PROMISC | \
4534 static void ath10k_configure_filter(struct ieee80211_hw *hw,
4535 unsigned int changed_flags,
4536 unsigned int *total_flags,
4539 struct ath10k *ar = hw->priv;
4542 mutex_lock(&ar->conf_mutex);
4544 changed_flags &= SUPPORTED_FILTERS;
4545 *total_flags &= SUPPORTED_FILTERS;
4546 ar->filter_flags = *total_flags;
4548 ret = ath10k_monitor_recalc(ar);
4550 ath10k_warn(ar, "failed to recalc montior: %d\n", ret);
4552 mutex_unlock(&ar->conf_mutex);
4555 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
4556 struct ieee80211_vif *vif,
4557 struct ieee80211_bss_conf *info,
4560 struct ath10k *ar = hw->priv;
4561 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4563 u32 vdev_param, pdev_param, slottime, preamble;
4565 mutex_lock(&ar->conf_mutex);
4567 if (changed & BSS_CHANGED_IBSS)
4568 ath10k_control_ibss(arvif, info, vif->addr);
4570 if (changed & BSS_CHANGED_BEACON_INT) {
4571 arvif->beacon_interval = info->beacon_int;
4572 vdev_param = ar->wmi.vdev_param->beacon_interval;
4573 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4574 arvif->beacon_interval);
4575 ath10k_dbg(ar, ATH10K_DBG_MAC,
4576 "mac vdev %d beacon_interval %d\n",
4577 arvif->vdev_id, arvif->beacon_interval);
4580 ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
4581 arvif->vdev_id, ret);
4584 if (changed & BSS_CHANGED_BEACON) {
4585 ath10k_dbg(ar, ATH10K_DBG_MAC,
4586 "vdev %d set beacon tx mode to staggered\n",
4589 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
4590 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
4591 WMI_BEACON_STAGGERED_MODE);
4593 ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
4594 arvif->vdev_id, ret);
4596 ret = ath10k_mac_setup_bcn_tmpl(arvif);
4598 ath10k_warn(ar, "failed to update beacon template: %d\n",
4601 if (ieee80211_vif_is_mesh(vif)) {
4602 /* mesh doesn't use SSID but firmware needs it */
4603 strncpy(arvif->u.ap.ssid, "mesh",
4604 sizeof(arvif->u.ap.ssid));
4605 arvif->u.ap.ssid_len = 4;
4609 if (changed & BSS_CHANGED_AP_PROBE_RESP) {
4610 ret = ath10k_mac_setup_prb_tmpl(arvif);
4612 ath10k_warn(ar, "failed to setup probe resp template on vdev %i: %d\n",
4613 arvif->vdev_id, ret);
4616 if (changed & (BSS_CHANGED_BEACON_INFO | BSS_CHANGED_BEACON)) {
4617 arvif->dtim_period = info->dtim_period;
4619 ath10k_dbg(ar, ATH10K_DBG_MAC,
4620 "mac vdev %d dtim_period %d\n",
4621 arvif->vdev_id, arvif->dtim_period);
4623 vdev_param = ar->wmi.vdev_param->dtim_period;
4624 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4625 arvif->dtim_period);
4627 ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
4628 arvif->vdev_id, ret);
4631 if (changed & BSS_CHANGED_SSID &&
4632 vif->type == NL80211_IFTYPE_AP) {
4633 arvif->u.ap.ssid_len = info->ssid_len;
4635 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
4636 arvif->u.ap.hidden_ssid = info->hidden_ssid;
4639 if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
4640 ether_addr_copy(arvif->bssid, info->bssid);
4642 if (changed & BSS_CHANGED_BEACON_ENABLED)
4643 ath10k_control_beaconing(arvif, info);
4645 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
4646 arvif->use_cts_prot = info->use_cts_prot;
4647 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
4648 arvif->vdev_id, info->use_cts_prot);
4650 ret = ath10k_recalc_rtscts_prot(arvif);
4652 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
4653 arvif->vdev_id, ret);
4655 vdev_param = ar->wmi.vdev_param->protection_mode;
4656 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4657 info->use_cts_prot ? 1 : 0);
4659 ath10k_warn(ar, "failed to set protection mode %d on vdev %i: %d\n",
4660 info->use_cts_prot, arvif->vdev_id, ret);
4663 if (changed & BSS_CHANGED_ERP_SLOT) {
4664 if (info->use_short_slot)
4665 slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
4668 slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
4670 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
4671 arvif->vdev_id, slottime);
4673 vdev_param = ar->wmi.vdev_param->slot_time;
4674 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4677 ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
4678 arvif->vdev_id, ret);
4681 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
4682 if (info->use_short_preamble)
4683 preamble = WMI_VDEV_PREAMBLE_SHORT;
4685 preamble = WMI_VDEV_PREAMBLE_LONG;
4687 ath10k_dbg(ar, ATH10K_DBG_MAC,
4688 "mac vdev %d preamble %dn",
4689 arvif->vdev_id, preamble);
4691 vdev_param = ar->wmi.vdev_param->preamble;
4692 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4695 ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
4696 arvif->vdev_id, ret);
4699 if (changed & BSS_CHANGED_ASSOC) {
4701 /* Workaround: Make sure monitor vdev is not running
4702 * when associating to prevent some firmware revisions
4703 * (e.g. 10.1 and 10.2) from crashing.
4705 if (ar->monitor_started)
4706 ath10k_monitor_stop(ar);
4707 ath10k_bss_assoc(hw, vif, info);
4708 ath10k_monitor_recalc(ar);
4710 ath10k_bss_disassoc(hw, vif);
4714 if (changed & BSS_CHANGED_TXPOWER) {
4715 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
4716 arvif->vdev_id, info->txpower);
4718 arvif->txpower = info->txpower;
4719 ret = ath10k_mac_txpower_recalc(ar);
4721 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
4724 if (changed & BSS_CHANGED_PS) {
4725 arvif->ps = vif->bss_conf.ps;
4727 ret = ath10k_config_ps(ar);
4729 ath10k_warn(ar, "failed to setup ps on vdev %i: %d\n",
4730 arvif->vdev_id, ret);
4733 mutex_unlock(&ar->conf_mutex);
4736 static int ath10k_hw_scan(struct ieee80211_hw *hw,
4737 struct ieee80211_vif *vif,
4738 struct ieee80211_scan_request *hw_req)
4740 struct ath10k *ar = hw->priv;
4741 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4742 struct cfg80211_scan_request *req = &hw_req->req;
4743 struct wmi_start_scan_arg arg;
4747 mutex_lock(&ar->conf_mutex);
4749 spin_lock_bh(&ar->data_lock);
4750 switch (ar->scan.state) {
4751 case ATH10K_SCAN_IDLE:
4752 reinit_completion(&ar->scan.started);
4753 reinit_completion(&ar->scan.completed);
4754 ar->scan.state = ATH10K_SCAN_STARTING;
4755 ar->scan.is_roc = false;
4756 ar->scan.vdev_id = arvif->vdev_id;
4759 case ATH10K_SCAN_STARTING:
4760 case ATH10K_SCAN_RUNNING:
4761 case ATH10K_SCAN_ABORTING:
4765 spin_unlock_bh(&ar->data_lock);
4770 memset(&arg, 0, sizeof(arg));
4771 ath10k_wmi_start_scan_init(ar, &arg);
4772 arg.vdev_id = arvif->vdev_id;
4773 arg.scan_id = ATH10K_SCAN_ID;
4776 arg.ie_len = req->ie_len;
4777 memcpy(arg.ie, req->ie, arg.ie_len);
4781 arg.n_ssids = req->n_ssids;
4782 for (i = 0; i < arg.n_ssids; i++) {
4783 arg.ssids[i].len = req->ssids[i].ssid_len;
4784 arg.ssids[i].ssid = req->ssids[i].ssid;
4787 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
4790 if (req->n_channels) {
4791 arg.n_channels = req->n_channels;
4792 for (i = 0; i < arg.n_channels; i++)
4793 arg.channels[i] = req->channels[i]->center_freq;
4796 ret = ath10k_start_scan(ar, &arg);
4798 ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
4799 spin_lock_bh(&ar->data_lock);
4800 ar->scan.state = ATH10K_SCAN_IDLE;
4801 spin_unlock_bh(&ar->data_lock);
4804 /* Add a 200ms margin to account for event/command processing */
4805 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
4806 msecs_to_jiffies(arg.max_scan_time +
4810 mutex_unlock(&ar->conf_mutex);
4814 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
4815 struct ieee80211_vif *vif)
4817 struct ath10k *ar = hw->priv;
4819 mutex_lock(&ar->conf_mutex);
4820 ath10k_scan_abort(ar);
4821 mutex_unlock(&ar->conf_mutex);
4823 cancel_delayed_work_sync(&ar->scan.timeout);
4826 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
4827 struct ath10k_vif *arvif,
4828 enum set_key_cmd cmd,
4829 struct ieee80211_key_conf *key)
4831 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
4834 /* 10.1 firmware branch requires default key index to be set to group
4835 * key index after installing it. Otherwise FW/HW Txes corrupted
4836 * frames with multi-vif APs. This is not required for main firmware
4837 * branch (e.g. 636).
4839 * This is also needed for 636 fw for IBSS-RSN to work more reliably.
4841 * FIXME: It remains unknown if this is required for multi-vif STA
4842 * interfaces on 10.1.
4845 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
4846 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
4849 if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
4852 if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
4855 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
4861 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4864 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
4865 arvif->vdev_id, ret);
4868 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
4869 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
4870 struct ieee80211_key_conf *key)
4872 struct ath10k *ar = hw->priv;
4873 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4874 struct ath10k_peer *peer;
4875 const u8 *peer_addr;
4876 bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
4877 key->cipher == WLAN_CIPHER_SUITE_WEP104;
4883 /* this one needs to be done in software */
4884 if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC)
4887 if (arvif->nohwcrypt)
4890 if (key->keyidx > WMI_MAX_KEY_INDEX)
4893 mutex_lock(&ar->conf_mutex);
4896 peer_addr = sta->addr;
4897 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
4898 peer_addr = vif->bss_conf.bssid;
4900 peer_addr = vif->addr;
4902 key->hw_key_idx = key->keyidx;
4906 arvif->wep_keys[key->keyidx] = key;
4908 arvif->wep_keys[key->keyidx] = NULL;
4911 /* the peer should not disappear in mid-way (unless FW goes awry) since
4912 * we already hold conf_mutex. we just make sure its there now. */
4913 spin_lock_bh(&ar->data_lock);
4914 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
4915 spin_unlock_bh(&ar->data_lock);
4918 if (cmd == SET_KEY) {
4919 ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
4924 /* if the peer doesn't exist there is no key to disable
4930 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
4931 flags |= WMI_KEY_PAIRWISE;
4933 flags |= WMI_KEY_GROUP;
4936 if (cmd == DISABLE_KEY)
4937 ath10k_clear_vdev_key(arvif, key);
4939 /* When WEP keys are uploaded it's possible that there are
4940 * stations associated already (e.g. when merging) without any
4941 * keys. Static WEP needs an explicit per-peer key upload.
4943 if (vif->type == NL80211_IFTYPE_ADHOC &&
4945 ath10k_mac_vif_update_wep_key(arvif, key);
4947 /* 802.1x never sets the def_wep_key_idx so each set_key()
4948 * call changes default tx key.
4950 * Static WEP sets def_wep_key_idx via .set_default_unicast_key
4951 * after first set_key().
4953 if (cmd == SET_KEY && arvif->def_wep_key_idx == -1)
4954 flags |= WMI_KEY_TX_USAGE;
4957 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags);
4960 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
4961 arvif->vdev_id, peer_addr, ret);
4965 /* mac80211 sets static WEP keys as groupwise while firmware requires
4966 * them to be installed twice as both pairwise and groupwise.
4968 if (is_wep && !sta && vif->type == NL80211_IFTYPE_STATION) {
4970 flags2 &= ~WMI_KEY_GROUP;
4971 flags2 |= WMI_KEY_PAIRWISE;
4973 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags2);
4976 ath10k_warn(ar, "failed to install (ucast) key for vdev %i peer %pM: %d\n",
4977 arvif->vdev_id, peer_addr, ret);
4978 ret2 = ath10k_install_key(arvif, key, DISABLE_KEY,
4982 ath10k_warn(ar, "failed to disable (mcast) key for vdev %i peer %pM: %d\n",
4983 arvif->vdev_id, peer_addr, ret2);
4989 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
4991 spin_lock_bh(&ar->data_lock);
4992 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
4993 if (peer && cmd == SET_KEY)
4994 peer->keys[key->keyidx] = key;
4995 else if (peer && cmd == DISABLE_KEY)
4996 peer->keys[key->keyidx] = NULL;
4997 else if (peer == NULL)
4998 /* impossible unless FW goes crazy */
4999 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
5000 spin_unlock_bh(&ar->data_lock);
5003 mutex_unlock(&ar->conf_mutex);
5007 static void ath10k_set_default_unicast_key(struct ieee80211_hw *hw,
5008 struct ieee80211_vif *vif,
5011 struct ath10k *ar = hw->priv;
5012 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5015 mutex_lock(&arvif->ar->conf_mutex);
5017 if (arvif->ar->state != ATH10K_STATE_ON)
5020 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
5021 arvif->vdev_id, keyidx);
5023 ret = ath10k_wmi_vdev_set_param(arvif->ar,
5025 arvif->ar->wmi.vdev_param->def_keyid,
5029 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
5035 arvif->def_wep_key_idx = keyidx;
5038 mutex_unlock(&arvif->ar->conf_mutex);
5041 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
5044 struct ath10k_vif *arvif;
5045 struct ath10k_sta *arsta;
5046 struct ieee80211_sta *sta;
5047 struct cfg80211_chan_def def;
5048 enum ieee80211_band band;
5049 const u8 *ht_mcs_mask;
5050 const u16 *vht_mcs_mask;
5051 u32 changed, bw, nss, smps;
5054 arsta = container_of(wk, struct ath10k_sta, update_wk);
5055 sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
5056 arvif = arsta->arvif;
5059 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
5062 band = def.chan->band;
5063 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
5064 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
5066 spin_lock_bh(&ar->data_lock);
5068 changed = arsta->changed;
5075 spin_unlock_bh(&ar->data_lock);
5077 mutex_lock(&ar->conf_mutex);
5079 nss = max_t(u32, 1, nss);
5080 nss = min(nss, max(ath10k_mac_max_ht_nss(ht_mcs_mask),
5081 ath10k_mac_max_vht_nss(vht_mcs_mask)));
5083 if (changed & IEEE80211_RC_BW_CHANGED) {
5084 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
5087 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5088 WMI_PEER_CHAN_WIDTH, bw);
5090 ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
5091 sta->addr, bw, err);
5094 if (changed & IEEE80211_RC_NSS_CHANGED) {
5095 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
5098 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5101 ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
5102 sta->addr, nss, err);
5105 if (changed & IEEE80211_RC_SMPS_CHANGED) {
5106 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
5109 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5110 WMI_PEER_SMPS_STATE, smps);
5112 ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
5113 sta->addr, smps, err);
5116 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED ||
5117 changed & IEEE80211_RC_NSS_CHANGED) {
5118 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates/nss\n",
5121 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
5123 ath10k_warn(ar, "failed to reassociate station: %pM\n",
5127 mutex_unlock(&ar->conf_mutex);
5130 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif,
5131 struct ieee80211_sta *sta)
5133 struct ath10k *ar = arvif->ar;
5135 lockdep_assert_held(&ar->conf_mutex);
5137 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
5140 if (ar->num_stations >= ar->max_num_stations)
5148 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif,
5149 struct ieee80211_sta *sta)
5151 struct ath10k *ar = arvif->ar;
5153 lockdep_assert_held(&ar->conf_mutex);
5155 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
5161 struct ath10k_mac_tdls_iter_data {
5162 u32 num_tdls_stations;
5163 struct ieee80211_vif *curr_vif;
5166 static void ath10k_mac_tdls_vif_stations_count_iter(void *data,
5167 struct ieee80211_sta *sta)
5169 struct ath10k_mac_tdls_iter_data *iter_data = data;
5170 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5171 struct ieee80211_vif *sta_vif = arsta->arvif->vif;
5173 if (sta->tdls && sta_vif == iter_data->curr_vif)
5174 iter_data->num_tdls_stations++;
5177 static int ath10k_mac_tdls_vif_stations_count(struct ieee80211_hw *hw,
5178 struct ieee80211_vif *vif)
5180 struct ath10k_mac_tdls_iter_data data = {};
5182 data.curr_vif = vif;
5184 ieee80211_iterate_stations_atomic(hw,
5185 ath10k_mac_tdls_vif_stations_count_iter,
5187 return data.num_tdls_stations;
5190 static void ath10k_mac_tdls_vifs_count_iter(void *data, u8 *mac,
5191 struct ieee80211_vif *vif)
5193 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5194 int *num_tdls_vifs = data;
5196 if (vif->type != NL80211_IFTYPE_STATION)
5199 if (ath10k_mac_tdls_vif_stations_count(arvif->ar->hw, vif) > 0)
5203 static int ath10k_mac_tdls_vifs_count(struct ieee80211_hw *hw)
5205 int num_tdls_vifs = 0;
5207 ieee80211_iterate_active_interfaces_atomic(hw,
5208 IEEE80211_IFACE_ITER_NORMAL,
5209 ath10k_mac_tdls_vifs_count_iter,
5211 return num_tdls_vifs;
5214 static int ath10k_sta_state(struct ieee80211_hw *hw,
5215 struct ieee80211_vif *vif,
5216 struct ieee80211_sta *sta,
5217 enum ieee80211_sta_state old_state,
5218 enum ieee80211_sta_state new_state)
5220 struct ath10k *ar = hw->priv;
5221 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5222 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5225 if (old_state == IEEE80211_STA_NOTEXIST &&
5226 new_state == IEEE80211_STA_NONE) {
5227 memset(arsta, 0, sizeof(*arsta));
5228 arsta->arvif = arvif;
5229 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
5232 /* cancel must be done outside the mutex to avoid deadlock */
5233 if ((old_state == IEEE80211_STA_NONE &&
5234 new_state == IEEE80211_STA_NOTEXIST))
5235 cancel_work_sync(&arsta->update_wk);
5237 mutex_lock(&ar->conf_mutex);
5239 if (old_state == IEEE80211_STA_NOTEXIST &&
5240 new_state == IEEE80211_STA_NONE) {
5242 * New station addition.
5244 enum wmi_peer_type peer_type = WMI_PEER_TYPE_DEFAULT;
5245 u32 num_tdls_stations;
5248 ath10k_dbg(ar, ATH10K_DBG_MAC,
5249 "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
5250 arvif->vdev_id, sta->addr,
5251 ar->num_stations + 1, ar->max_num_stations,
5252 ar->num_peers + 1, ar->max_num_peers);
5254 ret = ath10k_mac_inc_num_stations(arvif, sta);
5256 ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n",
5257 ar->max_num_stations);
5262 peer_type = WMI_PEER_TYPE_TDLS;
5264 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr,
5267 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
5268 sta->addr, arvif->vdev_id, ret);
5269 ath10k_mac_dec_num_stations(arvif, sta);
5276 num_tdls_stations = ath10k_mac_tdls_vif_stations_count(hw, vif);
5277 num_tdls_vifs = ath10k_mac_tdls_vifs_count(hw);
5279 if (num_tdls_vifs >= ar->max_num_tdls_vdevs &&
5280 num_tdls_stations == 0) {
5281 ath10k_warn(ar, "vdev %i exceeded maximum number of tdls vdevs %i\n",
5282 arvif->vdev_id, ar->max_num_tdls_vdevs);
5283 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5284 ath10k_mac_dec_num_stations(arvif, sta);
5289 if (num_tdls_stations == 0) {
5290 /* This is the first tdls peer in current vif */
5291 enum wmi_tdls_state state = WMI_TDLS_ENABLE_ACTIVE;
5293 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5296 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
5297 arvif->vdev_id, ret);
5298 ath10k_peer_delete(ar, arvif->vdev_id,
5300 ath10k_mac_dec_num_stations(arvif, sta);
5305 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
5306 WMI_TDLS_PEER_STATE_PEERING);
5309 "failed to update tdls peer %pM for vdev %d when adding a new sta: %i\n",
5310 sta->addr, arvif->vdev_id, ret);
5311 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5312 ath10k_mac_dec_num_stations(arvif, sta);
5314 if (num_tdls_stations != 0)
5316 ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5319 } else if ((old_state == IEEE80211_STA_NONE &&
5320 new_state == IEEE80211_STA_NOTEXIST)) {
5322 * Existing station deletion.
5324 ath10k_dbg(ar, ATH10K_DBG_MAC,
5325 "mac vdev %d peer delete %pM (sta gone)\n",
5326 arvif->vdev_id, sta->addr);
5328 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5330 ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
5331 sta->addr, arvif->vdev_id, ret);
5333 ath10k_mac_dec_num_stations(arvif, sta);
5338 if (ath10k_mac_tdls_vif_stations_count(hw, vif))
5341 /* This was the last tdls peer in current vif */
5342 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5345 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
5346 arvif->vdev_id, ret);
5348 } else if (old_state == IEEE80211_STA_AUTH &&
5349 new_state == IEEE80211_STA_ASSOC &&
5350 (vif->type == NL80211_IFTYPE_AP ||
5351 vif->type == NL80211_IFTYPE_MESH_POINT ||
5352 vif->type == NL80211_IFTYPE_ADHOC)) {
5356 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n",
5359 ret = ath10k_station_assoc(ar, vif, sta, false);
5361 ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
5362 sta->addr, arvif->vdev_id, ret);
5363 } else if (old_state == IEEE80211_STA_ASSOC &&
5364 new_state == IEEE80211_STA_AUTHORIZED &&
5367 * Tdls station authorized.
5369 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac tdls sta %pM authorized\n",
5372 ret = ath10k_station_assoc(ar, vif, sta, false);
5374 ath10k_warn(ar, "failed to associate tdls station %pM for vdev %i: %i\n",
5375 sta->addr, arvif->vdev_id, ret);
5379 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
5380 WMI_TDLS_PEER_STATE_CONNECTED);
5382 ath10k_warn(ar, "failed to update tdls peer %pM for vdev %i: %i\n",
5383 sta->addr, arvif->vdev_id, ret);
5384 } else if (old_state == IEEE80211_STA_ASSOC &&
5385 new_state == IEEE80211_STA_AUTH &&
5386 (vif->type == NL80211_IFTYPE_AP ||
5387 vif->type == NL80211_IFTYPE_MESH_POINT ||
5388 vif->type == NL80211_IFTYPE_ADHOC)) {
5392 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
5395 ret = ath10k_station_disassoc(ar, vif, sta);
5397 ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
5398 sta->addr, arvif->vdev_id, ret);
5401 mutex_unlock(&ar->conf_mutex);
5405 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
5406 u16 ac, bool enable)
5408 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5409 struct wmi_sta_uapsd_auto_trig_arg arg = {};
5410 u32 prio = 0, acc = 0;
5414 lockdep_assert_held(&ar->conf_mutex);
5416 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
5420 case IEEE80211_AC_VO:
5421 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
5422 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
5426 case IEEE80211_AC_VI:
5427 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
5428 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
5432 case IEEE80211_AC_BE:
5433 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
5434 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
5438 case IEEE80211_AC_BK:
5439 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
5440 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
5447 arvif->u.sta.uapsd |= value;
5449 arvif->u.sta.uapsd &= ~value;
5451 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5452 WMI_STA_PS_PARAM_UAPSD,
5453 arvif->u.sta.uapsd);
5455 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
5459 if (arvif->u.sta.uapsd)
5460 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
5462 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
5464 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5465 WMI_STA_PS_PARAM_RX_WAKE_POLICY,
5468 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
5470 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
5472 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
5473 arvif->vdev_id, ret);
5477 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
5479 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
5480 arvif->vdev_id, ret);
5484 if (test_bit(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, ar->wmi.svc_map) ||
5485 test_bit(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, ar->wmi.svc_map)) {
5486 /* Only userspace can make an educated decision when to send
5487 * trigger frame. The following effectively disables u-UAPSD
5488 * autotrigger in firmware (which is enabled by default
5489 * provided the autotrigger service is available).
5493 arg.user_priority = prio;
5494 arg.service_interval = 0;
5495 arg.suspend_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
5496 arg.delay_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
5498 ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id,
5499 arvif->bssid, &arg, 1);
5501 ath10k_warn(ar, "failed to set uapsd auto trigger %d\n",
5511 static int ath10k_conf_tx(struct ieee80211_hw *hw,
5512 struct ieee80211_vif *vif, u16 ac,
5513 const struct ieee80211_tx_queue_params *params)
5515 struct ath10k *ar = hw->priv;
5516 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5517 struct wmi_wmm_params_arg *p = NULL;
5520 mutex_lock(&ar->conf_mutex);
5523 case IEEE80211_AC_VO:
5524 p = &arvif->wmm_params.ac_vo;
5526 case IEEE80211_AC_VI:
5527 p = &arvif->wmm_params.ac_vi;
5529 case IEEE80211_AC_BE:
5530 p = &arvif->wmm_params.ac_be;
5532 case IEEE80211_AC_BK:
5533 p = &arvif->wmm_params.ac_bk;
5542 p->cwmin = params->cw_min;
5543 p->cwmax = params->cw_max;
5544 p->aifs = params->aifs;
5547 * The channel time duration programmed in the HW is in absolute
5548 * microseconds, while mac80211 gives the txop in units of
5551 p->txop = params->txop * 32;
5553 if (ar->wmi.ops->gen_vdev_wmm_conf) {
5554 ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id,
5555 &arvif->wmm_params);
5557 ath10k_warn(ar, "failed to set vdev wmm params on vdev %i: %d\n",
5558 arvif->vdev_id, ret);
5562 /* This won't work well with multi-interface cases but it's
5563 * better than nothing.
5565 ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params);
5567 ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
5572 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
5574 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
5577 mutex_unlock(&ar->conf_mutex);
5581 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
5583 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
5584 struct ieee80211_vif *vif,
5585 struct ieee80211_channel *chan,
5587 enum ieee80211_roc_type type)
5589 struct ath10k *ar = hw->priv;
5590 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5591 struct wmi_start_scan_arg arg;
5595 mutex_lock(&ar->conf_mutex);
5597 spin_lock_bh(&ar->data_lock);
5598 switch (ar->scan.state) {
5599 case ATH10K_SCAN_IDLE:
5600 reinit_completion(&ar->scan.started);
5601 reinit_completion(&ar->scan.completed);
5602 reinit_completion(&ar->scan.on_channel);
5603 ar->scan.state = ATH10K_SCAN_STARTING;
5604 ar->scan.is_roc = true;
5605 ar->scan.vdev_id = arvif->vdev_id;
5606 ar->scan.roc_freq = chan->center_freq;
5607 ar->scan.roc_notify = true;
5610 case ATH10K_SCAN_STARTING:
5611 case ATH10K_SCAN_RUNNING:
5612 case ATH10K_SCAN_ABORTING:
5616 spin_unlock_bh(&ar->data_lock);
5621 scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;
5623 memset(&arg, 0, sizeof(arg));
5624 ath10k_wmi_start_scan_init(ar, &arg);
5625 arg.vdev_id = arvif->vdev_id;
5626 arg.scan_id = ATH10K_SCAN_ID;
5628 arg.channels[0] = chan->center_freq;
5629 arg.dwell_time_active = scan_time_msec;
5630 arg.dwell_time_passive = scan_time_msec;
5631 arg.max_scan_time = scan_time_msec;
5632 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
5633 arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
5634 arg.burst_duration_ms = duration;
5636 ret = ath10k_start_scan(ar, &arg);
5638 ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
5639 spin_lock_bh(&ar->data_lock);
5640 ar->scan.state = ATH10K_SCAN_IDLE;
5641 spin_unlock_bh(&ar->data_lock);
5645 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
5647 ath10k_warn(ar, "failed to switch to channel for roc scan\n");
5649 ret = ath10k_scan_stop(ar);
5651 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
5657 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
5658 msecs_to_jiffies(duration));
5662 mutex_unlock(&ar->conf_mutex);
5666 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
5668 struct ath10k *ar = hw->priv;
5670 mutex_lock(&ar->conf_mutex);
5672 spin_lock_bh(&ar->data_lock);
5673 ar->scan.roc_notify = false;
5674 spin_unlock_bh(&ar->data_lock);
5676 ath10k_scan_abort(ar);
5678 mutex_unlock(&ar->conf_mutex);
5680 cancel_delayed_work_sync(&ar->scan.timeout);
5686 * Both RTS and Fragmentation threshold are interface-specific
5687 * in ath10k, but device-specific in mac80211.
5690 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
5692 struct ath10k *ar = hw->priv;
5693 struct ath10k_vif *arvif;
5696 mutex_lock(&ar->conf_mutex);
5697 list_for_each_entry(arvif, &ar->arvifs, list) {
5698 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
5699 arvif->vdev_id, value);
5701 ret = ath10k_mac_set_rts(arvif, value);
5703 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
5704 arvif->vdev_id, ret);
5708 mutex_unlock(&ar->conf_mutex);
5713 static int ath10k_mac_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
5715 /* Even though there's a WMI enum for fragmentation threshold no known
5716 * firmware actually implements it. Moreover it is not possible to rely
5717 * frame fragmentation to mac80211 because firmware clears the "more
5718 * fragments" bit in frame control making it impossible for remote
5719 * devices to reassemble frames.
5721 * Hence implement a dummy callback just to say fragmentation isn't
5722 * supported. This effectively prevents mac80211 from doing frame
5723 * fragmentation in software.
5728 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
5729 u32 queues, bool drop)
5731 struct ath10k *ar = hw->priv;
5735 /* mac80211 doesn't care if we really xmit queued frames or not
5736 * we'll collect those frames either way if we stop/delete vdevs */
5740 mutex_lock(&ar->conf_mutex);
5742 if (ar->state == ATH10K_STATE_WEDGED)
5745 time_left = wait_event_timeout(ar->htt.empty_tx_wq, ({
5748 spin_lock_bh(&ar->htt.tx_lock);
5749 empty = (ar->htt.num_pending_tx == 0);
5750 spin_unlock_bh(&ar->htt.tx_lock);
5752 skip = (ar->state == ATH10K_STATE_WEDGED) ||
5753 test_bit(ATH10K_FLAG_CRASH_FLUSH,
5757 }), ATH10K_FLUSH_TIMEOUT_HZ);
5759 if (time_left == 0 || skip)
5760 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %ld\n",
5761 skip, ar->state, time_left);
5764 mutex_unlock(&ar->conf_mutex);
5767 /* TODO: Implement this function properly
5768 * For now it is needed to reply to Probe Requests in IBSS mode.
5769 * Propably we need this information from FW.
5771 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
5776 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
5777 enum ieee80211_reconfig_type reconfig_type)
5779 struct ath10k *ar = hw->priv;
5781 if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
5784 mutex_lock(&ar->conf_mutex);
5786 /* If device failed to restart it will be in a different state, e.g.
5787 * ATH10K_STATE_WEDGED */
5788 if (ar->state == ATH10K_STATE_RESTARTED) {
5789 ath10k_info(ar, "device successfully recovered\n");
5790 ar->state = ATH10K_STATE_ON;
5791 ieee80211_wake_queues(ar->hw);
5794 mutex_unlock(&ar->conf_mutex);
5797 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
5798 struct survey_info *survey)
5800 struct ath10k *ar = hw->priv;
5801 struct ieee80211_supported_band *sband;
5802 struct survey_info *ar_survey = &ar->survey[idx];
5805 mutex_lock(&ar->conf_mutex);
5807 sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
5808 if (sband && idx >= sband->n_channels) {
5809 idx -= sband->n_channels;
5814 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
5816 if (!sband || idx >= sband->n_channels) {
5821 spin_lock_bh(&ar->data_lock);
5822 memcpy(survey, ar_survey, sizeof(*survey));
5823 spin_unlock_bh(&ar->data_lock);
5825 survey->channel = &sband->channels[idx];
5827 if (ar->rx_channel == survey->channel)
5828 survey->filled |= SURVEY_INFO_IN_USE;
5831 mutex_unlock(&ar->conf_mutex);
5836 ath10k_mac_bitrate_mask_has_single_rate(struct ath10k *ar,
5837 enum ieee80211_band band,
5838 const struct cfg80211_bitrate_mask *mask)
5843 num_rates += hweight32(mask->control[band].legacy);
5845 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++)
5846 num_rates += hweight8(mask->control[band].ht_mcs[i]);
5848 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++)
5849 num_rates += hweight16(mask->control[band].vht_mcs[i]);
5851 return num_rates == 1;
5855 ath10k_mac_bitrate_mask_get_single_nss(struct ath10k *ar,
5856 enum ieee80211_band band,
5857 const struct cfg80211_bitrate_mask *mask,
5860 struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
5861 u16 vht_mcs_map = le16_to_cpu(sband->vht_cap.vht_mcs.tx_mcs_map);
5863 u8 vht_nss_mask = 0;
5866 if (mask->control[band].legacy)
5869 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
5870 if (mask->control[band].ht_mcs[i] == 0)
5872 else if (mask->control[band].ht_mcs[i] ==
5873 sband->ht_cap.mcs.rx_mask[i])
5874 ht_nss_mask |= BIT(i);
5879 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
5880 if (mask->control[band].vht_mcs[i] == 0)
5882 else if (mask->control[band].vht_mcs[i] ==
5883 ath10k_mac_get_max_vht_mcs_map(vht_mcs_map, i))
5884 vht_nss_mask |= BIT(i);
5889 if (ht_nss_mask != vht_nss_mask)
5892 if (ht_nss_mask == 0)
5895 if (BIT(fls(ht_nss_mask)) - 1 != ht_nss_mask)
5898 *nss = fls(ht_nss_mask);
5904 ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
5905 enum ieee80211_band band,
5906 const struct cfg80211_bitrate_mask *mask,
5909 struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
5916 if (hweight32(mask->control[band].legacy) == 1) {
5917 rate_idx = ffs(mask->control[band].legacy) - 1;
5919 hw_rate = sband->bitrates[rate_idx].hw_value;
5920 bitrate = sband->bitrates[rate_idx].bitrate;
5922 if (ath10k_mac_bitrate_is_cck(bitrate))
5923 preamble = WMI_RATE_PREAMBLE_CCK;
5925 preamble = WMI_RATE_PREAMBLE_OFDM;
5928 *rate = preamble << 6 |
5935 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
5936 if (hweight8(mask->control[band].ht_mcs[i]) == 1) {
5938 *rate = WMI_RATE_PREAMBLE_HT << 6 |
5940 (ffs(mask->control[band].ht_mcs[i]) - 1);
5946 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
5947 if (hweight16(mask->control[band].vht_mcs[i]) == 1) {
5949 *rate = WMI_RATE_PREAMBLE_VHT << 6 |
5951 (ffs(mask->control[band].vht_mcs[i]) - 1);
5960 static int ath10k_mac_set_fixed_rate_params(struct ath10k_vif *arvif,
5961 u8 rate, u8 nss, u8 sgi, u8 ldpc)
5963 struct ath10k *ar = arvif->ar;
5967 lockdep_assert_held(&ar->conf_mutex);
5969 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02hhx nss %hhu sgi %hhu\n",
5970 arvif->vdev_id, rate, nss, sgi);
5972 vdev_param = ar->wmi.vdev_param->fixed_rate;
5973 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate);
5975 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
5980 vdev_param = ar->wmi.vdev_param->nss;
5981 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, nss);
5983 ath10k_warn(ar, "failed to set nss param %d: %d\n", nss, ret);
5987 vdev_param = ar->wmi.vdev_param->sgi;
5988 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, sgi);
5990 ath10k_warn(ar, "failed to set sgi param %d: %d\n", sgi, ret);
5994 vdev_param = ar->wmi.vdev_param->ldpc;
5995 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, ldpc);
5997 ath10k_warn(ar, "failed to set ldpc param %d: %d\n", ldpc, ret);
6005 ath10k_mac_can_set_bitrate_mask(struct ath10k *ar,
6006 enum ieee80211_band band,
6007 const struct cfg80211_bitrate_mask *mask)
6012 /* Due to firmware limitation in WMI_PEER_ASSOC_CMDID it is impossible
6013 * to express all VHT MCS rate masks. Effectively only the following
6014 * ranges can be used: none, 0-7, 0-8 and 0-9.
6016 for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
6017 vht_mcs = mask->control[band].vht_mcs[i];
6026 ath10k_warn(ar, "refusing bitrate mask with missing 0-7 VHT MCS rates\n");
6034 static void ath10k_mac_set_bitrate_mask_iter(void *data,
6035 struct ieee80211_sta *sta)
6037 struct ath10k_vif *arvif = data;
6038 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
6039 struct ath10k *ar = arvif->ar;
6041 if (arsta->arvif != arvif)
6044 spin_lock_bh(&ar->data_lock);
6045 arsta->changed |= IEEE80211_RC_SUPP_RATES_CHANGED;
6046 spin_unlock_bh(&ar->data_lock);
6048 ieee80211_queue_work(ar->hw, &arsta->update_wk);
6051 static int ath10k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
6052 struct ieee80211_vif *vif,
6053 const struct cfg80211_bitrate_mask *mask)
6055 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6056 struct cfg80211_chan_def def;
6057 struct ath10k *ar = arvif->ar;
6058 enum ieee80211_band band;
6059 const u8 *ht_mcs_mask;
6060 const u16 *vht_mcs_mask;
6068 if (ath10k_mac_vif_chan(vif, &def))
6071 band = def.chan->band;
6072 ht_mcs_mask = mask->control[band].ht_mcs;
6073 vht_mcs_mask = mask->control[band].vht_mcs;
6074 ldpc = !!(ar->ht_cap_info & WMI_HT_CAP_LDPC);
6076 sgi = mask->control[band].gi;
6077 if (sgi == NL80211_TXRATE_FORCE_LGI)
6080 if (ath10k_mac_bitrate_mask_has_single_rate(ar, band, mask)) {
6081 ret = ath10k_mac_bitrate_mask_get_single_rate(ar, band, mask,
6084 ath10k_warn(ar, "failed to get single rate for vdev %i: %d\n",
6085 arvif->vdev_id, ret);
6088 } else if (ath10k_mac_bitrate_mask_get_single_nss(ar, band, mask,
6090 rate = WMI_FIXED_RATE_NONE;
6093 rate = WMI_FIXED_RATE_NONE;
6094 nss = min(ar->num_rf_chains,
6095 max(ath10k_mac_max_ht_nss(ht_mcs_mask),
6096 ath10k_mac_max_vht_nss(vht_mcs_mask)));
6098 if (!ath10k_mac_can_set_bitrate_mask(ar, band, mask))
6101 mutex_lock(&ar->conf_mutex);
6103 arvif->bitrate_mask = *mask;
6104 ieee80211_iterate_stations_atomic(ar->hw,
6105 ath10k_mac_set_bitrate_mask_iter,
6108 mutex_unlock(&ar->conf_mutex);
6111 mutex_lock(&ar->conf_mutex);
6113 ret = ath10k_mac_set_fixed_rate_params(arvif, rate, nss, sgi, ldpc);
6115 ath10k_warn(ar, "failed to set fixed rate params on vdev %i: %d\n",
6116 arvif->vdev_id, ret);
6121 mutex_unlock(&ar->conf_mutex);
6126 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
6127 struct ieee80211_vif *vif,
6128 struct ieee80211_sta *sta,
6131 struct ath10k *ar = hw->priv;
6132 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
6135 spin_lock_bh(&ar->data_lock);
6137 ath10k_dbg(ar, ATH10K_DBG_MAC,
6138 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
6139 sta->addr, changed, sta->bandwidth, sta->rx_nss,
6142 if (changed & IEEE80211_RC_BW_CHANGED) {
6143 bw = WMI_PEER_CHWIDTH_20MHZ;
6145 switch (sta->bandwidth) {
6146 case IEEE80211_STA_RX_BW_20:
6147 bw = WMI_PEER_CHWIDTH_20MHZ;
6149 case IEEE80211_STA_RX_BW_40:
6150 bw = WMI_PEER_CHWIDTH_40MHZ;
6152 case IEEE80211_STA_RX_BW_80:
6153 bw = WMI_PEER_CHWIDTH_80MHZ;
6155 case IEEE80211_STA_RX_BW_160:
6156 ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n",
6157 sta->bandwidth, sta->addr);
6158 bw = WMI_PEER_CHWIDTH_20MHZ;
6165 if (changed & IEEE80211_RC_NSS_CHANGED)
6166 arsta->nss = sta->rx_nss;
6168 if (changed & IEEE80211_RC_SMPS_CHANGED) {
6169 smps = WMI_PEER_SMPS_PS_NONE;
6171 switch (sta->smps_mode) {
6172 case IEEE80211_SMPS_AUTOMATIC:
6173 case IEEE80211_SMPS_OFF:
6174 smps = WMI_PEER_SMPS_PS_NONE;
6176 case IEEE80211_SMPS_STATIC:
6177 smps = WMI_PEER_SMPS_STATIC;
6179 case IEEE80211_SMPS_DYNAMIC:
6180 smps = WMI_PEER_SMPS_DYNAMIC;
6182 case IEEE80211_SMPS_NUM_MODES:
6183 ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
6184 sta->smps_mode, sta->addr);
6185 smps = WMI_PEER_SMPS_PS_NONE;
6192 arsta->changed |= changed;
6194 spin_unlock_bh(&ar->data_lock);
6196 ieee80211_queue_work(hw, &arsta->update_wk);
6199 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
6202 * FIXME: Return 0 for time being. Need to figure out whether FW
6203 * has the API to fetch 64-bit local TSF
6209 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
6210 struct ieee80211_vif *vif,
6211 enum ieee80211_ampdu_mlme_action action,
6212 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
6215 struct ath10k *ar = hw->priv;
6216 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6218 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
6219 arvif->vdev_id, sta->addr, tid, action);
6222 case IEEE80211_AMPDU_RX_START:
6223 case IEEE80211_AMPDU_RX_STOP:
6224 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
6225 * creation/removal. Do we need to verify this?
6228 case IEEE80211_AMPDU_TX_START:
6229 case IEEE80211_AMPDU_TX_STOP_CONT:
6230 case IEEE80211_AMPDU_TX_STOP_FLUSH:
6231 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
6232 case IEEE80211_AMPDU_TX_OPERATIONAL:
6233 /* Firmware offloads Tx aggregation entirely so deny mac80211
6234 * Tx aggregation requests.
6243 ath10k_mac_update_rx_channel(struct ath10k *ar,
6244 struct ieee80211_chanctx_conf *ctx,
6245 struct ieee80211_vif_chanctx_switch *vifs,
6248 struct cfg80211_chan_def *def = NULL;
6250 /* Both locks are required because ar->rx_channel is modified. This
6251 * allows readers to hold either lock.
6253 lockdep_assert_held(&ar->conf_mutex);
6254 lockdep_assert_held(&ar->data_lock);
6256 WARN_ON(ctx && vifs);
6257 WARN_ON(vifs && n_vifs != 1);
6259 /* FIXME: Sort of an optimization and a workaround. Peers and vifs are
6260 * on a linked list now. Doing a lookup peer -> vif -> chanctx for each
6261 * ppdu on Rx may reduce performance on low-end systems. It should be
6262 * possible to make tables/hashmaps to speed the lookup up (be vary of
6263 * cpu data cache lines though regarding sizes) but to keep the initial
6264 * implementation simple and less intrusive fallback to the slow lookup
6265 * only for multi-channel cases. Single-channel cases will remain to
6266 * use the old channel derival and thus performance should not be
6270 if (!ctx && ath10k_mac_num_chanctxs(ar) == 1) {
6271 ieee80211_iter_chan_contexts_atomic(ar->hw,
6272 ath10k_mac_get_any_chandef_iter,
6276 def = &vifs[0].new_ctx->def;
6278 ar->rx_channel = def->chan;
6279 } else if (ctx && ath10k_mac_num_chanctxs(ar) == 0) {
6280 ar->rx_channel = ctx->def.chan;
6282 ar->rx_channel = NULL;
6288 ath10k_mac_update_vif_chan(struct ath10k *ar,
6289 struct ieee80211_vif_chanctx_switch *vifs,
6292 struct ath10k_vif *arvif;
6296 lockdep_assert_held(&ar->conf_mutex);
6298 /* First stop monitor interface. Some FW versions crash if there's a
6299 * lone monitor interface.
6301 if (ar->monitor_started)
6302 ath10k_monitor_stop(ar);
6304 for (i = 0; i < n_vifs; i++) {
6305 arvif = ath10k_vif_to_arvif(vifs[i].vif);
6307 ath10k_dbg(ar, ATH10K_DBG_MAC,
6308 "mac chanctx switch vdev_id %i freq %hu->%hu width %d->%d\n",
6310 vifs[i].old_ctx->def.chan->center_freq,
6311 vifs[i].new_ctx->def.chan->center_freq,
6312 vifs[i].old_ctx->def.width,
6313 vifs[i].new_ctx->def.width);
6315 if (WARN_ON(!arvif->is_started))
6318 if (WARN_ON(!arvif->is_up))
6321 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
6323 ath10k_warn(ar, "failed to down vdev %d: %d\n",
6324 arvif->vdev_id, ret);
6329 /* All relevant vdevs are downed and associated channel resources
6330 * should be available for the channel switch now.
6333 spin_lock_bh(&ar->data_lock);
6334 ath10k_mac_update_rx_channel(ar, NULL, vifs, n_vifs);
6335 spin_unlock_bh(&ar->data_lock);
6337 for (i = 0; i < n_vifs; i++) {
6338 arvif = ath10k_vif_to_arvif(vifs[i].vif);
6340 if (WARN_ON(!arvif->is_started))
6343 if (WARN_ON(!arvif->is_up))
6346 ret = ath10k_mac_setup_bcn_tmpl(arvif);
6348 ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
6351 ret = ath10k_mac_setup_prb_tmpl(arvif);
6353 ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
6356 ret = ath10k_vdev_restart(arvif, &vifs[i].new_ctx->def);
6358 ath10k_warn(ar, "failed to restart vdev %d: %d\n",
6359 arvif->vdev_id, ret);
6363 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
6366 ath10k_warn(ar, "failed to bring vdev up %d: %d\n",
6367 arvif->vdev_id, ret);
6372 ath10k_monitor_recalc(ar);
6376 ath10k_mac_op_add_chanctx(struct ieee80211_hw *hw,
6377 struct ieee80211_chanctx_conf *ctx)
6379 struct ath10k *ar = hw->priv;
6381 ath10k_dbg(ar, ATH10K_DBG_MAC,
6382 "mac chanctx add freq %hu width %d ptr %p\n",
6383 ctx->def.chan->center_freq, ctx->def.width, ctx);
6385 mutex_lock(&ar->conf_mutex);
6387 spin_lock_bh(&ar->data_lock);
6388 ath10k_mac_update_rx_channel(ar, ctx, NULL, 0);
6389 spin_unlock_bh(&ar->data_lock);
6391 ath10k_recalc_radar_detection(ar);
6392 ath10k_monitor_recalc(ar);
6394 mutex_unlock(&ar->conf_mutex);
6400 ath10k_mac_op_remove_chanctx(struct ieee80211_hw *hw,
6401 struct ieee80211_chanctx_conf *ctx)
6403 struct ath10k *ar = hw->priv;
6405 ath10k_dbg(ar, ATH10K_DBG_MAC,
6406 "mac chanctx remove freq %hu width %d ptr %p\n",
6407 ctx->def.chan->center_freq, ctx->def.width, ctx);
6409 mutex_lock(&ar->conf_mutex);
6411 spin_lock_bh(&ar->data_lock);
6412 ath10k_mac_update_rx_channel(ar, NULL, NULL, 0);
6413 spin_unlock_bh(&ar->data_lock);
6415 ath10k_recalc_radar_detection(ar);
6416 ath10k_monitor_recalc(ar);
6418 mutex_unlock(&ar->conf_mutex);
6421 struct ath10k_mac_change_chanctx_arg {
6422 struct ieee80211_chanctx_conf *ctx;
6423 struct ieee80211_vif_chanctx_switch *vifs;
6429 ath10k_mac_change_chanctx_cnt_iter(void *data, u8 *mac,
6430 struct ieee80211_vif *vif)
6432 struct ath10k_mac_change_chanctx_arg *arg = data;
6434 if (rcu_access_pointer(vif->chanctx_conf) != arg->ctx)
6441 ath10k_mac_change_chanctx_fill_iter(void *data, u8 *mac,
6442 struct ieee80211_vif *vif)
6444 struct ath10k_mac_change_chanctx_arg *arg = data;
6445 struct ieee80211_chanctx_conf *ctx;
6447 ctx = rcu_access_pointer(vif->chanctx_conf);
6448 if (ctx != arg->ctx)
6451 if (WARN_ON(arg->next_vif == arg->n_vifs))
6454 arg->vifs[arg->next_vif].vif = vif;
6455 arg->vifs[arg->next_vif].old_ctx = ctx;
6456 arg->vifs[arg->next_vif].new_ctx = ctx;
6461 ath10k_mac_op_change_chanctx(struct ieee80211_hw *hw,
6462 struct ieee80211_chanctx_conf *ctx,
6465 struct ath10k *ar = hw->priv;
6466 struct ath10k_mac_change_chanctx_arg arg = { .ctx = ctx };
6468 mutex_lock(&ar->conf_mutex);
6470 ath10k_dbg(ar, ATH10K_DBG_MAC,
6471 "mac chanctx change freq %hu width %d ptr %p changed %x\n",
6472 ctx->def.chan->center_freq, ctx->def.width, ctx, changed);
6474 /* This shouldn't really happen because channel switching should use
6475 * switch_vif_chanctx().
6477 if (WARN_ON(changed & IEEE80211_CHANCTX_CHANGE_CHANNEL))
6480 if (changed & IEEE80211_CHANCTX_CHANGE_WIDTH) {
6481 ieee80211_iterate_active_interfaces_atomic(
6483 IEEE80211_IFACE_ITER_NORMAL,
6484 ath10k_mac_change_chanctx_cnt_iter,
6486 if (arg.n_vifs == 0)
6489 arg.vifs = kcalloc(arg.n_vifs, sizeof(arg.vifs[0]),
6494 ieee80211_iterate_active_interfaces_atomic(
6496 IEEE80211_IFACE_ITER_NORMAL,
6497 ath10k_mac_change_chanctx_fill_iter,
6499 ath10k_mac_update_vif_chan(ar, arg.vifs, arg.n_vifs);
6504 ath10k_recalc_radar_detection(ar);
6506 /* FIXME: How to configure Rx chains properly? */
6508 /* No other actions are actually necessary. Firmware maintains channel
6509 * definitions per vdev internally and there's no host-side channel
6510 * context abstraction to configure, e.g. channel width.
6514 mutex_unlock(&ar->conf_mutex);
6518 ath10k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
6519 struct ieee80211_vif *vif,
6520 struct ieee80211_chanctx_conf *ctx)
6522 struct ath10k *ar = hw->priv;
6523 struct ath10k_vif *arvif = (void *)vif->drv_priv;
6526 mutex_lock(&ar->conf_mutex);
6528 ath10k_dbg(ar, ATH10K_DBG_MAC,
6529 "mac chanctx assign ptr %p vdev_id %i\n",
6530 ctx, arvif->vdev_id);
6532 if (WARN_ON(arvif->is_started)) {
6533 mutex_unlock(&ar->conf_mutex);
6537 ret = ath10k_vdev_start(arvif, &ctx->def);
6539 ath10k_warn(ar, "failed to start vdev %i addr %pM on freq %d: %d\n",
6540 arvif->vdev_id, vif->addr,
6541 ctx->def.chan->center_freq, ret);
6545 arvif->is_started = true;
6547 ret = ath10k_mac_vif_setup_ps(arvif);
6549 ath10k_warn(ar, "failed to update vdev %i ps: %d\n",
6550 arvif->vdev_id, ret);
6554 if (vif->type == NL80211_IFTYPE_MONITOR) {
6555 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, 0, vif->addr);
6557 ath10k_warn(ar, "failed to up monitor vdev %i: %d\n",
6558 arvif->vdev_id, ret);
6562 arvif->is_up = true;
6565 mutex_unlock(&ar->conf_mutex);
6569 ath10k_vdev_stop(arvif);
6570 arvif->is_started = false;
6571 ath10k_mac_vif_setup_ps(arvif);
6574 mutex_unlock(&ar->conf_mutex);
6579 ath10k_mac_op_unassign_vif_chanctx(struct ieee80211_hw *hw,
6580 struct ieee80211_vif *vif,
6581 struct ieee80211_chanctx_conf *ctx)
6583 struct ath10k *ar = hw->priv;
6584 struct ath10k_vif *arvif = (void *)vif->drv_priv;
6587 mutex_lock(&ar->conf_mutex);
6589 ath10k_dbg(ar, ATH10K_DBG_MAC,
6590 "mac chanctx unassign ptr %p vdev_id %i\n",
6591 ctx, arvif->vdev_id);
6593 WARN_ON(!arvif->is_started);
6595 if (vif->type == NL80211_IFTYPE_MONITOR) {
6596 WARN_ON(!arvif->is_up);
6598 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
6600 ath10k_warn(ar, "failed to down monitor vdev %i: %d\n",
6601 arvif->vdev_id, ret);
6603 arvif->is_up = false;
6606 ret = ath10k_vdev_stop(arvif);
6608 ath10k_warn(ar, "failed to stop vdev %i: %d\n",
6609 arvif->vdev_id, ret);
6611 arvif->is_started = false;
6613 mutex_unlock(&ar->conf_mutex);
6617 ath10k_mac_op_switch_vif_chanctx(struct ieee80211_hw *hw,
6618 struct ieee80211_vif_chanctx_switch *vifs,
6620 enum ieee80211_chanctx_switch_mode mode)
6622 struct ath10k *ar = hw->priv;
6624 mutex_lock(&ar->conf_mutex);
6626 ath10k_dbg(ar, ATH10K_DBG_MAC,
6627 "mac chanctx switch n_vifs %d mode %d\n",
6629 ath10k_mac_update_vif_chan(ar, vifs, n_vifs);
6631 mutex_unlock(&ar->conf_mutex);
6635 static const struct ieee80211_ops ath10k_ops = {
6637 .start = ath10k_start,
6638 .stop = ath10k_stop,
6639 .config = ath10k_config,
6640 .add_interface = ath10k_add_interface,
6641 .remove_interface = ath10k_remove_interface,
6642 .configure_filter = ath10k_configure_filter,
6643 .bss_info_changed = ath10k_bss_info_changed,
6644 .hw_scan = ath10k_hw_scan,
6645 .cancel_hw_scan = ath10k_cancel_hw_scan,
6646 .set_key = ath10k_set_key,
6647 .set_default_unicast_key = ath10k_set_default_unicast_key,
6648 .sta_state = ath10k_sta_state,
6649 .conf_tx = ath10k_conf_tx,
6650 .remain_on_channel = ath10k_remain_on_channel,
6651 .cancel_remain_on_channel = ath10k_cancel_remain_on_channel,
6652 .set_rts_threshold = ath10k_set_rts_threshold,
6653 .set_frag_threshold = ath10k_mac_op_set_frag_threshold,
6654 .flush = ath10k_flush,
6655 .tx_last_beacon = ath10k_tx_last_beacon,
6656 .set_antenna = ath10k_set_antenna,
6657 .get_antenna = ath10k_get_antenna,
6658 .reconfig_complete = ath10k_reconfig_complete,
6659 .get_survey = ath10k_get_survey,
6660 .set_bitrate_mask = ath10k_mac_op_set_bitrate_mask,
6661 .sta_rc_update = ath10k_sta_rc_update,
6662 .get_tsf = ath10k_get_tsf,
6663 .ampdu_action = ath10k_ampdu_action,
6664 .get_et_sset_count = ath10k_debug_get_et_sset_count,
6665 .get_et_stats = ath10k_debug_get_et_stats,
6666 .get_et_strings = ath10k_debug_get_et_strings,
6667 .add_chanctx = ath10k_mac_op_add_chanctx,
6668 .remove_chanctx = ath10k_mac_op_remove_chanctx,
6669 .change_chanctx = ath10k_mac_op_change_chanctx,
6670 .assign_vif_chanctx = ath10k_mac_op_assign_vif_chanctx,
6671 .unassign_vif_chanctx = ath10k_mac_op_unassign_vif_chanctx,
6672 .switch_vif_chanctx = ath10k_mac_op_switch_vif_chanctx,
6674 CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
6677 .suspend = ath10k_wow_op_suspend,
6678 .resume = ath10k_wow_op_resume,
6680 #ifdef CONFIG_MAC80211_DEBUGFS
6681 .sta_add_debugfs = ath10k_sta_add_debugfs,
6685 #define CHAN2G(_channel, _freq, _flags) { \
6686 .band = IEEE80211_BAND_2GHZ, \
6687 .hw_value = (_channel), \
6688 .center_freq = (_freq), \
6689 .flags = (_flags), \
6690 .max_antenna_gain = 0, \
6694 #define CHAN5G(_channel, _freq, _flags) { \
6695 .band = IEEE80211_BAND_5GHZ, \
6696 .hw_value = (_channel), \
6697 .center_freq = (_freq), \
6698 .flags = (_flags), \
6699 .max_antenna_gain = 0, \
6703 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
6713 CHAN2G(10, 2457, 0),
6714 CHAN2G(11, 2462, 0),
6715 CHAN2G(12, 2467, 0),
6716 CHAN2G(13, 2472, 0),
6717 CHAN2G(14, 2484, 0),
6720 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
6721 CHAN5G(36, 5180, 0),
6722 CHAN5G(40, 5200, 0),
6723 CHAN5G(44, 5220, 0),
6724 CHAN5G(48, 5240, 0),
6725 CHAN5G(52, 5260, 0),
6726 CHAN5G(56, 5280, 0),
6727 CHAN5G(60, 5300, 0),
6728 CHAN5G(64, 5320, 0),
6729 CHAN5G(100, 5500, 0),
6730 CHAN5G(104, 5520, 0),
6731 CHAN5G(108, 5540, 0),
6732 CHAN5G(112, 5560, 0),
6733 CHAN5G(116, 5580, 0),
6734 CHAN5G(120, 5600, 0),
6735 CHAN5G(124, 5620, 0),
6736 CHAN5G(128, 5640, 0),
6737 CHAN5G(132, 5660, 0),
6738 CHAN5G(136, 5680, 0),
6739 CHAN5G(140, 5700, 0),
6740 CHAN5G(144, 5720, 0),
6741 CHAN5G(149, 5745, 0),
6742 CHAN5G(153, 5765, 0),
6743 CHAN5G(157, 5785, 0),
6744 CHAN5G(161, 5805, 0),
6745 CHAN5G(165, 5825, 0),
6748 struct ath10k *ath10k_mac_create(size_t priv_size)
6750 struct ieee80211_hw *hw;
6753 hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
6763 void ath10k_mac_destroy(struct ath10k *ar)
6765 ieee80211_free_hw(ar->hw);
6768 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
6771 .types = BIT(NL80211_IFTYPE_STATION)
6772 | BIT(NL80211_IFTYPE_P2P_CLIENT)
6776 .types = BIT(NL80211_IFTYPE_P2P_GO)
6780 .types = BIT(NL80211_IFTYPE_P2P_DEVICE)
6784 .types = BIT(NL80211_IFTYPE_AP)
6785 #ifdef CONFIG_MAC80211_MESH
6786 | BIT(NL80211_IFTYPE_MESH_POINT)
6791 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
6794 .types = BIT(NL80211_IFTYPE_AP)
6795 #ifdef CONFIG_MAC80211_MESH
6796 | BIT(NL80211_IFTYPE_MESH_POINT)
6801 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
6803 .limits = ath10k_if_limits,
6804 .n_limits = ARRAY_SIZE(ath10k_if_limits),
6805 .max_interfaces = 8,
6806 .num_different_channels = 1,
6807 .beacon_int_infra_match = true,
6811 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
6813 .limits = ath10k_10x_if_limits,
6814 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
6815 .max_interfaces = 8,
6816 .num_different_channels = 1,
6817 .beacon_int_infra_match = true,
6818 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
6819 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
6820 BIT(NL80211_CHAN_WIDTH_20) |
6821 BIT(NL80211_CHAN_WIDTH_40) |
6822 BIT(NL80211_CHAN_WIDTH_80),
6827 static const struct ieee80211_iface_limit ath10k_tlv_if_limit[] = {
6830 .types = BIT(NL80211_IFTYPE_STATION),
6834 .types = BIT(NL80211_IFTYPE_AP) |
6835 #ifdef CONFIG_MAC80211_MESH
6836 BIT(NL80211_IFTYPE_MESH_POINT) |
6838 BIT(NL80211_IFTYPE_P2P_CLIENT) |
6839 BIT(NL80211_IFTYPE_P2P_GO),
6843 .types = BIT(NL80211_IFTYPE_P2P_DEVICE),
6847 static const struct ieee80211_iface_limit ath10k_tlv_qcs_if_limit[] = {
6850 .types = BIT(NL80211_IFTYPE_STATION),
6854 .types = BIT(NL80211_IFTYPE_P2P_CLIENT),
6858 .types = BIT(NL80211_IFTYPE_AP) |
6859 #ifdef CONFIG_MAC80211_MESH
6860 BIT(NL80211_IFTYPE_MESH_POINT) |
6862 BIT(NL80211_IFTYPE_P2P_GO),
6866 .types = BIT(NL80211_IFTYPE_P2P_DEVICE),
6870 static const struct ieee80211_iface_limit ath10k_tlv_if_limit_ibss[] = {
6873 .types = BIT(NL80211_IFTYPE_STATION),
6877 .types = BIT(NL80211_IFTYPE_ADHOC),
6881 /* FIXME: This is not thouroughly tested. These combinations may over- or
6882 * underestimate hw/fw capabilities.
6884 static struct ieee80211_iface_combination ath10k_tlv_if_comb[] = {
6886 .limits = ath10k_tlv_if_limit,
6887 .num_different_channels = 1,
6888 .max_interfaces = 4,
6889 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
6892 .limits = ath10k_tlv_if_limit_ibss,
6893 .num_different_channels = 1,
6894 .max_interfaces = 2,
6895 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
6899 static struct ieee80211_iface_combination ath10k_tlv_qcs_if_comb[] = {
6901 .limits = ath10k_tlv_if_limit,
6902 .num_different_channels = 1,
6903 .max_interfaces = 4,
6904 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
6907 .limits = ath10k_tlv_qcs_if_limit,
6908 .num_different_channels = 2,
6909 .max_interfaces = 4,
6910 .n_limits = ARRAY_SIZE(ath10k_tlv_qcs_if_limit),
6913 .limits = ath10k_tlv_if_limit_ibss,
6914 .num_different_channels = 1,
6915 .max_interfaces = 2,
6916 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
6920 static const struct ieee80211_iface_limit ath10k_10_4_if_limits[] = {
6923 .types = BIT(NL80211_IFTYPE_STATION),
6927 .types = BIT(NL80211_IFTYPE_AP)
6928 #ifdef CONFIG_MAC80211_MESH
6929 | BIT(NL80211_IFTYPE_MESH_POINT)
6934 static const struct ieee80211_iface_combination ath10k_10_4_if_comb[] = {
6936 .limits = ath10k_10_4_if_limits,
6937 .n_limits = ARRAY_SIZE(ath10k_10_4_if_limits),
6938 .max_interfaces = 16,
6939 .num_different_channels = 1,
6940 .beacon_int_infra_match = true,
6941 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
6942 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
6943 BIT(NL80211_CHAN_WIDTH_20) |
6944 BIT(NL80211_CHAN_WIDTH_40) |
6945 BIT(NL80211_CHAN_WIDTH_80),
6950 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
6952 struct ieee80211_sta_vht_cap vht_cap = {0};
6957 vht_cap.vht_supported = 1;
6958 vht_cap.cap = ar->vht_cap_info;
6960 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
6961 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
6962 val = ath10k_mac_get_vht_cap_bf_sts(ar);
6963 val <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
6964 val &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
6969 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
6970 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
6971 val = ath10k_mac_get_vht_cap_bf_sound_dim(ar);
6972 val <<= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
6973 val &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
6979 for (i = 0; i < 8; i++) {
6980 if (i < ar->num_rf_chains)
6981 mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2);
6983 mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2);
6986 vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
6987 vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
6992 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
6995 struct ieee80211_sta_ht_cap ht_cap = {0};
6997 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
7000 ht_cap.ht_supported = 1;
7001 ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
7002 ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
7003 ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
7004 ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
7005 ht_cap.cap |= WLAN_HT_CAP_SM_PS_STATIC << IEEE80211_HT_CAP_SM_PS_SHIFT;
7007 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
7008 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
7010 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
7011 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
7013 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
7016 smps = WLAN_HT_CAP_SM_PS_DYNAMIC;
7017 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
7022 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
7023 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
7025 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
7028 stbc = ar->ht_cap_info;
7029 stbc &= WMI_HT_CAP_RX_STBC;
7030 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
7031 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
7032 stbc &= IEEE80211_HT_CAP_RX_STBC;
7037 if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
7038 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
7040 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
7041 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
7043 /* max AMSDU is implicitly taken from vht_cap_info */
7044 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
7045 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
7047 for (i = 0; i < ar->num_rf_chains; i++)
7048 ht_cap.mcs.rx_mask[i] = 0xFF;
7050 ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
7055 static void ath10k_get_arvif_iter(void *data, u8 *mac,
7056 struct ieee80211_vif *vif)
7058 struct ath10k_vif_iter *arvif_iter = data;
7059 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
7061 if (arvif->vdev_id == arvif_iter->vdev_id)
7062 arvif_iter->arvif = arvif;
7065 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
7067 struct ath10k_vif_iter arvif_iter;
7070 memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
7071 arvif_iter.vdev_id = vdev_id;
7073 flags = IEEE80211_IFACE_ITER_RESUME_ALL;
7074 ieee80211_iterate_active_interfaces_atomic(ar->hw,
7076 ath10k_get_arvif_iter,
7078 if (!arvif_iter.arvif) {
7079 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
7083 return arvif_iter.arvif;
7086 int ath10k_mac_register(struct ath10k *ar)
7088 static const u32 cipher_suites[] = {
7089 WLAN_CIPHER_SUITE_WEP40,
7090 WLAN_CIPHER_SUITE_WEP104,
7091 WLAN_CIPHER_SUITE_TKIP,
7092 WLAN_CIPHER_SUITE_CCMP,
7093 WLAN_CIPHER_SUITE_AES_CMAC,
7095 struct ieee80211_supported_band *band;
7096 struct ieee80211_sta_vht_cap vht_cap;
7097 struct ieee80211_sta_ht_cap ht_cap;
7101 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
7103 SET_IEEE80211_DEV(ar->hw, ar->dev);
7105 ht_cap = ath10k_get_ht_cap(ar);
7106 vht_cap = ath10k_create_vht_cap(ar);
7108 BUILD_BUG_ON((ARRAY_SIZE(ath10k_2ghz_channels) +
7109 ARRAY_SIZE(ath10k_5ghz_channels)) !=
7112 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
7113 channels = kmemdup(ath10k_2ghz_channels,
7114 sizeof(ath10k_2ghz_channels),
7121 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
7122 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
7123 band->channels = channels;
7124 band->n_bitrates = ath10k_g_rates_size;
7125 band->bitrates = ath10k_g_rates;
7126 band->ht_cap = ht_cap;
7128 /* Enable the VHT support at 2.4 GHz */
7129 band->vht_cap = vht_cap;
7131 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
7134 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
7135 channels = kmemdup(ath10k_5ghz_channels,
7136 sizeof(ath10k_5ghz_channels),
7143 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
7144 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
7145 band->channels = channels;
7146 band->n_bitrates = ath10k_a_rates_size;
7147 band->bitrates = ath10k_a_rates;
7148 band->ht_cap = ht_cap;
7149 band->vht_cap = vht_cap;
7150 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
7153 ar->hw->wiphy->interface_modes =
7154 BIT(NL80211_IFTYPE_STATION) |
7155 BIT(NL80211_IFTYPE_AP) |
7156 BIT(NL80211_IFTYPE_MESH_POINT);
7158 ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask;
7159 ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask;
7161 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
7162 ar->hw->wiphy->interface_modes |=
7163 BIT(NL80211_IFTYPE_P2P_DEVICE) |
7164 BIT(NL80211_IFTYPE_P2P_CLIENT) |
7165 BIT(NL80211_IFTYPE_P2P_GO);
7167 ieee80211_hw_set(ar->hw, SIGNAL_DBM);
7168 ieee80211_hw_set(ar->hw, SUPPORTS_PS);
7169 ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS);
7170 ieee80211_hw_set(ar->hw, MFP_CAPABLE);
7171 ieee80211_hw_set(ar->hw, REPORTS_TX_ACK_STATUS);
7172 ieee80211_hw_set(ar->hw, HAS_RATE_CONTROL);
7173 ieee80211_hw_set(ar->hw, AP_LINK_PS);
7174 ieee80211_hw_set(ar->hw, SPECTRUM_MGMT);
7175 ieee80211_hw_set(ar->hw, SUPPORT_FAST_XMIT);
7176 ieee80211_hw_set(ar->hw, CONNECTION_MONITOR);
7177 ieee80211_hw_set(ar->hw, SUPPORTS_PER_STA_GTK);
7178 ieee80211_hw_set(ar->hw, WANT_MONITOR_VIF);
7179 ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
7180 ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
7182 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
7183 ieee80211_hw_set(ar->hw, SW_CRYPTO_CONTROL);
7185 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
7186 ar->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
7188 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
7189 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
7191 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
7192 ieee80211_hw_set(ar->hw, AMPDU_AGGREGATION);
7193 ieee80211_hw_set(ar->hw, TX_AMPDU_SETUP_IN_HW);
7196 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
7197 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
7199 ar->hw->vif_data_size = sizeof(struct ath10k_vif);
7200 ar->hw->sta_data_size = sizeof(struct ath10k_sta);
7202 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
7204 if (test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) {
7205 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
7207 /* Firmware delivers WPS/P2P Probe Requests frames to driver so
7208 * that userspace (e.g. wpa_supplicant/hostapd) can generate
7209 * correct Probe Responses. This is more of a hack advert..
7211 ar->hw->wiphy->probe_resp_offload |=
7212 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
7213 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
7214 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
7217 if (test_bit(WMI_SERVICE_TDLS, ar->wmi.svc_map))
7218 ar->hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
7220 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
7221 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
7222 ar->hw->wiphy->max_remain_on_channel_duration = 5000;
7224 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
7225 ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
7227 ar->hw->wiphy->max_ap_assoc_sta = ar->max_num_stations;
7229 ret = ath10k_wow_init(ar);
7231 ath10k_warn(ar, "failed to init wow: %d\n", ret);
7235 wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
7238 * on LL hardware queues are managed entirely by the FW
7239 * so we only advertise to mac we can do the queues thing
7241 ar->hw->queues = IEEE80211_MAX_QUEUES;
7243 /* vdev_ids are used as hw queue numbers. Make sure offchan tx queue is
7244 * something that vdev_ids can't reach so that we don't stop the queue
7247 ar->hw->offchannel_tx_hw_queue = IEEE80211_MAX_QUEUES - 1;
7249 switch (ar->wmi.op_version) {
7250 case ATH10K_FW_WMI_OP_VERSION_MAIN:
7251 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
7252 ar->hw->wiphy->n_iface_combinations =
7253 ARRAY_SIZE(ath10k_if_comb);
7254 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
7256 case ATH10K_FW_WMI_OP_VERSION_TLV:
7257 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
7258 ar->hw->wiphy->iface_combinations =
7259 ath10k_tlv_qcs_if_comb;
7260 ar->hw->wiphy->n_iface_combinations =
7261 ARRAY_SIZE(ath10k_tlv_qcs_if_comb);
7263 ar->hw->wiphy->iface_combinations = ath10k_tlv_if_comb;
7264 ar->hw->wiphy->n_iface_combinations =
7265 ARRAY_SIZE(ath10k_tlv_if_comb);
7267 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
7269 case ATH10K_FW_WMI_OP_VERSION_10_1:
7270 case ATH10K_FW_WMI_OP_VERSION_10_2:
7271 case ATH10K_FW_WMI_OP_VERSION_10_2_4:
7272 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
7273 ar->hw->wiphy->n_iface_combinations =
7274 ARRAY_SIZE(ath10k_10x_if_comb);
7276 case ATH10K_FW_WMI_OP_VERSION_10_4:
7277 ar->hw->wiphy->iface_combinations = ath10k_10_4_if_comb;
7278 ar->hw->wiphy->n_iface_combinations =
7279 ARRAY_SIZE(ath10k_10_4_if_comb);
7281 case ATH10K_FW_WMI_OP_VERSION_UNSET:
7282 case ATH10K_FW_WMI_OP_VERSION_MAX:
7288 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
7289 ar->hw->netdev_features = NETIF_F_HW_CSUM;
7291 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
7292 /* Init ath dfs pattern detector */
7293 ar->ath_common.debug_mask = ATH_DBG_DFS;
7294 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
7297 if (!ar->dfs_detector)
7298 ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
7301 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
7302 ath10k_reg_notifier);
7304 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
7308 ar->hw->wiphy->cipher_suites = cipher_suites;
7309 ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
7311 ret = ieee80211_register_hw(ar->hw);
7313 ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
7317 if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
7318 ret = regulatory_hint(ar->hw->wiphy,
7319 ar->ath_common.regulatory.alpha2);
7321 goto err_unregister;
7327 ieee80211_unregister_hw(ar->hw);
7329 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
7330 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
7335 void ath10k_mac_unregister(struct ath10k *ar)
7337 ieee80211_unregister_hw(ar->hw);
7339 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
7340 ar->dfs_detector->exit(ar->dfs_detector);
7342 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
7343 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
7345 SET_IEEE80211_DEV(ar->hw, NULL);