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;
204 if (cmd == DISABLE_KEY) {
205 arg.key_cipher = WMI_CIPHER_NONE;
209 return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
212 static int ath10k_install_key(struct ath10k_vif *arvif,
213 struct ieee80211_key_conf *key,
214 enum set_key_cmd cmd,
215 const u8 *macaddr, u32 flags)
217 struct ath10k *ar = arvif->ar;
219 unsigned long time_left;
221 lockdep_assert_held(&ar->conf_mutex);
223 reinit_completion(&ar->install_key_done);
225 if (arvif->nohwcrypt)
228 ret = ath10k_send_key(arvif, key, cmd, macaddr, flags);
232 time_left = wait_for_completion_timeout(&ar->install_key_done, 3 * HZ);
239 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
242 struct ath10k *ar = arvif->ar;
243 struct ath10k_peer *peer;
248 lockdep_assert_held(&ar->conf_mutex);
250 if (WARN_ON(arvif->vif->type != NL80211_IFTYPE_AP &&
251 arvif->vif->type != NL80211_IFTYPE_ADHOC))
254 spin_lock_bh(&ar->data_lock);
255 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
256 spin_unlock_bh(&ar->data_lock);
261 for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
262 if (arvif->wep_keys[i] == NULL)
265 switch (arvif->vif->type) {
266 case NL80211_IFTYPE_AP:
267 flags = WMI_KEY_PAIRWISE;
269 if (arvif->def_wep_key_idx == i)
270 flags |= WMI_KEY_TX_USAGE;
272 ret = ath10k_install_key(arvif, arvif->wep_keys[i],
273 SET_KEY, addr, flags);
277 case NL80211_IFTYPE_ADHOC:
278 ret = ath10k_install_key(arvif, arvif->wep_keys[i],
284 ret = ath10k_install_key(arvif, arvif->wep_keys[i],
285 SET_KEY, addr, WMI_KEY_GROUP);
294 spin_lock_bh(&ar->data_lock);
295 peer->keys[i] = arvif->wep_keys[i];
296 spin_unlock_bh(&ar->data_lock);
299 /* In some cases (notably with static WEP IBSS with multiple keys)
300 * multicast Tx becomes broken. Both pairwise and groupwise keys are
301 * installed already. Using WMI_KEY_TX_USAGE in different combinations
302 * didn't seem help. Using def_keyid vdev parameter seems to be
303 * effective so use that.
305 * FIXME: Revisit. Perhaps this can be done in a less hacky way.
307 if (arvif->vif->type != NL80211_IFTYPE_ADHOC)
310 if (arvif->def_wep_key_idx == -1)
313 ret = ath10k_wmi_vdev_set_param(arvif->ar,
315 arvif->ar->wmi.vdev_param->def_keyid,
316 arvif->def_wep_key_idx);
318 ath10k_warn(ar, "failed to re-set def wpa key idxon vdev %i: %d\n",
319 arvif->vdev_id, ret);
326 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
329 struct ath10k *ar = arvif->ar;
330 struct ath10k_peer *peer;
336 lockdep_assert_held(&ar->conf_mutex);
338 spin_lock_bh(&ar->data_lock);
339 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
340 spin_unlock_bh(&ar->data_lock);
345 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
346 if (peer->keys[i] == NULL)
349 /* key flags are not required to delete the key */
350 ret = ath10k_install_key(arvif, peer->keys[i],
351 DISABLE_KEY, addr, flags);
352 if (ret < 0 && first_errno == 0)
356 ath10k_warn(ar, "failed to remove peer wep key %d: %d\n",
359 spin_lock_bh(&ar->data_lock);
360 peer->keys[i] = NULL;
361 spin_unlock_bh(&ar->data_lock);
367 bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr,
370 struct ath10k_peer *peer;
373 lockdep_assert_held(&ar->data_lock);
375 /* We don't know which vdev this peer belongs to,
376 * since WMI doesn't give us that information.
378 * FIXME: multi-bss needs to be handled.
380 peer = ath10k_peer_find(ar, 0, addr);
384 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
385 if (peer->keys[i] && peer->keys[i]->keyidx == keyidx)
392 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
393 struct ieee80211_key_conf *key)
395 struct ath10k *ar = arvif->ar;
396 struct ath10k_peer *peer;
403 lockdep_assert_held(&ar->conf_mutex);
406 /* since ath10k_install_key we can't hold data_lock all the
407 * time, so we try to remove the keys incrementally */
408 spin_lock_bh(&ar->data_lock);
410 list_for_each_entry(peer, &ar->peers, list) {
411 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
412 if (peer->keys[i] == key) {
413 ether_addr_copy(addr, peer->addr);
414 peer->keys[i] = NULL;
419 if (i < ARRAY_SIZE(peer->keys))
422 spin_unlock_bh(&ar->data_lock);
424 if (i == ARRAY_SIZE(peer->keys))
426 /* key flags are not required to delete the key */
427 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr, flags);
428 if (ret < 0 && first_errno == 0)
432 ath10k_warn(ar, "failed to remove key for %pM: %d\n",
439 static int ath10k_mac_vif_update_wep_key(struct ath10k_vif *arvif,
440 struct ieee80211_key_conf *key)
442 struct ath10k *ar = arvif->ar;
443 struct ath10k_peer *peer;
446 lockdep_assert_held(&ar->conf_mutex);
448 list_for_each_entry(peer, &ar->peers, list) {
449 if (!memcmp(peer->addr, arvif->vif->addr, ETH_ALEN))
452 if (!memcmp(peer->addr, arvif->bssid, ETH_ALEN))
455 if (peer->keys[key->keyidx] == key)
458 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vif vdev %i update key %i needs update\n",
459 arvif->vdev_id, key->keyidx);
461 ret = ath10k_install_peer_wep_keys(arvif, peer->addr);
463 ath10k_warn(ar, "failed to update wep keys on vdev %i for peer %pM: %d\n",
464 arvif->vdev_id, peer->addr, ret);
472 /*********************/
473 /* General utilities */
474 /*********************/
476 static inline enum wmi_phy_mode
477 chan_to_phymode(const struct cfg80211_chan_def *chandef)
479 enum wmi_phy_mode phymode = MODE_UNKNOWN;
481 switch (chandef->chan->band) {
482 case IEEE80211_BAND_2GHZ:
483 switch (chandef->width) {
484 case NL80211_CHAN_WIDTH_20_NOHT:
485 if (chandef->chan->flags & IEEE80211_CHAN_NO_OFDM)
490 case NL80211_CHAN_WIDTH_20:
491 phymode = MODE_11NG_HT20;
493 case NL80211_CHAN_WIDTH_40:
494 phymode = MODE_11NG_HT40;
496 case NL80211_CHAN_WIDTH_5:
497 case NL80211_CHAN_WIDTH_10:
498 case NL80211_CHAN_WIDTH_80:
499 case NL80211_CHAN_WIDTH_80P80:
500 case NL80211_CHAN_WIDTH_160:
501 phymode = MODE_UNKNOWN;
505 case IEEE80211_BAND_5GHZ:
506 switch (chandef->width) {
507 case NL80211_CHAN_WIDTH_20_NOHT:
510 case NL80211_CHAN_WIDTH_20:
511 phymode = MODE_11NA_HT20;
513 case NL80211_CHAN_WIDTH_40:
514 phymode = MODE_11NA_HT40;
516 case NL80211_CHAN_WIDTH_80:
517 phymode = MODE_11AC_VHT80;
519 case NL80211_CHAN_WIDTH_5:
520 case NL80211_CHAN_WIDTH_10:
521 case NL80211_CHAN_WIDTH_80P80:
522 case NL80211_CHAN_WIDTH_160:
523 phymode = MODE_UNKNOWN;
531 WARN_ON(phymode == MODE_UNKNOWN);
535 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
538 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
539 * 0 for no restriction
548 switch (mpdudensity) {
554 /* Our lower layer calculations limit our precision to
570 int ath10k_mac_vif_chan(struct ieee80211_vif *vif,
571 struct cfg80211_chan_def *def)
573 struct ieee80211_chanctx_conf *conf;
576 conf = rcu_dereference(vif->chanctx_conf);
588 static void ath10k_mac_num_chanctxs_iter(struct ieee80211_hw *hw,
589 struct ieee80211_chanctx_conf *conf,
597 static int ath10k_mac_num_chanctxs(struct ath10k *ar)
601 ieee80211_iter_chan_contexts_atomic(ar->hw,
602 ath10k_mac_num_chanctxs_iter,
609 ath10k_mac_get_any_chandef_iter(struct ieee80211_hw *hw,
610 struct ieee80211_chanctx_conf *conf,
613 struct cfg80211_chan_def **def = data;
618 static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr,
619 enum wmi_peer_type peer_type)
621 struct ath10k_vif *arvif;
625 lockdep_assert_held(&ar->conf_mutex);
627 num_peers = ar->num_peers;
629 /* Each vdev consumes a peer entry as well */
630 list_for_each_entry(arvif, &ar->arvifs, list)
633 if (num_peers >= ar->max_num_peers)
636 ret = ath10k_wmi_peer_create(ar, vdev_id, addr, peer_type);
638 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n",
643 ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
645 ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n",
655 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
657 struct ath10k *ar = arvif->ar;
661 param = ar->wmi.pdev_param->sta_kickout_th;
662 ret = ath10k_wmi_pdev_set_param(ar, param,
663 ATH10K_KICKOUT_THRESHOLD);
665 ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n",
666 arvif->vdev_id, ret);
670 param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
671 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
672 ATH10K_KEEPALIVE_MIN_IDLE);
674 ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n",
675 arvif->vdev_id, ret);
679 param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
680 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
681 ATH10K_KEEPALIVE_MAX_IDLE);
683 ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n",
684 arvif->vdev_id, ret);
688 param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
689 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
690 ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
692 ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
693 arvif->vdev_id, ret);
700 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
702 struct ath10k *ar = arvif->ar;
705 vdev_param = ar->wmi.vdev_param->rts_threshold;
706 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
709 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
713 lockdep_assert_held(&ar->conf_mutex);
715 ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
719 ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
728 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
730 struct ath10k_peer *peer, *tmp;
732 lockdep_assert_held(&ar->conf_mutex);
734 spin_lock_bh(&ar->data_lock);
735 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
736 if (peer->vdev_id != vdev_id)
739 ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n",
740 peer->addr, vdev_id);
742 list_del(&peer->list);
746 spin_unlock_bh(&ar->data_lock);
749 static void ath10k_peer_cleanup_all(struct ath10k *ar)
751 struct ath10k_peer *peer, *tmp;
753 lockdep_assert_held(&ar->conf_mutex);
755 spin_lock_bh(&ar->data_lock);
756 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
757 list_del(&peer->list);
760 spin_unlock_bh(&ar->data_lock);
763 ar->num_stations = 0;
766 static int ath10k_mac_tdls_peer_update(struct ath10k *ar, u32 vdev_id,
767 struct ieee80211_sta *sta,
768 enum wmi_tdls_peer_state state)
771 struct wmi_tdls_peer_update_cmd_arg arg = {};
772 struct wmi_tdls_peer_capab_arg cap = {};
773 struct wmi_channel_arg chan_arg = {};
775 lockdep_assert_held(&ar->conf_mutex);
777 arg.vdev_id = vdev_id;
778 arg.peer_state = state;
779 ether_addr_copy(arg.addr, sta->addr);
781 cap.peer_max_sp = sta->max_sp;
782 cap.peer_uapsd_queues = sta->uapsd_queues;
784 if (state == WMI_TDLS_PEER_STATE_CONNECTED &&
785 !sta->tdls_initiator)
786 cap.is_peer_responder = 1;
788 ret = ath10k_wmi_tdls_peer_update(ar, &arg, &cap, &chan_arg);
790 ath10k_warn(ar, "failed to update tdls peer %pM on vdev %i: %i\n",
791 arg.addr, vdev_id, ret);
798 /************************/
799 /* Interface management */
800 /************************/
802 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif)
804 struct ath10k *ar = arvif->ar;
806 lockdep_assert_held(&ar->data_lock);
811 if (!arvif->beacon_buf)
812 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr,
813 arvif->beacon->len, DMA_TO_DEVICE);
815 if (WARN_ON(arvif->beacon_state != ATH10K_BEACON_SCHEDULED &&
816 arvif->beacon_state != ATH10K_BEACON_SENT))
819 dev_kfree_skb_any(arvif->beacon);
821 arvif->beacon = NULL;
822 arvif->beacon_state = ATH10K_BEACON_SCHEDULED;
825 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
827 struct ath10k *ar = arvif->ar;
829 lockdep_assert_held(&ar->data_lock);
831 ath10k_mac_vif_beacon_free(arvif);
833 if (arvif->beacon_buf) {
834 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
835 arvif->beacon_buf, arvif->beacon_paddr);
836 arvif->beacon_buf = NULL;
840 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
842 unsigned long time_left;
844 lockdep_assert_held(&ar->conf_mutex);
846 if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags))
849 time_left = wait_for_completion_timeout(&ar->vdev_setup_done,
850 ATH10K_VDEV_SETUP_TIMEOUT_HZ);
857 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
859 struct cfg80211_chan_def *chandef = NULL;
860 struct ieee80211_channel *channel = NULL;
861 struct wmi_vdev_start_request_arg arg = {};
864 lockdep_assert_held(&ar->conf_mutex);
866 ieee80211_iter_chan_contexts_atomic(ar->hw,
867 ath10k_mac_get_any_chandef_iter,
869 if (WARN_ON_ONCE(!chandef))
872 channel = chandef->chan;
874 arg.vdev_id = vdev_id;
875 arg.channel.freq = channel->center_freq;
876 arg.channel.band_center_freq1 = chandef->center_freq1;
878 /* TODO setup this dynamically, what in case we
879 don't have any vifs? */
880 arg.channel.mode = chan_to_phymode(chandef);
881 arg.channel.chan_radar =
882 !!(channel->flags & IEEE80211_CHAN_RADAR);
884 arg.channel.min_power = 0;
885 arg.channel.max_power = channel->max_power * 2;
886 arg.channel.max_reg_power = channel->max_reg_power * 2;
887 arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
889 reinit_completion(&ar->vdev_setup_done);
891 ret = ath10k_wmi_vdev_start(ar, &arg);
893 ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n",
898 ret = ath10k_vdev_setup_sync(ar);
900 ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i start: %d\n",
905 ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
907 ath10k_warn(ar, "failed to put up monitor vdev %i: %d\n",
912 ar->monitor_vdev_id = vdev_id;
914 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i started\n",
915 ar->monitor_vdev_id);
919 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
921 ath10k_warn(ar, "failed to stop monitor vdev %i after start failure: %d\n",
922 ar->monitor_vdev_id, ret);
927 static int ath10k_monitor_vdev_stop(struct ath10k *ar)
931 lockdep_assert_held(&ar->conf_mutex);
933 ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id);
935 ath10k_warn(ar, "failed to put down monitor vdev %i: %d\n",
936 ar->monitor_vdev_id, ret);
938 reinit_completion(&ar->vdev_setup_done);
940 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
942 ath10k_warn(ar, "failed to to request monitor vdev %i stop: %d\n",
943 ar->monitor_vdev_id, ret);
945 ret = ath10k_vdev_setup_sync(ar);
947 ath10k_warn(ar, "failed to synchronize monitor vdev %i stop: %d\n",
948 ar->monitor_vdev_id, ret);
950 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n",
951 ar->monitor_vdev_id);
955 static int ath10k_monitor_vdev_create(struct ath10k *ar)
959 lockdep_assert_held(&ar->conf_mutex);
961 if (ar->free_vdev_map == 0) {
962 ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n");
966 bit = __ffs64(ar->free_vdev_map);
968 ar->monitor_vdev_id = bit;
970 ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
971 WMI_VDEV_TYPE_MONITOR,
974 ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n",
975 ar->monitor_vdev_id, ret);
979 ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id);
980 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
981 ar->monitor_vdev_id);
986 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
990 lockdep_assert_held(&ar->conf_mutex);
992 ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
994 ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n",
995 ar->monitor_vdev_id, ret);
999 ar->free_vdev_map |= 1LL << ar->monitor_vdev_id;
1001 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
1002 ar->monitor_vdev_id);
1006 static int ath10k_monitor_start(struct ath10k *ar)
1010 lockdep_assert_held(&ar->conf_mutex);
1012 ret = ath10k_monitor_vdev_create(ar);
1014 ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret);
1018 ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
1020 ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret);
1021 ath10k_monitor_vdev_delete(ar);
1025 ar->monitor_started = true;
1026 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n");
1031 static int ath10k_monitor_stop(struct ath10k *ar)
1035 lockdep_assert_held(&ar->conf_mutex);
1037 ret = ath10k_monitor_vdev_stop(ar);
1039 ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret);
1043 ret = ath10k_monitor_vdev_delete(ar);
1045 ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret);
1049 ar->monitor_started = false;
1050 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n");
1055 static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar)
1059 /* At least one chanctx is required to derive a channel to start
1062 num_ctx = ath10k_mac_num_chanctxs(ar);
1066 /* If there's already an existing special monitor interface then don't
1067 * bother creating another monitor vdev.
1069 if (ar->monitor_arvif)
1072 return ar->monitor ||
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);
3620 /* Add a 200ms margin to account for event/command processing */
3621 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
3622 msecs_to_jiffies(arg->max_scan_time+200));
3626 /**********************/
3627 /* mac80211 callbacks */
3628 /**********************/
3630 static void ath10k_tx(struct ieee80211_hw *hw,
3631 struct ieee80211_tx_control *control,
3632 struct sk_buff *skb)
3634 struct ath10k *ar = hw->priv;
3635 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
3636 struct ieee80211_vif *vif = info->control.vif;
3637 struct ieee80211_sta *sta = control->sta;
3638 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
3639 __le16 fc = hdr->frame_control;
3641 /* We should disable CCK RATE due to P2P */
3642 if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
3643 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
3645 ATH10K_SKB_CB(skb)->htt.is_offchan = false;
3646 ATH10K_SKB_CB(skb)->htt.freq = 0;
3647 ATH10K_SKB_CB(skb)->htt.tid = ath10k_tx_h_get_tid(hdr);
3648 ATH10K_SKB_CB(skb)->htt.nohwcrypt = !ath10k_tx_h_use_hwcrypto(vif, skb);
3649 ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif);
3650 ATH10K_SKB_CB(skb)->txmode = ath10k_tx_h_get_txmode(ar, vif, sta, skb);
3651 ATH10K_SKB_CB(skb)->is_protected = ieee80211_has_protected(fc);
3653 switch (ATH10K_SKB_CB(skb)->txmode) {
3654 case ATH10K_HW_TXRX_MGMT:
3655 case ATH10K_HW_TXRX_NATIVE_WIFI:
3656 ath10k_tx_h_nwifi(hw, skb);
3657 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
3658 ath10k_tx_h_seq_no(vif, skb);
3660 case ATH10K_HW_TXRX_ETHERNET:
3661 ath10k_tx_h_8023(skb);
3663 case ATH10K_HW_TXRX_RAW:
3664 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
3666 ieee80211_free_txskb(hw, skb);
3671 if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
3672 spin_lock_bh(&ar->data_lock);
3673 ATH10K_SKB_CB(skb)->htt.freq = ar->scan.roc_freq;
3674 ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id;
3675 spin_unlock_bh(&ar->data_lock);
3677 if (ath10k_mac_need_offchan_tx_work(ar)) {
3678 ATH10K_SKB_CB(skb)->htt.freq = 0;
3679 ATH10K_SKB_CB(skb)->htt.is_offchan = true;
3681 ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n",
3684 skb_queue_tail(&ar->offchan_tx_queue, skb);
3685 ieee80211_queue_work(hw, &ar->offchan_tx_work);
3690 ath10k_mac_tx(ar, skb);
3693 /* Must not be called with conf_mutex held as workers can use that also. */
3694 void ath10k_drain_tx(struct ath10k *ar)
3696 /* make sure rcu-protected mac80211 tx path itself is drained */
3699 ath10k_offchan_tx_purge(ar);
3700 ath10k_mgmt_over_wmi_tx_purge(ar);
3702 cancel_work_sync(&ar->offchan_tx_work);
3703 cancel_work_sync(&ar->wmi_mgmt_tx_work);
3706 void ath10k_halt(struct ath10k *ar)
3708 struct ath10k_vif *arvif;
3710 lockdep_assert_held(&ar->conf_mutex);
3712 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
3713 ar->filter_flags = 0;
3714 ar->monitor = false;
3715 ar->monitor_arvif = NULL;
3717 if (ar->monitor_started)
3718 ath10k_monitor_stop(ar);
3720 ar->monitor_started = false;
3723 ath10k_scan_finish(ar);
3724 ath10k_peer_cleanup_all(ar);
3725 ath10k_core_stop(ar);
3726 ath10k_hif_power_down(ar);
3728 spin_lock_bh(&ar->data_lock);
3729 list_for_each_entry(arvif, &ar->arvifs, list)
3730 ath10k_mac_vif_beacon_cleanup(arvif);
3731 spin_unlock_bh(&ar->data_lock);
3734 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
3736 struct ath10k *ar = hw->priv;
3738 mutex_lock(&ar->conf_mutex);
3740 if (ar->cfg_tx_chainmask) {
3741 *tx_ant = ar->cfg_tx_chainmask;
3742 *rx_ant = ar->cfg_rx_chainmask;
3744 *tx_ant = ar->supp_tx_chainmask;
3745 *rx_ant = ar->supp_rx_chainmask;
3748 mutex_unlock(&ar->conf_mutex);
3753 static void ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg)
3755 /* It is not clear that allowing gaps in chainmask
3756 * is helpful. Probably it will not do what user
3757 * is hoping for, so warn in that case.
3759 if (cm == 15 || cm == 7 || cm == 3 || cm == 1 || cm == 0)
3762 ath10k_warn(ar, "mac %s antenna chainmask may be invalid: 0x%x. Suggested values: 15, 7, 3, 1 or 0.\n",
3766 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
3770 lockdep_assert_held(&ar->conf_mutex);
3772 ath10k_check_chain_mask(ar, tx_ant, "tx");
3773 ath10k_check_chain_mask(ar, rx_ant, "rx");
3775 ar->cfg_tx_chainmask = tx_ant;
3776 ar->cfg_rx_chainmask = rx_ant;
3778 if ((ar->state != ATH10K_STATE_ON) &&
3779 (ar->state != ATH10K_STATE_RESTARTED))
3782 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
3785 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n",
3790 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
3793 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n",
3801 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
3803 struct ath10k *ar = hw->priv;
3806 mutex_lock(&ar->conf_mutex);
3807 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
3808 mutex_unlock(&ar->conf_mutex);
3812 static int ath10k_start(struct ieee80211_hw *hw)
3814 struct ath10k *ar = hw->priv;
3819 * This makes sense only when restarting hw. It is harmless to call
3820 * uncoditionally. This is necessary to make sure no HTT/WMI tx
3821 * commands will be submitted while restarting.
3823 ath10k_drain_tx(ar);
3825 mutex_lock(&ar->conf_mutex);
3827 switch (ar->state) {
3828 case ATH10K_STATE_OFF:
3829 ar->state = ATH10K_STATE_ON;
3831 case ATH10K_STATE_RESTARTING:
3833 ar->state = ATH10K_STATE_RESTARTED;
3835 case ATH10K_STATE_ON:
3836 case ATH10K_STATE_RESTARTED:
3837 case ATH10K_STATE_WEDGED:
3841 case ATH10K_STATE_UTF:
3846 ret = ath10k_hif_power_up(ar);
3848 ath10k_err(ar, "Could not init hif: %d\n", ret);
3852 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL);
3854 ath10k_err(ar, "Could not init core: %d\n", ret);
3855 goto err_power_down;
3858 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pmf_qos, 1);
3860 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret);
3864 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->dynamic_bw, 1);
3866 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret);
3870 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
3871 ret = ath10k_wmi_adaptive_qcs(ar, true);
3873 ath10k_warn(ar, "failed to enable adaptive qcs: %d\n",
3879 if (test_bit(WMI_SERVICE_BURST, ar->wmi.svc_map)) {
3880 burst_enable = ar->wmi.pdev_param->burst_enable;
3881 ret = ath10k_wmi_pdev_set_param(ar, burst_enable, 0);
3883 ath10k_warn(ar, "failed to disable burst: %d\n", ret);
3888 if (ar->cfg_tx_chainmask)
3889 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask,
3890 ar->cfg_rx_chainmask);
3893 * By default FW set ARP frames ac to voice (6). In that case ARP
3894 * exchange is not working properly for UAPSD enabled AP. ARP requests
3895 * which arrives with access category 0 are processed by network stack
3896 * and send back with access category 0, but FW changes access category
3897 * to 6. Set ARP frames access category to best effort (0) solves
3901 ret = ath10k_wmi_pdev_set_param(ar,
3902 ar->wmi.pdev_param->arp_ac_override, 0);
3904 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n",
3909 ret = ath10k_wmi_pdev_set_param(ar,
3910 ar->wmi.pdev_param->ani_enable, 1);
3912 ath10k_warn(ar, "failed to enable ani by default: %d\n",
3917 ar->ani_enabled = true;
3919 ar->num_started_vdevs = 0;
3920 ath10k_regd_update(ar);
3922 ath10k_spectral_start(ar);
3923 ath10k_thermal_set_throttling(ar);
3925 mutex_unlock(&ar->conf_mutex);
3929 ath10k_core_stop(ar);
3932 ath10k_hif_power_down(ar);
3935 ar->state = ATH10K_STATE_OFF;
3938 mutex_unlock(&ar->conf_mutex);
3942 static void ath10k_stop(struct ieee80211_hw *hw)
3944 struct ath10k *ar = hw->priv;
3946 ath10k_drain_tx(ar);
3948 mutex_lock(&ar->conf_mutex);
3949 if (ar->state != ATH10K_STATE_OFF) {
3951 ar->state = ATH10K_STATE_OFF;
3953 mutex_unlock(&ar->conf_mutex);
3955 cancel_delayed_work_sync(&ar->scan.timeout);
3956 cancel_work_sync(&ar->restart_work);
3959 static int ath10k_config_ps(struct ath10k *ar)
3961 struct ath10k_vif *arvif;
3964 lockdep_assert_held(&ar->conf_mutex);
3966 list_for_each_entry(arvif, &ar->arvifs, list) {
3967 ret = ath10k_mac_vif_setup_ps(arvif);
3969 ath10k_warn(ar, "failed to setup powersave: %d\n", ret);
3977 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
3982 lockdep_assert_held(&ar->conf_mutex);
3984 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower);
3986 param = ar->wmi.pdev_param->txpower_limit2g;
3987 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
3989 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
3994 param = ar->wmi.pdev_param->txpower_limit5g;
3995 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
3997 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
4005 static int ath10k_mac_txpower_recalc(struct ath10k *ar)
4007 struct ath10k_vif *arvif;
4008 int ret, txpower = -1;
4010 lockdep_assert_held(&ar->conf_mutex);
4012 list_for_each_entry(arvif, &ar->arvifs, list) {
4013 WARN_ON(arvif->txpower < 0);
4016 txpower = arvif->txpower;
4018 txpower = min(txpower, arvif->txpower);
4021 if (WARN_ON(txpower == -1))
4024 ret = ath10k_mac_txpower_setup(ar, txpower);
4026 ath10k_warn(ar, "failed to setup tx power %d: %d\n",
4034 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
4036 struct ath10k *ar = hw->priv;
4037 struct ieee80211_conf *conf = &hw->conf;
4040 mutex_lock(&ar->conf_mutex);
4042 if (changed & IEEE80211_CONF_CHANGE_PS)
4043 ath10k_config_ps(ar);
4045 if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
4046 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR;
4047 ret = ath10k_monitor_recalc(ar);
4049 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4052 mutex_unlock(&ar->conf_mutex);
4056 static u32 get_nss_from_chainmask(u16 chain_mask)
4058 if ((chain_mask & 0x15) == 0x15)
4060 else if ((chain_mask & 0x7) == 0x7)
4062 else if ((chain_mask & 0x3) == 0x3)
4067 static int ath10k_mac_get_vht_cap_bf_sts(struct ath10k *ar)
4069 int nsts = ar->vht_cap_info;
4070 nsts &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
4071 nsts >>= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
4073 /* If firmware does not deliver to host number of space-time
4074 * streams supported, assume it support up to 4 BF STS and return
4075 * the value for VHT CAP: nsts-1)
4083 static int ath10k_mac_set_txbf_conf(struct ath10k_vif *arvif)
4086 struct ath10k *ar = arvif->ar;
4089 if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_BEFORE_ASSOC)
4092 nsts = ath10k_mac_get_vht_cap_bf_sts(ar);
4093 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
4094 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE))
4095 value |= SM(nsts, WMI_TXBF_STS_CAP_OFFSET);
4097 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
4098 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE))
4099 value |= SM((ar->num_rf_chains - 1), WMI_BF_SOUND_DIM_OFFSET);
4104 if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
4105 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER;
4107 if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
4108 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFER |
4109 WMI_VDEV_PARAM_TXBF_SU_TX_BFER);
4111 if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)
4112 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE;
4114 if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)
4115 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFEE |
4116 WMI_VDEV_PARAM_TXBF_SU_TX_BFEE);
4118 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4119 ar->wmi.vdev_param->txbf, value);
4124 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
4125 * because we will send mgmt frames without CCK. This requirement
4126 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
4129 static int ath10k_add_interface(struct ieee80211_hw *hw,
4130 struct ieee80211_vif *vif)
4132 struct ath10k *ar = hw->priv;
4133 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4134 enum wmi_sta_powersave_param param;
4141 vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD;
4143 mutex_lock(&ar->conf_mutex);
4145 memset(arvif, 0, sizeof(*arvif));
4150 INIT_LIST_HEAD(&arvif->list);
4151 INIT_WORK(&arvif->ap_csa_work, ath10k_mac_vif_ap_csa_work);
4152 INIT_DELAYED_WORK(&arvif->connection_loss_work,
4153 ath10k_mac_vif_sta_connection_loss_work);
4155 for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
4156 arvif->bitrate_mask.control[i].legacy = 0xffffffff;
4157 memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff,
4158 sizeof(arvif->bitrate_mask.control[i].ht_mcs));
4159 memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff,
4160 sizeof(arvif->bitrate_mask.control[i].vht_mcs));
4163 if (ar->num_peers >= ar->max_num_peers) {
4164 ath10k_warn(ar, "refusing vdev creation due to insufficient peer entry resources in firmware\n");
4169 if (ar->free_vdev_map == 0) {
4170 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
4174 bit = __ffs64(ar->free_vdev_map);
4176 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
4177 bit, ar->free_vdev_map);
4179 arvif->vdev_id = bit;
4180 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
4182 switch (vif->type) {
4183 case NL80211_IFTYPE_P2P_DEVICE:
4184 arvif->vdev_type = WMI_VDEV_TYPE_STA;
4185 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE;
4187 case NL80211_IFTYPE_UNSPECIFIED:
4188 case NL80211_IFTYPE_STATION:
4189 arvif->vdev_type = WMI_VDEV_TYPE_STA;
4191 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT;
4193 case NL80211_IFTYPE_ADHOC:
4194 arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
4196 case NL80211_IFTYPE_AP:
4197 arvif->vdev_type = WMI_VDEV_TYPE_AP;
4200 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO;
4202 case NL80211_IFTYPE_MONITOR:
4203 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
4210 /* Using vdev_id as queue number will make it very easy to do per-vif
4211 * tx queue locking. This shouldn't wrap due to interface combinations
4212 * but do a modulo for correctness sake and prevent using offchannel tx
4213 * queues for regular vif tx.
4215 vif->cab_queue = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
4216 for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++)
4217 vif->hw_queue[i] = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1);
4219 /* Some firmware revisions don't wait for beacon tx completion before
4220 * sending another SWBA event. This could lead to hardware using old
4221 * (freed) beacon data in some cases, e.g. tx credit starvation
4222 * combined with missed TBTT. This is very very rare.
4224 * On non-IOMMU-enabled hosts this could be a possible security issue
4225 * because hw could beacon some random data on the air. On
4226 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
4227 * device would crash.
4229 * Since there are no beacon tx completions (implicit nor explicit)
4230 * propagated to host the only workaround for this is to allocate a
4231 * DMA-coherent buffer for a lifetime of a vif and use it for all
4232 * beacon tx commands. Worst case for this approach is some beacons may
4233 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
4235 if (vif->type == NL80211_IFTYPE_ADHOC ||
4236 vif->type == NL80211_IFTYPE_AP) {
4237 arvif->beacon_buf = dma_zalloc_coherent(ar->dev,
4238 IEEE80211_MAX_FRAME_LEN,
4239 &arvif->beacon_paddr,
4241 if (!arvif->beacon_buf) {
4243 ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
4248 if (test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags))
4249 arvif->nohwcrypt = true;
4251 if (arvif->nohwcrypt &&
4252 !test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
4253 ath10k_warn(ar, "cryptmode module param needed for sw crypto\n");
4257 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
4258 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
4259 arvif->beacon_buf ? "single-buf" : "per-skb");
4261 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
4262 arvif->vdev_subtype, vif->addr);
4264 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
4265 arvif->vdev_id, ret);
4269 ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
4270 list_add(&arvif->list, &ar->arvifs);
4272 /* It makes no sense to have firmware do keepalives. mac80211 already
4273 * takes care of this with idle connection polling.
4275 ret = ath10k_mac_vif_disable_keepalive(arvif);
4277 ath10k_warn(ar, "failed to disable keepalive on vdev %i: %d\n",
4278 arvif->vdev_id, ret);
4279 goto err_vdev_delete;
4282 arvif->def_wep_key_idx = -1;
4284 vdev_param = ar->wmi.vdev_param->tx_encap_type;
4285 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4286 ATH10K_HW_TXRX_NATIVE_WIFI);
4287 /* 10.X firmware does not support this VDEV parameter. Do not warn */
4288 if (ret && ret != -EOPNOTSUPP) {
4289 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
4290 arvif->vdev_id, ret);
4291 goto err_vdev_delete;
4294 if (ar->cfg_tx_chainmask) {
4295 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
4297 vdev_param = ar->wmi.vdev_param->nss;
4298 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4301 ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
4302 arvif->vdev_id, ar->cfg_tx_chainmask, nss,
4304 goto err_vdev_delete;
4308 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4309 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4310 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr,
4311 WMI_PEER_TYPE_DEFAULT);
4313 ath10k_warn(ar, "failed to create vdev %i peer for AP/IBSS: %d\n",
4314 arvif->vdev_id, ret);
4315 goto err_vdev_delete;
4319 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
4320 ret = ath10k_mac_set_kickout(arvif);
4322 ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
4323 arvif->vdev_id, ret);
4324 goto err_peer_delete;
4328 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
4329 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
4330 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
4331 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
4334 ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
4335 arvif->vdev_id, ret);
4336 goto err_peer_delete;
4339 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
4341 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
4342 arvif->vdev_id, ret);
4343 goto err_peer_delete;
4346 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
4348 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
4349 arvif->vdev_id, ret);
4350 goto err_peer_delete;
4354 ret = ath10k_mac_set_txbf_conf(arvif);
4356 ath10k_warn(ar, "failed to set txbf for vdev %d: %d\n",
4357 arvif->vdev_id, ret);
4358 goto err_peer_delete;
4361 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
4363 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
4364 arvif->vdev_id, ret);
4365 goto err_peer_delete;
4368 arvif->txpower = vif->bss_conf.txpower;
4369 ret = ath10k_mac_txpower_recalc(ar);
4371 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
4372 goto err_peer_delete;
4375 if (vif->type == NL80211_IFTYPE_MONITOR) {
4376 ar->monitor_arvif = arvif;
4377 ret = ath10k_monitor_recalc(ar);
4379 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4380 goto err_peer_delete;
4384 spin_lock_bh(&ar->htt.tx_lock);
4386 ieee80211_wake_queue(ar->hw, arvif->vdev_id);
4387 spin_unlock_bh(&ar->htt.tx_lock);
4389 mutex_unlock(&ar->conf_mutex);
4393 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4394 arvif->vdev_type == WMI_VDEV_TYPE_IBSS)
4395 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
4398 ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
4399 ar->free_vdev_map |= 1LL << arvif->vdev_id;
4400 list_del(&arvif->list);
4403 if (arvif->beacon_buf) {
4404 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
4405 arvif->beacon_buf, arvif->beacon_paddr);
4406 arvif->beacon_buf = NULL;
4409 mutex_unlock(&ar->conf_mutex);
4414 static void ath10k_mac_vif_tx_unlock_all(struct ath10k_vif *arvif)
4418 for (i = 0; i < BITS_PER_LONG; i++)
4419 ath10k_mac_vif_tx_unlock(arvif, i);
4422 static void ath10k_remove_interface(struct ieee80211_hw *hw,
4423 struct ieee80211_vif *vif)
4425 struct ath10k *ar = hw->priv;
4426 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4429 cancel_work_sync(&arvif->ap_csa_work);
4430 cancel_delayed_work_sync(&arvif->connection_loss_work);
4432 mutex_lock(&ar->conf_mutex);
4434 spin_lock_bh(&ar->data_lock);
4435 ath10k_mac_vif_beacon_cleanup(arvif);
4436 spin_unlock_bh(&ar->data_lock);
4438 ret = ath10k_spectral_vif_stop(arvif);
4440 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
4441 arvif->vdev_id, ret);
4443 ar->free_vdev_map |= 1LL << arvif->vdev_id;
4444 list_del(&arvif->list);
4446 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4447 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4448 ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id,
4451 ath10k_warn(ar, "failed to submit AP/IBSS self-peer removal on vdev %i: %d\n",
4452 arvif->vdev_id, ret);
4454 kfree(arvif->u.ap.noa_data);
4457 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
4460 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
4462 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
4463 arvif->vdev_id, ret);
4465 /* Some firmware revisions don't notify host about self-peer removal
4466 * until after associated vdev is deleted.
4468 if (arvif->vdev_type == WMI_VDEV_TYPE_AP ||
4469 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
4470 ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id,
4473 ath10k_warn(ar, "failed to remove AP self-peer on vdev %i: %d\n",
4474 arvif->vdev_id, ret);
4476 spin_lock_bh(&ar->data_lock);
4478 spin_unlock_bh(&ar->data_lock);
4481 ath10k_peer_cleanup(ar, arvif->vdev_id);
4483 if (vif->type == NL80211_IFTYPE_MONITOR) {
4484 ar->monitor_arvif = NULL;
4485 ret = ath10k_monitor_recalc(ar);
4487 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
4490 spin_lock_bh(&ar->htt.tx_lock);
4491 ath10k_mac_vif_tx_unlock_all(arvif);
4492 spin_unlock_bh(&ar->htt.tx_lock);
4494 mutex_unlock(&ar->conf_mutex);
4498 * FIXME: Has to be verified.
4500 #define SUPPORTED_FILTERS \
4505 FIF_BCN_PRBRESP_PROMISC | \
4509 static void ath10k_configure_filter(struct ieee80211_hw *hw,
4510 unsigned int changed_flags,
4511 unsigned int *total_flags,
4514 struct ath10k *ar = hw->priv;
4517 mutex_lock(&ar->conf_mutex);
4519 changed_flags &= SUPPORTED_FILTERS;
4520 *total_flags &= SUPPORTED_FILTERS;
4521 ar->filter_flags = *total_flags;
4523 ret = ath10k_monitor_recalc(ar);
4525 ath10k_warn(ar, "failed to recalc montior: %d\n", ret);
4527 mutex_unlock(&ar->conf_mutex);
4530 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
4531 struct ieee80211_vif *vif,
4532 struct ieee80211_bss_conf *info,
4535 struct ath10k *ar = hw->priv;
4536 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4538 u32 vdev_param, pdev_param, slottime, preamble;
4540 mutex_lock(&ar->conf_mutex);
4542 if (changed & BSS_CHANGED_IBSS)
4543 ath10k_control_ibss(arvif, info, vif->addr);
4545 if (changed & BSS_CHANGED_BEACON_INT) {
4546 arvif->beacon_interval = info->beacon_int;
4547 vdev_param = ar->wmi.vdev_param->beacon_interval;
4548 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4549 arvif->beacon_interval);
4550 ath10k_dbg(ar, ATH10K_DBG_MAC,
4551 "mac vdev %d beacon_interval %d\n",
4552 arvif->vdev_id, arvif->beacon_interval);
4555 ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
4556 arvif->vdev_id, ret);
4559 if (changed & BSS_CHANGED_BEACON) {
4560 ath10k_dbg(ar, ATH10K_DBG_MAC,
4561 "vdev %d set beacon tx mode to staggered\n",
4564 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
4565 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
4566 WMI_BEACON_STAGGERED_MODE);
4568 ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
4569 arvif->vdev_id, ret);
4571 ret = ath10k_mac_setup_bcn_tmpl(arvif);
4573 ath10k_warn(ar, "failed to update beacon template: %d\n",
4577 if (changed & BSS_CHANGED_AP_PROBE_RESP) {
4578 ret = ath10k_mac_setup_prb_tmpl(arvif);
4580 ath10k_warn(ar, "failed to setup probe resp template on vdev %i: %d\n",
4581 arvif->vdev_id, ret);
4584 if (changed & (BSS_CHANGED_BEACON_INFO | BSS_CHANGED_BEACON)) {
4585 arvif->dtim_period = info->dtim_period;
4587 ath10k_dbg(ar, ATH10K_DBG_MAC,
4588 "mac vdev %d dtim_period %d\n",
4589 arvif->vdev_id, arvif->dtim_period);
4591 vdev_param = ar->wmi.vdev_param->dtim_period;
4592 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4593 arvif->dtim_period);
4595 ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
4596 arvif->vdev_id, ret);
4599 if (changed & BSS_CHANGED_SSID &&
4600 vif->type == NL80211_IFTYPE_AP) {
4601 arvif->u.ap.ssid_len = info->ssid_len;
4603 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
4604 arvif->u.ap.hidden_ssid = info->hidden_ssid;
4607 if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
4608 ether_addr_copy(arvif->bssid, info->bssid);
4610 if (changed & BSS_CHANGED_BEACON_ENABLED)
4611 ath10k_control_beaconing(arvif, info);
4613 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
4614 arvif->use_cts_prot = info->use_cts_prot;
4615 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
4616 arvif->vdev_id, info->use_cts_prot);
4618 ret = ath10k_recalc_rtscts_prot(arvif);
4620 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
4621 arvif->vdev_id, ret);
4623 vdev_param = ar->wmi.vdev_param->protection_mode;
4624 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4625 info->use_cts_prot ? 1 : 0);
4627 ath10k_warn(ar, "failed to set protection mode %d on vdev %i: %d\n",
4628 info->use_cts_prot, arvif->vdev_id, ret);
4631 if (changed & BSS_CHANGED_ERP_SLOT) {
4632 if (info->use_short_slot)
4633 slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
4636 slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
4638 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
4639 arvif->vdev_id, slottime);
4641 vdev_param = ar->wmi.vdev_param->slot_time;
4642 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4645 ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
4646 arvif->vdev_id, ret);
4649 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
4650 if (info->use_short_preamble)
4651 preamble = WMI_VDEV_PREAMBLE_SHORT;
4653 preamble = WMI_VDEV_PREAMBLE_LONG;
4655 ath10k_dbg(ar, ATH10K_DBG_MAC,
4656 "mac vdev %d preamble %dn",
4657 arvif->vdev_id, preamble);
4659 vdev_param = ar->wmi.vdev_param->preamble;
4660 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4663 ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
4664 arvif->vdev_id, ret);
4667 if (changed & BSS_CHANGED_ASSOC) {
4669 /* Workaround: Make sure monitor vdev is not running
4670 * when associating to prevent some firmware revisions
4671 * (e.g. 10.1 and 10.2) from crashing.
4673 if (ar->monitor_started)
4674 ath10k_monitor_stop(ar);
4675 ath10k_bss_assoc(hw, vif, info);
4676 ath10k_monitor_recalc(ar);
4678 ath10k_bss_disassoc(hw, vif);
4682 if (changed & BSS_CHANGED_TXPOWER) {
4683 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
4684 arvif->vdev_id, info->txpower);
4686 arvif->txpower = info->txpower;
4687 ret = ath10k_mac_txpower_recalc(ar);
4689 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
4692 if (changed & BSS_CHANGED_PS) {
4693 arvif->ps = vif->bss_conf.ps;
4695 ret = ath10k_config_ps(ar);
4697 ath10k_warn(ar, "failed to setup ps on vdev %i: %d\n",
4698 arvif->vdev_id, ret);
4701 mutex_unlock(&ar->conf_mutex);
4704 static int ath10k_hw_scan(struct ieee80211_hw *hw,
4705 struct ieee80211_vif *vif,
4706 struct ieee80211_scan_request *hw_req)
4708 struct ath10k *ar = hw->priv;
4709 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4710 struct cfg80211_scan_request *req = &hw_req->req;
4711 struct wmi_start_scan_arg arg;
4715 mutex_lock(&ar->conf_mutex);
4717 spin_lock_bh(&ar->data_lock);
4718 switch (ar->scan.state) {
4719 case ATH10K_SCAN_IDLE:
4720 reinit_completion(&ar->scan.started);
4721 reinit_completion(&ar->scan.completed);
4722 ar->scan.state = ATH10K_SCAN_STARTING;
4723 ar->scan.is_roc = false;
4724 ar->scan.vdev_id = arvif->vdev_id;
4727 case ATH10K_SCAN_STARTING:
4728 case ATH10K_SCAN_RUNNING:
4729 case ATH10K_SCAN_ABORTING:
4733 spin_unlock_bh(&ar->data_lock);
4738 memset(&arg, 0, sizeof(arg));
4739 ath10k_wmi_start_scan_init(ar, &arg);
4740 arg.vdev_id = arvif->vdev_id;
4741 arg.scan_id = ATH10K_SCAN_ID;
4744 arg.ie_len = req->ie_len;
4745 memcpy(arg.ie, req->ie, arg.ie_len);
4749 arg.n_ssids = req->n_ssids;
4750 for (i = 0; i < arg.n_ssids; i++) {
4751 arg.ssids[i].len = req->ssids[i].ssid_len;
4752 arg.ssids[i].ssid = req->ssids[i].ssid;
4755 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
4758 if (req->n_channels) {
4759 arg.n_channels = req->n_channels;
4760 for (i = 0; i < arg.n_channels; i++)
4761 arg.channels[i] = req->channels[i]->center_freq;
4764 ret = ath10k_start_scan(ar, &arg);
4766 ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
4767 spin_lock_bh(&ar->data_lock);
4768 ar->scan.state = ATH10K_SCAN_IDLE;
4769 spin_unlock_bh(&ar->data_lock);
4773 mutex_unlock(&ar->conf_mutex);
4777 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
4778 struct ieee80211_vif *vif)
4780 struct ath10k *ar = hw->priv;
4782 mutex_lock(&ar->conf_mutex);
4783 ath10k_scan_abort(ar);
4784 mutex_unlock(&ar->conf_mutex);
4786 cancel_delayed_work_sync(&ar->scan.timeout);
4789 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
4790 struct ath10k_vif *arvif,
4791 enum set_key_cmd cmd,
4792 struct ieee80211_key_conf *key)
4794 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
4797 /* 10.1 firmware branch requires default key index to be set to group
4798 * key index after installing it. Otherwise FW/HW Txes corrupted
4799 * frames with multi-vif APs. This is not required for main firmware
4800 * branch (e.g. 636).
4802 * This is also needed for 636 fw for IBSS-RSN to work more reliably.
4804 * FIXME: It remains unknown if this is required for multi-vif STA
4805 * interfaces on 10.1.
4808 if (arvif->vdev_type != WMI_VDEV_TYPE_AP &&
4809 arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
4812 if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
4815 if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
4818 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
4824 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4827 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
4828 arvif->vdev_id, ret);
4831 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
4832 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
4833 struct ieee80211_key_conf *key)
4835 struct ath10k *ar = hw->priv;
4836 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4837 struct ath10k_peer *peer;
4838 const u8 *peer_addr;
4839 bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
4840 key->cipher == WLAN_CIPHER_SUITE_WEP104;
4846 /* this one needs to be done in software */
4847 if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC)
4850 if (arvif->nohwcrypt)
4853 if (key->keyidx > WMI_MAX_KEY_INDEX)
4856 mutex_lock(&ar->conf_mutex);
4859 peer_addr = sta->addr;
4860 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
4861 peer_addr = vif->bss_conf.bssid;
4863 peer_addr = vif->addr;
4865 key->hw_key_idx = key->keyidx;
4869 arvif->wep_keys[key->keyidx] = key;
4871 arvif->wep_keys[key->keyidx] = NULL;
4874 /* the peer should not disappear in mid-way (unless FW goes awry) since
4875 * we already hold conf_mutex. we just make sure its there now. */
4876 spin_lock_bh(&ar->data_lock);
4877 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
4878 spin_unlock_bh(&ar->data_lock);
4881 if (cmd == SET_KEY) {
4882 ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
4887 /* if the peer doesn't exist there is no key to disable
4893 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
4894 flags |= WMI_KEY_PAIRWISE;
4896 flags |= WMI_KEY_GROUP;
4899 if (cmd == DISABLE_KEY)
4900 ath10k_clear_vdev_key(arvif, key);
4902 /* When WEP keys are uploaded it's possible that there are
4903 * stations associated already (e.g. when merging) without any
4904 * keys. Static WEP needs an explicit per-peer key upload.
4906 if (vif->type == NL80211_IFTYPE_ADHOC &&
4908 ath10k_mac_vif_update_wep_key(arvif, key);
4910 /* 802.1x never sets the def_wep_key_idx so each set_key()
4911 * call changes default tx key.
4913 * Static WEP sets def_wep_key_idx via .set_default_unicast_key
4914 * after first set_key().
4916 if (cmd == SET_KEY && arvif->def_wep_key_idx == -1)
4917 flags |= WMI_KEY_TX_USAGE;
4920 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags);
4923 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
4924 arvif->vdev_id, peer_addr, ret);
4928 /* mac80211 sets static WEP keys as groupwise while firmware requires
4929 * them to be installed twice as both pairwise and groupwise.
4931 if (is_wep && !sta && vif->type == NL80211_IFTYPE_STATION) {
4933 flags2 &= ~WMI_KEY_GROUP;
4934 flags2 |= WMI_KEY_PAIRWISE;
4936 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags2);
4939 ath10k_warn(ar, "failed to install (ucast) key for vdev %i peer %pM: %d\n",
4940 arvif->vdev_id, peer_addr, ret);
4941 ret2 = ath10k_install_key(arvif, key, DISABLE_KEY,
4945 ath10k_warn(ar, "failed to disable (mcast) key for vdev %i peer %pM: %d\n",
4946 arvif->vdev_id, peer_addr, ret2);
4952 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
4954 spin_lock_bh(&ar->data_lock);
4955 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
4956 if (peer && cmd == SET_KEY)
4957 peer->keys[key->keyidx] = key;
4958 else if (peer && cmd == DISABLE_KEY)
4959 peer->keys[key->keyidx] = NULL;
4960 else if (peer == NULL)
4961 /* impossible unless FW goes crazy */
4962 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
4963 spin_unlock_bh(&ar->data_lock);
4966 mutex_unlock(&ar->conf_mutex);
4970 static void ath10k_set_default_unicast_key(struct ieee80211_hw *hw,
4971 struct ieee80211_vif *vif,
4974 struct ath10k *ar = hw->priv;
4975 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4978 mutex_lock(&arvif->ar->conf_mutex);
4980 if (arvif->ar->state != ATH10K_STATE_ON)
4983 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
4984 arvif->vdev_id, keyidx);
4986 ret = ath10k_wmi_vdev_set_param(arvif->ar,
4988 arvif->ar->wmi.vdev_param->def_keyid,
4992 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
4998 arvif->def_wep_key_idx = keyidx;
5001 mutex_unlock(&arvif->ar->conf_mutex);
5004 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
5007 struct ath10k_vif *arvif;
5008 struct ath10k_sta *arsta;
5009 struct ieee80211_sta *sta;
5010 struct cfg80211_chan_def def;
5011 enum ieee80211_band band;
5012 const u8 *ht_mcs_mask;
5013 const u16 *vht_mcs_mask;
5014 u32 changed, bw, nss, smps;
5017 arsta = container_of(wk, struct ath10k_sta, update_wk);
5018 sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
5019 arvif = arsta->arvif;
5022 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def)))
5025 band = def.chan->band;
5026 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs;
5027 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs;
5029 spin_lock_bh(&ar->data_lock);
5031 changed = arsta->changed;
5038 spin_unlock_bh(&ar->data_lock);
5040 mutex_lock(&ar->conf_mutex);
5042 nss = max_t(u32, 1, nss);
5043 nss = min(nss, max(ath10k_mac_max_ht_nss(ht_mcs_mask),
5044 ath10k_mac_max_vht_nss(vht_mcs_mask)));
5046 if (changed & IEEE80211_RC_BW_CHANGED) {
5047 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
5050 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5051 WMI_PEER_CHAN_WIDTH, bw);
5053 ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
5054 sta->addr, bw, err);
5057 if (changed & IEEE80211_RC_NSS_CHANGED) {
5058 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
5061 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5064 ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
5065 sta->addr, nss, err);
5068 if (changed & IEEE80211_RC_SMPS_CHANGED) {
5069 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
5072 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
5073 WMI_PEER_SMPS_STATE, smps);
5075 ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
5076 sta->addr, smps, err);
5079 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED ||
5080 changed & IEEE80211_RC_NSS_CHANGED) {
5081 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates/nss\n",
5084 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
5086 ath10k_warn(ar, "failed to reassociate station: %pM\n",
5090 mutex_unlock(&ar->conf_mutex);
5093 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif,
5094 struct ieee80211_sta *sta)
5096 struct ath10k *ar = arvif->ar;
5098 lockdep_assert_held(&ar->conf_mutex);
5100 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
5103 if (ar->num_stations >= ar->max_num_stations)
5111 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif,
5112 struct ieee80211_sta *sta)
5114 struct ath10k *ar = arvif->ar;
5116 lockdep_assert_held(&ar->conf_mutex);
5118 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls)
5124 struct ath10k_mac_tdls_iter_data {
5125 u32 num_tdls_stations;
5126 struct ieee80211_vif *curr_vif;
5129 static void ath10k_mac_tdls_vif_stations_count_iter(void *data,
5130 struct ieee80211_sta *sta)
5132 struct ath10k_mac_tdls_iter_data *iter_data = data;
5133 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5134 struct ieee80211_vif *sta_vif = arsta->arvif->vif;
5136 if (sta->tdls && sta_vif == iter_data->curr_vif)
5137 iter_data->num_tdls_stations++;
5140 static int ath10k_mac_tdls_vif_stations_count(struct ieee80211_hw *hw,
5141 struct ieee80211_vif *vif)
5143 struct ath10k_mac_tdls_iter_data data = {};
5145 data.curr_vif = vif;
5147 ieee80211_iterate_stations_atomic(hw,
5148 ath10k_mac_tdls_vif_stations_count_iter,
5150 return data.num_tdls_stations;
5153 static void ath10k_mac_tdls_vifs_count_iter(void *data, u8 *mac,
5154 struct ieee80211_vif *vif)
5156 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5157 int *num_tdls_vifs = data;
5159 if (vif->type != NL80211_IFTYPE_STATION)
5162 if (ath10k_mac_tdls_vif_stations_count(arvif->ar->hw, vif) > 0)
5166 static int ath10k_mac_tdls_vifs_count(struct ieee80211_hw *hw)
5168 int num_tdls_vifs = 0;
5170 ieee80211_iterate_active_interfaces_atomic(hw,
5171 IEEE80211_IFACE_ITER_NORMAL,
5172 ath10k_mac_tdls_vifs_count_iter,
5174 return num_tdls_vifs;
5177 static int ath10k_sta_state(struct ieee80211_hw *hw,
5178 struct ieee80211_vif *vif,
5179 struct ieee80211_sta *sta,
5180 enum ieee80211_sta_state old_state,
5181 enum ieee80211_sta_state new_state)
5183 struct ath10k *ar = hw->priv;
5184 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5185 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5188 if (old_state == IEEE80211_STA_NOTEXIST &&
5189 new_state == IEEE80211_STA_NONE) {
5190 memset(arsta, 0, sizeof(*arsta));
5191 arsta->arvif = arvif;
5192 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
5195 /* cancel must be done outside the mutex to avoid deadlock */
5196 if ((old_state == IEEE80211_STA_NONE &&
5197 new_state == IEEE80211_STA_NOTEXIST))
5198 cancel_work_sync(&arsta->update_wk);
5200 mutex_lock(&ar->conf_mutex);
5202 if (old_state == IEEE80211_STA_NOTEXIST &&
5203 new_state == IEEE80211_STA_NONE) {
5205 * New station addition.
5207 enum wmi_peer_type peer_type = WMI_PEER_TYPE_DEFAULT;
5208 u32 num_tdls_stations;
5211 ath10k_dbg(ar, ATH10K_DBG_MAC,
5212 "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
5213 arvif->vdev_id, sta->addr,
5214 ar->num_stations + 1, ar->max_num_stations,
5215 ar->num_peers + 1, ar->max_num_peers);
5217 ret = ath10k_mac_inc_num_stations(arvif, sta);
5219 ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n",
5220 ar->max_num_stations);
5225 peer_type = WMI_PEER_TYPE_TDLS;
5227 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr,
5230 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
5231 sta->addr, arvif->vdev_id, ret);
5232 ath10k_mac_dec_num_stations(arvif, sta);
5239 num_tdls_stations = ath10k_mac_tdls_vif_stations_count(hw, vif);
5240 num_tdls_vifs = ath10k_mac_tdls_vifs_count(hw);
5242 if (num_tdls_vifs >= ar->max_num_tdls_vdevs &&
5243 num_tdls_stations == 0) {
5244 ath10k_warn(ar, "vdev %i exceeded maximum number of tdls vdevs %i\n",
5245 arvif->vdev_id, ar->max_num_tdls_vdevs);
5246 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5247 ath10k_mac_dec_num_stations(arvif, sta);
5252 if (num_tdls_stations == 0) {
5253 /* This is the first tdls peer in current vif */
5254 enum wmi_tdls_state state = WMI_TDLS_ENABLE_ACTIVE;
5256 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5259 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
5260 arvif->vdev_id, ret);
5261 ath10k_peer_delete(ar, arvif->vdev_id,
5263 ath10k_mac_dec_num_stations(arvif, sta);
5268 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
5269 WMI_TDLS_PEER_STATE_PEERING);
5272 "failed to update tdls peer %pM for vdev %d when adding a new sta: %i\n",
5273 sta->addr, arvif->vdev_id, ret);
5274 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5275 ath10k_mac_dec_num_stations(arvif, sta);
5277 if (num_tdls_stations != 0)
5279 ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5282 } else if ((old_state == IEEE80211_STA_NONE &&
5283 new_state == IEEE80211_STA_NOTEXIST)) {
5285 * Existing station deletion.
5287 ath10k_dbg(ar, ATH10K_DBG_MAC,
5288 "mac vdev %d peer delete %pM (sta gone)\n",
5289 arvif->vdev_id, sta->addr);
5291 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5293 ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
5294 sta->addr, arvif->vdev_id, ret);
5296 ath10k_mac_dec_num_stations(arvif, sta);
5301 if (ath10k_mac_tdls_vif_stations_count(hw, vif))
5304 /* This was the last tdls peer in current vif */
5305 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id,
5308 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n",
5309 arvif->vdev_id, ret);
5311 } else if (old_state == IEEE80211_STA_AUTH &&
5312 new_state == IEEE80211_STA_ASSOC &&
5313 (vif->type == NL80211_IFTYPE_AP ||
5314 vif->type == NL80211_IFTYPE_ADHOC)) {
5318 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n",
5321 ret = ath10k_station_assoc(ar, vif, sta, false);
5323 ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
5324 sta->addr, arvif->vdev_id, ret);
5325 } else if (old_state == IEEE80211_STA_ASSOC &&
5326 new_state == IEEE80211_STA_AUTHORIZED &&
5329 * Tdls station authorized.
5331 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac tdls sta %pM authorized\n",
5334 ret = ath10k_station_assoc(ar, vif, sta, false);
5336 ath10k_warn(ar, "failed to associate tdls station %pM for vdev %i: %i\n",
5337 sta->addr, arvif->vdev_id, ret);
5341 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta,
5342 WMI_TDLS_PEER_STATE_CONNECTED);
5344 ath10k_warn(ar, "failed to update tdls peer %pM for vdev %i: %i\n",
5345 sta->addr, arvif->vdev_id, ret);
5346 } else if (old_state == IEEE80211_STA_ASSOC &&
5347 new_state == IEEE80211_STA_AUTH &&
5348 (vif->type == NL80211_IFTYPE_AP ||
5349 vif->type == NL80211_IFTYPE_ADHOC)) {
5353 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
5356 ret = ath10k_station_disassoc(ar, vif, sta);
5358 ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
5359 sta->addr, arvif->vdev_id, ret);
5362 mutex_unlock(&ar->conf_mutex);
5366 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
5367 u16 ac, bool enable)
5369 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5370 struct wmi_sta_uapsd_auto_trig_arg arg = {};
5371 u32 prio = 0, acc = 0;
5375 lockdep_assert_held(&ar->conf_mutex);
5377 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
5381 case IEEE80211_AC_VO:
5382 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
5383 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
5387 case IEEE80211_AC_VI:
5388 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
5389 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
5393 case IEEE80211_AC_BE:
5394 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
5395 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
5399 case IEEE80211_AC_BK:
5400 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
5401 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
5408 arvif->u.sta.uapsd |= value;
5410 arvif->u.sta.uapsd &= ~value;
5412 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5413 WMI_STA_PS_PARAM_UAPSD,
5414 arvif->u.sta.uapsd);
5416 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
5420 if (arvif->u.sta.uapsd)
5421 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
5423 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
5425 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
5426 WMI_STA_PS_PARAM_RX_WAKE_POLICY,
5429 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
5431 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif);
5433 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n",
5434 arvif->vdev_id, ret);
5438 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif);
5440 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n",
5441 arvif->vdev_id, ret);
5445 if (test_bit(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, ar->wmi.svc_map) ||
5446 test_bit(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, ar->wmi.svc_map)) {
5447 /* Only userspace can make an educated decision when to send
5448 * trigger frame. The following effectively disables u-UAPSD
5449 * autotrigger in firmware (which is enabled by default
5450 * provided the autotrigger service is available).
5454 arg.user_priority = prio;
5455 arg.service_interval = 0;
5456 arg.suspend_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
5457 arg.delay_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC;
5459 ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id,
5460 arvif->bssid, &arg, 1);
5462 ath10k_warn(ar, "failed to set uapsd auto trigger %d\n",
5472 static int ath10k_conf_tx(struct ieee80211_hw *hw,
5473 struct ieee80211_vif *vif, u16 ac,
5474 const struct ieee80211_tx_queue_params *params)
5476 struct ath10k *ar = hw->priv;
5477 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5478 struct wmi_wmm_params_arg *p = NULL;
5481 mutex_lock(&ar->conf_mutex);
5484 case IEEE80211_AC_VO:
5485 p = &arvif->wmm_params.ac_vo;
5487 case IEEE80211_AC_VI:
5488 p = &arvif->wmm_params.ac_vi;
5490 case IEEE80211_AC_BE:
5491 p = &arvif->wmm_params.ac_be;
5493 case IEEE80211_AC_BK:
5494 p = &arvif->wmm_params.ac_bk;
5503 p->cwmin = params->cw_min;
5504 p->cwmax = params->cw_max;
5505 p->aifs = params->aifs;
5508 * The channel time duration programmed in the HW is in absolute
5509 * microseconds, while mac80211 gives the txop in units of
5512 p->txop = params->txop * 32;
5514 if (ar->wmi.ops->gen_vdev_wmm_conf) {
5515 ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id,
5516 &arvif->wmm_params);
5518 ath10k_warn(ar, "failed to set vdev wmm params on vdev %i: %d\n",
5519 arvif->vdev_id, ret);
5523 /* This won't work well with multi-interface cases but it's
5524 * better than nothing.
5526 ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params);
5528 ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
5533 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
5535 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
5538 mutex_unlock(&ar->conf_mutex);
5542 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
5544 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
5545 struct ieee80211_vif *vif,
5546 struct ieee80211_channel *chan,
5548 enum ieee80211_roc_type type)
5550 struct ath10k *ar = hw->priv;
5551 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
5552 struct wmi_start_scan_arg arg;
5556 mutex_lock(&ar->conf_mutex);
5558 spin_lock_bh(&ar->data_lock);
5559 switch (ar->scan.state) {
5560 case ATH10K_SCAN_IDLE:
5561 reinit_completion(&ar->scan.started);
5562 reinit_completion(&ar->scan.completed);
5563 reinit_completion(&ar->scan.on_channel);
5564 ar->scan.state = ATH10K_SCAN_STARTING;
5565 ar->scan.is_roc = true;
5566 ar->scan.vdev_id = arvif->vdev_id;
5567 ar->scan.roc_freq = chan->center_freq;
5568 ar->scan.roc_notify = true;
5571 case ATH10K_SCAN_STARTING:
5572 case ATH10K_SCAN_RUNNING:
5573 case ATH10K_SCAN_ABORTING:
5577 spin_unlock_bh(&ar->data_lock);
5582 scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;
5584 memset(&arg, 0, sizeof(arg));
5585 ath10k_wmi_start_scan_init(ar, &arg);
5586 arg.vdev_id = arvif->vdev_id;
5587 arg.scan_id = ATH10K_SCAN_ID;
5589 arg.channels[0] = chan->center_freq;
5590 arg.dwell_time_active = scan_time_msec;
5591 arg.dwell_time_passive = scan_time_msec;
5592 arg.max_scan_time = scan_time_msec;
5593 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
5594 arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
5595 arg.burst_duration_ms = duration;
5597 ret = ath10k_start_scan(ar, &arg);
5599 ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
5600 spin_lock_bh(&ar->data_lock);
5601 ar->scan.state = ATH10K_SCAN_IDLE;
5602 spin_unlock_bh(&ar->data_lock);
5606 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
5608 ath10k_warn(ar, "failed to switch to channel for roc scan\n");
5610 ret = ath10k_scan_stop(ar);
5612 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
5618 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
5619 msecs_to_jiffies(duration));
5623 mutex_unlock(&ar->conf_mutex);
5627 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
5629 struct ath10k *ar = hw->priv;
5631 mutex_lock(&ar->conf_mutex);
5633 spin_lock_bh(&ar->data_lock);
5634 ar->scan.roc_notify = false;
5635 spin_unlock_bh(&ar->data_lock);
5637 ath10k_scan_abort(ar);
5639 mutex_unlock(&ar->conf_mutex);
5641 cancel_delayed_work_sync(&ar->scan.timeout);
5647 * Both RTS and Fragmentation threshold are interface-specific
5648 * in ath10k, but device-specific in mac80211.
5651 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
5653 struct ath10k *ar = hw->priv;
5654 struct ath10k_vif *arvif;
5657 mutex_lock(&ar->conf_mutex);
5658 list_for_each_entry(arvif, &ar->arvifs, list) {
5659 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
5660 arvif->vdev_id, value);
5662 ret = ath10k_mac_set_rts(arvif, value);
5664 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
5665 arvif->vdev_id, ret);
5669 mutex_unlock(&ar->conf_mutex);
5674 static int ath10k_mac_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
5676 /* Even though there's a WMI enum for fragmentation threshold no known
5677 * firmware actually implements it. Moreover it is not possible to rely
5678 * frame fragmentation to mac80211 because firmware clears the "more
5679 * fragments" bit in frame control making it impossible for remote
5680 * devices to reassemble frames.
5682 * Hence implement a dummy callback just to say fragmentation isn't
5683 * supported. This effectively prevents mac80211 from doing frame
5684 * fragmentation in software.
5689 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
5690 u32 queues, bool drop)
5692 struct ath10k *ar = hw->priv;
5696 /* mac80211 doesn't care if we really xmit queued frames or not
5697 * we'll collect those frames either way if we stop/delete vdevs */
5701 mutex_lock(&ar->conf_mutex);
5703 if (ar->state == ATH10K_STATE_WEDGED)
5706 time_left = wait_event_timeout(ar->htt.empty_tx_wq, ({
5709 spin_lock_bh(&ar->htt.tx_lock);
5710 empty = (ar->htt.num_pending_tx == 0);
5711 spin_unlock_bh(&ar->htt.tx_lock);
5713 skip = (ar->state == ATH10K_STATE_WEDGED) ||
5714 test_bit(ATH10K_FLAG_CRASH_FLUSH,
5718 }), ATH10K_FLUSH_TIMEOUT_HZ);
5720 if (time_left == 0 || skip)
5721 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %ld\n",
5722 skip, ar->state, time_left);
5725 mutex_unlock(&ar->conf_mutex);
5728 /* TODO: Implement this function properly
5729 * For now it is needed to reply to Probe Requests in IBSS mode.
5730 * Propably we need this information from FW.
5732 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
5737 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
5738 enum ieee80211_reconfig_type reconfig_type)
5740 struct ath10k *ar = hw->priv;
5742 if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
5745 mutex_lock(&ar->conf_mutex);
5747 /* If device failed to restart it will be in a different state, e.g.
5748 * ATH10K_STATE_WEDGED */
5749 if (ar->state == ATH10K_STATE_RESTARTED) {
5750 ath10k_info(ar, "device successfully recovered\n");
5751 ar->state = ATH10K_STATE_ON;
5752 ieee80211_wake_queues(ar->hw);
5755 mutex_unlock(&ar->conf_mutex);
5758 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
5759 struct survey_info *survey)
5761 struct ath10k *ar = hw->priv;
5762 struct ieee80211_supported_band *sband;
5763 struct survey_info *ar_survey = &ar->survey[idx];
5766 mutex_lock(&ar->conf_mutex);
5768 sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
5769 if (sband && idx >= sband->n_channels) {
5770 idx -= sband->n_channels;
5775 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
5777 if (!sband || idx >= sband->n_channels) {
5782 spin_lock_bh(&ar->data_lock);
5783 memcpy(survey, ar_survey, sizeof(*survey));
5784 spin_unlock_bh(&ar->data_lock);
5786 survey->channel = &sband->channels[idx];
5788 if (ar->rx_channel == survey->channel)
5789 survey->filled |= SURVEY_INFO_IN_USE;
5792 mutex_unlock(&ar->conf_mutex);
5797 ath10k_mac_bitrate_mask_has_single_rate(struct ath10k *ar,
5798 enum ieee80211_band band,
5799 const struct cfg80211_bitrate_mask *mask)
5804 num_rates += hweight32(mask->control[band].legacy);
5806 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++)
5807 num_rates += hweight8(mask->control[band].ht_mcs[i]);
5809 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++)
5810 num_rates += hweight16(mask->control[band].vht_mcs[i]);
5812 return num_rates == 1;
5816 ath10k_mac_bitrate_mask_get_single_nss(struct ath10k *ar,
5817 enum ieee80211_band band,
5818 const struct cfg80211_bitrate_mask *mask,
5821 struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
5822 u16 vht_mcs_map = le16_to_cpu(sband->vht_cap.vht_mcs.tx_mcs_map);
5824 u8 vht_nss_mask = 0;
5827 if (mask->control[band].legacy)
5830 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
5831 if (mask->control[band].ht_mcs[i] == 0)
5833 else if (mask->control[band].ht_mcs[i] ==
5834 sband->ht_cap.mcs.rx_mask[i])
5835 ht_nss_mask |= BIT(i);
5840 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
5841 if (mask->control[band].vht_mcs[i] == 0)
5843 else if (mask->control[band].vht_mcs[i] ==
5844 ath10k_mac_get_max_vht_mcs_map(vht_mcs_map, i))
5845 vht_nss_mask |= BIT(i);
5850 if (ht_nss_mask != vht_nss_mask)
5853 if (ht_nss_mask == 0)
5856 if (BIT(fls(ht_nss_mask)) - 1 != ht_nss_mask)
5859 *nss = fls(ht_nss_mask);
5865 ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
5866 enum ieee80211_band band,
5867 const struct cfg80211_bitrate_mask *mask,
5870 struct ieee80211_supported_band *sband = &ar->mac.sbands[band];
5877 if (hweight32(mask->control[band].legacy) == 1) {
5878 rate_idx = ffs(mask->control[band].legacy) - 1;
5880 hw_rate = sband->bitrates[rate_idx].hw_value;
5881 bitrate = sband->bitrates[rate_idx].bitrate;
5883 if (ath10k_mac_bitrate_is_cck(bitrate))
5884 preamble = WMI_RATE_PREAMBLE_CCK;
5886 preamble = WMI_RATE_PREAMBLE_OFDM;
5889 *rate = preamble << 6 |
5896 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) {
5897 if (hweight8(mask->control[band].ht_mcs[i]) == 1) {
5899 *rate = WMI_RATE_PREAMBLE_HT << 6 |
5901 (ffs(mask->control[band].ht_mcs[i]) - 1);
5907 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) {
5908 if (hweight16(mask->control[band].vht_mcs[i]) == 1) {
5910 *rate = WMI_RATE_PREAMBLE_VHT << 6 |
5912 (ffs(mask->control[band].vht_mcs[i]) - 1);
5921 static int ath10k_mac_set_fixed_rate_params(struct ath10k_vif *arvif,
5922 u8 rate, u8 nss, u8 sgi)
5924 struct ath10k *ar = arvif->ar;
5928 lockdep_assert_held(&ar->conf_mutex);
5930 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02hhx nss %hhu sgi %hhu\n",
5931 arvif->vdev_id, rate, nss, sgi);
5933 vdev_param = ar->wmi.vdev_param->fixed_rate;
5934 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate);
5936 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
5941 vdev_param = ar->wmi.vdev_param->nss;
5942 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, nss);
5944 ath10k_warn(ar, "failed to set nss param %d: %d\n", nss, ret);
5948 vdev_param = ar->wmi.vdev_param->sgi;
5949 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, sgi);
5951 ath10k_warn(ar, "failed to set sgi param %d: %d\n", sgi, ret);
5959 ath10k_mac_can_set_bitrate_mask(struct ath10k *ar,
5960 enum ieee80211_band band,
5961 const struct cfg80211_bitrate_mask *mask)
5966 /* Due to firmware limitation in WMI_PEER_ASSOC_CMDID it is impossible
5967 * to express all VHT MCS rate masks. Effectively only the following
5968 * ranges can be used: none, 0-7, 0-8 and 0-9.
5970 for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
5971 vht_mcs = mask->control[band].vht_mcs[i];
5980 ath10k_warn(ar, "refusing bitrate mask with missing 0-7 VHT MCS rates\n");
5988 static void ath10k_mac_set_bitrate_mask_iter(void *data,
5989 struct ieee80211_sta *sta)
5991 struct ath10k_vif *arvif = data;
5992 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
5993 struct ath10k *ar = arvif->ar;
5995 if (arsta->arvif != arvif)
5998 spin_lock_bh(&ar->data_lock);
5999 arsta->changed |= IEEE80211_RC_SUPP_RATES_CHANGED;
6000 spin_unlock_bh(&ar->data_lock);
6002 ieee80211_queue_work(ar->hw, &arsta->update_wk);
6005 static int ath10k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
6006 struct ieee80211_vif *vif,
6007 const struct cfg80211_bitrate_mask *mask)
6009 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6010 struct cfg80211_chan_def def;
6011 struct ath10k *ar = arvif->ar;
6012 enum ieee80211_band band;
6013 const u8 *ht_mcs_mask;
6014 const u16 *vht_mcs_mask;
6021 if (ath10k_mac_vif_chan(vif, &def))
6024 band = def.chan->band;
6025 ht_mcs_mask = mask->control[band].ht_mcs;
6026 vht_mcs_mask = mask->control[band].vht_mcs;
6028 sgi = mask->control[band].gi;
6029 if (sgi == NL80211_TXRATE_FORCE_LGI)
6032 if (ath10k_mac_bitrate_mask_has_single_rate(ar, band, mask)) {
6033 ret = ath10k_mac_bitrate_mask_get_single_rate(ar, band, mask,
6036 ath10k_warn(ar, "failed to get single rate for vdev %i: %d\n",
6037 arvif->vdev_id, ret);
6040 } else if (ath10k_mac_bitrate_mask_get_single_nss(ar, band, mask,
6042 rate = WMI_FIXED_RATE_NONE;
6045 rate = WMI_FIXED_RATE_NONE;
6046 nss = min(ar->num_rf_chains,
6047 max(ath10k_mac_max_ht_nss(ht_mcs_mask),
6048 ath10k_mac_max_vht_nss(vht_mcs_mask)));
6050 if (!ath10k_mac_can_set_bitrate_mask(ar, band, mask))
6053 mutex_lock(&ar->conf_mutex);
6055 arvif->bitrate_mask = *mask;
6056 ieee80211_iterate_stations_atomic(ar->hw,
6057 ath10k_mac_set_bitrate_mask_iter,
6060 mutex_unlock(&ar->conf_mutex);
6063 mutex_lock(&ar->conf_mutex);
6065 ret = ath10k_mac_set_fixed_rate_params(arvif, rate, nss, sgi);
6067 ath10k_warn(ar, "failed to set fixed rate params on vdev %i: %d\n",
6068 arvif->vdev_id, ret);
6073 mutex_unlock(&ar->conf_mutex);
6078 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
6079 struct ieee80211_vif *vif,
6080 struct ieee80211_sta *sta,
6083 struct ath10k *ar = hw->priv;
6084 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
6087 spin_lock_bh(&ar->data_lock);
6089 ath10k_dbg(ar, ATH10K_DBG_MAC,
6090 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
6091 sta->addr, changed, sta->bandwidth, sta->rx_nss,
6094 if (changed & IEEE80211_RC_BW_CHANGED) {
6095 bw = WMI_PEER_CHWIDTH_20MHZ;
6097 switch (sta->bandwidth) {
6098 case IEEE80211_STA_RX_BW_20:
6099 bw = WMI_PEER_CHWIDTH_20MHZ;
6101 case IEEE80211_STA_RX_BW_40:
6102 bw = WMI_PEER_CHWIDTH_40MHZ;
6104 case IEEE80211_STA_RX_BW_80:
6105 bw = WMI_PEER_CHWIDTH_80MHZ;
6107 case IEEE80211_STA_RX_BW_160:
6108 ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n",
6109 sta->bandwidth, sta->addr);
6110 bw = WMI_PEER_CHWIDTH_20MHZ;
6117 if (changed & IEEE80211_RC_NSS_CHANGED)
6118 arsta->nss = sta->rx_nss;
6120 if (changed & IEEE80211_RC_SMPS_CHANGED) {
6121 smps = WMI_PEER_SMPS_PS_NONE;
6123 switch (sta->smps_mode) {
6124 case IEEE80211_SMPS_AUTOMATIC:
6125 case IEEE80211_SMPS_OFF:
6126 smps = WMI_PEER_SMPS_PS_NONE;
6128 case IEEE80211_SMPS_STATIC:
6129 smps = WMI_PEER_SMPS_STATIC;
6131 case IEEE80211_SMPS_DYNAMIC:
6132 smps = WMI_PEER_SMPS_DYNAMIC;
6134 case IEEE80211_SMPS_NUM_MODES:
6135 ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
6136 sta->smps_mode, sta->addr);
6137 smps = WMI_PEER_SMPS_PS_NONE;
6144 arsta->changed |= changed;
6146 spin_unlock_bh(&ar->data_lock);
6148 ieee80211_queue_work(hw, &arsta->update_wk);
6151 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
6154 * FIXME: Return 0 for time being. Need to figure out whether FW
6155 * has the API to fetch 64-bit local TSF
6161 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
6162 struct ieee80211_vif *vif,
6163 enum ieee80211_ampdu_mlme_action action,
6164 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
6167 struct ath10k *ar = hw->priv;
6168 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6170 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
6171 arvif->vdev_id, sta->addr, tid, action);
6174 case IEEE80211_AMPDU_RX_START:
6175 case IEEE80211_AMPDU_RX_STOP:
6176 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
6177 * creation/removal. Do we need to verify this?
6180 case IEEE80211_AMPDU_TX_START:
6181 case IEEE80211_AMPDU_TX_STOP_CONT:
6182 case IEEE80211_AMPDU_TX_STOP_FLUSH:
6183 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
6184 case IEEE80211_AMPDU_TX_OPERATIONAL:
6185 /* Firmware offloads Tx aggregation entirely so deny mac80211
6186 * Tx aggregation requests.
6195 ath10k_mac_update_rx_channel(struct ath10k *ar,
6196 struct ieee80211_chanctx_conf *ctx,
6197 struct ieee80211_vif_chanctx_switch *vifs,
6200 struct cfg80211_chan_def *def = NULL;
6202 /* Both locks are required because ar->rx_channel is modified. This
6203 * allows readers to hold either lock.
6205 lockdep_assert_held(&ar->conf_mutex);
6206 lockdep_assert_held(&ar->data_lock);
6208 WARN_ON(ctx && vifs);
6209 WARN_ON(vifs && n_vifs != 1);
6211 /* FIXME: Sort of an optimization and a workaround. Peers and vifs are
6212 * on a linked list now. Doing a lookup peer -> vif -> chanctx for each
6213 * ppdu on Rx may reduce performance on low-end systems. It should be
6214 * possible to make tables/hashmaps to speed the lookup up (be vary of
6215 * cpu data cache lines though regarding sizes) but to keep the initial
6216 * implementation simple and less intrusive fallback to the slow lookup
6217 * only for multi-channel cases. Single-channel cases will remain to
6218 * use the old channel derival and thus performance should not be
6222 if (!ctx && ath10k_mac_num_chanctxs(ar) == 1) {
6223 ieee80211_iter_chan_contexts_atomic(ar->hw,
6224 ath10k_mac_get_any_chandef_iter,
6228 def = &vifs[0].new_ctx->def;
6230 ar->rx_channel = def->chan;
6231 } else if (ctx && ath10k_mac_num_chanctxs(ar) == 0) {
6232 ar->rx_channel = ctx->def.chan;
6234 ar->rx_channel = NULL;
6240 ath10k_mac_op_add_chanctx(struct ieee80211_hw *hw,
6241 struct ieee80211_chanctx_conf *ctx)
6243 struct ath10k *ar = hw->priv;
6245 ath10k_dbg(ar, ATH10K_DBG_MAC,
6246 "mac chanctx add freq %hu width %d ptr %p\n",
6247 ctx->def.chan->center_freq, ctx->def.width, ctx);
6249 mutex_lock(&ar->conf_mutex);
6251 spin_lock_bh(&ar->data_lock);
6252 ath10k_mac_update_rx_channel(ar, ctx, NULL, 0);
6253 spin_unlock_bh(&ar->data_lock);
6255 ath10k_recalc_radar_detection(ar);
6256 ath10k_monitor_recalc(ar);
6258 mutex_unlock(&ar->conf_mutex);
6264 ath10k_mac_op_remove_chanctx(struct ieee80211_hw *hw,
6265 struct ieee80211_chanctx_conf *ctx)
6267 struct ath10k *ar = hw->priv;
6269 ath10k_dbg(ar, ATH10K_DBG_MAC,
6270 "mac chanctx remove freq %hu width %d ptr %p\n",
6271 ctx->def.chan->center_freq, ctx->def.width, ctx);
6273 mutex_lock(&ar->conf_mutex);
6275 spin_lock_bh(&ar->data_lock);
6276 ath10k_mac_update_rx_channel(ar, NULL, NULL, 0);
6277 spin_unlock_bh(&ar->data_lock);
6279 ath10k_recalc_radar_detection(ar);
6280 ath10k_monitor_recalc(ar);
6282 mutex_unlock(&ar->conf_mutex);
6286 ath10k_mac_op_change_chanctx(struct ieee80211_hw *hw,
6287 struct ieee80211_chanctx_conf *ctx,
6290 struct ath10k *ar = hw->priv;
6292 mutex_lock(&ar->conf_mutex);
6294 ath10k_dbg(ar, ATH10K_DBG_MAC,
6295 "mac chanctx change freq %hu width %d ptr %p changed %x\n",
6296 ctx->def.chan->center_freq, ctx->def.width, ctx, changed);
6298 /* This shouldn't really happen because channel switching should use
6299 * switch_vif_chanctx().
6301 if (WARN_ON(changed & IEEE80211_CHANCTX_CHANGE_CHANNEL))
6304 ath10k_recalc_radar_detection(ar);
6306 /* FIXME: How to configure Rx chains properly? */
6308 /* No other actions are actually necessary. Firmware maintains channel
6309 * definitions per vdev internally and there's no host-side channel
6310 * context abstraction to configure, e.g. channel width.
6314 mutex_unlock(&ar->conf_mutex);
6318 ath10k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
6319 struct ieee80211_vif *vif,
6320 struct ieee80211_chanctx_conf *ctx)
6322 struct ath10k *ar = hw->priv;
6323 struct ath10k_vif *arvif = (void *)vif->drv_priv;
6326 mutex_lock(&ar->conf_mutex);
6328 ath10k_dbg(ar, ATH10K_DBG_MAC,
6329 "mac chanctx assign ptr %p vdev_id %i\n",
6330 ctx, arvif->vdev_id);
6332 if (WARN_ON(arvif->is_started)) {
6333 mutex_unlock(&ar->conf_mutex);
6337 ret = ath10k_vdev_start(arvif, &ctx->def);
6339 ath10k_warn(ar, "failed to start vdev %i addr %pM on freq %d: %d\n",
6340 arvif->vdev_id, vif->addr,
6341 ctx->def.chan->center_freq, ret);
6345 arvif->is_started = true;
6347 ret = ath10k_mac_vif_setup_ps(arvif);
6349 ath10k_warn(ar, "failed to update vdev %i ps: %d\n",
6350 arvif->vdev_id, ret);
6354 if (vif->type == NL80211_IFTYPE_MONITOR) {
6355 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, 0, vif->addr);
6357 ath10k_warn(ar, "failed to up monitor vdev %i: %d\n",
6358 arvif->vdev_id, ret);
6362 arvif->is_up = true;
6365 mutex_unlock(&ar->conf_mutex);
6369 ath10k_vdev_stop(arvif);
6370 arvif->is_started = false;
6371 ath10k_mac_vif_setup_ps(arvif);
6374 mutex_unlock(&ar->conf_mutex);
6379 ath10k_mac_op_unassign_vif_chanctx(struct ieee80211_hw *hw,
6380 struct ieee80211_vif *vif,
6381 struct ieee80211_chanctx_conf *ctx)
6383 struct ath10k *ar = hw->priv;
6384 struct ath10k_vif *arvif = (void *)vif->drv_priv;
6387 mutex_lock(&ar->conf_mutex);
6389 ath10k_dbg(ar, ATH10K_DBG_MAC,
6390 "mac chanctx unassign ptr %p vdev_id %i\n",
6391 ctx, arvif->vdev_id);
6393 WARN_ON(!arvif->is_started);
6395 if (vif->type == NL80211_IFTYPE_MONITOR) {
6396 WARN_ON(!arvif->is_up);
6398 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
6400 ath10k_warn(ar, "failed to down monitor vdev %i: %d\n",
6401 arvif->vdev_id, ret);
6403 arvif->is_up = false;
6406 ret = ath10k_vdev_stop(arvif);
6408 ath10k_warn(ar, "failed to stop vdev %i: %d\n",
6409 arvif->vdev_id, ret);
6411 arvif->is_started = false;
6413 mutex_unlock(&ar->conf_mutex);
6417 ath10k_mac_op_switch_vif_chanctx(struct ieee80211_hw *hw,
6418 struct ieee80211_vif_chanctx_switch *vifs,
6420 enum ieee80211_chanctx_switch_mode mode)
6422 struct ath10k *ar = hw->priv;
6423 struct ath10k_vif *arvif;
6427 mutex_lock(&ar->conf_mutex);
6429 ath10k_dbg(ar, ATH10K_DBG_MAC,
6430 "mac chanctx switch n_vifs %d mode %d\n",
6433 /* First stop monitor interface. Some FW versions crash if there's a
6434 * lone monitor interface.
6436 if (ar->monitor_started)
6437 ath10k_monitor_stop(ar);
6439 for (i = 0; i < n_vifs; i++) {
6440 arvif = ath10k_vif_to_arvif(vifs[i].vif);
6442 ath10k_dbg(ar, ATH10K_DBG_MAC,
6443 "mac chanctx switch vdev_id %i freq %hu->%hu width %d->%d\n",
6445 vifs[i].old_ctx->def.chan->center_freq,
6446 vifs[i].new_ctx->def.chan->center_freq,
6447 vifs[i].old_ctx->def.width,
6448 vifs[i].new_ctx->def.width);
6450 if (WARN_ON(!arvif->is_started))
6453 if (WARN_ON(!arvif->is_up))
6456 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
6458 ath10k_warn(ar, "failed to down vdev %d: %d\n",
6459 arvif->vdev_id, ret);
6464 /* All relevant vdevs are downed and associated channel resources
6465 * should be available for the channel switch now.
6468 spin_lock_bh(&ar->data_lock);
6469 ath10k_mac_update_rx_channel(ar, NULL, vifs, n_vifs);
6470 spin_unlock_bh(&ar->data_lock);
6472 for (i = 0; i < n_vifs; i++) {
6473 arvif = ath10k_vif_to_arvif(vifs[i].vif);
6475 if (WARN_ON(!arvif->is_started))
6478 if (WARN_ON(!arvif->is_up))
6481 ret = ath10k_mac_setup_bcn_tmpl(arvif);
6483 ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n",
6486 ret = ath10k_mac_setup_prb_tmpl(arvif);
6488 ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n",
6491 ret = ath10k_vdev_restart(arvif, &vifs[i].new_ctx->def);
6493 ath10k_warn(ar, "failed to restart vdev %d: %d\n",
6494 arvif->vdev_id, ret);
6498 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
6501 ath10k_warn(ar, "failed to bring vdev up %d: %d\n",
6502 arvif->vdev_id, ret);
6507 ath10k_monitor_recalc(ar);
6509 mutex_unlock(&ar->conf_mutex);
6513 static const struct ieee80211_ops ath10k_ops = {
6515 .start = ath10k_start,
6516 .stop = ath10k_stop,
6517 .config = ath10k_config,
6518 .add_interface = ath10k_add_interface,
6519 .remove_interface = ath10k_remove_interface,
6520 .configure_filter = ath10k_configure_filter,
6521 .bss_info_changed = ath10k_bss_info_changed,
6522 .hw_scan = ath10k_hw_scan,
6523 .cancel_hw_scan = ath10k_cancel_hw_scan,
6524 .set_key = ath10k_set_key,
6525 .set_default_unicast_key = ath10k_set_default_unicast_key,
6526 .sta_state = ath10k_sta_state,
6527 .conf_tx = ath10k_conf_tx,
6528 .remain_on_channel = ath10k_remain_on_channel,
6529 .cancel_remain_on_channel = ath10k_cancel_remain_on_channel,
6530 .set_rts_threshold = ath10k_set_rts_threshold,
6531 .set_frag_threshold = ath10k_mac_op_set_frag_threshold,
6532 .flush = ath10k_flush,
6533 .tx_last_beacon = ath10k_tx_last_beacon,
6534 .set_antenna = ath10k_set_antenna,
6535 .get_antenna = ath10k_get_antenna,
6536 .reconfig_complete = ath10k_reconfig_complete,
6537 .get_survey = ath10k_get_survey,
6538 .set_bitrate_mask = ath10k_mac_op_set_bitrate_mask,
6539 .sta_rc_update = ath10k_sta_rc_update,
6540 .get_tsf = ath10k_get_tsf,
6541 .ampdu_action = ath10k_ampdu_action,
6542 .get_et_sset_count = ath10k_debug_get_et_sset_count,
6543 .get_et_stats = ath10k_debug_get_et_stats,
6544 .get_et_strings = ath10k_debug_get_et_strings,
6545 .add_chanctx = ath10k_mac_op_add_chanctx,
6546 .remove_chanctx = ath10k_mac_op_remove_chanctx,
6547 .change_chanctx = ath10k_mac_op_change_chanctx,
6548 .assign_vif_chanctx = ath10k_mac_op_assign_vif_chanctx,
6549 .unassign_vif_chanctx = ath10k_mac_op_unassign_vif_chanctx,
6550 .switch_vif_chanctx = ath10k_mac_op_switch_vif_chanctx,
6552 CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
6555 .suspend = ath10k_wow_op_suspend,
6556 .resume = ath10k_wow_op_resume,
6558 #ifdef CONFIG_MAC80211_DEBUGFS
6559 .sta_add_debugfs = ath10k_sta_add_debugfs,
6563 #define CHAN2G(_channel, _freq, _flags) { \
6564 .band = IEEE80211_BAND_2GHZ, \
6565 .hw_value = (_channel), \
6566 .center_freq = (_freq), \
6567 .flags = (_flags), \
6568 .max_antenna_gain = 0, \
6572 #define CHAN5G(_channel, _freq, _flags) { \
6573 .band = IEEE80211_BAND_5GHZ, \
6574 .hw_value = (_channel), \
6575 .center_freq = (_freq), \
6576 .flags = (_flags), \
6577 .max_antenna_gain = 0, \
6581 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
6591 CHAN2G(10, 2457, 0),
6592 CHAN2G(11, 2462, 0),
6593 CHAN2G(12, 2467, 0),
6594 CHAN2G(13, 2472, 0),
6595 CHAN2G(14, 2484, 0),
6598 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
6599 CHAN5G(36, 5180, 0),
6600 CHAN5G(40, 5200, 0),
6601 CHAN5G(44, 5220, 0),
6602 CHAN5G(48, 5240, 0),
6603 CHAN5G(52, 5260, 0),
6604 CHAN5G(56, 5280, 0),
6605 CHAN5G(60, 5300, 0),
6606 CHAN5G(64, 5320, 0),
6607 CHAN5G(100, 5500, 0),
6608 CHAN5G(104, 5520, 0),
6609 CHAN5G(108, 5540, 0),
6610 CHAN5G(112, 5560, 0),
6611 CHAN5G(116, 5580, 0),
6612 CHAN5G(120, 5600, 0),
6613 CHAN5G(124, 5620, 0),
6614 CHAN5G(128, 5640, 0),
6615 CHAN5G(132, 5660, 0),
6616 CHAN5G(136, 5680, 0),
6617 CHAN5G(140, 5700, 0),
6618 CHAN5G(144, 5720, 0),
6619 CHAN5G(149, 5745, 0),
6620 CHAN5G(153, 5765, 0),
6621 CHAN5G(157, 5785, 0),
6622 CHAN5G(161, 5805, 0),
6623 CHAN5G(165, 5825, 0),
6626 struct ath10k *ath10k_mac_create(size_t priv_size)
6628 struct ieee80211_hw *hw;
6631 hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
6641 void ath10k_mac_destroy(struct ath10k *ar)
6643 ieee80211_free_hw(ar->hw);
6646 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
6649 .types = BIT(NL80211_IFTYPE_STATION)
6650 | BIT(NL80211_IFTYPE_P2P_CLIENT)
6654 .types = BIT(NL80211_IFTYPE_P2P_GO)
6658 .types = BIT(NL80211_IFTYPE_P2P_DEVICE)
6662 .types = BIT(NL80211_IFTYPE_AP)
6666 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
6669 .types = BIT(NL80211_IFTYPE_AP)
6673 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
6675 .limits = ath10k_if_limits,
6676 .n_limits = ARRAY_SIZE(ath10k_if_limits),
6677 .max_interfaces = 8,
6678 .num_different_channels = 1,
6679 .beacon_int_infra_match = true,
6683 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
6685 .limits = ath10k_10x_if_limits,
6686 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
6687 .max_interfaces = 8,
6688 .num_different_channels = 1,
6689 .beacon_int_infra_match = true,
6690 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
6691 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
6692 BIT(NL80211_CHAN_WIDTH_20) |
6693 BIT(NL80211_CHAN_WIDTH_40) |
6694 BIT(NL80211_CHAN_WIDTH_80),
6699 static const struct ieee80211_iface_limit ath10k_tlv_if_limit[] = {
6702 .types = BIT(NL80211_IFTYPE_STATION),
6706 .types = BIT(NL80211_IFTYPE_AP) |
6707 BIT(NL80211_IFTYPE_P2P_CLIENT) |
6708 BIT(NL80211_IFTYPE_P2P_GO),
6712 .types = BIT(NL80211_IFTYPE_P2P_DEVICE),
6716 static const struct ieee80211_iface_limit ath10k_tlv_qcs_if_limit[] = {
6719 .types = BIT(NL80211_IFTYPE_STATION),
6723 .types = BIT(NL80211_IFTYPE_P2P_CLIENT),
6727 .types = BIT(NL80211_IFTYPE_AP) |
6728 BIT(NL80211_IFTYPE_P2P_GO),
6732 .types = BIT(NL80211_IFTYPE_P2P_DEVICE),
6736 static const struct ieee80211_iface_limit ath10k_tlv_if_limit_ibss[] = {
6739 .types = BIT(NL80211_IFTYPE_STATION),
6743 .types = BIT(NL80211_IFTYPE_ADHOC),
6747 /* FIXME: This is not thouroughly tested. These combinations may over- or
6748 * underestimate hw/fw capabilities.
6750 static struct ieee80211_iface_combination ath10k_tlv_if_comb[] = {
6752 .limits = ath10k_tlv_if_limit,
6753 .num_different_channels = 1,
6754 .max_interfaces = 4,
6755 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
6758 .limits = ath10k_tlv_if_limit_ibss,
6759 .num_different_channels = 1,
6760 .max_interfaces = 2,
6761 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
6765 static struct ieee80211_iface_combination ath10k_tlv_qcs_if_comb[] = {
6767 .limits = ath10k_tlv_if_limit,
6768 .num_different_channels = 1,
6769 .max_interfaces = 4,
6770 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit),
6773 .limits = ath10k_tlv_qcs_if_limit,
6774 .num_different_channels = 2,
6775 .max_interfaces = 4,
6776 .n_limits = ARRAY_SIZE(ath10k_tlv_qcs_if_limit),
6779 .limits = ath10k_tlv_if_limit_ibss,
6780 .num_different_channels = 1,
6781 .max_interfaces = 2,
6782 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss),
6786 static const struct ieee80211_iface_limit ath10k_10_4_if_limits[] = {
6789 .types = BIT(NL80211_IFTYPE_STATION),
6793 .types = BIT(NL80211_IFTYPE_AP)
6797 static const struct ieee80211_iface_combination ath10k_10_4_if_comb[] = {
6799 .limits = ath10k_10_4_if_limits,
6800 .n_limits = ARRAY_SIZE(ath10k_10_4_if_limits),
6801 .max_interfaces = 16,
6802 .num_different_channels = 1,
6803 .beacon_int_infra_match = true,
6804 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
6805 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
6806 BIT(NL80211_CHAN_WIDTH_20) |
6807 BIT(NL80211_CHAN_WIDTH_40) |
6808 BIT(NL80211_CHAN_WIDTH_80),
6813 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
6815 struct ieee80211_sta_vht_cap vht_cap = {0};
6820 vht_cap.vht_supported = 1;
6821 vht_cap.cap = ar->vht_cap_info;
6823 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
6824 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) {
6825 val = ath10k_mac_get_vht_cap_bf_sts(ar);
6826 val <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
6827 val &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
6832 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
6833 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) {
6834 val = ar->num_rf_chains - 1;
6835 val <<= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT;
6836 val &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK;
6842 for (i = 0; i < 8; i++) {
6843 if (i < ar->num_rf_chains)
6844 mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2);
6846 mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2);
6849 vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
6850 vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
6855 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
6858 struct ieee80211_sta_ht_cap ht_cap = {0};
6860 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
6863 ht_cap.ht_supported = 1;
6864 ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
6865 ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
6866 ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
6867 ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
6868 ht_cap.cap |= WLAN_HT_CAP_SM_PS_STATIC << IEEE80211_HT_CAP_SM_PS_SHIFT;
6870 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
6871 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
6873 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
6874 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
6876 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
6879 smps = WLAN_HT_CAP_SM_PS_DYNAMIC;
6880 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
6885 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
6886 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
6888 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
6891 stbc = ar->ht_cap_info;
6892 stbc &= WMI_HT_CAP_RX_STBC;
6893 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
6894 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
6895 stbc &= IEEE80211_HT_CAP_RX_STBC;
6900 if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
6901 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
6903 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
6904 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
6906 /* max AMSDU is implicitly taken from vht_cap_info */
6907 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
6908 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
6910 for (i = 0; i < ar->num_rf_chains; i++)
6911 ht_cap.mcs.rx_mask[i] = 0xFF;
6913 ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
6918 static void ath10k_get_arvif_iter(void *data, u8 *mac,
6919 struct ieee80211_vif *vif)
6921 struct ath10k_vif_iter *arvif_iter = data;
6922 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
6924 if (arvif->vdev_id == arvif_iter->vdev_id)
6925 arvif_iter->arvif = arvif;
6928 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
6930 struct ath10k_vif_iter arvif_iter;
6933 memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
6934 arvif_iter.vdev_id = vdev_id;
6936 flags = IEEE80211_IFACE_ITER_RESUME_ALL;
6937 ieee80211_iterate_active_interfaces_atomic(ar->hw,
6939 ath10k_get_arvif_iter,
6941 if (!arvif_iter.arvif) {
6942 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
6946 return arvif_iter.arvif;
6949 int ath10k_mac_register(struct ath10k *ar)
6951 static const u32 cipher_suites[] = {
6952 WLAN_CIPHER_SUITE_WEP40,
6953 WLAN_CIPHER_SUITE_WEP104,
6954 WLAN_CIPHER_SUITE_TKIP,
6955 WLAN_CIPHER_SUITE_CCMP,
6956 WLAN_CIPHER_SUITE_AES_CMAC,
6958 struct ieee80211_supported_band *band;
6959 struct ieee80211_sta_vht_cap vht_cap;
6960 struct ieee80211_sta_ht_cap ht_cap;
6964 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
6966 SET_IEEE80211_DEV(ar->hw, ar->dev);
6968 ht_cap = ath10k_get_ht_cap(ar);
6969 vht_cap = ath10k_create_vht_cap(ar);
6971 BUILD_BUG_ON((ARRAY_SIZE(ath10k_2ghz_channels) +
6972 ARRAY_SIZE(ath10k_5ghz_channels)) !=
6975 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
6976 channels = kmemdup(ath10k_2ghz_channels,
6977 sizeof(ath10k_2ghz_channels),
6984 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
6985 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
6986 band->channels = channels;
6987 band->n_bitrates = ath10k_g_rates_size;
6988 band->bitrates = ath10k_g_rates;
6989 band->ht_cap = ht_cap;
6991 /* Enable the VHT support at 2.4 GHz */
6992 band->vht_cap = vht_cap;
6994 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
6997 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
6998 channels = kmemdup(ath10k_5ghz_channels,
6999 sizeof(ath10k_5ghz_channels),
7006 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
7007 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
7008 band->channels = channels;
7009 band->n_bitrates = ath10k_a_rates_size;
7010 band->bitrates = ath10k_a_rates;
7011 band->ht_cap = ht_cap;
7012 band->vht_cap = vht_cap;
7013 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
7016 ar->hw->wiphy->interface_modes =
7017 BIT(NL80211_IFTYPE_STATION) |
7018 BIT(NL80211_IFTYPE_AP);
7020 ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask;
7021 ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask;
7023 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
7024 ar->hw->wiphy->interface_modes |=
7025 BIT(NL80211_IFTYPE_P2P_DEVICE) |
7026 BIT(NL80211_IFTYPE_P2P_CLIENT) |
7027 BIT(NL80211_IFTYPE_P2P_GO);
7029 ieee80211_hw_set(ar->hw, SIGNAL_DBM);
7030 ieee80211_hw_set(ar->hw, SUPPORTS_PS);
7031 ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS);
7032 ieee80211_hw_set(ar->hw, MFP_CAPABLE);
7033 ieee80211_hw_set(ar->hw, REPORTS_TX_ACK_STATUS);
7034 ieee80211_hw_set(ar->hw, HAS_RATE_CONTROL);
7035 ieee80211_hw_set(ar->hw, AP_LINK_PS);
7036 ieee80211_hw_set(ar->hw, SPECTRUM_MGMT);
7037 ieee80211_hw_set(ar->hw, SUPPORT_FAST_XMIT);
7038 ieee80211_hw_set(ar->hw, CONNECTION_MONITOR);
7039 ieee80211_hw_set(ar->hw, SUPPORTS_PER_STA_GTK);
7040 ieee80211_hw_set(ar->hw, WANT_MONITOR_VIF);
7041 ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
7042 ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
7044 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
7045 ieee80211_hw_set(ar->hw, SW_CRYPTO_CONTROL);
7047 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
7048 ar->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
7050 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
7051 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
7053 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
7054 ieee80211_hw_set(ar->hw, AMPDU_AGGREGATION);
7055 ieee80211_hw_set(ar->hw, TX_AMPDU_SETUP_IN_HW);
7058 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
7059 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
7061 ar->hw->vif_data_size = sizeof(struct ath10k_vif);
7062 ar->hw->sta_data_size = sizeof(struct ath10k_sta);
7064 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
7066 if (test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) {
7067 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
7069 /* Firmware delivers WPS/P2P Probe Requests frames to driver so
7070 * that userspace (e.g. wpa_supplicant/hostapd) can generate
7071 * correct Probe Responses. This is more of a hack advert..
7073 ar->hw->wiphy->probe_resp_offload |=
7074 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS |
7075 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 |
7076 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P;
7079 if (test_bit(WMI_SERVICE_TDLS, ar->wmi.svc_map))
7080 ar->hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
7082 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
7083 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
7084 ar->hw->wiphy->max_remain_on_channel_duration = 5000;
7086 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
7087 ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
7089 ar->hw->wiphy->max_ap_assoc_sta = ar->max_num_stations;
7091 ret = ath10k_wow_init(ar);
7093 ath10k_warn(ar, "failed to init wow: %d\n", ret);
7097 wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
7100 * on LL hardware queues are managed entirely by the FW
7101 * so we only advertise to mac we can do the queues thing
7103 ar->hw->queues = IEEE80211_MAX_QUEUES;
7105 /* vdev_ids are used as hw queue numbers. Make sure offchan tx queue is
7106 * something that vdev_ids can't reach so that we don't stop the queue
7109 ar->hw->offchannel_tx_hw_queue = IEEE80211_MAX_QUEUES - 1;
7111 switch (ar->wmi.op_version) {
7112 case ATH10K_FW_WMI_OP_VERSION_MAIN:
7113 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
7114 ar->hw->wiphy->n_iface_combinations =
7115 ARRAY_SIZE(ath10k_if_comb);
7116 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
7118 case ATH10K_FW_WMI_OP_VERSION_TLV:
7119 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) {
7120 ar->hw->wiphy->iface_combinations =
7121 ath10k_tlv_qcs_if_comb;
7122 ar->hw->wiphy->n_iface_combinations =
7123 ARRAY_SIZE(ath10k_tlv_qcs_if_comb);
7125 ar->hw->wiphy->iface_combinations = ath10k_tlv_if_comb;
7126 ar->hw->wiphy->n_iface_combinations =
7127 ARRAY_SIZE(ath10k_tlv_if_comb);
7129 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
7131 case ATH10K_FW_WMI_OP_VERSION_10_1:
7132 case ATH10K_FW_WMI_OP_VERSION_10_2:
7133 case ATH10K_FW_WMI_OP_VERSION_10_2_4:
7134 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
7135 ar->hw->wiphy->n_iface_combinations =
7136 ARRAY_SIZE(ath10k_10x_if_comb);
7138 case ATH10K_FW_WMI_OP_VERSION_10_4:
7139 ar->hw->wiphy->iface_combinations = ath10k_10_4_if_comb;
7140 ar->hw->wiphy->n_iface_combinations =
7141 ARRAY_SIZE(ath10k_10_4_if_comb);
7143 case ATH10K_FW_WMI_OP_VERSION_UNSET:
7144 case ATH10K_FW_WMI_OP_VERSION_MAX:
7150 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
7151 ar->hw->netdev_features = NETIF_F_HW_CSUM;
7153 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
7154 /* Init ath dfs pattern detector */
7155 ar->ath_common.debug_mask = ATH_DBG_DFS;
7156 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
7159 if (!ar->dfs_detector)
7160 ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
7163 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
7164 ath10k_reg_notifier);
7166 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
7170 ar->hw->wiphy->cipher_suites = cipher_suites;
7171 ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
7173 ret = ieee80211_register_hw(ar->hw);
7175 ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
7179 if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
7180 ret = regulatory_hint(ar->hw->wiphy,
7181 ar->ath_common.regulatory.alpha2);
7183 goto err_unregister;
7189 ieee80211_unregister_hw(ar->hw);
7191 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
7192 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
7197 void ath10k_mac_unregister(struct ath10k *ar)
7199 ieee80211_unregister_hw(ar->hw);
7201 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
7202 ar->dfs_detector->exit(ar->dfs_detector);
7204 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
7205 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
7207 SET_IEEE80211_DEV(ar->hw, NULL);