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>
35 static int ath10k_send_key(struct ath10k_vif *arvif,
36 struct ieee80211_key_conf *key,
40 struct ath10k *ar = arvif->ar;
41 struct wmi_vdev_install_key_arg arg = {
42 .vdev_id = arvif->vdev_id,
43 .key_idx = key->keyidx,
44 .key_len = key->keylen,
49 lockdep_assert_held(&arvif->ar->conf_mutex);
51 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
52 arg.key_flags = WMI_KEY_PAIRWISE;
54 arg.key_flags = WMI_KEY_GROUP;
56 switch (key->cipher) {
57 case WLAN_CIPHER_SUITE_CCMP:
58 arg.key_cipher = WMI_CIPHER_AES_CCM;
59 if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
60 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
62 key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
64 case WLAN_CIPHER_SUITE_TKIP:
65 arg.key_cipher = WMI_CIPHER_TKIP;
66 arg.key_txmic_len = 8;
67 arg.key_rxmic_len = 8;
69 case WLAN_CIPHER_SUITE_WEP40:
70 case WLAN_CIPHER_SUITE_WEP104:
71 arg.key_cipher = WMI_CIPHER_WEP;
72 /* AP/IBSS mode requires self-key to be groupwise
73 * Otherwise pairwise key must be set */
74 if (memcmp(macaddr, arvif->vif->addr, ETH_ALEN))
75 arg.key_flags = WMI_KEY_PAIRWISE;
78 ath10k_warn(ar, "cipher %d is not supported\n", key->cipher);
82 if (cmd == DISABLE_KEY) {
83 arg.key_cipher = WMI_CIPHER_NONE;
87 return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
90 static int ath10k_install_key(struct ath10k_vif *arvif,
91 struct ieee80211_key_conf *key,
95 struct ath10k *ar = arvif->ar;
98 lockdep_assert_held(&ar->conf_mutex);
100 reinit_completion(&ar->install_key_done);
102 ret = ath10k_send_key(arvif, key, cmd, macaddr);
106 ret = wait_for_completion_timeout(&ar->install_key_done, 3*HZ);
113 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
116 struct ath10k *ar = arvif->ar;
117 struct ath10k_peer *peer;
121 lockdep_assert_held(&ar->conf_mutex);
123 spin_lock_bh(&ar->data_lock);
124 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
125 spin_unlock_bh(&ar->data_lock);
130 for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
131 if (arvif->wep_keys[i] == NULL)
134 ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY,
139 peer->keys[i] = arvif->wep_keys[i];
145 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
148 struct ath10k *ar = arvif->ar;
149 struct ath10k_peer *peer;
154 lockdep_assert_held(&ar->conf_mutex);
156 spin_lock_bh(&ar->data_lock);
157 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
158 spin_unlock_bh(&ar->data_lock);
163 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
164 if (peer->keys[i] == NULL)
167 ret = ath10k_install_key(arvif, peer->keys[i],
169 if (ret && first_errno == 0)
173 ath10k_warn(ar, "failed to remove peer wep key %d: %d\n",
176 peer->keys[i] = NULL;
182 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
183 struct ieee80211_key_conf *key)
185 struct ath10k *ar = arvif->ar;
186 struct ath10k_peer *peer;
192 lockdep_assert_held(&ar->conf_mutex);
195 /* since ath10k_install_key we can't hold data_lock all the
196 * time, so we try to remove the keys incrementally */
197 spin_lock_bh(&ar->data_lock);
199 list_for_each_entry(peer, &ar->peers, list) {
200 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
201 if (peer->keys[i] == key) {
202 ether_addr_copy(addr, peer->addr);
203 peer->keys[i] = NULL;
208 if (i < ARRAY_SIZE(peer->keys))
211 spin_unlock_bh(&ar->data_lock);
213 if (i == ARRAY_SIZE(peer->keys))
216 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr);
217 if (ret && first_errno == 0)
221 ath10k_warn(ar, "failed to remove key for %pM: %d\n",
228 /*********************/
229 /* General utilities */
230 /*********************/
232 static inline enum wmi_phy_mode
233 chan_to_phymode(const struct cfg80211_chan_def *chandef)
235 enum wmi_phy_mode phymode = MODE_UNKNOWN;
237 switch (chandef->chan->band) {
238 case IEEE80211_BAND_2GHZ:
239 switch (chandef->width) {
240 case NL80211_CHAN_WIDTH_20_NOHT:
243 case NL80211_CHAN_WIDTH_20:
244 phymode = MODE_11NG_HT20;
246 case NL80211_CHAN_WIDTH_40:
247 phymode = MODE_11NG_HT40;
249 case NL80211_CHAN_WIDTH_5:
250 case NL80211_CHAN_WIDTH_10:
251 case NL80211_CHAN_WIDTH_80:
252 case NL80211_CHAN_WIDTH_80P80:
253 case NL80211_CHAN_WIDTH_160:
254 phymode = MODE_UNKNOWN;
258 case IEEE80211_BAND_5GHZ:
259 switch (chandef->width) {
260 case NL80211_CHAN_WIDTH_20_NOHT:
263 case NL80211_CHAN_WIDTH_20:
264 phymode = MODE_11NA_HT20;
266 case NL80211_CHAN_WIDTH_40:
267 phymode = MODE_11NA_HT40;
269 case NL80211_CHAN_WIDTH_80:
270 phymode = MODE_11AC_VHT80;
272 case NL80211_CHAN_WIDTH_5:
273 case NL80211_CHAN_WIDTH_10:
274 case NL80211_CHAN_WIDTH_80P80:
275 case NL80211_CHAN_WIDTH_160:
276 phymode = MODE_UNKNOWN;
284 WARN_ON(phymode == MODE_UNKNOWN);
288 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
291 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
292 * 0 for no restriction
301 switch (mpdudensity) {
307 /* Our lower layer calculations limit our precision to
323 static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr)
327 lockdep_assert_held(&ar->conf_mutex);
329 ret = ath10k_wmi_peer_create(ar, vdev_id, addr);
331 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n",
336 ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
338 ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n",
342 spin_lock_bh(&ar->data_lock);
344 spin_unlock_bh(&ar->data_lock);
349 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
351 struct ath10k *ar = arvif->ar;
355 param = ar->wmi.pdev_param->sta_kickout_th;
356 ret = ath10k_wmi_pdev_set_param(ar, param,
357 ATH10K_KICKOUT_THRESHOLD);
359 ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n",
360 arvif->vdev_id, ret);
364 param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
365 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
366 ATH10K_KEEPALIVE_MIN_IDLE);
368 ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n",
369 arvif->vdev_id, ret);
373 param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
374 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
375 ATH10K_KEEPALIVE_MAX_IDLE);
377 ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n",
378 arvif->vdev_id, ret);
382 param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
383 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
384 ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
386 ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
387 arvif->vdev_id, ret);
394 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
396 struct ath10k *ar = arvif->ar;
399 if (value != 0xFFFFFFFF)
400 value = min_t(u32, arvif->ar->hw->wiphy->rts_threshold,
403 vdev_param = ar->wmi.vdev_param->rts_threshold;
404 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
407 static int ath10k_mac_set_frag(struct ath10k_vif *arvif, u32 value)
409 struct ath10k *ar = arvif->ar;
412 if (value != 0xFFFFFFFF)
413 value = clamp_t(u32, arvif->ar->hw->wiphy->frag_threshold,
414 ATH10K_FRAGMT_THRESHOLD_MIN,
415 ATH10K_FRAGMT_THRESHOLD_MAX);
417 vdev_param = ar->wmi.vdev_param->fragmentation_threshold;
418 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
421 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
425 lockdep_assert_held(&ar->conf_mutex);
427 ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
431 ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
435 spin_lock_bh(&ar->data_lock);
437 spin_unlock_bh(&ar->data_lock);
442 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
444 struct ath10k_peer *peer, *tmp;
446 lockdep_assert_held(&ar->conf_mutex);
448 spin_lock_bh(&ar->data_lock);
449 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
450 if (peer->vdev_id != vdev_id)
453 ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n",
454 peer->addr, vdev_id);
456 list_del(&peer->list);
460 spin_unlock_bh(&ar->data_lock);
463 static void ath10k_peer_cleanup_all(struct ath10k *ar)
465 struct ath10k_peer *peer, *tmp;
467 lockdep_assert_held(&ar->conf_mutex);
469 spin_lock_bh(&ar->data_lock);
470 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
471 list_del(&peer->list);
475 spin_unlock_bh(&ar->data_lock);
478 /************************/
479 /* Interface management */
480 /************************/
482 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif)
484 struct ath10k *ar = arvif->ar;
486 lockdep_assert_held(&ar->data_lock);
491 if (!arvif->beacon_buf)
492 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr,
493 arvif->beacon->len, DMA_TO_DEVICE);
495 dev_kfree_skb_any(arvif->beacon);
497 arvif->beacon = NULL;
498 arvif->beacon_sent = false;
501 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
503 struct ath10k *ar = arvif->ar;
505 lockdep_assert_held(&ar->data_lock);
507 ath10k_mac_vif_beacon_free(arvif);
509 if (arvif->beacon_buf) {
510 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
511 arvif->beacon_buf, arvif->beacon_paddr);
512 arvif->beacon_buf = NULL;
516 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
520 lockdep_assert_held(&ar->conf_mutex);
522 ret = wait_for_completion_timeout(&ar->vdev_setup_done,
523 ATH10K_VDEV_SETUP_TIMEOUT_HZ);
530 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
532 struct cfg80211_chan_def *chandef = &ar->chandef;
533 struct ieee80211_channel *channel = chandef->chan;
534 struct wmi_vdev_start_request_arg arg = {};
537 lockdep_assert_held(&ar->conf_mutex);
539 arg.vdev_id = vdev_id;
540 arg.channel.freq = channel->center_freq;
541 arg.channel.band_center_freq1 = chandef->center_freq1;
543 /* TODO setup this dynamically, what in case we
544 don't have any vifs? */
545 arg.channel.mode = chan_to_phymode(chandef);
546 arg.channel.chan_radar =
547 !!(channel->flags & IEEE80211_CHAN_RADAR);
549 arg.channel.min_power = 0;
550 arg.channel.max_power = channel->max_power * 2;
551 arg.channel.max_reg_power = channel->max_reg_power * 2;
552 arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
554 ret = ath10k_wmi_vdev_start(ar, &arg);
556 ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n",
561 ret = ath10k_vdev_setup_sync(ar);
563 ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i: %d\n",
568 ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
570 ath10k_warn(ar, "failed to put up monitor vdev %i: %d\n",
575 ar->monitor_vdev_id = vdev_id;
577 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i started\n",
578 ar->monitor_vdev_id);
582 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
584 ath10k_warn(ar, "failed to stop monitor vdev %i after start failure: %d\n",
585 ar->monitor_vdev_id, ret);
590 static int ath10k_monitor_vdev_stop(struct ath10k *ar)
594 lockdep_assert_held(&ar->conf_mutex);
596 ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id);
598 ath10k_warn(ar, "failed to put down monitor vdev %i: %d\n",
599 ar->monitor_vdev_id, ret);
601 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
603 ath10k_warn(ar, "failed to to request monitor vdev %i stop: %d\n",
604 ar->monitor_vdev_id, ret);
606 ret = ath10k_vdev_setup_sync(ar);
608 ath10k_warn(ar, "failed to synchronise monitor vdev %i: %d\n",
609 ar->monitor_vdev_id, ret);
611 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n",
612 ar->monitor_vdev_id);
616 static int ath10k_monitor_vdev_create(struct ath10k *ar)
620 lockdep_assert_held(&ar->conf_mutex);
622 if (ar->free_vdev_map == 0) {
623 ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n");
627 bit = __ffs64(ar->free_vdev_map);
629 ar->monitor_vdev_id = bit;
631 ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
632 WMI_VDEV_TYPE_MONITOR,
635 ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n",
636 ar->monitor_vdev_id, ret);
640 ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id);
641 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
642 ar->monitor_vdev_id);
647 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
651 lockdep_assert_held(&ar->conf_mutex);
653 ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
655 ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n",
656 ar->monitor_vdev_id, ret);
660 ar->free_vdev_map |= 1LL << ar->monitor_vdev_id;
662 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
663 ar->monitor_vdev_id);
667 static int ath10k_monitor_start(struct ath10k *ar)
671 lockdep_assert_held(&ar->conf_mutex);
673 ret = ath10k_monitor_vdev_create(ar);
675 ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret);
679 ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
681 ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret);
682 ath10k_monitor_vdev_delete(ar);
686 ar->monitor_started = true;
687 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n");
692 static int ath10k_monitor_stop(struct ath10k *ar)
696 lockdep_assert_held(&ar->conf_mutex);
698 ret = ath10k_monitor_vdev_stop(ar);
700 ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret);
704 ret = ath10k_monitor_vdev_delete(ar);
706 ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret);
710 ar->monitor_started = false;
711 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n");
716 static int ath10k_monitor_recalc(struct ath10k *ar)
720 lockdep_assert_held(&ar->conf_mutex);
722 should_start = ar->monitor ||
723 ar->filter_flags & FIF_PROMISC_IN_BSS ||
724 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
726 ath10k_dbg(ar, ATH10K_DBG_MAC,
727 "mac monitor recalc started? %d should? %d\n",
728 ar->monitor_started, should_start);
730 if (should_start == ar->monitor_started)
734 return ath10k_monitor_start(ar);
736 return ath10k_monitor_stop(ar);
739 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
741 struct ath10k *ar = arvif->ar;
742 u32 vdev_param, rts_cts = 0;
744 lockdep_assert_held(&ar->conf_mutex);
746 vdev_param = ar->wmi.vdev_param->enable_rtscts;
748 if (arvif->use_cts_prot || arvif->num_legacy_stations > 0)
749 rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
751 if (arvif->num_legacy_stations > 0)
752 rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
755 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
759 static int ath10k_start_cac(struct ath10k *ar)
763 lockdep_assert_held(&ar->conf_mutex);
765 set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
767 ret = ath10k_monitor_recalc(ar);
769 ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret);
770 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
774 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
775 ar->monitor_vdev_id);
780 static int ath10k_stop_cac(struct ath10k *ar)
782 lockdep_assert_held(&ar->conf_mutex);
784 /* CAC is not running - do nothing */
785 if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
788 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
789 ath10k_monitor_stop(ar);
791 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n");
796 static void ath10k_recalc_radar_detection(struct ath10k *ar)
800 lockdep_assert_held(&ar->conf_mutex);
804 if (!ar->radar_enabled)
807 if (ar->num_started_vdevs > 0)
810 ret = ath10k_start_cac(ar);
813 * Not possible to start CAC on current channel so starting
814 * radiation is not allowed, make this channel DFS_UNAVAILABLE
815 * by indicating that radar was detected.
817 ath10k_warn(ar, "failed to start CAC: %d\n", ret);
818 ieee80211_radar_detected(ar->hw);
822 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif, bool restart)
824 struct ath10k *ar = arvif->ar;
825 struct cfg80211_chan_def *chandef = &ar->chandef;
826 struct wmi_vdev_start_request_arg arg = {};
829 lockdep_assert_held(&ar->conf_mutex);
831 reinit_completion(&ar->vdev_setup_done);
833 arg.vdev_id = arvif->vdev_id;
834 arg.dtim_period = arvif->dtim_period;
835 arg.bcn_intval = arvif->beacon_interval;
837 arg.channel.freq = chandef->chan->center_freq;
838 arg.channel.band_center_freq1 = chandef->center_freq1;
839 arg.channel.mode = chan_to_phymode(chandef);
841 arg.channel.min_power = 0;
842 arg.channel.max_power = chandef->chan->max_power * 2;
843 arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
844 arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
846 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
847 arg.ssid = arvif->u.ap.ssid;
848 arg.ssid_len = arvif->u.ap.ssid_len;
849 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
851 /* For now allow DFS for AP mode */
852 arg.channel.chan_radar =
853 !!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
854 } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
855 arg.ssid = arvif->vif->bss_conf.ssid;
856 arg.ssid_len = arvif->vif->bss_conf.ssid_len;
859 ath10k_dbg(ar, ATH10K_DBG_MAC,
860 "mac vdev %d start center_freq %d phymode %s\n",
861 arg.vdev_id, arg.channel.freq,
862 ath10k_wmi_phymode_str(arg.channel.mode));
865 ret = ath10k_wmi_vdev_restart(ar, &arg);
867 ret = ath10k_wmi_vdev_start(ar, &arg);
870 ath10k_warn(ar, "failed to start WMI vdev %i: %d\n",
875 ret = ath10k_vdev_setup_sync(ar);
877 ath10k_warn(ar, "failed to synchronise setup for vdev %i: %d\n",
882 ar->num_started_vdevs++;
883 ath10k_recalc_radar_detection(ar);
888 static int ath10k_vdev_start(struct ath10k_vif *arvif)
890 return ath10k_vdev_start_restart(arvif, false);
893 static int ath10k_vdev_restart(struct ath10k_vif *arvif)
895 return ath10k_vdev_start_restart(arvif, true);
898 static int ath10k_vdev_stop(struct ath10k_vif *arvif)
900 struct ath10k *ar = arvif->ar;
903 lockdep_assert_held(&ar->conf_mutex);
905 reinit_completion(&ar->vdev_setup_done);
907 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
909 ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n",
910 arvif->vdev_id, ret);
914 ret = ath10k_vdev_setup_sync(ar);
916 ath10k_warn(ar, "failed to syncronise setup for vdev %i: %d\n",
917 arvif->vdev_id, ret);
921 WARN_ON(ar->num_started_vdevs == 0);
923 if (ar->num_started_vdevs != 0) {
924 ar->num_started_vdevs--;
925 ath10k_recalc_radar_detection(ar);
931 static void ath10k_control_beaconing(struct ath10k_vif *arvif,
932 struct ieee80211_bss_conf *info)
934 struct ath10k *ar = arvif->ar;
937 lockdep_assert_held(&arvif->ar->conf_mutex);
939 if (!info->enable_beacon) {
940 ath10k_vdev_stop(arvif);
942 arvif->is_started = false;
943 arvif->is_up = false;
945 spin_lock_bh(&arvif->ar->data_lock);
946 ath10k_mac_vif_beacon_free(arvif);
947 spin_unlock_bh(&arvif->ar->data_lock);
952 arvif->tx_seq_no = 0x1000;
954 ret = ath10k_vdev_start(arvif);
959 ether_addr_copy(arvif->bssid, info->bssid);
961 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
964 ath10k_warn(ar, "failed to bring up vdev %d: %i\n",
965 arvif->vdev_id, ret);
966 ath10k_vdev_stop(arvif);
970 arvif->is_started = true;
973 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
976 static void ath10k_control_ibss(struct ath10k_vif *arvif,
977 struct ieee80211_bss_conf *info,
978 const u8 self_peer[ETH_ALEN])
980 struct ath10k *ar = arvif->ar;
984 lockdep_assert_held(&arvif->ar->conf_mutex);
986 if (!info->ibss_joined) {
987 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, self_peer);
989 ath10k_warn(ar, "failed to delete IBSS self peer %pM for vdev %d: %d\n",
990 self_peer, arvif->vdev_id, ret);
992 if (is_zero_ether_addr(arvif->bssid))
995 memset(arvif->bssid, 0, ETH_ALEN);
1000 ret = ath10k_peer_create(arvif->ar, arvif->vdev_id, self_peer);
1002 ath10k_warn(ar, "failed to create IBSS self peer %pM for vdev %d: %d\n",
1003 self_peer, arvif->vdev_id, ret);
1007 vdev_param = arvif->ar->wmi.vdev_param->atim_window;
1008 ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param,
1009 ATH10K_DEFAULT_ATIM);
1011 ath10k_warn(ar, "failed to set IBSS ATIM for vdev %d: %d\n",
1012 arvif->vdev_id, ret);
1016 * Review this when mac80211 gains per-interface powersave support.
1018 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
1020 struct ath10k *ar = arvif->ar;
1021 struct ieee80211_conf *conf = &ar->hw->conf;
1022 enum wmi_sta_powersave_param param;
1023 enum wmi_sta_ps_mode psmode;
1026 lockdep_assert_held(&arvif->ar->conf_mutex);
1028 if (arvif->vif->type != NL80211_IFTYPE_STATION)
1031 if (conf->flags & IEEE80211_CONF_PS) {
1032 psmode = WMI_STA_PS_MODE_ENABLED;
1033 param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1035 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1036 conf->dynamic_ps_timeout);
1038 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n",
1039 arvif->vdev_id, ret);
1043 psmode = WMI_STA_PS_MODE_DISABLED;
1046 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1047 arvif->vdev_id, psmode ? "enable" : "disable");
1049 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1051 ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n",
1052 psmode, arvif->vdev_id, ret);
1059 /**********************/
1060 /* Station management */
1061 /**********************/
1063 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar,
1064 struct ieee80211_vif *vif)
1066 /* Some firmware revisions have unstable STA powersave when listen
1067 * interval is set too high (e.g. 5). The symptoms are firmware doesn't
1068 * generate NullFunc frames properly even if buffered frames have been
1069 * indicated in Beacon TIM. Firmware would seldom wake up to pull
1070 * buffered frames. Often pinging the device from AP would simply fail.
1072 * As a workaround set it to 1.
1074 if (vif->type == NL80211_IFTYPE_STATION)
1077 return ar->hw->conf.listen_interval;
1080 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
1081 struct ieee80211_vif *vif,
1082 struct ieee80211_sta *sta,
1083 struct wmi_peer_assoc_complete_arg *arg)
1085 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1087 lockdep_assert_held(&ar->conf_mutex);
1089 ether_addr_copy(arg->addr, sta->addr);
1090 arg->vdev_id = arvif->vdev_id;
1091 arg->peer_aid = sta->aid;
1092 arg->peer_flags |= WMI_PEER_AUTH;
1093 arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif);
1094 arg->peer_num_spatial_streams = 1;
1095 arg->peer_caps = vif->bss_conf.assoc_capability;
1098 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
1099 struct ieee80211_vif *vif,
1100 struct wmi_peer_assoc_complete_arg *arg)
1102 struct ieee80211_bss_conf *info = &vif->bss_conf;
1103 struct cfg80211_bss *bss;
1104 const u8 *rsnie = NULL;
1105 const u8 *wpaie = NULL;
1107 lockdep_assert_held(&ar->conf_mutex);
1109 bss = cfg80211_get_bss(ar->hw->wiphy, ar->hw->conf.chandef.chan,
1110 info->bssid, NULL, 0, 0, 0);
1112 const struct cfg80211_bss_ies *ies;
1115 rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
1117 ies = rcu_dereference(bss->ies);
1119 wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
1120 WLAN_OUI_TYPE_MICROSOFT_WPA,
1124 cfg80211_put_bss(ar->hw->wiphy, bss);
1127 /* FIXME: base on RSN IE/WPA IE is a correct idea? */
1128 if (rsnie || wpaie) {
1129 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
1130 arg->peer_flags |= WMI_PEER_NEED_PTK_4_WAY;
1134 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
1135 arg->peer_flags |= WMI_PEER_NEED_GTK_2_WAY;
1139 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
1140 struct ieee80211_sta *sta,
1141 struct wmi_peer_assoc_complete_arg *arg)
1143 struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
1144 const struct ieee80211_supported_band *sband;
1145 const struct ieee80211_rate *rates;
1149 lockdep_assert_held(&ar->conf_mutex);
1151 sband = ar->hw->wiphy->bands[ar->hw->conf.chandef.chan->band];
1152 ratemask = sta->supp_rates[ar->hw->conf.chandef.chan->band];
1153 rates = sband->bitrates;
1155 rateset->num_rates = 0;
1157 for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
1158 if (!(ratemask & 1))
1161 rateset->rates[rateset->num_rates] = rates->hw_value;
1162 rateset->num_rates++;
1166 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
1167 struct ieee80211_sta *sta,
1168 struct wmi_peer_assoc_complete_arg *arg)
1170 const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
1174 lockdep_assert_held(&ar->conf_mutex);
1176 if (!ht_cap->ht_supported)
1179 arg->peer_flags |= WMI_PEER_HT;
1180 arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1181 ht_cap->ampdu_factor)) - 1;
1183 arg->peer_mpdu_density =
1184 ath10k_parse_mpdudensity(ht_cap->ampdu_density);
1186 arg->peer_ht_caps = ht_cap->cap;
1187 arg->peer_rate_caps |= WMI_RC_HT_FLAG;
1189 if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
1190 arg->peer_flags |= WMI_PEER_LDPC;
1192 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
1193 arg->peer_flags |= WMI_PEER_40MHZ;
1194 arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
1197 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
1198 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1200 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
1201 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1203 if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
1204 arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
1205 arg->peer_flags |= WMI_PEER_STBC;
1208 if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
1209 stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
1210 stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
1211 stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
1212 arg->peer_rate_caps |= stbc;
1213 arg->peer_flags |= WMI_PEER_STBC;
1216 if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
1217 arg->peer_rate_caps |= WMI_RC_TS_FLAG;
1218 else if (ht_cap->mcs.rx_mask[1])
1219 arg->peer_rate_caps |= WMI_RC_DS_FLAG;
1221 for (i = 0, n = 0; i < IEEE80211_HT_MCS_MASK_LEN*8; i++)
1222 if (ht_cap->mcs.rx_mask[i/8] & (1 << i%8))
1223 arg->peer_ht_rates.rates[n++] = i;
1226 * This is a workaround for HT-enabled STAs which break the spec
1227 * and have no HT capabilities RX mask (no HT RX MCS map).
1229 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
1230 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
1232 * Firmware asserts if such situation occurs.
1235 arg->peer_ht_rates.num_rates = 8;
1236 for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
1237 arg->peer_ht_rates.rates[i] = i;
1239 arg->peer_ht_rates.num_rates = n;
1240 arg->peer_num_spatial_streams = sta->rx_nss;
1243 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
1245 arg->peer_ht_rates.num_rates,
1246 arg->peer_num_spatial_streams);
1249 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
1250 struct ath10k_vif *arvif,
1251 struct ieee80211_sta *sta)
1257 lockdep_assert_held(&ar->conf_mutex);
1259 if (sta->wme && sta->uapsd_queues) {
1260 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
1261 sta->uapsd_queues, sta->max_sp);
1263 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
1264 uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
1265 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
1266 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
1267 uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
1268 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
1269 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
1270 uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
1271 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
1272 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
1273 uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
1274 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
1276 if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
1277 max_sp = sta->max_sp;
1279 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1281 WMI_AP_PS_PEER_PARAM_UAPSD,
1284 ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n",
1285 arvif->vdev_id, ret);
1289 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1291 WMI_AP_PS_PEER_PARAM_MAX_SP,
1294 ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n",
1295 arvif->vdev_id, ret);
1299 /* TODO setup this based on STA listen interval and
1300 beacon interval. Currently we don't know
1301 sta->listen_interval - mac80211 patch required.
1302 Currently use 10 seconds */
1303 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
1304 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME,
1307 ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n",
1308 arvif->vdev_id, ret);
1316 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
1317 struct ieee80211_sta *sta,
1318 struct wmi_peer_assoc_complete_arg *arg)
1320 const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
1323 if (!vht_cap->vht_supported)
1326 arg->peer_flags |= WMI_PEER_VHT;
1327 arg->peer_vht_caps = vht_cap->cap;
1329 ampdu_factor = (vht_cap->cap &
1330 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
1331 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
1333 /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
1334 * zero in VHT IE. Using it would result in degraded throughput.
1335 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
1336 * it if VHT max_mpdu is smaller. */
1337 arg->peer_max_mpdu = max(arg->peer_max_mpdu,
1338 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1339 ampdu_factor)) - 1);
1341 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1342 arg->peer_flags |= WMI_PEER_80MHZ;
1344 arg->peer_vht_rates.rx_max_rate =
1345 __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
1346 arg->peer_vht_rates.rx_mcs_set =
1347 __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
1348 arg->peer_vht_rates.tx_max_rate =
1349 __le16_to_cpu(vht_cap->vht_mcs.tx_highest);
1350 arg->peer_vht_rates.tx_mcs_set =
1351 __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map);
1353 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
1354 sta->addr, arg->peer_max_mpdu, arg->peer_flags);
1357 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
1358 struct ieee80211_vif *vif,
1359 struct ieee80211_sta *sta,
1360 struct wmi_peer_assoc_complete_arg *arg)
1362 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1364 switch (arvif->vdev_type) {
1365 case WMI_VDEV_TYPE_AP:
1367 arg->peer_flags |= WMI_PEER_QOS;
1369 if (sta->wme && sta->uapsd_queues) {
1370 arg->peer_flags |= WMI_PEER_APSD;
1371 arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
1374 case WMI_VDEV_TYPE_STA:
1375 if (vif->bss_conf.qos)
1376 arg->peer_flags |= WMI_PEER_QOS;
1383 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
1384 struct ieee80211_vif *vif,
1385 struct ieee80211_sta *sta,
1386 struct wmi_peer_assoc_complete_arg *arg)
1388 enum wmi_phy_mode phymode = MODE_UNKNOWN;
1390 switch (ar->hw->conf.chandef.chan->band) {
1391 case IEEE80211_BAND_2GHZ:
1392 if (sta->ht_cap.ht_supported) {
1393 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1394 phymode = MODE_11NG_HT40;
1396 phymode = MODE_11NG_HT20;
1402 case IEEE80211_BAND_5GHZ:
1406 if (sta->vht_cap.vht_supported) {
1407 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1408 phymode = MODE_11AC_VHT80;
1409 else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1410 phymode = MODE_11AC_VHT40;
1411 else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
1412 phymode = MODE_11AC_VHT20;
1413 } else if (sta->ht_cap.ht_supported) {
1414 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1415 phymode = MODE_11NA_HT40;
1417 phymode = MODE_11NA_HT20;
1427 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
1428 sta->addr, ath10k_wmi_phymode_str(phymode));
1430 arg->peer_phymode = phymode;
1431 WARN_ON(phymode == MODE_UNKNOWN);
1434 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
1435 struct ieee80211_vif *vif,
1436 struct ieee80211_sta *sta,
1437 struct wmi_peer_assoc_complete_arg *arg)
1439 lockdep_assert_held(&ar->conf_mutex);
1441 memset(arg, 0, sizeof(*arg));
1443 ath10k_peer_assoc_h_basic(ar, vif, sta, arg);
1444 ath10k_peer_assoc_h_crypto(ar, vif, arg);
1445 ath10k_peer_assoc_h_rates(ar, sta, arg);
1446 ath10k_peer_assoc_h_ht(ar, sta, arg);
1447 ath10k_peer_assoc_h_vht(ar, sta, arg);
1448 ath10k_peer_assoc_h_qos(ar, vif, sta, arg);
1449 ath10k_peer_assoc_h_phymode(ar, vif, sta, arg);
1454 static const u32 ath10k_smps_map[] = {
1455 [WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
1456 [WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
1457 [WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
1458 [WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
1461 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
1463 const struct ieee80211_sta_ht_cap *ht_cap)
1467 if (!ht_cap->ht_supported)
1470 smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
1471 smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
1473 if (smps >= ARRAY_SIZE(ath10k_smps_map))
1476 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
1477 WMI_PEER_SMPS_STATE,
1478 ath10k_smps_map[smps]);
1481 /* can be called only in mac80211 callbacks due to `key_count` usage */
1482 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
1483 struct ieee80211_vif *vif,
1484 struct ieee80211_bss_conf *bss_conf)
1486 struct ath10k *ar = hw->priv;
1487 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1488 struct ieee80211_sta_ht_cap ht_cap;
1489 struct wmi_peer_assoc_complete_arg peer_arg;
1490 struct ieee80211_sta *ap_sta;
1493 lockdep_assert_held(&ar->conf_mutex);
1495 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n",
1496 arvif->vdev_id, arvif->bssid, arvif->aid);
1500 ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
1502 ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n",
1503 bss_conf->bssid, arvif->vdev_id);
1508 /* ap_sta must be accessed only within rcu section which must be left
1509 * before calling ath10k_setup_peer_smps() which might sleep. */
1510 ht_cap = ap_sta->ht_cap;
1512 ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg);
1514 ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n",
1515 bss_conf->bssid, arvif->vdev_id, ret);
1522 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1524 ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n",
1525 bss_conf->bssid, arvif->vdev_id, ret);
1529 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
1531 ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n",
1532 arvif->vdev_id, ret);
1536 ath10k_dbg(ar, ATH10K_DBG_MAC,
1537 "mac vdev %d up (associated) bssid %pM aid %d\n",
1538 arvif->vdev_id, bss_conf->bssid, bss_conf->aid);
1540 WARN_ON(arvif->is_up);
1542 arvif->aid = bss_conf->aid;
1543 ether_addr_copy(arvif->bssid, bss_conf->bssid);
1545 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
1547 ath10k_warn(ar, "failed to set vdev %d up: %d\n",
1548 arvif->vdev_id, ret);
1552 arvif->is_up = true;
1555 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
1556 struct ieee80211_vif *vif)
1558 struct ath10k *ar = hw->priv;
1559 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1562 lockdep_assert_held(&ar->conf_mutex);
1564 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n",
1565 arvif->vdev_id, arvif->bssid);
1567 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1569 ath10k_warn(ar, "faield to down vdev %i: %d\n",
1570 arvif->vdev_id, ret);
1572 arvif->def_wep_key_idx = 0;
1573 arvif->is_up = false;
1576 static int ath10k_station_assoc(struct ath10k *ar,
1577 struct ieee80211_vif *vif,
1578 struct ieee80211_sta *sta,
1581 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1582 struct wmi_peer_assoc_complete_arg peer_arg;
1585 lockdep_assert_held(&ar->conf_mutex);
1587 ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg);
1589 ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
1590 sta->addr, arvif->vdev_id, ret);
1594 peer_arg.peer_reassoc = reassoc;
1595 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1597 ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n",
1598 sta->addr, arvif->vdev_id, ret);
1602 /* Re-assoc is run only to update supported rates for given station. It
1603 * doesn't make much sense to reconfigure the peer completely.
1606 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
1609 ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
1610 arvif->vdev_id, ret);
1614 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
1616 ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
1617 sta->addr, arvif->vdev_id, ret);
1622 arvif->num_legacy_stations++;
1623 ret = ath10k_recalc_rtscts_prot(arvif);
1625 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
1626 arvif->vdev_id, ret);
1631 ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
1633 ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
1634 arvif->vdev_id, ret);
1642 static int ath10k_station_disassoc(struct ath10k *ar,
1643 struct ieee80211_vif *vif,
1644 struct ieee80211_sta *sta)
1646 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1649 lockdep_assert_held(&ar->conf_mutex);
1652 arvif->num_legacy_stations--;
1653 ret = ath10k_recalc_rtscts_prot(arvif);
1655 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
1656 arvif->vdev_id, ret);
1661 ret = ath10k_clear_peer_keys(arvif, sta->addr);
1663 ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n",
1664 arvif->vdev_id, ret);
1675 static int ath10k_update_channel_list(struct ath10k *ar)
1677 struct ieee80211_hw *hw = ar->hw;
1678 struct ieee80211_supported_band **bands;
1679 enum ieee80211_band band;
1680 struct ieee80211_channel *channel;
1681 struct wmi_scan_chan_list_arg arg = {0};
1682 struct wmi_channel_arg *ch;
1688 lockdep_assert_held(&ar->conf_mutex);
1690 bands = hw->wiphy->bands;
1691 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1695 for (i = 0; i < bands[band]->n_channels; i++) {
1696 if (bands[band]->channels[i].flags &
1697 IEEE80211_CHAN_DISABLED)
1704 len = sizeof(struct wmi_channel_arg) * arg.n_channels;
1705 arg.channels = kzalloc(len, GFP_KERNEL);
1710 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1714 for (i = 0; i < bands[band]->n_channels; i++) {
1715 channel = &bands[band]->channels[i];
1717 if (channel->flags & IEEE80211_CHAN_DISABLED)
1720 ch->allow_ht = true;
1722 /* FIXME: when should we really allow VHT? */
1723 ch->allow_vht = true;
1726 !(channel->flags & IEEE80211_CHAN_NO_IR);
1729 !(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
1732 !!(channel->flags & IEEE80211_CHAN_RADAR);
1734 passive = channel->flags & IEEE80211_CHAN_NO_IR;
1735 ch->passive = passive;
1737 ch->freq = channel->center_freq;
1738 ch->band_center_freq1 = channel->center_freq;
1740 ch->max_power = channel->max_power * 2;
1741 ch->max_reg_power = channel->max_reg_power * 2;
1742 ch->max_antenna_gain = channel->max_antenna_gain * 2;
1743 ch->reg_class_id = 0; /* FIXME */
1745 /* FIXME: why use only legacy modes, why not any
1746 * HT/VHT modes? Would that even make any
1748 if (channel->band == IEEE80211_BAND_2GHZ)
1749 ch->mode = MODE_11G;
1751 ch->mode = MODE_11A;
1753 if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
1756 ath10k_dbg(ar, ATH10K_DBG_WMI,
1757 "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
1758 ch - arg.channels, arg.n_channels,
1759 ch->freq, ch->max_power, ch->max_reg_power,
1760 ch->max_antenna_gain, ch->mode);
1766 ret = ath10k_wmi_scan_chan_list(ar, &arg);
1767 kfree(arg.channels);
1772 static enum wmi_dfs_region
1773 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
1775 switch (dfs_region) {
1776 case NL80211_DFS_UNSET:
1777 return WMI_UNINIT_DFS_DOMAIN;
1778 case NL80211_DFS_FCC:
1779 return WMI_FCC_DFS_DOMAIN;
1780 case NL80211_DFS_ETSI:
1781 return WMI_ETSI_DFS_DOMAIN;
1782 case NL80211_DFS_JP:
1783 return WMI_MKK4_DFS_DOMAIN;
1785 return WMI_UNINIT_DFS_DOMAIN;
1788 static void ath10k_regd_update(struct ath10k *ar)
1790 struct reg_dmn_pair_mapping *regpair;
1792 enum wmi_dfs_region wmi_dfs_reg;
1793 enum nl80211_dfs_regions nl_dfs_reg;
1795 lockdep_assert_held(&ar->conf_mutex);
1797 ret = ath10k_update_channel_list(ar);
1799 ath10k_warn(ar, "failed to update channel list: %d\n", ret);
1801 regpair = ar->ath_common.regulatory.regpair;
1803 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1804 nl_dfs_reg = ar->dfs_detector->region;
1805 wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
1807 wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
1810 /* Target allows setting up per-band regdomain but ath_common provides
1811 * a combined one only */
1812 ret = ath10k_wmi_pdev_set_regdomain(ar,
1813 regpair->reg_domain,
1814 regpair->reg_domain, /* 2ghz */
1815 regpair->reg_domain, /* 5ghz */
1816 regpair->reg_2ghz_ctl,
1817 regpair->reg_5ghz_ctl,
1820 ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret);
1823 static void ath10k_reg_notifier(struct wiphy *wiphy,
1824 struct regulatory_request *request)
1826 struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1827 struct ath10k *ar = hw->priv;
1830 ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
1832 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1833 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
1834 request->dfs_region);
1835 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
1836 request->dfs_region);
1838 ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n",
1839 request->dfs_region);
1842 mutex_lock(&ar->conf_mutex);
1843 if (ar->state == ATH10K_STATE_ON)
1844 ath10k_regd_update(ar);
1845 mutex_unlock(&ar->conf_mutex);
1852 static u8 ath10k_tx_h_get_tid(struct ieee80211_hdr *hdr)
1854 if (ieee80211_is_mgmt(hdr->frame_control))
1855 return HTT_DATA_TX_EXT_TID_MGMT;
1857 if (!ieee80211_is_data_qos(hdr->frame_control))
1858 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1860 if (!is_unicast_ether_addr(ieee80211_get_DA(hdr)))
1861 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1863 return ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
1866 static u8 ath10k_tx_h_get_vdev_id(struct ath10k *ar, struct ieee80211_vif *vif)
1869 return ath10k_vif_to_arvif(vif)->vdev_id;
1871 if (ar->monitor_started)
1872 return ar->monitor_vdev_id;
1874 ath10k_warn(ar, "failed to resolve vdev id\n");
1878 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
1879 * Control in the header.
1881 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
1883 struct ieee80211_hdr *hdr = (void *)skb->data;
1884 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb);
1887 if (!ieee80211_is_data_qos(hdr->frame_control))
1890 qos_ctl = ieee80211_get_qos_ctl(hdr);
1891 memmove(skb->data + IEEE80211_QOS_CTL_LEN,
1892 skb->data, (void *)qos_ctl - (void *)skb->data);
1893 skb_pull(skb, IEEE80211_QOS_CTL_LEN);
1895 /* Fw/Hw generates a corrupted QoS Control Field for QoS NullFunc
1896 * frames. Powersave is handled by the fw/hw so QoS NyllFunc frames are
1897 * used only for CQM purposes (e.g. hostapd station keepalive ping) so
1898 * it is safe to downgrade to NullFunc.
1900 if (ieee80211_is_qos_nullfunc(hdr->frame_control)) {
1901 hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
1902 cb->htt.tid = HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1906 static void ath10k_tx_wep_key_work(struct work_struct *work)
1908 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1910 struct ath10k *ar = arvif->ar;
1911 int ret, keyidx = arvif->def_wep_key_newidx;
1913 mutex_lock(&arvif->ar->conf_mutex);
1915 if (arvif->ar->state != ATH10K_STATE_ON)
1918 if (arvif->def_wep_key_idx == keyidx)
1921 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
1922 arvif->vdev_id, keyidx);
1924 ret = ath10k_wmi_vdev_set_param(arvif->ar,
1926 arvif->ar->wmi.vdev_param->def_keyid,
1929 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n",
1935 arvif->def_wep_key_idx = keyidx;
1938 mutex_unlock(&arvif->ar->conf_mutex);
1941 static void ath10k_tx_h_update_wep_key(struct ieee80211_vif *vif,
1942 struct ieee80211_key_conf *key,
1943 struct sk_buff *skb)
1945 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1946 struct ath10k *ar = arvif->ar;
1947 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1949 if (!ieee80211_has_protected(hdr->frame_control))
1955 if (key->cipher != WLAN_CIPHER_SUITE_WEP40 &&
1956 key->cipher != WLAN_CIPHER_SUITE_WEP104)
1959 if (key->keyidx == arvif->def_wep_key_idx)
1962 /* FIXME: Most likely a few frames will be TXed with an old key. Simply
1963 * queueing frames until key index is updated is not an option because
1964 * sk_buff may need more processing to be done, e.g. offchannel */
1965 arvif->def_wep_key_newidx = key->keyidx;
1966 ieee80211_queue_work(ar->hw, &arvif->wep_key_work);
1969 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
1970 struct ieee80211_vif *vif,
1971 struct sk_buff *skb)
1973 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1974 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1976 /* This is case only for P2P_GO */
1977 if (arvif->vdev_type != WMI_VDEV_TYPE_AP ||
1978 arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO)
1981 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
1982 spin_lock_bh(&ar->data_lock);
1983 if (arvif->u.ap.noa_data)
1984 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
1986 memcpy(skb_put(skb, arvif->u.ap.noa_len),
1987 arvif->u.ap.noa_data,
1988 arvif->u.ap.noa_len);
1989 spin_unlock_bh(&ar->data_lock);
1993 static void ath10k_tx_htt(struct ath10k *ar, struct sk_buff *skb)
1995 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1998 if (ar->htt.target_version_major >= 3) {
1999 /* Since HTT 3.0 there is no separate mgmt tx command */
2000 ret = ath10k_htt_tx(&ar->htt, skb);
2004 if (ieee80211_is_mgmt(hdr->frame_control)) {
2005 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
2007 if (skb_queue_len(&ar->wmi_mgmt_tx_queue) >=
2008 ATH10K_MAX_NUM_MGMT_PENDING) {
2009 ath10k_warn(ar, "reached WMI management transmit queue limit\n");
2014 skb_queue_tail(&ar->wmi_mgmt_tx_queue, skb);
2015 ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
2017 ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2019 } else if (!test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
2021 ieee80211_is_nullfunc(hdr->frame_control)) {
2022 /* FW does not report tx status properly for NullFunc frames
2023 * unless they are sent through mgmt tx path. mac80211 sends
2024 * those frames when it detects link/beacon loss and depends
2025 * on the tx status to be correct. */
2026 ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2028 ret = ath10k_htt_tx(&ar->htt, skb);
2033 ath10k_warn(ar, "failed to transmit packet, dropping: %d\n",
2035 ieee80211_free_txskb(ar->hw, skb);
2039 void ath10k_offchan_tx_purge(struct ath10k *ar)
2041 struct sk_buff *skb;
2044 skb = skb_dequeue(&ar->offchan_tx_queue);
2048 ieee80211_free_txskb(ar->hw, skb);
2052 void ath10k_offchan_tx_work(struct work_struct *work)
2054 struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
2055 struct ath10k_peer *peer;
2056 struct ieee80211_hdr *hdr;
2057 struct sk_buff *skb;
2058 const u8 *peer_addr;
2062 /* FW requirement: We must create a peer before FW will send out
2063 * an offchannel frame. Otherwise the frame will be stuck and
2064 * never transmitted. We delete the peer upon tx completion.
2065 * It is unlikely that a peer for offchannel tx will already be
2066 * present. However it may be in some rare cases so account for that.
2067 * Otherwise we might remove a legitimate peer and break stuff. */
2070 skb = skb_dequeue(&ar->offchan_tx_queue);
2074 mutex_lock(&ar->conf_mutex);
2076 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %p\n",
2079 hdr = (struct ieee80211_hdr *)skb->data;
2080 peer_addr = ieee80211_get_DA(hdr);
2081 vdev_id = ATH10K_SKB_CB(skb)->vdev_id;
2083 spin_lock_bh(&ar->data_lock);
2084 peer = ath10k_peer_find(ar, vdev_id, peer_addr);
2085 spin_unlock_bh(&ar->data_lock);
2088 /* FIXME: should this use ath10k_warn()? */
2089 ath10k_dbg(ar, ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
2090 peer_addr, vdev_id);
2093 ret = ath10k_peer_create(ar, vdev_id, peer_addr);
2095 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n",
2096 peer_addr, vdev_id, ret);
2099 spin_lock_bh(&ar->data_lock);
2100 reinit_completion(&ar->offchan_tx_completed);
2101 ar->offchan_tx_skb = skb;
2102 spin_unlock_bh(&ar->data_lock);
2104 ath10k_tx_htt(ar, skb);
2106 ret = wait_for_completion_timeout(&ar->offchan_tx_completed,
2109 ath10k_warn(ar, "timed out waiting for offchannel skb %p\n",
2113 ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
2115 ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n",
2116 peer_addr, vdev_id, ret);
2119 mutex_unlock(&ar->conf_mutex);
2123 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
2125 struct sk_buff *skb;
2128 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2132 ieee80211_free_txskb(ar->hw, skb);
2136 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
2138 struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
2139 struct sk_buff *skb;
2143 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2147 ret = ath10k_wmi_mgmt_tx(ar, skb);
2149 ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n",
2151 ieee80211_free_txskb(ar->hw, skb);
2160 void __ath10k_scan_finish(struct ath10k *ar)
2162 lockdep_assert_held(&ar->data_lock);
2164 switch (ar->scan.state) {
2165 case ATH10K_SCAN_IDLE:
2167 case ATH10K_SCAN_RUNNING:
2168 case ATH10K_SCAN_ABORTING:
2169 if (ar->scan.is_roc)
2170 ieee80211_remain_on_channel_expired(ar->hw);
2172 ieee80211_scan_completed(ar->hw,
2174 ATH10K_SCAN_ABORTING));
2176 case ATH10K_SCAN_STARTING:
2177 ar->scan.state = ATH10K_SCAN_IDLE;
2178 ar->scan_channel = NULL;
2179 ath10k_offchan_tx_purge(ar);
2180 cancel_delayed_work(&ar->scan.timeout);
2181 complete_all(&ar->scan.completed);
2186 void ath10k_scan_finish(struct ath10k *ar)
2188 spin_lock_bh(&ar->data_lock);
2189 __ath10k_scan_finish(ar);
2190 spin_unlock_bh(&ar->data_lock);
2193 static int ath10k_scan_stop(struct ath10k *ar)
2195 struct wmi_stop_scan_arg arg = {
2196 .req_id = 1, /* FIXME */
2197 .req_type = WMI_SCAN_STOP_ONE,
2198 .u.scan_id = ATH10K_SCAN_ID,
2202 lockdep_assert_held(&ar->conf_mutex);
2204 ret = ath10k_wmi_stop_scan(ar, &arg);
2206 ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret);
2210 ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ);
2212 ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n");
2214 } else if (ret > 0) {
2219 /* Scan state should be updated upon scan completion but in case
2220 * firmware fails to deliver the event (for whatever reason) it is
2221 * desired to clean up scan state anyway. Firmware may have just
2222 * dropped the scan completion event delivery due to transport pipe
2223 * being overflown with data and/or it can recover on its own before
2224 * next scan request is submitted.
2226 spin_lock_bh(&ar->data_lock);
2227 if (ar->scan.state != ATH10K_SCAN_IDLE)
2228 __ath10k_scan_finish(ar);
2229 spin_unlock_bh(&ar->data_lock);
2234 static void ath10k_scan_abort(struct ath10k *ar)
2238 lockdep_assert_held(&ar->conf_mutex);
2240 spin_lock_bh(&ar->data_lock);
2242 switch (ar->scan.state) {
2243 case ATH10K_SCAN_IDLE:
2244 /* This can happen if timeout worker kicked in and called
2245 * abortion while scan completion was being processed.
2248 case ATH10K_SCAN_STARTING:
2249 case ATH10K_SCAN_ABORTING:
2250 ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n",
2251 ath10k_scan_state_str(ar->scan.state),
2254 case ATH10K_SCAN_RUNNING:
2255 ar->scan.state = ATH10K_SCAN_ABORTING;
2256 spin_unlock_bh(&ar->data_lock);
2258 ret = ath10k_scan_stop(ar);
2260 ath10k_warn(ar, "failed to abort scan: %d\n", ret);
2262 spin_lock_bh(&ar->data_lock);
2266 spin_unlock_bh(&ar->data_lock);
2269 void ath10k_scan_timeout_work(struct work_struct *work)
2271 struct ath10k *ar = container_of(work, struct ath10k,
2274 mutex_lock(&ar->conf_mutex);
2275 ath10k_scan_abort(ar);
2276 mutex_unlock(&ar->conf_mutex);
2279 static int ath10k_start_scan(struct ath10k *ar,
2280 const struct wmi_start_scan_arg *arg)
2284 lockdep_assert_held(&ar->conf_mutex);
2286 ret = ath10k_wmi_start_scan(ar, arg);
2290 ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ);
2292 ret = ath10k_scan_stop(ar);
2294 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
2299 /* Add a 200ms margin to account for event/command processing */
2300 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
2301 msecs_to_jiffies(arg->max_scan_time+200));
2305 /**********************/
2306 /* mac80211 callbacks */
2307 /**********************/
2309 static void ath10k_tx(struct ieee80211_hw *hw,
2310 struct ieee80211_tx_control *control,
2311 struct sk_buff *skb)
2313 struct ath10k *ar = hw->priv;
2314 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
2315 struct ieee80211_vif *vif = info->control.vif;
2316 struct ieee80211_key_conf *key = info->control.hw_key;
2317 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2319 /* We should disable CCK RATE due to P2P */
2320 if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
2321 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
2323 ATH10K_SKB_CB(skb)->htt.is_offchan = false;
2324 ATH10K_SKB_CB(skb)->htt.tid = ath10k_tx_h_get_tid(hdr);
2325 ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, vif);
2327 /* it makes no sense to process injected frames like that */
2328 if (vif && vif->type != NL80211_IFTYPE_MONITOR) {
2329 ath10k_tx_h_nwifi(hw, skb);
2330 ath10k_tx_h_update_wep_key(vif, key, skb);
2331 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
2332 ath10k_tx_h_seq_no(vif, skb);
2335 if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
2336 spin_lock_bh(&ar->data_lock);
2337 ATH10K_SKB_CB(skb)->htt.is_offchan = true;
2338 ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id;
2339 spin_unlock_bh(&ar->data_lock);
2341 ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n",
2344 skb_queue_tail(&ar->offchan_tx_queue, skb);
2345 ieee80211_queue_work(hw, &ar->offchan_tx_work);
2349 ath10k_tx_htt(ar, skb);
2352 /* Must not be called with conf_mutex held as workers can use that also. */
2353 static void ath10k_drain_tx(struct ath10k *ar)
2355 /* make sure rcu-protected mac80211 tx path itself is drained */
2358 ath10k_offchan_tx_purge(ar);
2359 ath10k_mgmt_over_wmi_tx_purge(ar);
2361 cancel_work_sync(&ar->offchan_tx_work);
2362 cancel_work_sync(&ar->wmi_mgmt_tx_work);
2365 void ath10k_halt(struct ath10k *ar)
2367 struct ath10k_vif *arvif;
2369 lockdep_assert_held(&ar->conf_mutex);
2371 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
2372 ar->filter_flags = 0;
2373 ar->monitor = false;
2375 if (ar->monitor_started)
2376 ath10k_monitor_stop(ar);
2378 ar->monitor_started = false;
2380 ath10k_scan_finish(ar);
2381 ath10k_peer_cleanup_all(ar);
2382 ath10k_core_stop(ar);
2383 ath10k_hif_power_down(ar);
2385 spin_lock_bh(&ar->data_lock);
2386 list_for_each_entry(arvif, &ar->arvifs, list)
2387 ath10k_mac_vif_beacon_cleanup(arvif);
2388 spin_unlock_bh(&ar->data_lock);
2391 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
2393 struct ath10k *ar = hw->priv;
2395 mutex_lock(&ar->conf_mutex);
2397 if (ar->cfg_tx_chainmask) {
2398 *tx_ant = ar->cfg_tx_chainmask;
2399 *rx_ant = ar->cfg_rx_chainmask;
2401 *tx_ant = ar->supp_tx_chainmask;
2402 *rx_ant = ar->supp_rx_chainmask;
2405 mutex_unlock(&ar->conf_mutex);
2410 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
2414 lockdep_assert_held(&ar->conf_mutex);
2416 ar->cfg_tx_chainmask = tx_ant;
2417 ar->cfg_rx_chainmask = rx_ant;
2419 if ((ar->state != ATH10K_STATE_ON) &&
2420 (ar->state != ATH10K_STATE_RESTARTED))
2423 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
2426 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n",
2431 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
2434 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n",
2442 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
2444 struct ath10k *ar = hw->priv;
2447 mutex_lock(&ar->conf_mutex);
2448 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
2449 mutex_unlock(&ar->conf_mutex);
2453 static int ath10k_start(struct ieee80211_hw *hw)
2455 struct ath10k *ar = hw->priv;
2459 * This makes sense only when restarting hw. It is harmless to call
2460 * uncoditionally. This is necessary to make sure no HTT/WMI tx
2461 * commands will be submitted while restarting.
2463 ath10k_drain_tx(ar);
2465 mutex_lock(&ar->conf_mutex);
2467 switch (ar->state) {
2468 case ATH10K_STATE_OFF:
2469 ar->state = ATH10K_STATE_ON;
2471 case ATH10K_STATE_RESTARTING:
2473 ar->state = ATH10K_STATE_RESTARTED;
2475 case ATH10K_STATE_ON:
2476 case ATH10K_STATE_RESTARTED:
2477 case ATH10K_STATE_WEDGED:
2481 case ATH10K_STATE_UTF:
2486 ret = ath10k_hif_power_up(ar);
2488 ath10k_err(ar, "Could not init hif: %d\n", ret);
2492 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL);
2494 ath10k_err(ar, "Could not init core: %d\n", ret);
2495 goto err_power_down;
2498 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pmf_qos, 1);
2500 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret);
2504 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->dynamic_bw, 1);
2506 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret);
2510 if (ar->cfg_tx_chainmask)
2511 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask,
2512 ar->cfg_rx_chainmask);
2515 * By default FW set ARP frames ac to voice (6). In that case ARP
2516 * exchange is not working properly for UAPSD enabled AP. ARP requests
2517 * which arrives with access category 0 are processed by network stack
2518 * and send back with access category 0, but FW changes access category
2519 * to 6. Set ARP frames access category to best effort (0) solves
2523 ret = ath10k_wmi_pdev_set_param(ar,
2524 ar->wmi.pdev_param->arp_ac_override, 0);
2526 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n",
2531 ar->num_started_vdevs = 0;
2532 ath10k_regd_update(ar);
2534 ath10k_spectral_start(ar);
2536 mutex_unlock(&ar->conf_mutex);
2540 ath10k_core_stop(ar);
2543 ath10k_hif_power_down(ar);
2546 ar->state = ATH10K_STATE_OFF;
2549 mutex_unlock(&ar->conf_mutex);
2553 static void ath10k_stop(struct ieee80211_hw *hw)
2555 struct ath10k *ar = hw->priv;
2557 ath10k_drain_tx(ar);
2559 mutex_lock(&ar->conf_mutex);
2560 if (ar->state != ATH10K_STATE_OFF) {
2562 ar->state = ATH10K_STATE_OFF;
2564 mutex_unlock(&ar->conf_mutex);
2566 cancel_delayed_work_sync(&ar->scan.timeout);
2567 cancel_work_sync(&ar->restart_work);
2570 static int ath10k_config_ps(struct ath10k *ar)
2572 struct ath10k_vif *arvif;
2575 lockdep_assert_held(&ar->conf_mutex);
2577 list_for_each_entry(arvif, &ar->arvifs, list) {
2578 ret = ath10k_mac_vif_setup_ps(arvif);
2580 ath10k_warn(ar, "failed to setup powersave: %d\n", ret);
2588 static const char *chandef_get_width(enum nl80211_chan_width width)
2591 case NL80211_CHAN_WIDTH_20_NOHT:
2593 case NL80211_CHAN_WIDTH_20:
2595 case NL80211_CHAN_WIDTH_40:
2597 case NL80211_CHAN_WIDTH_80:
2599 case NL80211_CHAN_WIDTH_80P80:
2601 case NL80211_CHAN_WIDTH_160:
2603 case NL80211_CHAN_WIDTH_5:
2605 case NL80211_CHAN_WIDTH_10:
2611 static void ath10k_config_chan(struct ath10k *ar)
2613 struct ath10k_vif *arvif;
2616 lockdep_assert_held(&ar->conf_mutex);
2618 ath10k_dbg(ar, ATH10K_DBG_MAC,
2619 "mac config channel to %dMHz (cf1 %dMHz cf2 %dMHz width %s)\n",
2620 ar->chandef.chan->center_freq,
2621 ar->chandef.center_freq1,
2622 ar->chandef.center_freq2,
2623 chandef_get_width(ar->chandef.width));
2625 /* First stop monitor interface. Some FW versions crash if there's a
2626 * lone monitor interface. */
2627 if (ar->monitor_started)
2628 ath10k_monitor_stop(ar);
2630 list_for_each_entry(arvif, &ar->arvifs, list) {
2631 if (!arvif->is_started)
2637 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2640 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
2642 ath10k_warn(ar, "failed to down vdev %d: %d\n",
2643 arvif->vdev_id, ret);
2648 /* all vdevs are downed now - attempt to restart and re-up them */
2650 list_for_each_entry(arvif, &ar->arvifs, list) {
2651 if (!arvif->is_started)
2654 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2657 ret = ath10k_vdev_restart(arvif);
2659 ath10k_warn(ar, "failed to restart vdev %d: %d\n",
2660 arvif->vdev_id, ret);
2667 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
2670 ath10k_warn(ar, "failed to bring vdev up %d: %d\n",
2671 arvif->vdev_id, ret);
2676 ath10k_monitor_recalc(ar);
2679 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
2684 lockdep_assert_held(&ar->conf_mutex);
2686 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower);
2688 param = ar->wmi.pdev_param->txpower_limit2g;
2689 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
2691 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
2696 param = ar->wmi.pdev_param->txpower_limit5g;
2697 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
2699 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
2707 static int ath10k_mac_txpower_recalc(struct ath10k *ar)
2709 struct ath10k_vif *arvif;
2710 int ret, txpower = -1;
2712 lockdep_assert_held(&ar->conf_mutex);
2714 list_for_each_entry(arvif, &ar->arvifs, list) {
2715 WARN_ON(arvif->txpower < 0);
2718 txpower = arvif->txpower;
2720 txpower = min(txpower, arvif->txpower);
2723 if (WARN_ON(txpower == -1))
2726 ret = ath10k_mac_txpower_setup(ar, txpower);
2728 ath10k_warn(ar, "failed to setup tx power %d: %d\n",
2736 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
2738 struct ath10k *ar = hw->priv;
2739 struct ieee80211_conf *conf = &hw->conf;
2742 mutex_lock(&ar->conf_mutex);
2744 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
2745 ath10k_dbg(ar, ATH10K_DBG_MAC,
2746 "mac config channel %dMHz flags 0x%x radar %d\n",
2747 conf->chandef.chan->center_freq,
2748 conf->chandef.chan->flags,
2749 conf->radar_enabled);
2751 spin_lock_bh(&ar->data_lock);
2752 ar->rx_channel = conf->chandef.chan;
2753 spin_unlock_bh(&ar->data_lock);
2755 ar->radar_enabled = conf->radar_enabled;
2756 ath10k_recalc_radar_detection(ar);
2758 if (!cfg80211_chandef_identical(&ar->chandef, &conf->chandef)) {
2759 ar->chandef = conf->chandef;
2760 ath10k_config_chan(ar);
2764 if (changed & IEEE80211_CONF_CHANGE_PS)
2765 ath10k_config_ps(ar);
2767 if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
2768 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR;
2769 ret = ath10k_monitor_recalc(ar);
2771 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret);
2774 mutex_unlock(&ar->conf_mutex);
2780 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
2781 * because we will send mgmt frames without CCK. This requirement
2782 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
2785 static int ath10k_add_interface(struct ieee80211_hw *hw,
2786 struct ieee80211_vif *vif)
2788 struct ath10k *ar = hw->priv;
2789 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2790 enum wmi_sta_powersave_param param;
2796 mutex_lock(&ar->conf_mutex);
2798 memset(arvif, 0, sizeof(*arvif));
2803 INIT_WORK(&arvif->wep_key_work, ath10k_tx_wep_key_work);
2804 INIT_LIST_HEAD(&arvif->list);
2806 if (ar->free_vdev_map == 0) {
2807 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n");
2811 bit = __ffs64(ar->free_vdev_map);
2813 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n",
2814 bit, ar->free_vdev_map);
2816 arvif->vdev_id = bit;
2817 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
2820 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE;
2822 switch (vif->type) {
2823 case NL80211_IFTYPE_UNSPECIFIED:
2824 case NL80211_IFTYPE_STATION:
2825 arvif->vdev_type = WMI_VDEV_TYPE_STA;
2827 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT;
2829 case NL80211_IFTYPE_ADHOC:
2830 arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
2832 case NL80211_IFTYPE_AP:
2833 arvif->vdev_type = WMI_VDEV_TYPE_AP;
2836 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO;
2838 case NL80211_IFTYPE_MONITOR:
2839 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
2846 /* Some firmware revisions don't wait for beacon tx completion before
2847 * sending another SWBA event. This could lead to hardware using old
2848 * (freed) beacon data in some cases, e.g. tx credit starvation
2849 * combined with missed TBTT. This is very very rare.
2851 * On non-IOMMU-enabled hosts this could be a possible security issue
2852 * because hw could beacon some random data on the air. On
2853 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
2854 * device would crash.
2856 * Since there are no beacon tx completions (implicit nor explicit)
2857 * propagated to host the only workaround for this is to allocate a
2858 * DMA-coherent buffer for a lifetime of a vif and use it for all
2859 * beacon tx commands. Worst case for this approach is some beacons may
2860 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
2862 if (vif->type == NL80211_IFTYPE_ADHOC ||
2863 vif->type == NL80211_IFTYPE_AP) {
2864 arvif->beacon_buf = dma_zalloc_coherent(ar->dev,
2865 IEEE80211_MAX_FRAME_LEN,
2866 &arvif->beacon_paddr,
2868 if (!arvif->beacon_buf) {
2870 ath10k_warn(ar, "failed to allocate beacon buffer: %d\n",
2876 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
2877 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype,
2878 arvif->beacon_buf ? "single-buf" : "per-skb");
2880 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
2881 arvif->vdev_subtype, vif->addr);
2883 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n",
2884 arvif->vdev_id, ret);
2888 ar->free_vdev_map &= ~(1LL << arvif->vdev_id);
2889 list_add(&arvif->list, &ar->arvifs);
2891 vdev_param = ar->wmi.vdev_param->def_keyid;
2892 ret = ath10k_wmi_vdev_set_param(ar, 0, vdev_param,
2893 arvif->def_wep_key_idx);
2895 ath10k_warn(ar, "failed to set vdev %i default key id: %d\n",
2896 arvif->vdev_id, ret);
2897 goto err_vdev_delete;
2900 vdev_param = ar->wmi.vdev_param->tx_encap_type;
2901 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
2902 ATH10K_HW_TXRX_NATIVE_WIFI);
2903 /* 10.X firmware does not support this VDEV parameter. Do not warn */
2904 if (ret && ret != -EOPNOTSUPP) {
2905 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
2906 arvif->vdev_id, ret);
2907 goto err_vdev_delete;
2910 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
2911 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr);
2913 ath10k_warn(ar, "failed to create vdev %i peer for AP: %d\n",
2914 arvif->vdev_id, ret);
2915 goto err_vdev_delete;
2918 ret = ath10k_mac_set_kickout(arvif);
2920 ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n",
2921 arvif->vdev_id, ret);
2922 goto err_peer_delete;
2926 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
2927 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
2928 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
2929 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
2932 ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n",
2933 arvif->vdev_id, ret);
2934 goto err_peer_delete;
2937 param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD;
2938 value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS;
2939 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
2942 ath10k_warn(ar, "failed to set vdev %i TX wake thresh: %d\n",
2943 arvif->vdev_id, ret);
2944 goto err_peer_delete;
2947 param = WMI_STA_PS_PARAM_PSPOLL_COUNT;
2948 value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX;
2949 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
2952 ath10k_warn(ar, "failed to set vdev %i PSPOLL count: %d\n",
2953 arvif->vdev_id, ret);
2954 goto err_peer_delete;
2958 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
2960 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
2961 arvif->vdev_id, ret);
2962 goto err_peer_delete;
2965 ret = ath10k_mac_set_frag(arvif, ar->hw->wiphy->frag_threshold);
2967 ath10k_warn(ar, "failed to set frag threshold for vdev %d: %d\n",
2968 arvif->vdev_id, ret);
2969 goto err_peer_delete;
2972 arvif->txpower = vif->bss_conf.txpower;
2973 ret = ath10k_mac_txpower_recalc(ar);
2975 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
2976 goto err_peer_delete;
2979 mutex_unlock(&ar->conf_mutex);
2983 if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
2984 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
2987 ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
2988 ar->free_vdev_map |= 1LL << arvif->vdev_id;
2989 list_del(&arvif->list);
2992 if (arvif->beacon_buf) {
2993 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN,
2994 arvif->beacon_buf, arvif->beacon_paddr);
2995 arvif->beacon_buf = NULL;
2998 mutex_unlock(&ar->conf_mutex);
3003 static void ath10k_remove_interface(struct ieee80211_hw *hw,
3004 struct ieee80211_vif *vif)
3006 struct ath10k *ar = hw->priv;
3007 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3010 mutex_lock(&ar->conf_mutex);
3012 cancel_work_sync(&arvif->wep_key_work);
3014 spin_lock_bh(&ar->data_lock);
3015 ath10k_mac_vif_beacon_cleanup(arvif);
3016 spin_unlock_bh(&ar->data_lock);
3018 ret = ath10k_spectral_vif_stop(arvif);
3020 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
3021 arvif->vdev_id, ret);
3023 ar->free_vdev_map |= 1LL << arvif->vdev_id;
3024 list_del(&arvif->list);
3026 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3027 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, vif->addr);
3029 ath10k_warn(ar, "failed to remove peer for AP vdev %i: %d\n",
3030 arvif->vdev_id, ret);
3032 kfree(arvif->u.ap.noa_data);
3035 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
3038 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
3040 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n",
3041 arvif->vdev_id, ret);
3043 ath10k_peer_cleanup(ar, arvif->vdev_id);
3045 mutex_unlock(&ar->conf_mutex);
3049 * FIXME: Has to be verified.
3051 #define SUPPORTED_FILTERS \
3052 (FIF_PROMISC_IN_BSS | \
3057 FIF_BCN_PRBRESP_PROMISC | \
3061 static void ath10k_configure_filter(struct ieee80211_hw *hw,
3062 unsigned int changed_flags,
3063 unsigned int *total_flags,
3066 struct ath10k *ar = hw->priv;
3069 mutex_lock(&ar->conf_mutex);
3071 changed_flags &= SUPPORTED_FILTERS;
3072 *total_flags &= SUPPORTED_FILTERS;
3073 ar->filter_flags = *total_flags;
3075 ret = ath10k_monitor_recalc(ar);
3077 ath10k_warn(ar, "failed to recalc montior: %d\n", ret);
3079 mutex_unlock(&ar->conf_mutex);
3082 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
3083 struct ieee80211_vif *vif,
3084 struct ieee80211_bss_conf *info,
3087 struct ath10k *ar = hw->priv;
3088 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3090 u32 vdev_param, pdev_param, slottime, preamble;
3092 mutex_lock(&ar->conf_mutex);
3094 if (changed & BSS_CHANGED_IBSS)
3095 ath10k_control_ibss(arvif, info, vif->addr);
3097 if (changed & BSS_CHANGED_BEACON_INT) {
3098 arvif->beacon_interval = info->beacon_int;
3099 vdev_param = ar->wmi.vdev_param->beacon_interval;
3100 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3101 arvif->beacon_interval);
3102 ath10k_dbg(ar, ATH10K_DBG_MAC,
3103 "mac vdev %d beacon_interval %d\n",
3104 arvif->vdev_id, arvif->beacon_interval);
3107 ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n",
3108 arvif->vdev_id, ret);
3111 if (changed & BSS_CHANGED_BEACON) {
3112 ath10k_dbg(ar, ATH10K_DBG_MAC,
3113 "vdev %d set beacon tx mode to staggered\n",
3116 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
3117 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
3118 WMI_BEACON_STAGGERED_MODE);
3120 ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n",
3121 arvif->vdev_id, ret);
3124 if (changed & BSS_CHANGED_BEACON_INFO) {
3125 arvif->dtim_period = info->dtim_period;
3127 ath10k_dbg(ar, ATH10K_DBG_MAC,
3128 "mac vdev %d dtim_period %d\n",
3129 arvif->vdev_id, arvif->dtim_period);
3131 vdev_param = ar->wmi.vdev_param->dtim_period;
3132 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3133 arvif->dtim_period);
3135 ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n",
3136 arvif->vdev_id, ret);
3139 if (changed & BSS_CHANGED_SSID &&
3140 vif->type == NL80211_IFTYPE_AP) {
3141 arvif->u.ap.ssid_len = info->ssid_len;
3143 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
3144 arvif->u.ap.hidden_ssid = info->hidden_ssid;
3147 if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid))
3148 ether_addr_copy(arvif->bssid, info->bssid);
3150 if (changed & BSS_CHANGED_BEACON_ENABLED)
3151 ath10k_control_beaconing(arvif, info);
3153 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3154 arvif->use_cts_prot = info->use_cts_prot;
3155 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
3156 arvif->vdev_id, info->use_cts_prot);
3158 ret = ath10k_recalc_rtscts_prot(arvif);
3160 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
3161 arvif->vdev_id, ret);
3164 if (changed & BSS_CHANGED_ERP_SLOT) {
3165 if (info->use_short_slot)
3166 slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
3169 slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
3171 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
3172 arvif->vdev_id, slottime);
3174 vdev_param = ar->wmi.vdev_param->slot_time;
3175 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3178 ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n",
3179 arvif->vdev_id, ret);
3182 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3183 if (info->use_short_preamble)
3184 preamble = WMI_VDEV_PREAMBLE_SHORT;
3186 preamble = WMI_VDEV_PREAMBLE_LONG;
3188 ath10k_dbg(ar, ATH10K_DBG_MAC,
3189 "mac vdev %d preamble %dn",
3190 arvif->vdev_id, preamble);
3192 vdev_param = ar->wmi.vdev_param->preamble;
3193 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3196 ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n",
3197 arvif->vdev_id, ret);
3200 if (changed & BSS_CHANGED_ASSOC) {
3202 /* Workaround: Make sure monitor vdev is not running
3203 * when associating to prevent some firmware revisions
3204 * (e.g. 10.1 and 10.2) from crashing.
3206 if (ar->monitor_started)
3207 ath10k_monitor_stop(ar);
3208 ath10k_bss_assoc(hw, vif, info);
3209 ath10k_monitor_recalc(ar);
3211 ath10k_bss_disassoc(hw, vif);
3215 if (changed & BSS_CHANGED_TXPOWER) {
3216 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n",
3217 arvif->vdev_id, info->txpower);
3219 arvif->txpower = info->txpower;
3220 ret = ath10k_mac_txpower_recalc(ar);
3222 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret);
3225 mutex_unlock(&ar->conf_mutex);
3228 static int ath10k_hw_scan(struct ieee80211_hw *hw,
3229 struct ieee80211_vif *vif,
3230 struct ieee80211_scan_request *hw_req)
3232 struct ath10k *ar = hw->priv;
3233 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3234 struct cfg80211_scan_request *req = &hw_req->req;
3235 struct wmi_start_scan_arg arg;
3239 mutex_lock(&ar->conf_mutex);
3241 spin_lock_bh(&ar->data_lock);
3242 switch (ar->scan.state) {
3243 case ATH10K_SCAN_IDLE:
3244 reinit_completion(&ar->scan.started);
3245 reinit_completion(&ar->scan.completed);
3246 ar->scan.state = ATH10K_SCAN_STARTING;
3247 ar->scan.is_roc = false;
3248 ar->scan.vdev_id = arvif->vdev_id;
3251 case ATH10K_SCAN_STARTING:
3252 case ATH10K_SCAN_RUNNING:
3253 case ATH10K_SCAN_ABORTING:
3257 spin_unlock_bh(&ar->data_lock);
3262 memset(&arg, 0, sizeof(arg));
3263 ath10k_wmi_start_scan_init(ar, &arg);
3264 arg.vdev_id = arvif->vdev_id;
3265 arg.scan_id = ATH10K_SCAN_ID;
3268 arg.scan_ctrl_flags |= WMI_SCAN_ADD_CCK_RATES;
3271 arg.ie_len = req->ie_len;
3272 memcpy(arg.ie, req->ie, arg.ie_len);
3276 arg.n_ssids = req->n_ssids;
3277 for (i = 0; i < arg.n_ssids; i++) {
3278 arg.ssids[i].len = req->ssids[i].ssid_len;
3279 arg.ssids[i].ssid = req->ssids[i].ssid;
3282 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3285 if (req->n_channels) {
3286 arg.n_channels = req->n_channels;
3287 for (i = 0; i < arg.n_channels; i++)
3288 arg.channels[i] = req->channels[i]->center_freq;
3291 ret = ath10k_start_scan(ar, &arg);
3293 ath10k_warn(ar, "failed to start hw scan: %d\n", ret);
3294 spin_lock_bh(&ar->data_lock);
3295 ar->scan.state = ATH10K_SCAN_IDLE;
3296 spin_unlock_bh(&ar->data_lock);
3300 mutex_unlock(&ar->conf_mutex);
3304 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
3305 struct ieee80211_vif *vif)
3307 struct ath10k *ar = hw->priv;
3309 mutex_lock(&ar->conf_mutex);
3310 cancel_delayed_work_sync(&ar->scan.timeout);
3311 ath10k_scan_abort(ar);
3312 mutex_unlock(&ar->conf_mutex);
3315 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
3316 struct ath10k_vif *arvif,
3317 enum set_key_cmd cmd,
3318 struct ieee80211_key_conf *key)
3320 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
3323 /* 10.1 firmware branch requires default key index to be set to group
3324 * key index after installing it. Otherwise FW/HW Txes corrupted
3325 * frames with multi-vif APs. This is not required for main firmware
3326 * branch (e.g. 636).
3328 * FIXME: This has been tested only in AP. It remains unknown if this
3329 * is required for multi-vif STA interfaces on 10.1 */
3331 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
3334 if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
3337 if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
3340 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
3346 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3349 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n",
3350 arvif->vdev_id, ret);
3353 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
3354 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
3355 struct ieee80211_key_conf *key)
3357 struct ath10k *ar = hw->priv;
3358 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3359 struct ath10k_peer *peer;
3360 const u8 *peer_addr;
3361 bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
3362 key->cipher == WLAN_CIPHER_SUITE_WEP104;
3365 if (key->keyidx > WMI_MAX_KEY_INDEX)
3368 mutex_lock(&ar->conf_mutex);
3371 peer_addr = sta->addr;
3372 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
3373 peer_addr = vif->bss_conf.bssid;
3375 peer_addr = vif->addr;
3377 key->hw_key_idx = key->keyidx;
3379 /* the peer should not disappear in mid-way (unless FW goes awry) since
3380 * we already hold conf_mutex. we just make sure its there now. */
3381 spin_lock_bh(&ar->data_lock);
3382 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3383 spin_unlock_bh(&ar->data_lock);
3386 if (cmd == SET_KEY) {
3387 ath10k_warn(ar, "failed to install key for non-existent peer %pM\n",
3392 /* if the peer doesn't exist there is no key to disable
3400 arvif->wep_keys[key->keyidx] = key;
3402 arvif->wep_keys[key->keyidx] = NULL;
3404 if (cmd == DISABLE_KEY)
3405 ath10k_clear_vdev_key(arvif, key);
3408 ret = ath10k_install_key(arvif, key, cmd, peer_addr);
3410 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n",
3411 arvif->vdev_id, peer_addr, ret);
3415 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
3417 spin_lock_bh(&ar->data_lock);
3418 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3419 if (peer && cmd == SET_KEY)
3420 peer->keys[key->keyidx] = key;
3421 else if (peer && cmd == DISABLE_KEY)
3422 peer->keys[key->keyidx] = NULL;
3423 else if (peer == NULL)
3424 /* impossible unless FW goes crazy */
3425 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
3426 spin_unlock_bh(&ar->data_lock);
3429 mutex_unlock(&ar->conf_mutex);
3433 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
3436 struct ath10k_vif *arvif;
3437 struct ath10k_sta *arsta;
3438 struct ieee80211_sta *sta;
3439 u32 changed, bw, nss, smps;
3442 arsta = container_of(wk, struct ath10k_sta, update_wk);
3443 sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
3444 arvif = arsta->arvif;
3447 spin_lock_bh(&ar->data_lock);
3449 changed = arsta->changed;
3456 spin_unlock_bh(&ar->data_lock);
3458 mutex_lock(&ar->conf_mutex);
3460 if (changed & IEEE80211_RC_BW_CHANGED) {
3461 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
3464 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3465 WMI_PEER_CHAN_WIDTH, bw);
3467 ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n",
3468 sta->addr, bw, err);
3471 if (changed & IEEE80211_RC_NSS_CHANGED) {
3472 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
3475 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3478 ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n",
3479 sta->addr, nss, err);
3482 if (changed & IEEE80211_RC_SMPS_CHANGED) {
3483 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
3486 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3487 WMI_PEER_SMPS_STATE, smps);
3489 ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n",
3490 sta->addr, smps, err);
3493 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
3494 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates\n",
3497 err = ath10k_station_assoc(ar, arvif->vif, sta, true);
3499 ath10k_warn(ar, "failed to reassociate station: %pM\n",
3503 mutex_unlock(&ar->conf_mutex);
3506 static int ath10k_sta_state(struct ieee80211_hw *hw,
3507 struct ieee80211_vif *vif,
3508 struct ieee80211_sta *sta,
3509 enum ieee80211_sta_state old_state,
3510 enum ieee80211_sta_state new_state)
3512 struct ath10k *ar = hw->priv;
3513 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3514 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
3518 if (old_state == IEEE80211_STA_NOTEXIST &&
3519 new_state == IEEE80211_STA_NONE) {
3520 memset(arsta, 0, sizeof(*arsta));
3521 arsta->arvif = arvif;
3522 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
3525 /* cancel must be done outside the mutex to avoid deadlock */
3526 if ((old_state == IEEE80211_STA_NONE &&
3527 new_state == IEEE80211_STA_NOTEXIST))
3528 cancel_work_sync(&arsta->update_wk);
3530 mutex_lock(&ar->conf_mutex);
3532 if (old_state == IEEE80211_STA_NOTEXIST &&
3533 new_state == IEEE80211_STA_NONE) {
3535 * New station addition.
3537 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features))
3538 max_num_peers = TARGET_10X_NUM_PEERS_MAX - 1;
3540 max_num_peers = TARGET_NUM_PEERS;
3542 if (ar->num_peers >= max_num_peers) {
3543 ath10k_warn(ar, "number of peers exceeded: peers number %d (max peers %d)\n",
3544 ar->num_peers, max_num_peers);
3549 ath10k_dbg(ar, ATH10K_DBG_MAC,
3550 "mac vdev %d peer create %pM (new sta) num_peers %d\n",
3551 arvif->vdev_id, sta->addr, ar->num_peers);
3553 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr);
3555 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
3556 sta->addr, arvif->vdev_id, ret);
3558 if (vif->type == NL80211_IFTYPE_STATION) {
3559 WARN_ON(arvif->is_started);
3561 ret = ath10k_vdev_start(arvif);
3563 ath10k_warn(ar, "failed to start vdev %i: %d\n",
3564 arvif->vdev_id, ret);
3565 WARN_ON(ath10k_peer_delete(ar, arvif->vdev_id,
3570 arvif->is_started = true;
3572 } else if ((old_state == IEEE80211_STA_NONE &&
3573 new_state == IEEE80211_STA_NOTEXIST)) {
3575 * Existing station deletion.
3577 ath10k_dbg(ar, ATH10K_DBG_MAC,
3578 "mac vdev %d peer delete %pM (sta gone)\n",
3579 arvif->vdev_id, sta->addr);
3581 if (vif->type == NL80211_IFTYPE_STATION) {
3582 WARN_ON(!arvif->is_started);
3584 ret = ath10k_vdev_stop(arvif);
3586 ath10k_warn(ar, "failed to stop vdev %i: %d\n",
3587 arvif->vdev_id, ret);
3589 arvif->is_started = false;
3592 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
3594 ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
3595 sta->addr, arvif->vdev_id, ret);
3597 } else if (old_state == IEEE80211_STA_AUTH &&
3598 new_state == IEEE80211_STA_ASSOC &&
3599 (vif->type == NL80211_IFTYPE_AP ||
3600 vif->type == NL80211_IFTYPE_ADHOC)) {
3604 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n",
3607 ret = ath10k_station_assoc(ar, vif, sta, false);
3609 ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n",
3610 sta->addr, arvif->vdev_id, ret);
3611 } else if (old_state == IEEE80211_STA_ASSOC &&
3612 new_state == IEEE80211_STA_AUTH &&
3613 (vif->type == NL80211_IFTYPE_AP ||
3614 vif->type == NL80211_IFTYPE_ADHOC)) {
3618 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
3621 ret = ath10k_station_disassoc(ar, vif, sta);
3623 ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n",
3624 sta->addr, arvif->vdev_id, ret);
3627 mutex_unlock(&ar->conf_mutex);
3631 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
3632 u16 ac, bool enable)
3634 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3638 lockdep_assert_held(&ar->conf_mutex);
3640 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
3644 case IEEE80211_AC_VO:
3645 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
3646 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
3648 case IEEE80211_AC_VI:
3649 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
3650 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
3652 case IEEE80211_AC_BE:
3653 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
3654 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
3656 case IEEE80211_AC_BK:
3657 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
3658 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
3663 arvif->u.sta.uapsd |= value;
3665 arvif->u.sta.uapsd &= ~value;
3667 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3668 WMI_STA_PS_PARAM_UAPSD,
3669 arvif->u.sta.uapsd);
3671 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret);
3675 if (arvif->u.sta.uapsd)
3676 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
3678 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
3680 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3681 WMI_STA_PS_PARAM_RX_WAKE_POLICY,
3684 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret);
3690 static int ath10k_conf_tx(struct ieee80211_hw *hw,
3691 struct ieee80211_vif *vif, u16 ac,
3692 const struct ieee80211_tx_queue_params *params)
3694 struct ath10k *ar = hw->priv;
3695 struct wmi_wmm_params_arg *p = NULL;
3698 mutex_lock(&ar->conf_mutex);
3701 case IEEE80211_AC_VO:
3702 p = &ar->wmm_params.ac_vo;
3704 case IEEE80211_AC_VI:
3705 p = &ar->wmm_params.ac_vi;
3707 case IEEE80211_AC_BE:
3708 p = &ar->wmm_params.ac_be;
3710 case IEEE80211_AC_BK:
3711 p = &ar->wmm_params.ac_bk;
3720 p->cwmin = params->cw_min;
3721 p->cwmax = params->cw_max;
3722 p->aifs = params->aifs;
3725 * The channel time duration programmed in the HW is in absolute
3726 * microseconds, while mac80211 gives the txop in units of
3729 p->txop = params->txop * 32;
3731 /* FIXME: FW accepts wmm params per hw, not per vif */
3732 ret = ath10k_wmi_pdev_set_wmm_params(ar, &ar->wmm_params);
3734 ath10k_warn(ar, "failed to set wmm params: %d\n", ret);
3738 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
3740 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret);
3743 mutex_unlock(&ar->conf_mutex);
3747 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
3749 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
3750 struct ieee80211_vif *vif,
3751 struct ieee80211_channel *chan,
3753 enum ieee80211_roc_type type)
3755 struct ath10k *ar = hw->priv;
3756 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3757 struct wmi_start_scan_arg arg;
3760 mutex_lock(&ar->conf_mutex);
3762 spin_lock_bh(&ar->data_lock);
3763 switch (ar->scan.state) {
3764 case ATH10K_SCAN_IDLE:
3765 reinit_completion(&ar->scan.started);
3766 reinit_completion(&ar->scan.completed);
3767 reinit_completion(&ar->scan.on_channel);
3768 ar->scan.state = ATH10K_SCAN_STARTING;
3769 ar->scan.is_roc = true;
3770 ar->scan.vdev_id = arvif->vdev_id;
3771 ar->scan.roc_freq = chan->center_freq;
3774 case ATH10K_SCAN_STARTING:
3775 case ATH10K_SCAN_RUNNING:
3776 case ATH10K_SCAN_ABORTING:
3780 spin_unlock_bh(&ar->data_lock);
3785 memset(&arg, 0, sizeof(arg));
3786 ath10k_wmi_start_scan_init(ar, &arg);
3787 arg.vdev_id = arvif->vdev_id;
3788 arg.scan_id = ATH10K_SCAN_ID;
3790 arg.channels[0] = chan->center_freq;
3791 arg.dwell_time_active = duration;
3792 arg.dwell_time_passive = duration;
3793 arg.max_scan_time = 2 * duration;
3794 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3795 arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
3797 ret = ath10k_start_scan(ar, &arg);
3799 ath10k_warn(ar, "failed to start roc scan: %d\n", ret);
3800 spin_lock_bh(&ar->data_lock);
3801 ar->scan.state = ATH10K_SCAN_IDLE;
3802 spin_unlock_bh(&ar->data_lock);
3806 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
3808 ath10k_warn(ar, "failed to switch to channel for roc scan\n");
3810 ret = ath10k_scan_stop(ar);
3812 ath10k_warn(ar, "failed to stop scan: %d\n", ret);
3820 mutex_unlock(&ar->conf_mutex);
3824 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
3826 struct ath10k *ar = hw->priv;
3828 mutex_lock(&ar->conf_mutex);
3829 cancel_delayed_work_sync(&ar->scan.timeout);
3830 ath10k_scan_abort(ar);
3831 mutex_unlock(&ar->conf_mutex);
3837 * Both RTS and Fragmentation threshold are interface-specific
3838 * in ath10k, but device-specific in mac80211.
3841 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
3843 struct ath10k *ar = hw->priv;
3844 struct ath10k_vif *arvif;
3847 mutex_lock(&ar->conf_mutex);
3848 list_for_each_entry(arvif, &ar->arvifs, list) {
3849 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
3850 arvif->vdev_id, value);
3852 ret = ath10k_mac_set_rts(arvif, value);
3854 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n",
3855 arvif->vdev_id, ret);
3859 mutex_unlock(&ar->conf_mutex);
3864 static int ath10k_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
3866 struct ath10k *ar = hw->priv;
3867 struct ath10k_vif *arvif;
3870 mutex_lock(&ar->conf_mutex);
3871 list_for_each_entry(arvif, &ar->arvifs, list) {
3872 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d fragmentation threshold %d\n",
3873 arvif->vdev_id, value);
3875 ret = ath10k_mac_set_rts(arvif, value);
3877 ath10k_warn(ar, "failed to set fragmentation threshold for vdev %d: %d\n",
3878 arvif->vdev_id, ret);
3882 mutex_unlock(&ar->conf_mutex);
3887 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
3888 u32 queues, bool drop)
3890 struct ath10k *ar = hw->priv;
3894 /* mac80211 doesn't care if we really xmit queued frames or not
3895 * we'll collect those frames either way if we stop/delete vdevs */
3899 mutex_lock(&ar->conf_mutex);
3901 if (ar->state == ATH10K_STATE_WEDGED)
3904 ret = wait_event_timeout(ar->htt.empty_tx_wq, ({
3907 spin_lock_bh(&ar->htt.tx_lock);
3908 empty = (ar->htt.num_pending_tx == 0);
3909 spin_unlock_bh(&ar->htt.tx_lock);
3911 skip = (ar->state == ATH10K_STATE_WEDGED);
3914 }), ATH10K_FLUSH_TIMEOUT_HZ);
3916 if (ret <= 0 || skip)
3917 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %i\n",
3918 skip, ar->state, ret);
3921 mutex_unlock(&ar->conf_mutex);
3924 /* TODO: Implement this function properly
3925 * For now it is needed to reply to Probe Requests in IBSS mode.
3926 * Propably we need this information from FW.
3928 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
3934 static int ath10k_suspend(struct ieee80211_hw *hw,
3935 struct cfg80211_wowlan *wowlan)
3937 struct ath10k *ar = hw->priv;
3940 mutex_lock(&ar->conf_mutex);
3942 ret = ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND);
3944 if (ret == -ETIMEDOUT)
3950 ret = ath10k_hif_suspend(ar);
3952 ath10k_warn(ar, "failed to suspend hif: %d\n", ret);
3959 ret = ath10k_wmi_pdev_resume_target(ar);
3961 ath10k_warn(ar, "failed to resume target: %d\n", ret);
3965 mutex_unlock(&ar->conf_mutex);
3969 static int ath10k_resume(struct ieee80211_hw *hw)
3971 struct ath10k *ar = hw->priv;
3974 mutex_lock(&ar->conf_mutex);
3976 ret = ath10k_hif_resume(ar);
3978 ath10k_warn(ar, "failed to resume hif: %d\n", ret);
3983 ret = ath10k_wmi_pdev_resume_target(ar);
3985 ath10k_warn(ar, "failed to resume target: %d\n", ret);
3992 mutex_unlock(&ar->conf_mutex);
3997 static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
3998 enum ieee80211_reconfig_type reconfig_type)
4000 struct ath10k *ar = hw->priv;
4002 if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
4005 mutex_lock(&ar->conf_mutex);
4007 /* If device failed to restart it will be in a different state, e.g.
4008 * ATH10K_STATE_WEDGED */
4009 if (ar->state == ATH10K_STATE_RESTARTED) {
4010 ath10k_info(ar, "device successfully recovered\n");
4011 ar->state = ATH10K_STATE_ON;
4014 mutex_unlock(&ar->conf_mutex);
4017 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
4018 struct survey_info *survey)
4020 struct ath10k *ar = hw->priv;
4021 struct ieee80211_supported_band *sband;
4022 struct survey_info *ar_survey = &ar->survey[idx];
4025 mutex_lock(&ar->conf_mutex);
4027 sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
4028 if (sband && idx >= sband->n_channels) {
4029 idx -= sband->n_channels;
4034 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
4036 if (!sband || idx >= sband->n_channels) {
4041 spin_lock_bh(&ar->data_lock);
4042 memcpy(survey, ar_survey, sizeof(*survey));
4043 spin_unlock_bh(&ar->data_lock);
4045 survey->channel = &sband->channels[idx];
4048 mutex_unlock(&ar->conf_mutex);
4052 /* Helper table for legacy fixed_rate/bitrate_mask */
4053 static const u8 cck_ofdm_rate[] = {
4070 /* Check if only one bit set */
4071 static int ath10k_check_single_mask(u32 mask)
4079 mask &= ~BIT(bit - 1);
4087 ath10k_default_bitrate_mask(struct ath10k *ar,
4088 enum ieee80211_band band,
4089 const struct cfg80211_bitrate_mask *mask)
4091 u32 legacy = 0x00ff;
4096 case IEEE80211_BAND_2GHZ:
4100 case IEEE80211_BAND_5GHZ:
4106 if (mask->control[band].legacy != legacy)
4109 for (i = 0; i < ar->num_rf_chains; i++)
4110 if (mask->control[band].ht_mcs[i] != ht)
4113 for (i = 0; i < ar->num_rf_chains; i++)
4114 if (mask->control[band].vht_mcs[i] != vht)
4121 ath10k_bitrate_mask_nss(const struct cfg80211_bitrate_mask *mask,
4122 enum ieee80211_band band,
4125 int ht_nss = 0, vht_nss = 0, i;
4128 if (ath10k_check_single_mask(mask->control[band].legacy))
4132 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
4133 if (mask->control[band].ht_mcs[i] == 0xff)
4135 else if (mask->control[band].ht_mcs[i] == 0x00)
4144 for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
4145 if (mask->control[band].vht_mcs[i] == 0x03ff)
4147 else if (mask->control[band].vht_mcs[i] == 0x0000)
4155 if (ht_nss > 0 && vht_nss > 0)
4159 *fixed_nss = ht_nss;
4161 *fixed_nss = vht_nss;
4169 ath10k_bitrate_mask_correct(const struct cfg80211_bitrate_mask *mask,
4170 enum ieee80211_band band,
4171 enum wmi_rate_preamble *preamble)
4173 int legacy = 0, ht = 0, vht = 0, i;
4175 *preamble = WMI_RATE_PREAMBLE_OFDM;
4178 legacy = ath10k_check_single_mask(mask->control[band].legacy);
4183 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4184 ht += ath10k_check_single_mask(mask->control[band].ht_mcs[i]);
4189 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4190 vht += ath10k_check_single_mask(mask->control[band].vht_mcs[i]);
4194 /* Currently we support only one fixed_rate */
4195 if ((legacy + ht + vht) != 1)
4199 *preamble = WMI_RATE_PREAMBLE_HT;
4201 *preamble = WMI_RATE_PREAMBLE_VHT;
4207 ath10k_bitrate_mask_rate(struct ath10k *ar,
4208 const struct cfg80211_bitrate_mask *mask,
4209 enum ieee80211_band band,
4213 u8 rate = 0, pream = 0, nss = 0, i;
4214 enum wmi_rate_preamble preamble;
4216 /* Check if single rate correct */
4217 if (!ath10k_bitrate_mask_correct(mask, band, &preamble))
4223 case WMI_RATE_PREAMBLE_CCK:
4224 case WMI_RATE_PREAMBLE_OFDM:
4225 i = ffs(mask->control[band].legacy) - 1;
4227 if (band == IEEE80211_BAND_2GHZ && i < 4)
4228 pream = WMI_RATE_PREAMBLE_CCK;
4230 if (band == IEEE80211_BAND_5GHZ)
4233 if (i >= ARRAY_SIZE(cck_ofdm_rate))
4236 rate = cck_ofdm_rate[i];
4238 case WMI_RATE_PREAMBLE_HT:
4239 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4240 if (mask->control[band].ht_mcs[i])
4243 if (i == IEEE80211_HT_MCS_MASK_LEN)
4246 rate = ffs(mask->control[band].ht_mcs[i]) - 1;
4249 case WMI_RATE_PREAMBLE_VHT:
4250 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4251 if (mask->control[band].vht_mcs[i])
4254 if (i == NL80211_VHT_NSS_MAX)
4257 rate = ffs(mask->control[band].vht_mcs[i]) - 1;
4262 *fixed_nss = nss + 1;
4266 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac fixed rate pream 0x%02x nss 0x%02x rate 0x%02x\n",
4269 *fixed_rate = pream | nss | rate;
4274 static bool ath10k_get_fixed_rate_nss(struct ath10k *ar,
4275 const struct cfg80211_bitrate_mask *mask,
4276 enum ieee80211_band band,
4280 /* First check full NSS mask, if we can simply limit NSS */
4281 if (ath10k_bitrate_mask_nss(mask, band, fixed_nss))
4284 /* Next Check single rate is set */
4285 return ath10k_bitrate_mask_rate(ar, mask, band, fixed_rate, fixed_nss);
4288 static int ath10k_set_fixed_rate_param(struct ath10k_vif *arvif,
4293 struct ath10k *ar = arvif->ar;
4297 mutex_lock(&ar->conf_mutex);
4299 if (arvif->fixed_rate == fixed_rate &&
4300 arvif->fixed_nss == fixed_nss &&
4301 arvif->force_sgi == force_sgi)
4304 if (fixed_rate == WMI_FIXED_RATE_NONE)
4305 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac disable fixed bitrate mask\n");
4308 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac force sgi\n");
4310 vdev_param = ar->wmi.vdev_param->fixed_rate;
4311 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4312 vdev_param, fixed_rate);
4314 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n",
4320 arvif->fixed_rate = fixed_rate;
4322 vdev_param = ar->wmi.vdev_param->nss;
4323 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4324 vdev_param, fixed_nss);
4327 ath10k_warn(ar, "failed to set fixed nss param %d: %d\n",
4333 arvif->fixed_nss = fixed_nss;
4335 vdev_param = ar->wmi.vdev_param->sgi;
4336 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4340 ath10k_warn(ar, "failed to set sgi param %d: %d\n",
4346 arvif->force_sgi = force_sgi;
4349 mutex_unlock(&ar->conf_mutex);
4353 static int ath10k_set_bitrate_mask(struct ieee80211_hw *hw,
4354 struct ieee80211_vif *vif,
4355 const struct cfg80211_bitrate_mask *mask)
4357 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4358 struct ath10k *ar = arvif->ar;
4359 enum ieee80211_band band = ar->hw->conf.chandef.chan->band;
4360 u8 fixed_rate = WMI_FIXED_RATE_NONE;
4361 u8 fixed_nss = ar->num_rf_chains;
4364 force_sgi = mask->control[band].gi;
4365 if (force_sgi == NL80211_TXRATE_FORCE_LGI)
4368 if (!ath10k_default_bitrate_mask(ar, band, mask)) {
4369 if (!ath10k_get_fixed_rate_nss(ar, mask, band,
4375 if (fixed_rate == WMI_FIXED_RATE_NONE && force_sgi) {
4376 ath10k_warn(ar, "failed to force SGI usage for default rate settings\n");
4380 return ath10k_set_fixed_rate_param(arvif, fixed_rate,
4381 fixed_nss, force_sgi);
4384 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
4385 struct ieee80211_vif *vif,
4386 struct ieee80211_sta *sta,
4389 struct ath10k *ar = hw->priv;
4390 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
4393 spin_lock_bh(&ar->data_lock);
4395 ath10k_dbg(ar, ATH10K_DBG_MAC,
4396 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
4397 sta->addr, changed, sta->bandwidth, sta->rx_nss,
4400 if (changed & IEEE80211_RC_BW_CHANGED) {
4401 bw = WMI_PEER_CHWIDTH_20MHZ;
4403 switch (sta->bandwidth) {
4404 case IEEE80211_STA_RX_BW_20:
4405 bw = WMI_PEER_CHWIDTH_20MHZ;
4407 case IEEE80211_STA_RX_BW_40:
4408 bw = WMI_PEER_CHWIDTH_40MHZ;
4410 case IEEE80211_STA_RX_BW_80:
4411 bw = WMI_PEER_CHWIDTH_80MHZ;
4413 case IEEE80211_STA_RX_BW_160:
4414 ath10k_warn(ar, "Invalid bandwith %d in rc update for %pM\n",
4415 sta->bandwidth, sta->addr);
4416 bw = WMI_PEER_CHWIDTH_20MHZ;
4423 if (changed & IEEE80211_RC_NSS_CHANGED)
4424 arsta->nss = sta->rx_nss;
4426 if (changed & IEEE80211_RC_SMPS_CHANGED) {
4427 smps = WMI_PEER_SMPS_PS_NONE;
4429 switch (sta->smps_mode) {
4430 case IEEE80211_SMPS_AUTOMATIC:
4431 case IEEE80211_SMPS_OFF:
4432 smps = WMI_PEER_SMPS_PS_NONE;
4434 case IEEE80211_SMPS_STATIC:
4435 smps = WMI_PEER_SMPS_STATIC;
4437 case IEEE80211_SMPS_DYNAMIC:
4438 smps = WMI_PEER_SMPS_DYNAMIC;
4440 case IEEE80211_SMPS_NUM_MODES:
4441 ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
4442 sta->smps_mode, sta->addr);
4443 smps = WMI_PEER_SMPS_PS_NONE;
4450 arsta->changed |= changed;
4452 spin_unlock_bh(&ar->data_lock);
4454 ieee80211_queue_work(hw, &arsta->update_wk);
4457 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
4460 * FIXME: Return 0 for time being. Need to figure out whether FW
4461 * has the API to fetch 64-bit local TSF
4467 static int ath10k_ampdu_action(struct ieee80211_hw *hw,
4468 struct ieee80211_vif *vif,
4469 enum ieee80211_ampdu_mlme_action action,
4470 struct ieee80211_sta *sta, u16 tid, u16 *ssn,
4473 struct ath10k *ar = hw->priv;
4474 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4476 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
4477 arvif->vdev_id, sta->addr, tid, action);
4480 case IEEE80211_AMPDU_RX_START:
4481 case IEEE80211_AMPDU_RX_STOP:
4482 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
4483 * creation/removal. Do we need to verify this?
4486 case IEEE80211_AMPDU_TX_START:
4487 case IEEE80211_AMPDU_TX_STOP_CONT:
4488 case IEEE80211_AMPDU_TX_STOP_FLUSH:
4489 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
4490 case IEEE80211_AMPDU_TX_OPERATIONAL:
4491 /* Firmware offloads Tx aggregation entirely so deny mac80211
4492 * Tx aggregation requests.
4500 static const struct ieee80211_ops ath10k_ops = {
4502 .start = ath10k_start,
4503 .stop = ath10k_stop,
4504 .config = ath10k_config,
4505 .add_interface = ath10k_add_interface,
4506 .remove_interface = ath10k_remove_interface,
4507 .configure_filter = ath10k_configure_filter,
4508 .bss_info_changed = ath10k_bss_info_changed,
4509 .hw_scan = ath10k_hw_scan,
4510 .cancel_hw_scan = ath10k_cancel_hw_scan,
4511 .set_key = ath10k_set_key,
4512 .sta_state = ath10k_sta_state,
4513 .conf_tx = ath10k_conf_tx,
4514 .remain_on_channel = ath10k_remain_on_channel,
4515 .cancel_remain_on_channel = ath10k_cancel_remain_on_channel,
4516 .set_rts_threshold = ath10k_set_rts_threshold,
4517 .set_frag_threshold = ath10k_set_frag_threshold,
4518 .flush = ath10k_flush,
4519 .tx_last_beacon = ath10k_tx_last_beacon,
4520 .set_antenna = ath10k_set_antenna,
4521 .get_antenna = ath10k_get_antenna,
4522 .reconfig_complete = ath10k_reconfig_complete,
4523 .get_survey = ath10k_get_survey,
4524 .set_bitrate_mask = ath10k_set_bitrate_mask,
4525 .sta_rc_update = ath10k_sta_rc_update,
4526 .get_tsf = ath10k_get_tsf,
4527 .ampdu_action = ath10k_ampdu_action,
4528 .get_et_sset_count = ath10k_debug_get_et_sset_count,
4529 .get_et_stats = ath10k_debug_get_et_stats,
4530 .get_et_strings = ath10k_debug_get_et_strings,
4532 CFG80211_TESTMODE_CMD(ath10k_tm_cmd)
4535 .suspend = ath10k_suspend,
4536 .resume = ath10k_resume,
4540 #define RATETAB_ENT(_rate, _rateid, _flags) { \
4541 .bitrate = (_rate), \
4542 .flags = (_flags), \
4543 .hw_value = (_rateid), \
4546 #define CHAN2G(_channel, _freq, _flags) { \
4547 .band = IEEE80211_BAND_2GHZ, \
4548 .hw_value = (_channel), \
4549 .center_freq = (_freq), \
4550 .flags = (_flags), \
4551 .max_antenna_gain = 0, \
4555 #define CHAN5G(_channel, _freq, _flags) { \
4556 .band = IEEE80211_BAND_5GHZ, \
4557 .hw_value = (_channel), \
4558 .center_freq = (_freq), \
4559 .flags = (_flags), \
4560 .max_antenna_gain = 0, \
4564 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
4574 CHAN2G(10, 2457, 0),
4575 CHAN2G(11, 2462, 0),
4576 CHAN2G(12, 2467, 0),
4577 CHAN2G(13, 2472, 0),
4578 CHAN2G(14, 2484, 0),
4581 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
4582 CHAN5G(36, 5180, 0),
4583 CHAN5G(40, 5200, 0),
4584 CHAN5G(44, 5220, 0),
4585 CHAN5G(48, 5240, 0),
4586 CHAN5G(52, 5260, 0),
4587 CHAN5G(56, 5280, 0),
4588 CHAN5G(60, 5300, 0),
4589 CHAN5G(64, 5320, 0),
4590 CHAN5G(100, 5500, 0),
4591 CHAN5G(104, 5520, 0),
4592 CHAN5G(108, 5540, 0),
4593 CHAN5G(112, 5560, 0),
4594 CHAN5G(116, 5580, 0),
4595 CHAN5G(120, 5600, 0),
4596 CHAN5G(124, 5620, 0),
4597 CHAN5G(128, 5640, 0),
4598 CHAN5G(132, 5660, 0),
4599 CHAN5G(136, 5680, 0),
4600 CHAN5G(140, 5700, 0),
4601 CHAN5G(149, 5745, 0),
4602 CHAN5G(153, 5765, 0),
4603 CHAN5G(157, 5785, 0),
4604 CHAN5G(161, 5805, 0),
4605 CHAN5G(165, 5825, 0),
4608 static struct ieee80211_rate ath10k_rates[] = {
4610 RATETAB_ENT(10, 0x82, 0),
4611 RATETAB_ENT(20, 0x84, 0),
4612 RATETAB_ENT(55, 0x8b, 0),
4613 RATETAB_ENT(110, 0x96, 0),
4615 RATETAB_ENT(60, 0x0c, 0),
4616 RATETAB_ENT(90, 0x12, 0),
4617 RATETAB_ENT(120, 0x18, 0),
4618 RATETAB_ENT(180, 0x24, 0),
4619 RATETAB_ENT(240, 0x30, 0),
4620 RATETAB_ENT(360, 0x48, 0),
4621 RATETAB_ENT(480, 0x60, 0),
4622 RATETAB_ENT(540, 0x6c, 0),
4625 #define ath10k_a_rates (ath10k_rates + 4)
4626 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - 4)
4627 #define ath10k_g_rates (ath10k_rates + 0)
4628 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
4630 struct ath10k *ath10k_mac_create(size_t priv_size)
4632 struct ieee80211_hw *hw;
4635 hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops);
4645 void ath10k_mac_destroy(struct ath10k *ar)
4647 ieee80211_free_hw(ar->hw);
4650 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
4653 .types = BIT(NL80211_IFTYPE_STATION)
4654 | BIT(NL80211_IFTYPE_P2P_CLIENT)
4658 .types = BIT(NL80211_IFTYPE_P2P_GO)
4662 .types = BIT(NL80211_IFTYPE_AP)
4666 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
4669 .types = BIT(NL80211_IFTYPE_AP)
4673 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
4675 .limits = ath10k_if_limits,
4676 .n_limits = ARRAY_SIZE(ath10k_if_limits),
4677 .max_interfaces = 8,
4678 .num_different_channels = 1,
4679 .beacon_int_infra_match = true,
4683 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
4685 .limits = ath10k_10x_if_limits,
4686 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
4687 .max_interfaces = 8,
4688 .num_different_channels = 1,
4689 .beacon_int_infra_match = true,
4690 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
4691 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
4692 BIT(NL80211_CHAN_WIDTH_20) |
4693 BIT(NL80211_CHAN_WIDTH_40) |
4694 BIT(NL80211_CHAN_WIDTH_80),
4699 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
4701 struct ieee80211_sta_vht_cap vht_cap = {0};
4705 vht_cap.vht_supported = 1;
4706 vht_cap.cap = ar->vht_cap_info;
4709 for (i = 0; i < 8; i++) {
4710 if (i < ar->num_rf_chains)
4711 mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2);
4713 mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2);
4716 vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
4717 vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
4722 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
4725 struct ieee80211_sta_ht_cap ht_cap = {0};
4727 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
4730 ht_cap.ht_supported = 1;
4731 ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
4732 ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
4733 ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
4734 ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
4735 ht_cap.cap |= WLAN_HT_CAP_SM_PS_STATIC << IEEE80211_HT_CAP_SM_PS_SHIFT;
4737 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
4738 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
4740 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
4741 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
4743 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
4746 smps = WLAN_HT_CAP_SM_PS_DYNAMIC;
4747 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
4752 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
4753 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
4755 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
4758 stbc = ar->ht_cap_info;
4759 stbc &= WMI_HT_CAP_RX_STBC;
4760 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
4761 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
4762 stbc &= IEEE80211_HT_CAP_RX_STBC;
4767 if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
4768 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
4770 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
4771 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
4773 /* max AMSDU is implicitly taken from vht_cap_info */
4774 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
4775 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
4777 for (i = 0; i < ar->num_rf_chains; i++)
4778 ht_cap.mcs.rx_mask[i] = 0xFF;
4780 ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
4785 static void ath10k_get_arvif_iter(void *data, u8 *mac,
4786 struct ieee80211_vif *vif)
4788 struct ath10k_vif_iter *arvif_iter = data;
4789 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4791 if (arvif->vdev_id == arvif_iter->vdev_id)
4792 arvif_iter->arvif = arvif;
4795 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
4797 struct ath10k_vif_iter arvif_iter;
4800 memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
4801 arvif_iter.vdev_id = vdev_id;
4803 flags = IEEE80211_IFACE_ITER_RESUME_ALL;
4804 ieee80211_iterate_active_interfaces_atomic(ar->hw,
4806 ath10k_get_arvif_iter,
4808 if (!arvif_iter.arvif) {
4809 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id);
4813 return arvif_iter.arvif;
4816 int ath10k_mac_register(struct ath10k *ar)
4818 struct ieee80211_supported_band *band;
4819 struct ieee80211_sta_vht_cap vht_cap;
4820 struct ieee80211_sta_ht_cap ht_cap;
4824 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
4826 SET_IEEE80211_DEV(ar->hw, ar->dev);
4828 ht_cap = ath10k_get_ht_cap(ar);
4829 vht_cap = ath10k_create_vht_cap(ar);
4831 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
4832 channels = kmemdup(ath10k_2ghz_channels,
4833 sizeof(ath10k_2ghz_channels),
4840 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
4841 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
4842 band->channels = channels;
4843 band->n_bitrates = ath10k_g_rates_size;
4844 band->bitrates = ath10k_g_rates;
4845 band->ht_cap = ht_cap;
4847 /* vht is not supported in 2.4 GHz */
4849 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
4852 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
4853 channels = kmemdup(ath10k_5ghz_channels,
4854 sizeof(ath10k_5ghz_channels),
4861 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
4862 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
4863 band->channels = channels;
4864 band->n_bitrates = ath10k_a_rates_size;
4865 band->bitrates = ath10k_a_rates;
4866 band->ht_cap = ht_cap;
4867 band->vht_cap = vht_cap;
4868 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
4871 ar->hw->wiphy->interface_modes =
4872 BIT(NL80211_IFTYPE_STATION) |
4873 BIT(NL80211_IFTYPE_AP);
4875 ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask;
4876 ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask;
4878 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
4879 ar->hw->wiphy->interface_modes |=
4880 BIT(NL80211_IFTYPE_P2P_CLIENT) |
4881 BIT(NL80211_IFTYPE_P2P_GO);
4883 ar->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4884 IEEE80211_HW_SUPPORTS_PS |
4885 IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
4886 IEEE80211_HW_SUPPORTS_UAPSD |
4887 IEEE80211_HW_MFP_CAPABLE |
4888 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4889 IEEE80211_HW_HAS_RATE_CONTROL |
4890 IEEE80211_HW_AP_LINK_PS |
4891 IEEE80211_HW_SPECTRUM_MGMT;
4893 /* MSDU can have HTT TX fragment pushed in front. The additional 4
4894 * bytes is used for padding/alignment if necessary. */
4895 ar->hw->extra_tx_headroom += sizeof(struct htt_data_tx_desc_frag)*2 + 4;
4897 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS;
4899 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
4900 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS;
4902 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
4903 ar->hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
4904 ar->hw->flags |= IEEE80211_HW_TX_AMPDU_SETUP_IN_HW;
4907 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
4908 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
4910 ar->hw->vif_data_size = sizeof(struct ath10k_vif);
4911 ar->hw->sta_data_size = sizeof(struct ath10k_sta);
4913 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
4915 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
4916 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
4917 ar->hw->wiphy->max_remain_on_channel_duration = 5000;
4919 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
4921 * on LL hardware queues are managed entirely by the FW
4922 * so we only advertise to mac we can do the queues thing
4926 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
4927 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
4928 ar->hw->wiphy->n_iface_combinations =
4929 ARRAY_SIZE(ath10k_10x_if_comb);
4931 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
4932 ar->hw->wiphy->n_iface_combinations =
4933 ARRAY_SIZE(ath10k_if_comb);
4935 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC);
4938 ar->hw->netdev_features = NETIF_F_HW_CSUM;
4940 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
4941 /* Init ath dfs pattern detector */
4942 ar->ath_common.debug_mask = ATH_DBG_DFS;
4943 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
4946 if (!ar->dfs_detector)
4947 ath10k_warn(ar, "failed to initialise DFS pattern detector\n");
4950 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
4951 ath10k_reg_notifier);
4953 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret);
4957 ret = ieee80211_register_hw(ar->hw);
4959 ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
4963 if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
4964 ret = regulatory_hint(ar->hw->wiphy,
4965 ar->ath_common.regulatory.alpha2);
4967 goto err_unregister;
4973 ieee80211_unregister_hw(ar->hw);
4975 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
4976 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
4981 void ath10k_mac_unregister(struct ath10k *ar)
4983 ieee80211_unregister_hw(ar->hw);
4985 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
4986 ar->dfs_detector->exit(ar->dfs_detector);
4988 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
4989 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
4991 SET_IEEE80211_DEV(ar->hw, NULL);