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>
34 static int ath10k_send_key(struct ath10k_vif *arvif,
35 struct ieee80211_key_conf *key,
39 struct wmi_vdev_install_key_arg arg = {
40 .vdev_id = arvif->vdev_id,
41 .key_idx = key->keyidx,
42 .key_len = key->keylen,
47 lockdep_assert_held(&arvif->ar->conf_mutex);
49 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
50 arg.key_flags = WMI_KEY_PAIRWISE;
52 arg.key_flags = WMI_KEY_GROUP;
54 switch (key->cipher) {
55 case WLAN_CIPHER_SUITE_CCMP:
56 arg.key_cipher = WMI_CIPHER_AES_CCM;
57 if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
58 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT;
60 key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
62 case WLAN_CIPHER_SUITE_TKIP:
63 arg.key_cipher = WMI_CIPHER_TKIP;
64 arg.key_txmic_len = 8;
65 arg.key_rxmic_len = 8;
67 case WLAN_CIPHER_SUITE_WEP40:
68 case WLAN_CIPHER_SUITE_WEP104:
69 arg.key_cipher = WMI_CIPHER_WEP;
70 /* AP/IBSS mode requires self-key to be groupwise
71 * Otherwise pairwise key must be set */
72 if (memcmp(macaddr, arvif->vif->addr, ETH_ALEN))
73 arg.key_flags = WMI_KEY_PAIRWISE;
76 ath10k_warn("cipher %d is not supported\n", key->cipher);
80 if (cmd == DISABLE_KEY) {
81 arg.key_cipher = WMI_CIPHER_NONE;
85 return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
88 static int ath10k_install_key(struct ath10k_vif *arvif,
89 struct ieee80211_key_conf *key,
93 struct ath10k *ar = arvif->ar;
96 lockdep_assert_held(&ar->conf_mutex);
98 reinit_completion(&ar->install_key_done);
100 ret = ath10k_send_key(arvif, key, cmd, macaddr);
104 ret = wait_for_completion_timeout(&ar->install_key_done, 3*HZ);
111 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
114 struct ath10k *ar = arvif->ar;
115 struct ath10k_peer *peer;
119 lockdep_assert_held(&ar->conf_mutex);
121 spin_lock_bh(&ar->data_lock);
122 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
123 spin_unlock_bh(&ar->data_lock);
128 for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) {
129 if (arvif->wep_keys[i] == NULL)
132 ret = ath10k_install_key(arvif, arvif->wep_keys[i], SET_KEY,
137 peer->keys[i] = arvif->wep_keys[i];
143 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
146 struct ath10k *ar = arvif->ar;
147 struct ath10k_peer *peer;
152 lockdep_assert_held(&ar->conf_mutex);
154 spin_lock_bh(&ar->data_lock);
155 peer = ath10k_peer_find(ar, arvif->vdev_id, addr);
156 spin_unlock_bh(&ar->data_lock);
161 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
162 if (peer->keys[i] == NULL)
165 ret = ath10k_install_key(arvif, peer->keys[i],
167 if (ret && first_errno == 0)
171 ath10k_warn("failed to remove peer wep key %d: %d\n",
174 peer->keys[i] = NULL;
180 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
181 struct ieee80211_key_conf *key)
183 struct ath10k *ar = arvif->ar;
184 struct ath10k_peer *peer;
190 lockdep_assert_held(&ar->conf_mutex);
193 /* since ath10k_install_key we can't hold data_lock all the
194 * time, so we try to remove the keys incrementally */
195 spin_lock_bh(&ar->data_lock);
197 list_for_each_entry(peer, &ar->peers, list) {
198 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
199 if (peer->keys[i] == key) {
200 memcpy(addr, peer->addr, ETH_ALEN);
201 peer->keys[i] = NULL;
206 if (i < ARRAY_SIZE(peer->keys))
209 spin_unlock_bh(&ar->data_lock);
211 if (i == ARRAY_SIZE(peer->keys))
214 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr);
215 if (ret && first_errno == 0)
219 ath10k_warn("failed to remove key for %pM: %d\n",
227 /*********************/
228 /* General utilities */
229 /*********************/
231 static inline enum wmi_phy_mode
232 chan_to_phymode(const struct cfg80211_chan_def *chandef)
234 enum wmi_phy_mode phymode = MODE_UNKNOWN;
236 switch (chandef->chan->band) {
237 case IEEE80211_BAND_2GHZ:
238 switch (chandef->width) {
239 case NL80211_CHAN_WIDTH_20_NOHT:
242 case NL80211_CHAN_WIDTH_20:
243 phymode = MODE_11NG_HT20;
245 case NL80211_CHAN_WIDTH_40:
246 phymode = MODE_11NG_HT40;
248 case NL80211_CHAN_WIDTH_5:
249 case NL80211_CHAN_WIDTH_10:
250 case NL80211_CHAN_WIDTH_80:
251 case NL80211_CHAN_WIDTH_80P80:
252 case NL80211_CHAN_WIDTH_160:
253 phymode = MODE_UNKNOWN;
257 case IEEE80211_BAND_5GHZ:
258 switch (chandef->width) {
259 case NL80211_CHAN_WIDTH_20_NOHT:
262 case NL80211_CHAN_WIDTH_20:
263 phymode = MODE_11NA_HT20;
265 case NL80211_CHAN_WIDTH_40:
266 phymode = MODE_11NA_HT40;
268 case NL80211_CHAN_WIDTH_80:
269 phymode = MODE_11AC_VHT80;
271 case NL80211_CHAN_WIDTH_5:
272 case NL80211_CHAN_WIDTH_10:
273 case NL80211_CHAN_WIDTH_80P80:
274 case NL80211_CHAN_WIDTH_160:
275 phymode = MODE_UNKNOWN;
283 WARN_ON(phymode == MODE_UNKNOWN);
287 static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
290 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
291 * 0 for no restriction
300 switch (mpdudensity) {
306 /* Our lower layer calculations limit our precision to
322 static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr)
326 lockdep_assert_held(&ar->conf_mutex);
328 ret = ath10k_wmi_peer_create(ar, vdev_id, addr);
330 ath10k_warn("failed to create wmi peer %pM on vdev %i: %i\n",
335 ret = ath10k_wait_for_peer_created(ar, vdev_id, addr);
337 ath10k_warn("failed to wait for created wmi peer %pM on vdev %i: %i\n",
341 spin_lock_bh(&ar->data_lock);
343 spin_unlock_bh(&ar->data_lock);
348 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
350 struct ath10k *ar = arvif->ar;
354 param = ar->wmi.pdev_param->sta_kickout_th;
355 ret = ath10k_wmi_pdev_set_param(ar, param,
356 ATH10K_KICKOUT_THRESHOLD);
358 ath10k_warn("failed to set kickout threshold on vdev %i: %d\n",
359 arvif->vdev_id, ret);
363 param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs;
364 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
365 ATH10K_KEEPALIVE_MIN_IDLE);
367 ath10k_warn("failed to set keepalive minimum idle time on vdev %i: %d\n",
368 arvif->vdev_id, ret);
372 param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs;
373 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
374 ATH10K_KEEPALIVE_MAX_IDLE);
376 ath10k_warn("failed to set keepalive maximum idle time on vdev %i: %d\n",
377 arvif->vdev_id, ret);
381 param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs;
382 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param,
383 ATH10K_KEEPALIVE_MAX_UNRESPONSIVE);
385 ath10k_warn("failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
386 arvif->vdev_id, ret);
393 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
395 struct ath10k *ar = arvif->ar;
398 if (value != 0xFFFFFFFF)
399 value = min_t(u32, arvif->ar->hw->wiphy->rts_threshold,
402 vdev_param = ar->wmi.vdev_param->rts_threshold;
403 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
406 static int ath10k_mac_set_frag(struct ath10k_vif *arvif, u32 value)
408 struct ath10k *ar = arvif->ar;
411 if (value != 0xFFFFFFFF)
412 value = clamp_t(u32, arvif->ar->hw->wiphy->frag_threshold,
413 ATH10K_FRAGMT_THRESHOLD_MIN,
414 ATH10K_FRAGMT_THRESHOLD_MAX);
416 vdev_param = ar->wmi.vdev_param->fragmentation_threshold;
417 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value);
420 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
424 lockdep_assert_held(&ar->conf_mutex);
426 ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
430 ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
434 spin_lock_bh(&ar->data_lock);
436 spin_unlock_bh(&ar->data_lock);
441 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
443 struct ath10k_peer *peer, *tmp;
445 lockdep_assert_held(&ar->conf_mutex);
447 spin_lock_bh(&ar->data_lock);
448 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
449 if (peer->vdev_id != vdev_id)
452 ath10k_warn("removing stale peer %pM from vdev_id %d\n",
453 peer->addr, vdev_id);
455 list_del(&peer->list);
459 spin_unlock_bh(&ar->data_lock);
462 static void ath10k_peer_cleanup_all(struct ath10k *ar)
464 struct ath10k_peer *peer, *tmp;
466 lockdep_assert_held(&ar->conf_mutex);
468 spin_lock_bh(&ar->data_lock);
469 list_for_each_entry_safe(peer, tmp, &ar->peers, list) {
470 list_del(&peer->list);
474 spin_unlock_bh(&ar->data_lock);
477 /************************/
478 /* Interface management */
479 /************************/
481 static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
485 lockdep_assert_held(&ar->conf_mutex);
487 ret = wait_for_completion_timeout(&ar->vdev_setup_done,
488 ATH10K_VDEV_SETUP_TIMEOUT_HZ);
495 static bool ath10k_monitor_is_enabled(struct ath10k *ar)
497 lockdep_assert_held(&ar->conf_mutex);
499 ath10k_dbg(ATH10K_DBG_MAC,
500 "mac monitor refs: promisc %d monitor %d cac %d\n",
501 ar->promisc, ar->monitor,
502 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags));
504 return ar->promisc || ar->monitor ||
505 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
508 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
510 struct cfg80211_chan_def *chandef = &ar->chandef;
511 struct ieee80211_channel *channel = chandef->chan;
512 struct wmi_vdev_start_request_arg arg = {};
515 lockdep_assert_held(&ar->conf_mutex);
517 arg.vdev_id = vdev_id;
518 arg.channel.freq = channel->center_freq;
519 arg.channel.band_center_freq1 = chandef->center_freq1;
521 /* TODO setup this dynamically, what in case we
522 don't have any vifs? */
523 arg.channel.mode = chan_to_phymode(chandef);
524 arg.channel.chan_radar =
525 !!(channel->flags & IEEE80211_CHAN_RADAR);
527 arg.channel.min_power = 0;
528 arg.channel.max_power = channel->max_power * 2;
529 arg.channel.max_reg_power = channel->max_reg_power * 2;
530 arg.channel.max_antenna_gain = channel->max_antenna_gain * 2;
532 ret = ath10k_wmi_vdev_start(ar, &arg);
534 ath10k_warn("failed to request monitor vdev %i start: %d\n",
539 ret = ath10k_vdev_setup_sync(ar);
541 ath10k_warn("failed to synchronize setup for monitor vdev %i: %d\n",
546 ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr);
548 ath10k_warn("failed to put up monitor vdev %i: %d\n",
553 ar->monitor_vdev_id = vdev_id;
555 ath10k_dbg(ATH10K_DBG_MAC, "mac monitor vdev %i started\n",
556 ar->monitor_vdev_id);
560 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
562 ath10k_warn("failed to stop monitor vdev %i after start failure: %d\n",
563 ar->monitor_vdev_id, ret);
568 static int ath10k_monitor_vdev_stop(struct ath10k *ar)
572 lockdep_assert_held(&ar->conf_mutex);
574 ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id);
576 ath10k_warn("failed to put down monitor vdev %i: %d\n",
577 ar->monitor_vdev_id, ret);
579 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id);
581 ath10k_warn("failed to to request monitor vdev %i stop: %d\n",
582 ar->monitor_vdev_id, ret);
584 ret = ath10k_vdev_setup_sync(ar);
586 ath10k_warn("failed to synchronise monitor vdev %i: %d\n",
587 ar->monitor_vdev_id, ret);
589 ath10k_dbg(ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n",
590 ar->monitor_vdev_id);
594 static int ath10k_monitor_vdev_create(struct ath10k *ar)
598 lockdep_assert_held(&ar->conf_mutex);
600 bit = ffs(ar->free_vdev_map);
602 ath10k_warn("failed to find free vdev id for monitor vdev\n");
606 ar->monitor_vdev_id = bit - 1;
607 ar->free_vdev_map &= ~(1 << ar->monitor_vdev_id);
609 ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id,
610 WMI_VDEV_TYPE_MONITOR,
613 ath10k_warn("failed to request monitor vdev %i creation: %d\n",
614 ar->monitor_vdev_id, ret);
618 ath10k_dbg(ATH10K_DBG_MAC, "mac monitor vdev %d created\n",
619 ar->monitor_vdev_id);
625 * Restore the ID to the global map.
627 ar->free_vdev_map |= 1 << (ar->monitor_vdev_id);
631 static int ath10k_monitor_vdev_delete(struct ath10k *ar)
635 lockdep_assert_held(&ar->conf_mutex);
637 ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id);
639 ath10k_warn("failed to request wmi monitor vdev %i removal: %d\n",
640 ar->monitor_vdev_id, ret);
644 ar->free_vdev_map |= 1 << (ar->monitor_vdev_id);
646 ath10k_dbg(ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n",
647 ar->monitor_vdev_id);
651 static int ath10k_monitor_start(struct ath10k *ar)
655 lockdep_assert_held(&ar->conf_mutex);
657 if (!ath10k_monitor_is_enabled(ar)) {
658 ath10k_warn("trying to start monitor with no references\n");
662 if (ar->monitor_started) {
663 ath10k_dbg(ATH10K_DBG_MAC, "mac monitor already started\n");
667 ret = ath10k_monitor_vdev_create(ar);
669 ath10k_warn("failed to create monitor vdev: %d\n", ret);
673 ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
675 ath10k_warn("failed to start monitor vdev: %d\n", ret);
676 ath10k_monitor_vdev_delete(ar);
680 ar->monitor_started = true;
681 ath10k_dbg(ATH10K_DBG_MAC, "mac monitor started\n");
686 static void ath10k_monitor_stop(struct ath10k *ar)
690 lockdep_assert_held(&ar->conf_mutex);
692 if (ath10k_monitor_is_enabled(ar)) {
693 ath10k_dbg(ATH10K_DBG_MAC,
694 "mac monitor will be stopped later\n");
698 if (!ar->monitor_started) {
699 ath10k_dbg(ATH10K_DBG_MAC,
700 "mac monitor probably failed to start earlier\n");
704 ret = ath10k_monitor_vdev_stop(ar);
706 ath10k_warn("failed to stop monitor vdev: %d\n", ret);
708 ret = ath10k_monitor_vdev_delete(ar);
710 ath10k_warn("failed to delete monitor vdev: %d\n", ret);
712 ar->monitor_started = false;
713 ath10k_dbg(ATH10K_DBG_MAC, "mac monitor stopped\n");
716 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
718 struct ath10k *ar = arvif->ar;
719 u32 vdev_param, rts_cts = 0;
721 lockdep_assert_held(&ar->conf_mutex);
723 vdev_param = ar->wmi.vdev_param->enable_rtscts;
725 if (arvif->use_cts_prot || arvif->num_legacy_stations > 0)
726 rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET);
728 if (arvif->num_legacy_stations > 0)
729 rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES,
732 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
736 static int ath10k_start_cac(struct ath10k *ar)
740 lockdep_assert_held(&ar->conf_mutex);
742 set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
744 ret = ath10k_monitor_start(ar);
746 ath10k_warn("failed to start monitor (cac): %d\n", ret);
747 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
751 ath10k_dbg(ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n",
752 ar->monitor_vdev_id);
757 static int ath10k_stop_cac(struct ath10k *ar)
759 lockdep_assert_held(&ar->conf_mutex);
761 /* CAC is not running - do nothing */
762 if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags))
765 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
766 ath10k_monitor_stop(ar);
768 ath10k_dbg(ATH10K_DBG_MAC, "mac cac finished\n");
773 static void ath10k_recalc_radar_detection(struct ath10k *ar)
777 lockdep_assert_held(&ar->conf_mutex);
781 if (!ar->radar_enabled)
784 if (ar->num_started_vdevs > 0)
787 ret = ath10k_start_cac(ar);
790 * Not possible to start CAC on current channel so starting
791 * radiation is not allowed, make this channel DFS_UNAVAILABLE
792 * by indicating that radar was detected.
794 ath10k_warn("failed to start CAC: %d\n", ret);
795 ieee80211_radar_detected(ar->hw);
799 static int ath10k_vdev_start(struct ath10k_vif *arvif)
801 struct ath10k *ar = arvif->ar;
802 struct cfg80211_chan_def *chandef = &ar->chandef;
803 struct wmi_vdev_start_request_arg arg = {};
806 lockdep_assert_held(&ar->conf_mutex);
808 reinit_completion(&ar->vdev_setup_done);
810 arg.vdev_id = arvif->vdev_id;
811 arg.dtim_period = arvif->dtim_period;
812 arg.bcn_intval = arvif->beacon_interval;
814 arg.channel.freq = chandef->chan->center_freq;
815 arg.channel.band_center_freq1 = chandef->center_freq1;
816 arg.channel.mode = chan_to_phymode(chandef);
818 arg.channel.min_power = 0;
819 arg.channel.max_power = chandef->chan->max_power * 2;
820 arg.channel.max_reg_power = chandef->chan->max_reg_power * 2;
821 arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2;
823 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
824 arg.ssid = arvif->u.ap.ssid;
825 arg.ssid_len = arvif->u.ap.ssid_len;
826 arg.hidden_ssid = arvif->u.ap.hidden_ssid;
828 /* For now allow DFS for AP mode */
829 arg.channel.chan_radar =
830 !!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
831 } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
832 arg.ssid = arvif->vif->bss_conf.ssid;
833 arg.ssid_len = arvif->vif->bss_conf.ssid_len;
836 ath10k_dbg(ATH10K_DBG_MAC,
837 "mac vdev %d start center_freq %d phymode %s\n",
838 arg.vdev_id, arg.channel.freq,
839 ath10k_wmi_phymode_str(arg.channel.mode));
841 ret = ath10k_wmi_vdev_start(ar, &arg);
843 ath10k_warn("failed to start WMI vdev %i: %d\n",
848 ret = ath10k_vdev_setup_sync(ar);
850 ath10k_warn("failed to synchronise setup for vdev %i: %d\n",
855 ar->num_started_vdevs++;
856 ath10k_recalc_radar_detection(ar);
861 static int ath10k_vdev_stop(struct ath10k_vif *arvif)
863 struct ath10k *ar = arvif->ar;
866 lockdep_assert_held(&ar->conf_mutex);
868 reinit_completion(&ar->vdev_setup_done);
870 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id);
872 ath10k_warn("failed to stop WMI vdev %i: %d\n",
873 arvif->vdev_id, ret);
877 ret = ath10k_vdev_setup_sync(ar);
879 ath10k_warn("failed to syncronise setup for vdev %i: %d\n",
880 arvif->vdev_id, ret);
884 WARN_ON(ar->num_started_vdevs == 0);
886 if (ar->num_started_vdevs != 0) {
887 ar->num_started_vdevs--;
888 ath10k_recalc_radar_detection(ar);
894 static void ath10k_control_beaconing(struct ath10k_vif *arvif,
895 struct ieee80211_bss_conf *info)
899 lockdep_assert_held(&arvif->ar->conf_mutex);
901 if (!info->enable_beacon) {
902 ath10k_vdev_stop(arvif);
904 arvif->is_started = false;
905 arvif->is_up = false;
907 spin_lock_bh(&arvif->ar->data_lock);
909 dma_unmap_single(arvif->ar->dev,
910 ATH10K_SKB_CB(arvif->beacon)->paddr,
911 arvif->beacon->len, DMA_TO_DEVICE);
912 dev_kfree_skb_any(arvif->beacon);
914 arvif->beacon = NULL;
915 arvif->beacon_sent = false;
917 spin_unlock_bh(&arvif->ar->data_lock);
922 arvif->tx_seq_no = 0x1000;
924 ret = ath10k_vdev_start(arvif);
929 memcpy(arvif->bssid, info->bssid, ETH_ALEN);
931 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
934 ath10k_warn("failed to bring up vdev %d: %i\n",
935 arvif->vdev_id, ret);
936 ath10k_vdev_stop(arvif);
940 arvif->is_started = true;
943 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id);
946 static void ath10k_control_ibss(struct ath10k_vif *arvif,
947 struct ieee80211_bss_conf *info,
948 const u8 self_peer[ETH_ALEN])
953 lockdep_assert_held(&arvif->ar->conf_mutex);
955 if (!info->ibss_joined) {
956 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, self_peer);
958 ath10k_warn("failed to delete IBSS self peer %pM for vdev %d: %d\n",
959 self_peer, arvif->vdev_id, ret);
961 if (is_zero_ether_addr(arvif->bssid))
964 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id,
967 ath10k_warn("failed to delete IBSS BSSID peer %pM for vdev %d: %d\n",
968 arvif->bssid, arvif->vdev_id, ret);
972 memset(arvif->bssid, 0, ETH_ALEN);
977 ret = ath10k_peer_create(arvif->ar, arvif->vdev_id, self_peer);
979 ath10k_warn("failed to create IBSS self peer %pM for vdev %d: %d\n",
980 self_peer, arvif->vdev_id, ret);
984 vdev_param = arvif->ar->wmi.vdev_param->atim_window;
985 ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param,
986 ATH10K_DEFAULT_ATIM);
988 ath10k_warn("failed to set IBSS ATIM for vdev %d: %d\n",
989 arvif->vdev_id, ret);
993 * Review this when mac80211 gains per-interface powersave support.
995 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
997 struct ath10k *ar = arvif->ar;
998 struct ieee80211_conf *conf = &ar->hw->conf;
999 enum wmi_sta_powersave_param param;
1000 enum wmi_sta_ps_mode psmode;
1003 lockdep_assert_held(&arvif->ar->conf_mutex);
1005 if (arvif->vif->type != NL80211_IFTYPE_STATION)
1008 if (conf->flags & IEEE80211_CONF_PS) {
1009 psmode = WMI_STA_PS_MODE_ENABLED;
1010 param = WMI_STA_PS_PARAM_INACTIVITY_TIME;
1012 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param,
1013 conf->dynamic_ps_timeout);
1015 ath10k_warn("failed to set inactivity time for vdev %d: %i\n",
1016 arvif->vdev_id, ret);
1020 psmode = WMI_STA_PS_MODE_DISABLED;
1023 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d psmode %s\n",
1024 arvif->vdev_id, psmode ? "enable" : "disable");
1026 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode);
1028 ath10k_warn("failed to set PS Mode %d for vdev %d: %d\n",
1029 psmode, arvif->vdev_id, ret);
1036 /**********************/
1037 /* Station management */
1038 /**********************/
1040 static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
1041 struct ath10k_vif *arvif,
1042 struct ieee80211_sta *sta,
1043 struct ieee80211_bss_conf *bss_conf,
1044 struct wmi_peer_assoc_complete_arg *arg)
1046 lockdep_assert_held(&ar->conf_mutex);
1048 memcpy(arg->addr, sta->addr, ETH_ALEN);
1049 arg->vdev_id = arvif->vdev_id;
1050 arg->peer_aid = sta->aid;
1051 arg->peer_flags |= WMI_PEER_AUTH;
1053 if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
1055 * Seems FW have problems with Power Save in STA
1056 * mode when we setup this parameter to high (eg. 5).
1057 * Often we see that FW don't send NULL (with clean P flags)
1058 * frame even there is info about buffered frames in beacons.
1059 * Sometimes we have to wait more than 10 seconds before FW
1060 * will wakeup. Often sending one ping from AP to our device
1061 * just fail (more than 50%).
1063 * Seems setting this FW parameter to 1 couse FW
1064 * will check every beacon and will wakup immediately
1065 * after detection buffered data.
1067 arg->peer_listen_intval = 1;
1069 arg->peer_listen_intval = ar->hw->conf.listen_interval;
1071 arg->peer_num_spatial_streams = 1;
1074 * The assoc capabilities are available only in managed mode.
1076 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && bss_conf)
1077 arg->peer_caps = bss_conf->assoc_capability;
1080 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
1081 struct ath10k_vif *arvif,
1082 struct wmi_peer_assoc_complete_arg *arg)
1084 struct ieee80211_vif *vif = arvif->vif;
1085 struct ieee80211_bss_conf *info = &vif->bss_conf;
1086 struct cfg80211_bss *bss;
1087 const u8 *rsnie = NULL;
1088 const u8 *wpaie = NULL;
1090 lockdep_assert_held(&ar->conf_mutex);
1092 bss = cfg80211_get_bss(ar->hw->wiphy, ar->hw->conf.chandef.chan,
1093 info->bssid, NULL, 0, 0, 0);
1095 const struct cfg80211_bss_ies *ies;
1098 rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN);
1100 ies = rcu_dereference(bss->ies);
1102 wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
1103 WLAN_OUI_TYPE_MICROSOFT_WPA,
1107 cfg80211_put_bss(ar->hw->wiphy, bss);
1110 /* FIXME: base on RSN IE/WPA IE is a correct idea? */
1111 if (rsnie || wpaie) {
1112 ath10k_dbg(ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__);
1113 arg->peer_flags |= WMI_PEER_NEED_PTK_4_WAY;
1117 ath10k_dbg(ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__);
1118 arg->peer_flags |= WMI_PEER_NEED_GTK_2_WAY;
1122 static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
1123 struct ieee80211_sta *sta,
1124 struct wmi_peer_assoc_complete_arg *arg)
1126 struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates;
1127 const struct ieee80211_supported_band *sband;
1128 const struct ieee80211_rate *rates;
1132 lockdep_assert_held(&ar->conf_mutex);
1134 sband = ar->hw->wiphy->bands[ar->hw->conf.chandef.chan->band];
1135 ratemask = sta->supp_rates[ar->hw->conf.chandef.chan->band];
1136 rates = sband->bitrates;
1138 rateset->num_rates = 0;
1140 for (i = 0; i < 32; i++, ratemask >>= 1, rates++) {
1141 if (!(ratemask & 1))
1144 rateset->rates[rateset->num_rates] = rates->hw_value;
1145 rateset->num_rates++;
1149 static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
1150 struct ieee80211_sta *sta,
1151 struct wmi_peer_assoc_complete_arg *arg)
1153 const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
1156 lockdep_assert_held(&ar->conf_mutex);
1158 if (!ht_cap->ht_supported)
1161 arg->peer_flags |= WMI_PEER_HT;
1162 arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1163 ht_cap->ampdu_factor)) - 1;
1165 arg->peer_mpdu_density =
1166 ath10k_parse_mpdudensity(ht_cap->ampdu_density);
1168 arg->peer_ht_caps = ht_cap->cap;
1169 arg->peer_rate_caps |= WMI_RC_HT_FLAG;
1171 if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
1172 arg->peer_flags |= WMI_PEER_LDPC;
1174 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
1175 arg->peer_flags |= WMI_PEER_40MHZ;
1176 arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
1179 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
1180 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1182 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
1183 arg->peer_rate_caps |= WMI_RC_SGI_FLAG;
1185 if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) {
1186 arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG;
1187 arg->peer_flags |= WMI_PEER_STBC;
1190 if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) {
1192 stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC;
1193 stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT;
1194 stbc = stbc << WMI_RC_RX_STBC_FLAG_S;
1195 arg->peer_rate_caps |= stbc;
1196 arg->peer_flags |= WMI_PEER_STBC;
1199 if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2])
1200 arg->peer_rate_caps |= WMI_RC_TS_FLAG;
1201 else if (ht_cap->mcs.rx_mask[1])
1202 arg->peer_rate_caps |= WMI_RC_DS_FLAG;
1204 for (i = 0, n = 0; i < IEEE80211_HT_MCS_MASK_LEN*8; i++)
1205 if (ht_cap->mcs.rx_mask[i/8] & (1 << i%8))
1206 arg->peer_ht_rates.rates[n++] = i;
1209 * This is a workaround for HT-enabled STAs which break the spec
1210 * and have no HT capabilities RX mask (no HT RX MCS map).
1212 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
1213 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
1215 * Firmware asserts if such situation occurs.
1218 arg->peer_ht_rates.num_rates = 8;
1219 for (i = 0; i < arg->peer_ht_rates.num_rates; i++)
1220 arg->peer_ht_rates.rates[i] = i;
1222 arg->peer_ht_rates.num_rates = n;
1223 arg->peer_num_spatial_streams = sta->rx_nss;
1226 ath10k_dbg(ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
1228 arg->peer_ht_rates.num_rates,
1229 arg->peer_num_spatial_streams);
1232 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
1233 struct ath10k_vif *arvif,
1234 struct ieee80211_sta *sta)
1240 lockdep_assert_held(&ar->conf_mutex);
1242 if (sta->wme && sta->uapsd_queues) {
1243 ath10k_dbg(ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n",
1244 sta->uapsd_queues, sta->max_sp);
1246 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
1247 uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN |
1248 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN;
1249 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI)
1250 uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN |
1251 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN;
1252 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK)
1253 uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN |
1254 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN;
1255 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE)
1256 uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN |
1257 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN;
1260 if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP)
1261 max_sp = sta->max_sp;
1263 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1265 WMI_AP_PS_PEER_PARAM_UAPSD,
1268 ath10k_warn("failed to set ap ps peer param uapsd for vdev %i: %d\n",
1269 arvif->vdev_id, ret);
1273 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id,
1275 WMI_AP_PS_PEER_PARAM_MAX_SP,
1278 ath10k_warn("failed to set ap ps peer param max sp for vdev %i: %d\n",
1279 arvif->vdev_id, ret);
1283 /* TODO setup this based on STA listen interval and
1284 beacon interval. Currently we don't know
1285 sta->listen_interval - mac80211 patch required.
1286 Currently use 10 seconds */
1287 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr,
1288 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME, 10);
1290 ath10k_warn("failed to set ap ps peer param ageout time for vdev %i: %d\n",
1291 arvif->vdev_id, ret);
1299 static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
1300 struct ieee80211_sta *sta,
1301 struct wmi_peer_assoc_complete_arg *arg)
1303 const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
1306 if (!vht_cap->vht_supported)
1309 arg->peer_flags |= WMI_PEER_VHT;
1310 arg->peer_vht_caps = vht_cap->cap;
1313 ampdu_factor = (vht_cap->cap &
1314 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
1315 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT;
1317 /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
1318 * zero in VHT IE. Using it would result in degraded throughput.
1319 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
1320 * it if VHT max_mpdu is smaller. */
1321 arg->peer_max_mpdu = max(arg->peer_max_mpdu,
1322 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
1323 ampdu_factor)) - 1);
1325 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1326 arg->peer_flags |= WMI_PEER_80MHZ;
1328 arg->peer_vht_rates.rx_max_rate =
1329 __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
1330 arg->peer_vht_rates.rx_mcs_set =
1331 __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map);
1332 arg->peer_vht_rates.tx_max_rate =
1333 __le16_to_cpu(vht_cap->vht_mcs.tx_highest);
1334 arg->peer_vht_rates.tx_mcs_set =
1335 __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map);
1337 ath10k_dbg(ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
1338 sta->addr, arg->peer_max_mpdu, arg->peer_flags);
1341 static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
1342 struct ath10k_vif *arvif,
1343 struct ieee80211_sta *sta,
1344 struct ieee80211_bss_conf *bss_conf,
1345 struct wmi_peer_assoc_complete_arg *arg)
1347 switch (arvif->vdev_type) {
1348 case WMI_VDEV_TYPE_AP:
1350 arg->peer_flags |= WMI_PEER_QOS;
1352 if (sta->wme && sta->uapsd_queues) {
1353 arg->peer_flags |= WMI_PEER_APSD;
1354 arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG;
1357 case WMI_VDEV_TYPE_STA:
1359 arg->peer_flags |= WMI_PEER_QOS;
1366 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
1367 struct ath10k_vif *arvif,
1368 struct ieee80211_sta *sta,
1369 struct wmi_peer_assoc_complete_arg *arg)
1371 enum wmi_phy_mode phymode = MODE_UNKNOWN;
1373 switch (ar->hw->conf.chandef.chan->band) {
1374 case IEEE80211_BAND_2GHZ:
1375 if (sta->ht_cap.ht_supported) {
1376 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1377 phymode = MODE_11NG_HT40;
1379 phymode = MODE_11NG_HT20;
1385 case IEEE80211_BAND_5GHZ:
1389 if (sta->vht_cap.vht_supported) {
1390 if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
1391 phymode = MODE_11AC_VHT80;
1392 else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1393 phymode = MODE_11AC_VHT40;
1394 else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
1395 phymode = MODE_11AC_VHT20;
1396 } else if (sta->ht_cap.ht_supported) {
1397 if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
1398 phymode = MODE_11NA_HT40;
1400 phymode = MODE_11NA_HT20;
1410 ath10k_dbg(ATH10K_DBG_MAC, "mac peer %pM phymode %s\n",
1411 sta->addr, ath10k_wmi_phymode_str(phymode));
1413 arg->peer_phymode = phymode;
1414 WARN_ON(phymode == MODE_UNKNOWN);
1417 static int ath10k_peer_assoc_prepare(struct ath10k *ar,
1418 struct ath10k_vif *arvif,
1419 struct ieee80211_sta *sta,
1420 struct ieee80211_bss_conf *bss_conf,
1421 struct wmi_peer_assoc_complete_arg *arg)
1423 lockdep_assert_held(&ar->conf_mutex);
1425 memset(arg, 0, sizeof(*arg));
1427 ath10k_peer_assoc_h_basic(ar, arvif, sta, bss_conf, arg);
1428 ath10k_peer_assoc_h_crypto(ar, arvif, arg);
1429 ath10k_peer_assoc_h_rates(ar, sta, arg);
1430 ath10k_peer_assoc_h_ht(ar, sta, arg);
1431 ath10k_peer_assoc_h_vht(ar, sta, arg);
1432 ath10k_peer_assoc_h_qos(ar, arvif, sta, bss_conf, arg);
1433 ath10k_peer_assoc_h_phymode(ar, arvif, sta, arg);
1438 static const u32 ath10k_smps_map[] = {
1439 [WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
1440 [WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC,
1441 [WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE,
1442 [WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE,
1445 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
1447 const struct ieee80211_sta_ht_cap *ht_cap)
1451 if (!ht_cap->ht_supported)
1454 smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS;
1455 smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT;
1457 if (smps >= ARRAY_SIZE(ath10k_smps_map))
1460 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr,
1461 WMI_PEER_SMPS_STATE,
1462 ath10k_smps_map[smps]);
1465 /* can be called only in mac80211 callbacks due to `key_count` usage */
1466 static void ath10k_bss_assoc(struct ieee80211_hw *hw,
1467 struct ieee80211_vif *vif,
1468 struct ieee80211_bss_conf *bss_conf)
1470 struct ath10k *ar = hw->priv;
1471 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1472 struct ieee80211_sta_ht_cap ht_cap;
1473 struct wmi_peer_assoc_complete_arg peer_arg;
1474 struct ieee80211_sta *ap_sta;
1477 lockdep_assert_held(&ar->conf_mutex);
1481 ap_sta = ieee80211_find_sta(vif, bss_conf->bssid);
1483 ath10k_warn("failed to find station entry for bss %pM vdev %i\n",
1484 bss_conf->bssid, arvif->vdev_id);
1489 /* ap_sta must be accessed only within rcu section which must be left
1490 * before calling ath10k_setup_peer_smps() which might sleep. */
1491 ht_cap = ap_sta->ht_cap;
1493 ret = ath10k_peer_assoc_prepare(ar, arvif, ap_sta,
1494 bss_conf, &peer_arg);
1496 ath10k_warn("failed to prepare peer assoc for %pM vdev %i: %d\n",
1497 bss_conf->bssid, arvif->vdev_id, ret);
1504 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1506 ath10k_warn("failed to run peer assoc for %pM vdev %i: %d\n",
1507 bss_conf->bssid, arvif->vdev_id, ret);
1511 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap);
1513 ath10k_warn("failed to setup peer SMPS for vdev %i: %d\n",
1514 arvif->vdev_id, ret);
1518 ath10k_dbg(ATH10K_DBG_MAC,
1519 "mac vdev %d up (associated) bssid %pM aid %d\n",
1520 arvif->vdev_id, bss_conf->bssid, bss_conf->aid);
1522 arvif->aid = bss_conf->aid;
1523 memcpy(arvif->bssid, bss_conf->bssid, ETH_ALEN);
1525 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid);
1527 ath10k_warn("failed to set vdev %d up: %d\n",
1528 arvif->vdev_id, ret);
1532 arvif->is_up = true;
1538 static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
1539 struct ieee80211_vif *vif)
1541 struct ath10k *ar = hw->priv;
1542 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1545 lockdep_assert_held(&ar->conf_mutex);
1548 * For some reason, calling VDEV-DOWN before VDEV-STOP
1549 * makes the FW to send frames via HTT after disassociation.
1550 * No idea why this happens, even though VDEV-DOWN is supposed
1551 * to be analogous to link down, so just stop the VDEV.
1553 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d stop (disassociated\n",
1556 /* FIXME: check return value */
1557 ret = ath10k_vdev_stop(arvif);
1560 * If we don't call VDEV-DOWN after VDEV-STOP FW will remain active and
1561 * report beacons from previously associated network through HTT.
1562 * This in turn would spam mac80211 WARN_ON if we bring down all
1563 * interfaces as it expects there is no rx when no interface is
1566 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d down\n", arvif->vdev_id);
1568 /* FIXME: why don't we print error if wmi call fails? */
1569 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id);
1571 arvif->def_wep_key_idx = 0;
1573 arvif->is_started = false;
1574 arvif->is_up = false;
1577 static int ath10k_station_assoc(struct ath10k *ar, struct ath10k_vif *arvif,
1578 struct ieee80211_sta *sta, bool reassoc)
1580 struct wmi_peer_assoc_complete_arg peer_arg;
1583 lockdep_assert_held(&ar->conf_mutex);
1585 ret = ath10k_peer_assoc_prepare(ar, arvif, sta, NULL, &peer_arg);
1587 ath10k_warn("failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
1588 sta->addr, arvif->vdev_id, ret);
1592 peer_arg.peer_reassoc = reassoc;
1593 ret = ath10k_wmi_peer_assoc(ar, &peer_arg);
1595 ath10k_warn("failed to run peer assoc for STA %pM vdev %i: %d\n",
1596 sta->addr, arvif->vdev_id, ret);
1600 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr, &sta->ht_cap);
1602 ath10k_warn("failed to setup peer SMPS for vdev %d: %d\n",
1603 arvif->vdev_id, ret);
1608 arvif->num_legacy_stations++;
1609 ret = ath10k_recalc_rtscts_prot(arvif);
1611 ath10k_warn("failed to recalculate rts/cts prot for vdev %d: %d\n",
1612 arvif->vdev_id, ret);
1617 ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
1619 ath10k_warn("failed to install peer wep keys for vdev %i: %d\n",
1620 arvif->vdev_id, ret);
1624 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
1626 ath10k_warn("failed to set qos params for STA %pM for vdev %i: %d\n",
1627 sta->addr, arvif->vdev_id, ret);
1634 static int ath10k_station_disassoc(struct ath10k *ar, struct ath10k_vif *arvif,
1635 struct ieee80211_sta *sta)
1639 lockdep_assert_held(&ar->conf_mutex);
1642 arvif->num_legacy_stations--;
1643 ret = ath10k_recalc_rtscts_prot(arvif);
1645 ath10k_warn("failed to recalculate rts/cts prot for vdev %d: %d\n",
1646 arvif->vdev_id, ret);
1651 ret = ath10k_clear_peer_keys(arvif, sta->addr);
1653 ath10k_warn("failed to clear all peer wep keys for vdev %i: %d\n",
1654 arvif->vdev_id, ret);
1665 static int ath10k_update_channel_list(struct ath10k *ar)
1667 struct ieee80211_hw *hw = ar->hw;
1668 struct ieee80211_supported_band **bands;
1669 enum ieee80211_band band;
1670 struct ieee80211_channel *channel;
1671 struct wmi_scan_chan_list_arg arg = {0};
1672 struct wmi_channel_arg *ch;
1678 lockdep_assert_held(&ar->conf_mutex);
1680 bands = hw->wiphy->bands;
1681 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1685 for (i = 0; i < bands[band]->n_channels; i++) {
1686 if (bands[band]->channels[i].flags &
1687 IEEE80211_CHAN_DISABLED)
1694 len = sizeof(struct wmi_channel_arg) * arg.n_channels;
1695 arg.channels = kzalloc(len, GFP_KERNEL);
1700 for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
1704 for (i = 0; i < bands[band]->n_channels; i++) {
1705 channel = &bands[band]->channels[i];
1707 if (channel->flags & IEEE80211_CHAN_DISABLED)
1710 ch->allow_ht = true;
1712 /* FIXME: when should we really allow VHT? */
1713 ch->allow_vht = true;
1716 !(channel->flags & IEEE80211_CHAN_NO_IR);
1719 !(channel->flags & IEEE80211_CHAN_NO_HT40PLUS);
1722 !!(channel->flags & IEEE80211_CHAN_RADAR);
1724 passive = channel->flags & IEEE80211_CHAN_NO_IR;
1725 ch->passive = passive;
1727 ch->freq = channel->center_freq;
1729 ch->max_power = channel->max_power * 2;
1730 ch->max_reg_power = channel->max_reg_power * 2;
1731 ch->max_antenna_gain = channel->max_antenna_gain * 2;
1732 ch->reg_class_id = 0; /* FIXME */
1734 /* FIXME: why use only legacy modes, why not any
1735 * HT/VHT modes? Would that even make any
1737 if (channel->band == IEEE80211_BAND_2GHZ)
1738 ch->mode = MODE_11G;
1740 ch->mode = MODE_11A;
1742 if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN))
1745 ath10k_dbg(ATH10K_DBG_WMI,
1746 "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
1747 ch - arg.channels, arg.n_channels,
1748 ch->freq, ch->max_power, ch->max_reg_power,
1749 ch->max_antenna_gain, ch->mode);
1755 ret = ath10k_wmi_scan_chan_list(ar, &arg);
1756 kfree(arg.channels);
1761 static enum wmi_dfs_region
1762 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
1764 switch (dfs_region) {
1765 case NL80211_DFS_UNSET:
1766 return WMI_UNINIT_DFS_DOMAIN;
1767 case NL80211_DFS_FCC:
1768 return WMI_FCC_DFS_DOMAIN;
1769 case NL80211_DFS_ETSI:
1770 return WMI_ETSI_DFS_DOMAIN;
1771 case NL80211_DFS_JP:
1772 return WMI_MKK4_DFS_DOMAIN;
1774 return WMI_UNINIT_DFS_DOMAIN;
1777 static void ath10k_regd_update(struct ath10k *ar)
1779 struct reg_dmn_pair_mapping *regpair;
1781 enum wmi_dfs_region wmi_dfs_reg;
1782 enum nl80211_dfs_regions nl_dfs_reg;
1784 lockdep_assert_held(&ar->conf_mutex);
1786 ret = ath10k_update_channel_list(ar);
1788 ath10k_warn("failed to update channel list: %d\n", ret);
1790 regpair = ar->ath_common.regulatory.regpair;
1792 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1793 nl_dfs_reg = ar->dfs_detector->region;
1794 wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg);
1796 wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN;
1799 /* Target allows setting up per-band regdomain but ath_common provides
1800 * a combined one only */
1801 ret = ath10k_wmi_pdev_set_regdomain(ar,
1802 regpair->reg_domain,
1803 regpair->reg_domain, /* 2ghz */
1804 regpair->reg_domain, /* 5ghz */
1805 regpair->reg_2ghz_ctl,
1806 regpair->reg_5ghz_ctl,
1809 ath10k_warn("failed to set pdev regdomain: %d\n", ret);
1812 static void ath10k_reg_notifier(struct wiphy *wiphy,
1813 struct regulatory_request *request)
1815 struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
1816 struct ath10k *ar = hw->priv;
1819 ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory);
1821 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) {
1822 ath10k_dbg(ATH10K_DBG_REGULATORY, "dfs region 0x%x\n",
1823 request->dfs_region);
1824 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector,
1825 request->dfs_region);
1827 ath10k_warn("DFS region 0x%X not supported, will trigger radar for every pulse\n",
1828 request->dfs_region);
1831 mutex_lock(&ar->conf_mutex);
1832 if (ar->state == ATH10K_STATE_ON)
1833 ath10k_regd_update(ar);
1834 mutex_unlock(&ar->conf_mutex);
1841 static u8 ath10k_tx_h_get_tid(struct ieee80211_hdr *hdr)
1843 if (ieee80211_is_mgmt(hdr->frame_control))
1844 return HTT_DATA_TX_EXT_TID_MGMT;
1846 if (!ieee80211_is_data_qos(hdr->frame_control))
1847 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1849 if (!is_unicast_ether_addr(ieee80211_get_DA(hdr)))
1850 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST;
1852 return ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
1855 static u8 ath10k_tx_h_get_vdev_id(struct ath10k *ar,
1856 struct ieee80211_tx_info *info)
1858 if (info->control.vif)
1859 return ath10k_vif_to_arvif(info->control.vif)->vdev_id;
1861 if (ar->monitor_started)
1862 return ar->monitor_vdev_id;
1864 ath10k_warn("failed to resolve vdev id\n");
1868 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
1869 * Control in the header.
1871 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
1873 struct ieee80211_hdr *hdr = (void *)skb->data;
1876 if (!ieee80211_is_data_qos(hdr->frame_control))
1879 qos_ctl = ieee80211_get_qos_ctl(hdr);
1880 memmove(skb->data + IEEE80211_QOS_CTL_LEN,
1881 skb->data, (void *)qos_ctl - (void *)skb->data);
1882 skb_pull(skb, IEEE80211_QOS_CTL_LEN);
1885 static void ath10k_tx_wep_key_work(struct work_struct *work)
1887 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif,
1889 int ret, keyidx = arvif->def_wep_key_newidx;
1891 mutex_lock(&arvif->ar->conf_mutex);
1893 if (arvif->ar->state != ATH10K_STATE_ON)
1896 if (arvif->def_wep_key_idx == keyidx)
1899 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n",
1900 arvif->vdev_id, keyidx);
1902 ret = ath10k_wmi_vdev_set_param(arvif->ar,
1904 arvif->ar->wmi.vdev_param->def_keyid,
1907 ath10k_warn("failed to update wep key index for vdev %d: %d\n",
1913 arvif->def_wep_key_idx = keyidx;
1916 mutex_unlock(&arvif->ar->conf_mutex);
1919 static void ath10k_tx_h_update_wep_key(struct ieee80211_vif *vif,
1920 struct ieee80211_key_conf *key,
1921 struct sk_buff *skb)
1923 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1924 struct ath10k *ar = arvif->ar;
1925 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1927 if (!ieee80211_has_protected(hdr->frame_control))
1933 if (key->cipher != WLAN_CIPHER_SUITE_WEP40 &&
1934 key->cipher != WLAN_CIPHER_SUITE_WEP104)
1937 if (key->keyidx == arvif->def_wep_key_idx)
1940 /* FIXME: Most likely a few frames will be TXed with an old key. Simply
1941 * queueing frames until key index is updated is not an option because
1942 * sk_buff may need more processing to be done, e.g. offchannel */
1943 arvif->def_wep_key_newidx = key->keyidx;
1944 ieee80211_queue_work(ar->hw, &arvif->wep_key_work);
1947 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
1948 struct ieee80211_vif *vif,
1949 struct sk_buff *skb)
1951 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1952 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
1954 /* This is case only for P2P_GO */
1955 if (arvif->vdev_type != WMI_VDEV_TYPE_AP ||
1956 arvif->vdev_subtype != WMI_VDEV_SUBTYPE_P2P_GO)
1959 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) {
1960 spin_lock_bh(&ar->data_lock);
1961 if (arvif->u.ap.noa_data)
1962 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len,
1964 memcpy(skb_put(skb, arvif->u.ap.noa_len),
1965 arvif->u.ap.noa_data,
1966 arvif->u.ap.noa_len);
1967 spin_unlock_bh(&ar->data_lock);
1971 static void ath10k_tx_htt(struct ath10k *ar, struct sk_buff *skb)
1973 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1976 if (ar->htt.target_version_major >= 3) {
1977 /* Since HTT 3.0 there is no separate mgmt tx command */
1978 ret = ath10k_htt_tx(&ar->htt, skb);
1982 if (ieee80211_is_mgmt(hdr->frame_control)) {
1983 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
1985 if (skb_queue_len(&ar->wmi_mgmt_tx_queue) >=
1986 ATH10K_MAX_NUM_MGMT_PENDING) {
1987 ath10k_warn("reached WMI management tranmist queue limit\n");
1992 skb_queue_tail(&ar->wmi_mgmt_tx_queue, skb);
1993 ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
1995 ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
1997 } else if (!test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
1999 ieee80211_is_nullfunc(hdr->frame_control)) {
2000 /* FW does not report tx status properly for NullFunc frames
2001 * unless they are sent through mgmt tx path. mac80211 sends
2002 * those frames when it detects link/beacon loss and depends
2003 * on the tx status to be correct. */
2004 ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
2006 ret = ath10k_htt_tx(&ar->htt, skb);
2011 ath10k_warn("failed to transmit packet, dropping: %d\n", ret);
2012 ieee80211_free_txskb(ar->hw, skb);
2016 void ath10k_offchan_tx_purge(struct ath10k *ar)
2018 struct sk_buff *skb;
2021 skb = skb_dequeue(&ar->offchan_tx_queue);
2025 ieee80211_free_txskb(ar->hw, skb);
2029 void ath10k_offchan_tx_work(struct work_struct *work)
2031 struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work);
2032 struct ath10k_peer *peer;
2033 struct ieee80211_hdr *hdr;
2034 struct sk_buff *skb;
2035 const u8 *peer_addr;
2039 /* FW requirement: We must create a peer before FW will send out
2040 * an offchannel frame. Otherwise the frame will be stuck and
2041 * never transmitted. We delete the peer upon tx completion.
2042 * It is unlikely that a peer for offchannel tx will already be
2043 * present. However it may be in some rare cases so account for that.
2044 * Otherwise we might remove a legitimate peer and break stuff. */
2047 skb = skb_dequeue(&ar->offchan_tx_queue);
2051 mutex_lock(&ar->conf_mutex);
2053 ath10k_dbg(ATH10K_DBG_MAC, "mac offchannel skb %p\n",
2056 hdr = (struct ieee80211_hdr *)skb->data;
2057 peer_addr = ieee80211_get_DA(hdr);
2058 vdev_id = ATH10K_SKB_CB(skb)->vdev_id;
2060 spin_lock_bh(&ar->data_lock);
2061 peer = ath10k_peer_find(ar, vdev_id, peer_addr);
2062 spin_unlock_bh(&ar->data_lock);
2065 /* FIXME: should this use ath10k_warn()? */
2066 ath10k_dbg(ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
2067 peer_addr, vdev_id);
2070 ret = ath10k_peer_create(ar, vdev_id, peer_addr);
2072 ath10k_warn("failed to create peer %pM on vdev %d: %d\n",
2073 peer_addr, vdev_id, ret);
2076 spin_lock_bh(&ar->data_lock);
2077 reinit_completion(&ar->offchan_tx_completed);
2078 ar->offchan_tx_skb = skb;
2079 spin_unlock_bh(&ar->data_lock);
2081 ath10k_tx_htt(ar, skb);
2083 ret = wait_for_completion_timeout(&ar->offchan_tx_completed,
2086 ath10k_warn("timed out waiting for offchannel skb %p\n",
2090 ret = ath10k_peer_delete(ar, vdev_id, peer_addr);
2092 ath10k_warn("failed to delete peer %pM on vdev %d: %d\n",
2093 peer_addr, vdev_id, ret);
2096 mutex_unlock(&ar->conf_mutex);
2100 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
2102 struct sk_buff *skb;
2105 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2109 ieee80211_free_txskb(ar->hw, skb);
2113 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
2115 struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work);
2116 struct sk_buff *skb;
2120 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue);
2124 ret = ath10k_wmi_mgmt_tx(ar, skb);
2126 ath10k_warn("failed to transmit management frame via WMI: %d\n",
2128 ieee80211_free_txskb(ar->hw, skb);
2138 * This gets called if we dont get a heart-beat during scan.
2139 * This may indicate the FW has hung and we need to abort the
2140 * scan manually to prevent cancel_hw_scan() from deadlocking
2142 void ath10k_reset_scan(unsigned long ptr)
2144 struct ath10k *ar = (struct ath10k *)ptr;
2146 spin_lock_bh(&ar->data_lock);
2147 if (!ar->scan.in_progress) {
2148 spin_unlock_bh(&ar->data_lock);
2152 ath10k_warn("scan timed out, firmware problem?\n");
2154 if (ar->scan.is_roc)
2155 ieee80211_remain_on_channel_expired(ar->hw);
2157 ieee80211_scan_completed(ar->hw, 1 /* aborted */);
2159 ar->scan.in_progress = false;
2160 complete_all(&ar->scan.completed);
2161 spin_unlock_bh(&ar->data_lock);
2164 static int ath10k_abort_scan(struct ath10k *ar)
2166 struct wmi_stop_scan_arg arg = {
2167 .req_id = 1, /* FIXME */
2168 .req_type = WMI_SCAN_STOP_ONE,
2169 .u.scan_id = ATH10K_SCAN_ID,
2173 lockdep_assert_held(&ar->conf_mutex);
2175 del_timer_sync(&ar->scan.timeout);
2177 spin_lock_bh(&ar->data_lock);
2178 if (!ar->scan.in_progress) {
2179 spin_unlock_bh(&ar->data_lock);
2183 ar->scan.aborting = true;
2184 spin_unlock_bh(&ar->data_lock);
2186 ret = ath10k_wmi_stop_scan(ar, &arg);
2188 ath10k_warn("failed to stop wmi scan: %d\n", ret);
2189 spin_lock_bh(&ar->data_lock);
2190 ar->scan.in_progress = false;
2191 ath10k_offchan_tx_purge(ar);
2192 spin_unlock_bh(&ar->data_lock);
2196 ret = wait_for_completion_timeout(&ar->scan.completed, 3*HZ);
2198 ath10k_warn("timed out while waiting for scan to stop\n");
2200 /* scan completion may be done right after we timeout here, so let's
2201 * check the in_progress and tell mac80211 scan is completed. if we
2202 * don't do that and FW fails to send us scan completion indication
2203 * then userspace won't be able to scan anymore */
2206 spin_lock_bh(&ar->data_lock);
2207 if (ar->scan.in_progress) {
2208 ath10k_warn("failed to stop scan, it's still in progress\n");
2209 ar->scan.in_progress = false;
2210 ath10k_offchan_tx_purge(ar);
2213 spin_unlock_bh(&ar->data_lock);
2218 static int ath10k_start_scan(struct ath10k *ar,
2219 const struct wmi_start_scan_arg *arg)
2223 lockdep_assert_held(&ar->conf_mutex);
2225 ret = ath10k_wmi_start_scan(ar, arg);
2229 ret = wait_for_completion_timeout(&ar->scan.started, 1*HZ);
2231 ath10k_abort_scan(ar);
2235 /* the scan can complete earlier, before we even
2236 * start the timer. in that case the timer handler
2237 * checks ar->scan.in_progress and bails out if its
2238 * false. Add a 200ms margin to account event/command
2240 mod_timer(&ar->scan.timeout, jiffies +
2241 msecs_to_jiffies(arg->max_scan_time+200));
2245 /**********************/
2246 /* mac80211 callbacks */
2247 /**********************/
2249 static void ath10k_tx(struct ieee80211_hw *hw,
2250 struct ieee80211_tx_control *control,
2251 struct sk_buff *skb)
2253 struct ath10k *ar = hw->priv;
2254 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
2255 struct ieee80211_vif *vif = info->control.vif;
2256 struct ieee80211_key_conf *key = info->control.hw_key;
2257 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2259 /* We should disable CCK RATE due to P2P */
2260 if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
2261 ath10k_dbg(ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
2263 ATH10K_SKB_CB(skb)->htt.is_offchan = false;
2264 ATH10K_SKB_CB(skb)->htt.tid = ath10k_tx_h_get_tid(hdr);
2265 ATH10K_SKB_CB(skb)->vdev_id = ath10k_tx_h_get_vdev_id(ar, info);
2267 /* it makes no sense to process injected frames like that */
2268 if (vif && vif->type != NL80211_IFTYPE_MONITOR) {
2269 ath10k_tx_h_nwifi(hw, skb);
2270 ath10k_tx_h_update_wep_key(vif, key, skb);
2271 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
2272 ath10k_tx_h_seq_no(vif, skb);
2275 if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
2276 spin_lock_bh(&ar->data_lock);
2277 ATH10K_SKB_CB(skb)->htt.is_offchan = true;
2278 ATH10K_SKB_CB(skb)->vdev_id = ar->scan.vdev_id;
2279 spin_unlock_bh(&ar->data_lock);
2281 ath10k_dbg(ATH10K_DBG_MAC, "queued offchannel skb %p\n", skb);
2283 skb_queue_tail(&ar->offchan_tx_queue, skb);
2284 ieee80211_queue_work(hw, &ar->offchan_tx_work);
2288 ath10k_tx_htt(ar, skb);
2291 /* Must not be called with conf_mutex held as workers can use that also. */
2292 static void ath10k_drain_tx(struct ath10k *ar)
2294 /* make sure rcu-protected mac80211 tx path itself is drained */
2297 ath10k_offchan_tx_purge(ar);
2298 ath10k_mgmt_over_wmi_tx_purge(ar);
2300 cancel_work_sync(&ar->offchan_tx_work);
2301 cancel_work_sync(&ar->wmi_mgmt_tx_work);
2304 void ath10k_halt(struct ath10k *ar)
2306 struct ath10k_vif *arvif;
2308 lockdep_assert_held(&ar->conf_mutex);
2310 if (ath10k_monitor_is_enabled(ar)) {
2311 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
2312 ar->promisc = false;
2313 ar->monitor = false;
2314 ath10k_monitor_stop(ar);
2317 del_timer_sync(&ar->scan.timeout);
2318 ath10k_reset_scan((unsigned long)ar);
2319 ath10k_peer_cleanup_all(ar);
2320 ath10k_core_stop(ar);
2321 ath10k_hif_power_down(ar);
2323 spin_lock_bh(&ar->data_lock);
2324 list_for_each_entry(arvif, &ar->arvifs, list) {
2328 dma_unmap_single(arvif->ar->dev,
2329 ATH10K_SKB_CB(arvif->beacon)->paddr,
2330 arvif->beacon->len, DMA_TO_DEVICE);
2331 dev_kfree_skb_any(arvif->beacon);
2332 arvif->beacon = NULL;
2334 spin_unlock_bh(&ar->data_lock);
2337 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
2339 struct ath10k *ar = hw->priv;
2341 mutex_lock(&ar->conf_mutex);
2343 if (ar->cfg_tx_chainmask) {
2344 *tx_ant = ar->cfg_tx_chainmask;
2345 *rx_ant = ar->cfg_rx_chainmask;
2347 *tx_ant = ar->supp_tx_chainmask;
2348 *rx_ant = ar->supp_rx_chainmask;
2351 mutex_unlock(&ar->conf_mutex);
2356 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
2360 lockdep_assert_held(&ar->conf_mutex);
2362 ar->cfg_tx_chainmask = tx_ant;
2363 ar->cfg_rx_chainmask = rx_ant;
2365 if ((ar->state != ATH10K_STATE_ON) &&
2366 (ar->state != ATH10K_STATE_RESTARTED))
2369 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask,
2372 ath10k_warn("failed to set tx-chainmask: %d, req 0x%x\n",
2377 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask,
2380 ath10k_warn("failed to set rx-chainmask: %d, req 0x%x\n",
2388 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
2390 struct ath10k *ar = hw->priv;
2393 mutex_lock(&ar->conf_mutex);
2394 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant);
2395 mutex_unlock(&ar->conf_mutex);
2399 static int ath10k_start(struct ieee80211_hw *hw)
2401 struct ath10k *ar = hw->priv;
2405 * This makes sense only when restarting hw. It is harmless to call
2406 * uncoditionally. This is necessary to make sure no HTT/WMI tx
2407 * commands will be submitted while restarting.
2409 ath10k_drain_tx(ar);
2411 mutex_lock(&ar->conf_mutex);
2413 switch (ar->state) {
2414 case ATH10K_STATE_OFF:
2415 ar->state = ATH10K_STATE_ON;
2417 case ATH10K_STATE_RESTARTING:
2419 ar->state = ATH10K_STATE_RESTARTED;
2421 case ATH10K_STATE_ON:
2422 case ATH10K_STATE_RESTARTED:
2423 case ATH10K_STATE_WEDGED:
2429 ret = ath10k_hif_power_up(ar);
2431 ath10k_err("Could not init hif: %d\n", ret);
2435 ret = ath10k_core_start(ar);
2437 ath10k_err("Could not init core: %d\n", ret);
2438 goto err_power_down;
2441 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->pmf_qos, 1);
2443 ath10k_warn("failed to enable PMF QOS: %d\n", ret);
2447 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->dynamic_bw, 1);
2449 ath10k_warn("failed to enable dynamic BW: %d\n", ret);
2453 if (ar->cfg_tx_chainmask)
2454 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask,
2455 ar->cfg_rx_chainmask);
2458 * By default FW set ARP frames ac to voice (6). In that case ARP
2459 * exchange is not working properly for UAPSD enabled AP. ARP requests
2460 * which arrives with access category 0 are processed by network stack
2461 * and send back with access category 0, but FW changes access category
2462 * to 6. Set ARP frames access category to best effort (0) solves
2466 ret = ath10k_wmi_pdev_set_param(ar,
2467 ar->wmi.pdev_param->arp_ac_override, 0);
2469 ath10k_warn("failed to set arp ac override parameter: %d\n",
2474 ar->num_started_vdevs = 0;
2475 ath10k_regd_update(ar);
2477 mutex_unlock(&ar->conf_mutex);
2481 ath10k_core_stop(ar);
2484 ath10k_hif_power_down(ar);
2487 ar->state = ATH10K_STATE_OFF;
2490 mutex_unlock(&ar->conf_mutex);
2494 static void ath10k_stop(struct ieee80211_hw *hw)
2496 struct ath10k *ar = hw->priv;
2498 ath10k_drain_tx(ar);
2500 mutex_lock(&ar->conf_mutex);
2501 if (ar->state != ATH10K_STATE_OFF) {
2503 ar->state = ATH10K_STATE_OFF;
2505 mutex_unlock(&ar->conf_mutex);
2507 cancel_work_sync(&ar->restart_work);
2510 static int ath10k_config_ps(struct ath10k *ar)
2512 struct ath10k_vif *arvif;
2515 lockdep_assert_held(&ar->conf_mutex);
2517 list_for_each_entry(arvif, &ar->arvifs, list) {
2518 ret = ath10k_mac_vif_setup_ps(arvif);
2520 ath10k_warn("failed to setup powersave: %d\n", ret);
2528 static const char *chandef_get_width(enum nl80211_chan_width width)
2531 case NL80211_CHAN_WIDTH_20_NOHT:
2533 case NL80211_CHAN_WIDTH_20:
2535 case NL80211_CHAN_WIDTH_40:
2537 case NL80211_CHAN_WIDTH_80:
2539 case NL80211_CHAN_WIDTH_80P80:
2541 case NL80211_CHAN_WIDTH_160:
2543 case NL80211_CHAN_WIDTH_5:
2545 case NL80211_CHAN_WIDTH_10:
2551 static void ath10k_config_chan(struct ath10k *ar)
2553 struct ath10k_vif *arvif;
2556 lockdep_assert_held(&ar->conf_mutex);
2558 ath10k_dbg(ATH10K_DBG_MAC,
2559 "mac config channel to %dMHz (cf1 %dMHz cf2 %dMHz width %s)\n",
2560 ar->chandef.chan->center_freq,
2561 ar->chandef.center_freq1,
2562 ar->chandef.center_freq2,
2563 chandef_get_width(ar->chandef.width));
2565 /* First stop monitor interface. Some FW versions crash if there's a
2566 * lone monitor interface. */
2567 if (ar->monitor_started)
2568 ath10k_monitor_vdev_stop(ar);
2570 list_for_each_entry(arvif, &ar->arvifs, list) {
2571 if (!arvif->is_started)
2574 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2577 ret = ath10k_vdev_stop(arvif);
2579 ath10k_warn("failed to stop vdev %d: %d\n",
2580 arvif->vdev_id, ret);
2585 /* all vdevs are now stopped - now attempt to restart them */
2587 list_for_each_entry(arvif, &ar->arvifs, list) {
2588 if (!arvif->is_started)
2591 if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR)
2594 ret = ath10k_vdev_start(arvif);
2596 ath10k_warn("failed to start vdev %d: %d\n",
2597 arvif->vdev_id, ret);
2604 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid,
2607 ath10k_warn("failed to bring vdev up %d: %d\n",
2608 arvif->vdev_id, ret);
2613 if (ath10k_monitor_is_enabled(ar))
2614 ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id);
2617 static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
2619 struct ath10k *ar = hw->priv;
2620 struct ieee80211_conf *conf = &hw->conf;
2624 mutex_lock(&ar->conf_mutex);
2626 if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
2627 ath10k_dbg(ATH10K_DBG_MAC,
2628 "mac config channel %dMHz flags 0x%x radar %d\n",
2629 conf->chandef.chan->center_freq,
2630 conf->chandef.chan->flags,
2631 conf->radar_enabled);
2633 spin_lock_bh(&ar->data_lock);
2634 ar->rx_channel = conf->chandef.chan;
2635 spin_unlock_bh(&ar->data_lock);
2637 ar->radar_enabled = conf->radar_enabled;
2638 ath10k_recalc_radar_detection(ar);
2640 if (!cfg80211_chandef_identical(&ar->chandef, &conf->chandef)) {
2641 ar->chandef = conf->chandef;
2642 ath10k_config_chan(ar);
2646 if (changed & IEEE80211_CONF_CHANGE_POWER) {
2647 ath10k_dbg(ATH10K_DBG_MAC, "mac config power %d\n",
2648 hw->conf.power_level);
2650 param = ar->wmi.pdev_param->txpower_limit2g;
2651 ret = ath10k_wmi_pdev_set_param(ar, param,
2652 hw->conf.power_level * 2);
2654 ath10k_warn("failed to set 2g txpower %d: %d\n",
2655 hw->conf.power_level, ret);
2657 param = ar->wmi.pdev_param->txpower_limit5g;
2658 ret = ath10k_wmi_pdev_set_param(ar, param,
2659 hw->conf.power_level * 2);
2661 ath10k_warn("failed to set 5g txpower %d: %d\n",
2662 hw->conf.power_level, ret);
2665 if (changed & IEEE80211_CONF_CHANGE_PS)
2666 ath10k_config_ps(ar);
2668 if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
2669 if (conf->flags & IEEE80211_CONF_MONITOR && !ar->monitor) {
2671 ret = ath10k_monitor_start(ar);
2673 ath10k_warn("failed to start monitor (config): %d\n",
2675 ar->monitor = false;
2677 } else if (!(conf->flags & IEEE80211_CONF_MONITOR) &&
2679 ar->monitor = false;
2680 ath10k_monitor_stop(ar);
2684 mutex_unlock(&ar->conf_mutex);
2690 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
2691 * because we will send mgmt frames without CCK. This requirement
2692 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
2695 static int ath10k_add_interface(struct ieee80211_hw *hw,
2696 struct ieee80211_vif *vif)
2698 struct ath10k *ar = hw->priv;
2699 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2700 enum wmi_sta_powersave_param param;
2706 mutex_lock(&ar->conf_mutex);
2708 memset(arvif, 0, sizeof(*arvif));
2713 INIT_WORK(&arvif->wep_key_work, ath10k_tx_wep_key_work);
2714 INIT_LIST_HEAD(&arvif->list);
2716 bit = ffs(ar->free_vdev_map);
2722 arvif->vdev_id = bit - 1;
2723 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_NONE;
2726 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_DEVICE;
2728 switch (vif->type) {
2729 case NL80211_IFTYPE_UNSPECIFIED:
2730 case NL80211_IFTYPE_STATION:
2731 arvif->vdev_type = WMI_VDEV_TYPE_STA;
2733 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_CLIENT;
2735 case NL80211_IFTYPE_ADHOC:
2736 arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
2738 case NL80211_IFTYPE_AP:
2739 arvif->vdev_type = WMI_VDEV_TYPE_AP;
2742 arvif->vdev_subtype = WMI_VDEV_SUBTYPE_P2P_GO;
2744 case NL80211_IFTYPE_MONITOR:
2745 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR;
2752 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d\n",
2753 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype);
2755 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type,
2756 arvif->vdev_subtype, vif->addr);
2758 ath10k_warn("failed to create WMI vdev %i: %d\n",
2759 arvif->vdev_id, ret);
2763 ar->free_vdev_map &= ~BIT(arvif->vdev_id);
2764 list_add(&arvif->list, &ar->arvifs);
2766 vdev_param = ar->wmi.vdev_param->def_keyid;
2767 ret = ath10k_wmi_vdev_set_param(ar, 0, vdev_param,
2768 arvif->def_wep_key_idx);
2770 ath10k_warn("failed to set vdev %i default key id: %d\n",
2771 arvif->vdev_id, ret);
2772 goto err_vdev_delete;
2775 vdev_param = ar->wmi.vdev_param->tx_encap_type;
2776 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
2777 ATH10K_HW_TXRX_NATIVE_WIFI);
2778 /* 10.X firmware does not support this VDEV parameter. Do not warn */
2779 if (ret && ret != -EOPNOTSUPP) {
2780 ath10k_warn("failed to set vdev %i TX encapsulation: %d\n",
2781 arvif->vdev_id, ret);
2782 goto err_vdev_delete;
2785 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
2786 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr);
2788 ath10k_warn("failed to create vdev %i peer for AP: %d\n",
2789 arvif->vdev_id, ret);
2790 goto err_vdev_delete;
2793 ret = ath10k_mac_set_kickout(arvif);
2795 ath10k_warn("failed to set vdev %i kickout parameters: %d\n",
2796 arvif->vdev_id, ret);
2797 goto err_peer_delete;
2801 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) {
2802 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY;
2803 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
2804 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
2807 ath10k_warn("failed to set vdev %i RX wake policy: %d\n",
2808 arvif->vdev_id, ret);
2809 goto err_peer_delete;
2812 param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD;
2813 value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS;
2814 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
2817 ath10k_warn("failed to set vdev %i TX wake thresh: %d\n",
2818 arvif->vdev_id, ret);
2819 goto err_peer_delete;
2822 param = WMI_STA_PS_PARAM_PSPOLL_COUNT;
2823 value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX;
2824 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
2827 ath10k_warn("failed to set vdev %i PSPOLL count: %d\n",
2828 arvif->vdev_id, ret);
2829 goto err_peer_delete;
2833 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold);
2835 ath10k_warn("failed to set rts threshold for vdev %d: %d\n",
2836 arvif->vdev_id, ret);
2837 goto err_peer_delete;
2840 ret = ath10k_mac_set_frag(arvif, ar->hw->wiphy->frag_threshold);
2842 ath10k_warn("failed to set frag threshold for vdev %d: %d\n",
2843 arvif->vdev_id, ret);
2844 goto err_peer_delete;
2847 mutex_unlock(&ar->conf_mutex);
2851 if (arvif->vdev_type == WMI_VDEV_TYPE_AP)
2852 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr);
2855 ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
2856 ar->free_vdev_map &= ~BIT(arvif->vdev_id);
2857 list_del(&arvif->list);
2860 mutex_unlock(&ar->conf_mutex);
2865 static void ath10k_remove_interface(struct ieee80211_hw *hw,
2866 struct ieee80211_vif *vif)
2868 struct ath10k *ar = hw->priv;
2869 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2872 mutex_lock(&ar->conf_mutex);
2874 cancel_work_sync(&arvif->wep_key_work);
2876 spin_lock_bh(&ar->data_lock);
2877 if (arvif->beacon) {
2878 dma_unmap_single(arvif->ar->dev,
2879 ATH10K_SKB_CB(arvif->beacon)->paddr,
2880 arvif->beacon->len, DMA_TO_DEVICE);
2881 dev_kfree_skb_any(arvif->beacon);
2882 arvif->beacon = NULL;
2884 spin_unlock_bh(&ar->data_lock);
2886 ar->free_vdev_map |= 1 << (arvif->vdev_id);
2887 list_del(&arvif->list);
2889 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
2890 ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, vif->addr);
2892 ath10k_warn("failed to remove peer for AP vdev %i: %d\n",
2893 arvif->vdev_id, ret);
2895 kfree(arvif->u.ap.noa_data);
2898 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n",
2901 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id);
2903 ath10k_warn("failed to delete WMI vdev %i: %d\n",
2904 arvif->vdev_id, ret);
2906 ath10k_peer_cleanup(ar, arvif->vdev_id);
2908 mutex_unlock(&ar->conf_mutex);
2912 * FIXME: Has to be verified.
2914 #define SUPPORTED_FILTERS \
2915 (FIF_PROMISC_IN_BSS | \
2920 FIF_BCN_PRBRESP_PROMISC | \
2924 static void ath10k_configure_filter(struct ieee80211_hw *hw,
2925 unsigned int changed_flags,
2926 unsigned int *total_flags,
2929 struct ath10k *ar = hw->priv;
2932 mutex_lock(&ar->conf_mutex);
2934 changed_flags &= SUPPORTED_FILTERS;
2935 *total_flags &= SUPPORTED_FILTERS;
2936 ar->filter_flags = *total_flags;
2938 if (ar->filter_flags & FIF_PROMISC_IN_BSS && !ar->promisc) {
2940 ret = ath10k_monitor_start(ar);
2942 ath10k_warn("failed to start monitor (promisc): %d\n",
2944 ar->promisc = false;
2946 } else if (!(ar->filter_flags & FIF_PROMISC_IN_BSS) && ar->promisc) {
2947 ar->promisc = false;
2948 ath10k_monitor_stop(ar);
2951 mutex_unlock(&ar->conf_mutex);
2954 static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
2955 struct ieee80211_vif *vif,
2956 struct ieee80211_bss_conf *info,
2959 struct ath10k *ar = hw->priv;
2960 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
2962 u32 vdev_param, pdev_param;
2964 mutex_lock(&ar->conf_mutex);
2966 if (changed & BSS_CHANGED_IBSS)
2967 ath10k_control_ibss(arvif, info, vif->addr);
2969 if (changed & BSS_CHANGED_BEACON_INT) {
2970 arvif->beacon_interval = info->beacon_int;
2971 vdev_param = ar->wmi.vdev_param->beacon_interval;
2972 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
2973 arvif->beacon_interval);
2974 ath10k_dbg(ATH10K_DBG_MAC,
2975 "mac vdev %d beacon_interval %d\n",
2976 arvif->vdev_id, arvif->beacon_interval);
2979 ath10k_warn("failed to set beacon interval for vdev %d: %i\n",
2980 arvif->vdev_id, ret);
2983 if (changed & BSS_CHANGED_BEACON) {
2984 ath10k_dbg(ATH10K_DBG_MAC,
2985 "vdev %d set beacon tx mode to staggered\n",
2988 pdev_param = ar->wmi.pdev_param->beacon_tx_mode;
2989 ret = ath10k_wmi_pdev_set_param(ar, pdev_param,
2990 WMI_BEACON_STAGGERED_MODE);
2992 ath10k_warn("failed to set beacon mode for vdev %d: %i\n",
2993 arvif->vdev_id, ret);
2996 if (changed & BSS_CHANGED_BEACON_INFO) {
2997 arvif->dtim_period = info->dtim_period;
2999 ath10k_dbg(ATH10K_DBG_MAC,
3000 "mac vdev %d dtim_period %d\n",
3001 arvif->vdev_id, arvif->dtim_period);
3003 vdev_param = ar->wmi.vdev_param->dtim_period;
3004 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3005 arvif->dtim_period);
3007 ath10k_warn("failed to set dtim period for vdev %d: %i\n",
3008 arvif->vdev_id, ret);
3011 if (changed & BSS_CHANGED_SSID &&
3012 vif->type == NL80211_IFTYPE_AP) {
3013 arvif->u.ap.ssid_len = info->ssid_len;
3015 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
3016 arvif->u.ap.hidden_ssid = info->hidden_ssid;
3020 * Firmware manages AP self-peer internally so make sure to not create
3021 * it in driver. Otherwise AP self-peer deletion may timeout later.
3023 if (changed & BSS_CHANGED_BSSID &&
3024 vif->type != NL80211_IFTYPE_AP) {
3025 if (!is_zero_ether_addr(info->bssid)) {
3026 ath10k_dbg(ATH10K_DBG_MAC,
3027 "mac vdev %d create peer %pM\n",
3028 arvif->vdev_id, info->bssid);
3030 ret = ath10k_peer_create(ar, arvif->vdev_id,
3033 ath10k_warn("failed to add peer %pM for vdev %d when changing bssid: %i\n",
3034 info->bssid, arvif->vdev_id, ret);
3036 if (vif->type == NL80211_IFTYPE_STATION) {
3038 * this is never erased as we it for crypto key
3039 * clearing; this is FW requirement
3041 memcpy(arvif->bssid, info->bssid, ETH_ALEN);
3043 ath10k_dbg(ATH10K_DBG_MAC,
3044 "mac vdev %d start %pM\n",
3045 arvif->vdev_id, info->bssid);
3047 ret = ath10k_vdev_start(arvif);
3049 ath10k_warn("failed to start vdev %i: %d\n",
3050 arvif->vdev_id, ret);
3054 arvif->is_started = true;
3058 * Mac80211 does not keep IBSS bssid when leaving IBSS,
3059 * so driver need to store it. It is needed when leaving
3060 * IBSS in order to remove BSSID peer.
3062 if (vif->type == NL80211_IFTYPE_ADHOC)
3063 memcpy(arvif->bssid, info->bssid,
3068 if (changed & BSS_CHANGED_BEACON_ENABLED)
3069 ath10k_control_beaconing(arvif, info);
3071 if (changed & BSS_CHANGED_ERP_CTS_PROT) {
3072 arvif->use_cts_prot = info->use_cts_prot;
3073 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n",
3074 arvif->vdev_id, info->use_cts_prot);
3076 ret = ath10k_recalc_rtscts_prot(arvif);
3078 ath10k_warn("failed to recalculate rts/cts prot for vdev %d: %d\n",
3079 arvif->vdev_id, ret);
3082 if (changed & BSS_CHANGED_ERP_SLOT) {
3084 if (info->use_short_slot)
3085 slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */
3088 slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */
3090 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n",
3091 arvif->vdev_id, slottime);
3093 vdev_param = ar->wmi.vdev_param->slot_time;
3094 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3097 ath10k_warn("failed to set erp slot for vdev %d: %i\n",
3098 arvif->vdev_id, ret);
3101 if (changed & BSS_CHANGED_ERP_PREAMBLE) {
3103 if (info->use_short_preamble)
3104 preamble = WMI_VDEV_PREAMBLE_SHORT;
3106 preamble = WMI_VDEV_PREAMBLE_LONG;
3108 ath10k_dbg(ATH10K_DBG_MAC,
3109 "mac vdev %d preamble %dn",
3110 arvif->vdev_id, preamble);
3112 vdev_param = ar->wmi.vdev_param->preamble;
3113 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3116 ath10k_warn("failed to set preamble for vdev %d: %i\n",
3117 arvif->vdev_id, ret);
3120 if (changed & BSS_CHANGED_ASSOC) {
3122 ath10k_bss_assoc(hw, vif, info);
3126 mutex_unlock(&ar->conf_mutex);
3129 static int ath10k_hw_scan(struct ieee80211_hw *hw,
3130 struct ieee80211_vif *vif,
3131 struct ieee80211_scan_request *hw_req)
3133 struct ath10k *ar = hw->priv;
3134 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3135 struct cfg80211_scan_request *req = &hw_req->req;
3136 struct wmi_start_scan_arg arg;
3140 mutex_lock(&ar->conf_mutex);
3142 spin_lock_bh(&ar->data_lock);
3143 if (ar->scan.in_progress) {
3144 spin_unlock_bh(&ar->data_lock);
3149 reinit_completion(&ar->scan.started);
3150 reinit_completion(&ar->scan.completed);
3151 ar->scan.in_progress = true;
3152 ar->scan.aborting = false;
3153 ar->scan.is_roc = false;
3154 ar->scan.vdev_id = arvif->vdev_id;
3155 spin_unlock_bh(&ar->data_lock);
3157 memset(&arg, 0, sizeof(arg));
3158 ath10k_wmi_start_scan_init(ar, &arg);
3159 arg.vdev_id = arvif->vdev_id;
3160 arg.scan_id = ATH10K_SCAN_ID;
3163 arg.scan_ctrl_flags |= WMI_SCAN_ADD_CCK_RATES;
3166 arg.ie_len = req->ie_len;
3167 memcpy(arg.ie, req->ie, arg.ie_len);
3171 arg.n_ssids = req->n_ssids;
3172 for (i = 0; i < arg.n_ssids; i++) {
3173 arg.ssids[i].len = req->ssids[i].ssid_len;
3174 arg.ssids[i].ssid = req->ssids[i].ssid;
3177 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3180 if (req->n_channels) {
3181 arg.n_channels = req->n_channels;
3182 for (i = 0; i < arg.n_channels; i++)
3183 arg.channels[i] = req->channels[i]->center_freq;
3186 ret = ath10k_start_scan(ar, &arg);
3188 ath10k_warn("failed to start hw scan: %d\n", ret);
3189 spin_lock_bh(&ar->data_lock);
3190 ar->scan.in_progress = false;
3191 spin_unlock_bh(&ar->data_lock);
3195 mutex_unlock(&ar->conf_mutex);
3199 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
3200 struct ieee80211_vif *vif)
3202 struct ath10k *ar = hw->priv;
3205 mutex_lock(&ar->conf_mutex);
3206 ret = ath10k_abort_scan(ar);
3208 ath10k_warn("failed to abort scan: %d\n", ret);
3209 ieee80211_scan_completed(hw, 1 /* aborted */);
3211 mutex_unlock(&ar->conf_mutex);
3214 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
3215 struct ath10k_vif *arvif,
3216 enum set_key_cmd cmd,
3217 struct ieee80211_key_conf *key)
3219 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid;
3222 /* 10.1 firmware branch requires default key index to be set to group
3223 * key index after installing it. Otherwise FW/HW Txes corrupted
3224 * frames with multi-vif APs. This is not required for main firmware
3225 * branch (e.g. 636).
3227 * FIXME: This has been tested only in AP. It remains unknown if this
3228 * is required for multi-vif STA interfaces on 10.1 */
3230 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
3233 if (key->cipher == WLAN_CIPHER_SUITE_WEP40)
3236 if (key->cipher == WLAN_CIPHER_SUITE_WEP104)
3239 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
3245 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
3248 ath10k_warn("failed to set vdev %i group key as default key: %d\n",
3249 arvif->vdev_id, ret);
3252 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
3253 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
3254 struct ieee80211_key_conf *key)
3256 struct ath10k *ar = hw->priv;
3257 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3258 struct ath10k_peer *peer;
3259 const u8 *peer_addr;
3260 bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
3261 key->cipher == WLAN_CIPHER_SUITE_WEP104;
3264 if (key->keyidx > WMI_MAX_KEY_INDEX)
3267 mutex_lock(&ar->conf_mutex);
3270 peer_addr = sta->addr;
3271 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA)
3272 peer_addr = vif->bss_conf.bssid;
3274 peer_addr = vif->addr;
3276 key->hw_key_idx = key->keyidx;
3278 /* the peer should not disappear in mid-way (unless FW goes awry) since
3279 * we already hold conf_mutex. we just make sure its there now. */
3280 spin_lock_bh(&ar->data_lock);
3281 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3282 spin_unlock_bh(&ar->data_lock);
3285 if (cmd == SET_KEY) {
3286 ath10k_warn("failed to install key for non-existent peer %pM\n",
3291 /* if the peer doesn't exist there is no key to disable
3299 arvif->wep_keys[key->keyidx] = key;
3301 arvif->wep_keys[key->keyidx] = NULL;
3303 if (cmd == DISABLE_KEY)
3304 ath10k_clear_vdev_key(arvif, key);
3307 ret = ath10k_install_key(arvif, key, cmd, peer_addr);
3309 ath10k_warn("failed to install key for vdev %i peer %pM: %d\n",
3310 arvif->vdev_id, peer_addr, ret);
3314 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key);
3316 spin_lock_bh(&ar->data_lock);
3317 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr);
3318 if (peer && cmd == SET_KEY)
3319 peer->keys[key->keyidx] = key;
3320 else if (peer && cmd == DISABLE_KEY)
3321 peer->keys[key->keyidx] = NULL;
3322 else if (peer == NULL)
3323 /* impossible unless FW goes crazy */
3324 ath10k_warn("Peer %pM disappeared!\n", peer_addr);
3325 spin_unlock_bh(&ar->data_lock);
3328 mutex_unlock(&ar->conf_mutex);
3332 static void ath10k_sta_rc_update_wk(struct work_struct *wk)
3335 struct ath10k_vif *arvif;
3336 struct ath10k_sta *arsta;
3337 struct ieee80211_sta *sta;
3338 u32 changed, bw, nss, smps;
3341 arsta = container_of(wk, struct ath10k_sta, update_wk);
3342 sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
3343 arvif = arsta->arvif;
3346 spin_lock_bh(&ar->data_lock);
3348 changed = arsta->changed;
3355 spin_unlock_bh(&ar->data_lock);
3357 mutex_lock(&ar->conf_mutex);
3359 if (changed & IEEE80211_RC_BW_CHANGED) {
3360 ath10k_dbg(ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n",
3363 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3364 WMI_PEER_CHAN_WIDTH, bw);
3366 ath10k_warn("failed to update STA %pM peer bw %d: %d\n",
3367 sta->addr, bw, err);
3370 if (changed & IEEE80211_RC_NSS_CHANGED) {
3371 ath10k_dbg(ATH10K_DBG_MAC, "mac update sta %pM nss %d\n",
3374 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3377 ath10k_warn("failed to update STA %pM nss %d: %d\n",
3378 sta->addr, nss, err);
3381 if (changed & IEEE80211_RC_SMPS_CHANGED) {
3382 ath10k_dbg(ATH10K_DBG_MAC, "mac update sta %pM smps %d\n",
3385 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
3386 WMI_PEER_SMPS_STATE, smps);
3388 ath10k_warn("failed to update STA %pM smps %d: %d\n",
3389 sta->addr, smps, err);
3392 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
3393 ath10k_dbg(ATH10K_DBG_MAC, "mac update sta %pM supp rates\n",
3396 err = ath10k_station_assoc(ar, arvif, sta, true);
3398 ath10k_warn("failed to reassociate station: %pM\n",
3402 mutex_unlock(&ar->conf_mutex);
3405 static int ath10k_sta_state(struct ieee80211_hw *hw,
3406 struct ieee80211_vif *vif,
3407 struct ieee80211_sta *sta,
3408 enum ieee80211_sta_state old_state,
3409 enum ieee80211_sta_state new_state)
3411 struct ath10k *ar = hw->priv;
3412 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3413 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
3417 if (old_state == IEEE80211_STA_NOTEXIST &&
3418 new_state == IEEE80211_STA_NONE) {
3419 memset(arsta, 0, sizeof(*arsta));
3420 arsta->arvif = arvif;
3421 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk);
3424 /* cancel must be done outside the mutex to avoid deadlock */
3425 if ((old_state == IEEE80211_STA_NONE &&
3426 new_state == IEEE80211_STA_NOTEXIST))
3427 cancel_work_sync(&arsta->update_wk);
3429 mutex_lock(&ar->conf_mutex);
3431 if (old_state == IEEE80211_STA_NOTEXIST &&
3432 new_state == IEEE80211_STA_NONE &&
3433 vif->type != NL80211_IFTYPE_STATION) {
3435 * New station addition.
3437 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features))
3438 max_num_peers = TARGET_10X_NUM_PEERS_MAX - 1;
3440 max_num_peers = TARGET_NUM_PEERS;
3442 if (ar->num_peers >= max_num_peers) {
3443 ath10k_warn("number of peers exceeded: peers number %d (max peers %d)\n",
3444 ar->num_peers, max_num_peers);
3449 ath10k_dbg(ATH10K_DBG_MAC,
3450 "mac vdev %d peer create %pM (new sta) num_peers %d\n",
3451 arvif->vdev_id, sta->addr, ar->num_peers);
3453 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr);
3455 ath10k_warn("failed to add peer %pM for vdev %d when adding a new sta: %i\n",
3456 sta->addr, arvif->vdev_id, ret);
3457 } else if ((old_state == IEEE80211_STA_NONE &&
3458 new_state == IEEE80211_STA_NOTEXIST)) {
3460 * Existing station deletion.
3462 ath10k_dbg(ATH10K_DBG_MAC,
3463 "mac vdev %d peer delete %pM (sta gone)\n",
3464 arvif->vdev_id, sta->addr);
3465 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
3467 ath10k_warn("failed to delete peer %pM for vdev %d: %i\n",
3468 sta->addr, arvif->vdev_id, ret);
3470 if (vif->type == NL80211_IFTYPE_STATION)
3471 ath10k_bss_disassoc(hw, vif);
3472 } else if (old_state == IEEE80211_STA_AUTH &&
3473 new_state == IEEE80211_STA_ASSOC &&
3474 (vif->type == NL80211_IFTYPE_AP ||
3475 vif->type == NL80211_IFTYPE_ADHOC)) {
3479 ath10k_dbg(ATH10K_DBG_MAC, "mac sta %pM associated\n",
3482 ret = ath10k_station_assoc(ar, arvif, sta, false);
3484 ath10k_warn("failed to associate station %pM for vdev %i: %i\n",
3485 sta->addr, arvif->vdev_id, ret);
3486 } else if (old_state == IEEE80211_STA_ASSOC &&
3487 new_state == IEEE80211_STA_AUTH &&
3488 (vif->type == NL80211_IFTYPE_AP ||
3489 vif->type == NL80211_IFTYPE_ADHOC)) {
3493 ath10k_dbg(ATH10K_DBG_MAC, "mac sta %pM disassociated\n",
3496 ret = ath10k_station_disassoc(ar, arvif, sta);
3498 ath10k_warn("failed to disassociate station: %pM vdev %i: %i\n",
3499 sta->addr, arvif->vdev_id, ret);
3502 mutex_unlock(&ar->conf_mutex);
3506 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
3507 u16 ac, bool enable)
3509 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3513 lockdep_assert_held(&ar->conf_mutex);
3515 if (arvif->vdev_type != WMI_VDEV_TYPE_STA)
3519 case IEEE80211_AC_VO:
3520 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN |
3521 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN;
3523 case IEEE80211_AC_VI:
3524 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN |
3525 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN;
3527 case IEEE80211_AC_BE:
3528 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN |
3529 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN;
3531 case IEEE80211_AC_BK:
3532 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN |
3533 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN;
3538 arvif->u.sta.uapsd |= value;
3540 arvif->u.sta.uapsd &= ~value;
3542 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3543 WMI_STA_PS_PARAM_UAPSD,
3544 arvif->u.sta.uapsd);
3546 ath10k_warn("failed to set uapsd params: %d\n", ret);
3550 if (arvif->u.sta.uapsd)
3551 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD;
3553 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE;
3555 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id,
3556 WMI_STA_PS_PARAM_RX_WAKE_POLICY,
3559 ath10k_warn("failed to set rx wake param: %d\n", ret);
3565 static int ath10k_conf_tx(struct ieee80211_hw *hw,
3566 struct ieee80211_vif *vif, u16 ac,
3567 const struct ieee80211_tx_queue_params *params)
3569 struct ath10k *ar = hw->priv;
3570 struct wmi_wmm_params_arg *p = NULL;
3573 mutex_lock(&ar->conf_mutex);
3576 case IEEE80211_AC_VO:
3577 p = &ar->wmm_params.ac_vo;
3579 case IEEE80211_AC_VI:
3580 p = &ar->wmm_params.ac_vi;
3582 case IEEE80211_AC_BE:
3583 p = &ar->wmm_params.ac_be;
3585 case IEEE80211_AC_BK:
3586 p = &ar->wmm_params.ac_bk;
3595 p->cwmin = params->cw_min;
3596 p->cwmax = params->cw_max;
3597 p->aifs = params->aifs;
3600 * The channel time duration programmed in the HW is in absolute
3601 * microseconds, while mac80211 gives the txop in units of
3604 p->txop = params->txop * 32;
3606 /* FIXME: FW accepts wmm params per hw, not per vif */
3607 ret = ath10k_wmi_pdev_set_wmm_params(ar, &ar->wmm_params);
3609 ath10k_warn("failed to set wmm params: %d\n", ret);
3613 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd);
3615 ath10k_warn("failed to set sta uapsd: %d\n", ret);
3618 mutex_unlock(&ar->conf_mutex);
3622 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
3624 static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
3625 struct ieee80211_vif *vif,
3626 struct ieee80211_channel *chan,
3628 enum ieee80211_roc_type type)
3630 struct ath10k *ar = hw->priv;
3631 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
3632 struct wmi_start_scan_arg arg;
3635 mutex_lock(&ar->conf_mutex);
3637 spin_lock_bh(&ar->data_lock);
3638 if (ar->scan.in_progress) {
3639 spin_unlock_bh(&ar->data_lock);
3644 reinit_completion(&ar->scan.started);
3645 reinit_completion(&ar->scan.completed);
3646 reinit_completion(&ar->scan.on_channel);
3647 ar->scan.in_progress = true;
3648 ar->scan.aborting = false;
3649 ar->scan.is_roc = true;
3650 ar->scan.vdev_id = arvif->vdev_id;
3651 ar->scan.roc_freq = chan->center_freq;
3652 spin_unlock_bh(&ar->data_lock);
3654 memset(&arg, 0, sizeof(arg));
3655 ath10k_wmi_start_scan_init(ar, &arg);
3656 arg.vdev_id = arvif->vdev_id;
3657 arg.scan_id = ATH10K_SCAN_ID;
3659 arg.channels[0] = chan->center_freq;
3660 arg.dwell_time_active = duration;
3661 arg.dwell_time_passive = duration;
3662 arg.max_scan_time = 2 * duration;
3663 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
3664 arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
3666 ret = ath10k_start_scan(ar, &arg);
3668 ath10k_warn("failed to start roc scan: %d\n", ret);
3669 spin_lock_bh(&ar->data_lock);
3670 ar->scan.in_progress = false;
3671 spin_unlock_bh(&ar->data_lock);
3675 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3*HZ);
3677 ath10k_warn("failed to switch to channel for roc scan\n");
3678 ath10k_abort_scan(ar);
3685 mutex_unlock(&ar->conf_mutex);
3689 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw)
3691 struct ath10k *ar = hw->priv;
3693 mutex_lock(&ar->conf_mutex);
3694 ath10k_abort_scan(ar);
3695 mutex_unlock(&ar->conf_mutex);
3701 * Both RTS and Fragmentation threshold are interface-specific
3702 * in ath10k, but device-specific in mac80211.
3705 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
3707 struct ath10k *ar = hw->priv;
3708 struct ath10k_vif *arvif;
3711 mutex_lock(&ar->conf_mutex);
3712 list_for_each_entry(arvif, &ar->arvifs, list) {
3713 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n",
3714 arvif->vdev_id, value);
3716 ret = ath10k_mac_set_rts(arvif, value);
3718 ath10k_warn("failed to set rts threshold for vdev %d: %d\n",
3719 arvif->vdev_id, ret);
3723 mutex_unlock(&ar->conf_mutex);
3728 static int ath10k_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
3730 struct ath10k *ar = hw->priv;
3731 struct ath10k_vif *arvif;
3734 mutex_lock(&ar->conf_mutex);
3735 list_for_each_entry(arvif, &ar->arvifs, list) {
3736 ath10k_dbg(ATH10K_DBG_MAC, "mac vdev %d fragmentation threshold %d\n",
3737 arvif->vdev_id, value);
3739 ret = ath10k_mac_set_rts(arvif, value);
3741 ath10k_warn("failed to set fragmentation threshold for vdev %d: %d\n",
3742 arvif->vdev_id, ret);
3746 mutex_unlock(&ar->conf_mutex);
3751 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
3752 u32 queues, bool drop)
3754 struct ath10k *ar = hw->priv;
3758 /* mac80211 doesn't care if we really xmit queued frames or not
3759 * we'll collect those frames either way if we stop/delete vdevs */
3763 mutex_lock(&ar->conf_mutex);
3765 if (ar->state == ATH10K_STATE_WEDGED)
3768 ret = wait_event_timeout(ar->htt.empty_tx_wq, ({
3771 spin_lock_bh(&ar->htt.tx_lock);
3772 empty = (ar->htt.num_pending_tx == 0);
3773 spin_unlock_bh(&ar->htt.tx_lock);
3775 skip = (ar->state == ATH10K_STATE_WEDGED);
3778 }), ATH10K_FLUSH_TIMEOUT_HZ);
3780 if (ret <= 0 || skip)
3781 ath10k_warn("failed to flush transmit queue (skip %i ar-state %i): %i\n",
3782 skip, ar->state, ret);
3785 mutex_unlock(&ar->conf_mutex);
3788 /* TODO: Implement this function properly
3789 * For now it is needed to reply to Probe Requests in IBSS mode.
3790 * Propably we need this information from FW.
3792 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
3798 static int ath10k_suspend(struct ieee80211_hw *hw,
3799 struct cfg80211_wowlan *wowlan)
3801 struct ath10k *ar = hw->priv;
3804 mutex_lock(&ar->conf_mutex);
3806 ret = ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND);
3808 if (ret == -ETIMEDOUT)
3814 ret = ath10k_hif_suspend(ar);
3816 ath10k_warn("failed to suspend hif: %d\n", ret);
3823 ret = ath10k_wmi_pdev_resume_target(ar);
3825 ath10k_warn("failed to resume target: %d\n", ret);
3829 mutex_unlock(&ar->conf_mutex);
3833 static int ath10k_resume(struct ieee80211_hw *hw)
3835 struct ath10k *ar = hw->priv;
3838 mutex_lock(&ar->conf_mutex);
3840 ret = ath10k_hif_resume(ar);
3842 ath10k_warn("failed to resume hif: %d\n", ret);
3847 ret = ath10k_wmi_pdev_resume_target(ar);
3849 ath10k_warn("failed to resume target: %d\n", ret);
3856 mutex_unlock(&ar->conf_mutex);
3861 static void ath10k_restart_complete(struct ieee80211_hw *hw)
3863 struct ath10k *ar = hw->priv;
3865 mutex_lock(&ar->conf_mutex);
3867 /* If device failed to restart it will be in a different state, e.g.
3868 * ATH10K_STATE_WEDGED */
3869 if (ar->state == ATH10K_STATE_RESTARTED) {
3870 ath10k_info("device successfully recovered\n");
3871 ar->state = ATH10K_STATE_ON;
3874 mutex_unlock(&ar->conf_mutex);
3877 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
3878 struct survey_info *survey)
3880 struct ath10k *ar = hw->priv;
3881 struct ieee80211_supported_band *sband;
3882 struct survey_info *ar_survey = &ar->survey[idx];
3885 mutex_lock(&ar->conf_mutex);
3887 sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
3888 if (sband && idx >= sband->n_channels) {
3889 idx -= sband->n_channels;
3894 sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
3896 if (!sband || idx >= sband->n_channels) {
3901 spin_lock_bh(&ar->data_lock);
3902 memcpy(survey, ar_survey, sizeof(*survey));
3903 spin_unlock_bh(&ar->data_lock);
3905 survey->channel = &sband->channels[idx];
3908 mutex_unlock(&ar->conf_mutex);
3912 /* Helper table for legacy fixed_rate/bitrate_mask */
3913 static const u8 cck_ofdm_rate[] = {
3930 /* Check if only one bit set */
3931 static int ath10k_check_single_mask(u32 mask)
3939 mask &= ~BIT(bit - 1);
3947 ath10k_default_bitrate_mask(struct ath10k *ar,
3948 enum ieee80211_band band,
3949 const struct cfg80211_bitrate_mask *mask)
3951 u32 legacy = 0x00ff;
3956 case IEEE80211_BAND_2GHZ:
3960 case IEEE80211_BAND_5GHZ:
3966 if (mask->control[band].legacy != legacy)
3969 for (i = 0; i < ar->num_rf_chains; i++)
3970 if (mask->control[band].ht_mcs[i] != ht)
3973 for (i = 0; i < ar->num_rf_chains; i++)
3974 if (mask->control[band].vht_mcs[i] != vht)
3981 ath10k_bitrate_mask_nss(const struct cfg80211_bitrate_mask *mask,
3982 enum ieee80211_band band,
3985 int ht_nss = 0, vht_nss = 0, i;
3988 if (ath10k_check_single_mask(mask->control[band].legacy))
3992 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
3993 if (mask->control[band].ht_mcs[i] == 0xff)
3995 else if (mask->control[band].ht_mcs[i] == 0x00)
4004 for (i = 0; i < NL80211_VHT_NSS_MAX; i++) {
4005 if (mask->control[band].vht_mcs[i] == 0x03ff)
4007 else if (mask->control[band].vht_mcs[i] == 0x0000)
4015 if (ht_nss > 0 && vht_nss > 0)
4019 *fixed_nss = ht_nss;
4021 *fixed_nss = vht_nss;
4029 ath10k_bitrate_mask_correct(const struct cfg80211_bitrate_mask *mask,
4030 enum ieee80211_band band,
4031 enum wmi_rate_preamble *preamble)
4033 int legacy = 0, ht = 0, vht = 0, i;
4035 *preamble = WMI_RATE_PREAMBLE_OFDM;
4038 legacy = ath10k_check_single_mask(mask->control[band].legacy);
4043 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4044 ht += ath10k_check_single_mask(mask->control[band].ht_mcs[i]);
4049 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4050 vht += ath10k_check_single_mask(mask->control[band].vht_mcs[i]);
4054 /* Currently we support only one fixed_rate */
4055 if ((legacy + ht + vht) != 1)
4059 *preamble = WMI_RATE_PREAMBLE_HT;
4061 *preamble = WMI_RATE_PREAMBLE_VHT;
4067 ath10k_bitrate_mask_rate(const struct cfg80211_bitrate_mask *mask,
4068 enum ieee80211_band band,
4072 u8 rate = 0, pream = 0, nss = 0, i;
4073 enum wmi_rate_preamble preamble;
4075 /* Check if single rate correct */
4076 if (!ath10k_bitrate_mask_correct(mask, band, &preamble))
4082 case WMI_RATE_PREAMBLE_CCK:
4083 case WMI_RATE_PREAMBLE_OFDM:
4084 i = ffs(mask->control[band].legacy) - 1;
4086 if (band == IEEE80211_BAND_2GHZ && i < 4)
4087 pream = WMI_RATE_PREAMBLE_CCK;
4089 if (band == IEEE80211_BAND_5GHZ)
4092 if (i >= ARRAY_SIZE(cck_ofdm_rate))
4095 rate = cck_ofdm_rate[i];
4097 case WMI_RATE_PREAMBLE_HT:
4098 for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
4099 if (mask->control[band].ht_mcs[i])
4102 if (i == IEEE80211_HT_MCS_MASK_LEN)
4105 rate = ffs(mask->control[band].ht_mcs[i]) - 1;
4108 case WMI_RATE_PREAMBLE_VHT:
4109 for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
4110 if (mask->control[band].vht_mcs[i])
4113 if (i == NL80211_VHT_NSS_MAX)
4116 rate = ffs(mask->control[band].vht_mcs[i]) - 1;
4121 *fixed_nss = nss + 1;
4125 ath10k_dbg(ATH10K_DBG_MAC, "mac fixed rate pream 0x%02x nss 0x%02x rate 0x%02x\n",
4128 *fixed_rate = pream | nss | rate;
4133 static bool ath10k_get_fixed_rate_nss(const struct cfg80211_bitrate_mask *mask,
4134 enum ieee80211_band band,
4138 /* First check full NSS mask, if we can simply limit NSS */
4139 if (ath10k_bitrate_mask_nss(mask, band, fixed_nss))
4142 /* Next Check single rate is set */
4143 return ath10k_bitrate_mask_rate(mask, band, fixed_rate, fixed_nss);
4146 static int ath10k_set_fixed_rate_param(struct ath10k_vif *arvif,
4151 struct ath10k *ar = arvif->ar;
4155 mutex_lock(&ar->conf_mutex);
4157 if (arvif->fixed_rate == fixed_rate &&
4158 arvif->fixed_nss == fixed_nss &&
4159 arvif->force_sgi == force_sgi)
4162 if (fixed_rate == WMI_FIXED_RATE_NONE)
4163 ath10k_dbg(ATH10K_DBG_MAC, "mac disable fixed bitrate mask\n");
4166 ath10k_dbg(ATH10K_DBG_MAC, "mac force sgi\n");
4168 vdev_param = ar->wmi.vdev_param->fixed_rate;
4169 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4170 vdev_param, fixed_rate);
4172 ath10k_warn("failed to set fixed rate param 0x%02x: %d\n",
4178 arvif->fixed_rate = fixed_rate;
4180 vdev_param = ar->wmi.vdev_param->nss;
4181 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
4182 vdev_param, fixed_nss);
4185 ath10k_warn("failed to set fixed nss param %d: %d\n",
4191 arvif->fixed_nss = fixed_nss;
4193 vdev_param = ar->wmi.vdev_param->sgi;
4194 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
4198 ath10k_warn("failed to set sgi param %d: %d\n",
4204 arvif->force_sgi = force_sgi;
4207 mutex_unlock(&ar->conf_mutex);
4211 static int ath10k_set_bitrate_mask(struct ieee80211_hw *hw,
4212 struct ieee80211_vif *vif,
4213 const struct cfg80211_bitrate_mask *mask)
4215 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4216 struct ath10k *ar = arvif->ar;
4217 enum ieee80211_band band = ar->hw->conf.chandef.chan->band;
4218 u8 fixed_rate = WMI_FIXED_RATE_NONE;
4219 u8 fixed_nss = ar->num_rf_chains;
4222 force_sgi = mask->control[band].gi;
4223 if (force_sgi == NL80211_TXRATE_FORCE_LGI)
4226 if (!ath10k_default_bitrate_mask(ar, band, mask)) {
4227 if (!ath10k_get_fixed_rate_nss(mask, band,
4233 if (fixed_rate == WMI_FIXED_RATE_NONE && force_sgi) {
4234 ath10k_warn("failed to force SGI usage for default rate settings\n");
4238 return ath10k_set_fixed_rate_param(arvif, fixed_rate,
4239 fixed_nss, force_sgi);
4242 static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
4243 struct ieee80211_vif *vif,
4244 struct ieee80211_sta *sta,
4247 struct ath10k *ar = hw->priv;
4248 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
4251 spin_lock_bh(&ar->data_lock);
4253 ath10k_dbg(ATH10K_DBG_MAC,
4254 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
4255 sta->addr, changed, sta->bandwidth, sta->rx_nss,
4258 if (changed & IEEE80211_RC_BW_CHANGED) {
4259 bw = WMI_PEER_CHWIDTH_20MHZ;
4261 switch (sta->bandwidth) {
4262 case IEEE80211_STA_RX_BW_20:
4263 bw = WMI_PEER_CHWIDTH_20MHZ;
4265 case IEEE80211_STA_RX_BW_40:
4266 bw = WMI_PEER_CHWIDTH_40MHZ;
4268 case IEEE80211_STA_RX_BW_80:
4269 bw = WMI_PEER_CHWIDTH_80MHZ;
4271 case IEEE80211_STA_RX_BW_160:
4272 ath10k_warn("Invalid bandwith %d in rc update for %pM\n",
4273 sta->bandwidth, sta->addr);
4274 bw = WMI_PEER_CHWIDTH_20MHZ;
4281 if (changed & IEEE80211_RC_NSS_CHANGED)
4282 arsta->nss = sta->rx_nss;
4284 if (changed & IEEE80211_RC_SMPS_CHANGED) {
4285 smps = WMI_PEER_SMPS_PS_NONE;
4287 switch (sta->smps_mode) {
4288 case IEEE80211_SMPS_AUTOMATIC:
4289 case IEEE80211_SMPS_OFF:
4290 smps = WMI_PEER_SMPS_PS_NONE;
4292 case IEEE80211_SMPS_STATIC:
4293 smps = WMI_PEER_SMPS_STATIC;
4295 case IEEE80211_SMPS_DYNAMIC:
4296 smps = WMI_PEER_SMPS_DYNAMIC;
4298 case IEEE80211_SMPS_NUM_MODES:
4299 ath10k_warn("Invalid smps %d in sta rc update for %pM\n",
4300 sta->smps_mode, sta->addr);
4301 smps = WMI_PEER_SMPS_PS_NONE;
4308 arsta->changed |= changed;
4310 spin_unlock_bh(&ar->data_lock);
4312 ieee80211_queue_work(hw, &arsta->update_wk);
4315 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
4318 * FIXME: Return 0 for time being. Need to figure out whether FW
4319 * has the API to fetch 64-bit local TSF
4325 static const struct ieee80211_ops ath10k_ops = {
4327 .start = ath10k_start,
4328 .stop = ath10k_stop,
4329 .config = ath10k_config,
4330 .add_interface = ath10k_add_interface,
4331 .remove_interface = ath10k_remove_interface,
4332 .configure_filter = ath10k_configure_filter,
4333 .bss_info_changed = ath10k_bss_info_changed,
4334 .hw_scan = ath10k_hw_scan,
4335 .cancel_hw_scan = ath10k_cancel_hw_scan,
4336 .set_key = ath10k_set_key,
4337 .sta_state = ath10k_sta_state,
4338 .conf_tx = ath10k_conf_tx,
4339 .remain_on_channel = ath10k_remain_on_channel,
4340 .cancel_remain_on_channel = ath10k_cancel_remain_on_channel,
4341 .set_rts_threshold = ath10k_set_rts_threshold,
4342 .set_frag_threshold = ath10k_set_frag_threshold,
4343 .flush = ath10k_flush,
4344 .tx_last_beacon = ath10k_tx_last_beacon,
4345 .set_antenna = ath10k_set_antenna,
4346 .get_antenna = ath10k_get_antenna,
4347 .restart_complete = ath10k_restart_complete,
4348 .get_survey = ath10k_get_survey,
4349 .set_bitrate_mask = ath10k_set_bitrate_mask,
4350 .sta_rc_update = ath10k_sta_rc_update,
4351 .get_tsf = ath10k_get_tsf,
4353 .suspend = ath10k_suspend,
4354 .resume = ath10k_resume,
4358 #define RATETAB_ENT(_rate, _rateid, _flags) { \
4359 .bitrate = (_rate), \
4360 .flags = (_flags), \
4361 .hw_value = (_rateid), \
4364 #define CHAN2G(_channel, _freq, _flags) { \
4365 .band = IEEE80211_BAND_2GHZ, \
4366 .hw_value = (_channel), \
4367 .center_freq = (_freq), \
4368 .flags = (_flags), \
4369 .max_antenna_gain = 0, \
4373 #define CHAN5G(_channel, _freq, _flags) { \
4374 .band = IEEE80211_BAND_5GHZ, \
4375 .hw_value = (_channel), \
4376 .center_freq = (_freq), \
4377 .flags = (_flags), \
4378 .max_antenna_gain = 0, \
4382 static const struct ieee80211_channel ath10k_2ghz_channels[] = {
4392 CHAN2G(10, 2457, 0),
4393 CHAN2G(11, 2462, 0),
4394 CHAN2G(12, 2467, 0),
4395 CHAN2G(13, 2472, 0),
4396 CHAN2G(14, 2484, 0),
4399 static const struct ieee80211_channel ath10k_5ghz_channels[] = {
4400 CHAN5G(36, 5180, 0),
4401 CHAN5G(40, 5200, 0),
4402 CHAN5G(44, 5220, 0),
4403 CHAN5G(48, 5240, 0),
4404 CHAN5G(52, 5260, 0),
4405 CHAN5G(56, 5280, 0),
4406 CHAN5G(60, 5300, 0),
4407 CHAN5G(64, 5320, 0),
4408 CHAN5G(100, 5500, 0),
4409 CHAN5G(104, 5520, 0),
4410 CHAN5G(108, 5540, 0),
4411 CHAN5G(112, 5560, 0),
4412 CHAN5G(116, 5580, 0),
4413 CHAN5G(120, 5600, 0),
4414 CHAN5G(124, 5620, 0),
4415 CHAN5G(128, 5640, 0),
4416 CHAN5G(132, 5660, 0),
4417 CHAN5G(136, 5680, 0),
4418 CHAN5G(140, 5700, 0),
4419 CHAN5G(149, 5745, 0),
4420 CHAN5G(153, 5765, 0),
4421 CHAN5G(157, 5785, 0),
4422 CHAN5G(161, 5805, 0),
4423 CHAN5G(165, 5825, 0),
4426 static struct ieee80211_rate ath10k_rates[] = {
4428 RATETAB_ENT(10, 0x82, 0),
4429 RATETAB_ENT(20, 0x84, 0),
4430 RATETAB_ENT(55, 0x8b, 0),
4431 RATETAB_ENT(110, 0x96, 0),
4433 RATETAB_ENT(60, 0x0c, 0),
4434 RATETAB_ENT(90, 0x12, 0),
4435 RATETAB_ENT(120, 0x18, 0),
4436 RATETAB_ENT(180, 0x24, 0),
4437 RATETAB_ENT(240, 0x30, 0),
4438 RATETAB_ENT(360, 0x48, 0),
4439 RATETAB_ENT(480, 0x60, 0),
4440 RATETAB_ENT(540, 0x6c, 0),
4443 #define ath10k_a_rates (ath10k_rates + 4)
4444 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - 4)
4445 #define ath10k_g_rates (ath10k_rates + 0)
4446 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
4448 struct ath10k *ath10k_mac_create(void)
4450 struct ieee80211_hw *hw;
4453 hw = ieee80211_alloc_hw(sizeof(struct ath10k), &ath10k_ops);
4463 void ath10k_mac_destroy(struct ath10k *ar)
4465 ieee80211_free_hw(ar->hw);
4468 static const struct ieee80211_iface_limit ath10k_if_limits[] = {
4471 .types = BIT(NL80211_IFTYPE_STATION)
4472 | BIT(NL80211_IFTYPE_P2P_CLIENT)
4476 .types = BIT(NL80211_IFTYPE_P2P_GO)
4480 .types = BIT(NL80211_IFTYPE_AP)
4484 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = {
4487 .types = BIT(NL80211_IFTYPE_AP)
4491 static const struct ieee80211_iface_combination ath10k_if_comb[] = {
4493 .limits = ath10k_if_limits,
4494 .n_limits = ARRAY_SIZE(ath10k_if_limits),
4495 .max_interfaces = 8,
4496 .num_different_channels = 1,
4497 .beacon_int_infra_match = true,
4501 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = {
4503 .limits = ath10k_10x_if_limits,
4504 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits),
4505 .max_interfaces = 8,
4506 .num_different_channels = 1,
4507 .beacon_int_infra_match = true,
4508 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
4509 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
4510 BIT(NL80211_CHAN_WIDTH_20) |
4511 BIT(NL80211_CHAN_WIDTH_40) |
4512 BIT(NL80211_CHAN_WIDTH_80),
4517 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
4519 struct ieee80211_sta_vht_cap vht_cap = {0};
4523 vht_cap.vht_supported = 1;
4524 vht_cap.cap = ar->vht_cap_info;
4527 for (i = 0; i < 8; i++) {
4528 if (i < ar->num_rf_chains)
4529 mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i*2);
4531 mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i*2);
4534 vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
4535 vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
4540 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
4543 struct ieee80211_sta_ht_cap ht_cap = {0};
4545 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED))
4548 ht_cap.ht_supported = 1;
4549 ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
4550 ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
4551 ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
4552 ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40;
4553 ht_cap.cap |= WLAN_HT_CAP_SM_PS_STATIC << IEEE80211_HT_CAP_SM_PS_SHIFT;
4555 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI)
4556 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
4558 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI)
4559 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
4561 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) {
4564 smps = WLAN_HT_CAP_SM_PS_DYNAMIC;
4565 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT;
4570 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC)
4571 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC;
4573 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) {
4576 stbc = ar->ht_cap_info;
4577 stbc &= WMI_HT_CAP_RX_STBC;
4578 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT;
4579 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT;
4580 stbc &= IEEE80211_HT_CAP_RX_STBC;
4585 if (ar->ht_cap_info & WMI_HT_CAP_LDPC)
4586 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
4588 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT)
4589 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT;
4591 /* max AMSDU is implicitly taken from vht_cap_info */
4592 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK)
4593 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU;
4595 for (i = 0; i < ar->num_rf_chains; i++)
4596 ht_cap.mcs.rx_mask[i] = 0xFF;
4598 ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
4604 static void ath10k_get_arvif_iter(void *data, u8 *mac,
4605 struct ieee80211_vif *vif)
4607 struct ath10k_vif_iter *arvif_iter = data;
4608 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
4610 if (arvif->vdev_id == arvif_iter->vdev_id)
4611 arvif_iter->arvif = arvif;
4614 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
4616 struct ath10k_vif_iter arvif_iter;
4619 memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter));
4620 arvif_iter.vdev_id = vdev_id;
4622 flags = IEEE80211_IFACE_ITER_RESUME_ALL;
4623 ieee80211_iterate_active_interfaces_atomic(ar->hw,
4625 ath10k_get_arvif_iter,
4627 if (!arvif_iter.arvif) {
4628 ath10k_warn("No VIF found for vdev %d\n", vdev_id);
4632 return arvif_iter.arvif;
4635 int ath10k_mac_register(struct ath10k *ar)
4637 struct ieee80211_supported_band *band;
4638 struct ieee80211_sta_vht_cap vht_cap;
4639 struct ieee80211_sta_ht_cap ht_cap;
4643 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr);
4645 SET_IEEE80211_DEV(ar->hw, ar->dev);
4647 ht_cap = ath10k_get_ht_cap(ar);
4648 vht_cap = ath10k_create_vht_cap(ar);
4650 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) {
4651 channels = kmemdup(ath10k_2ghz_channels,
4652 sizeof(ath10k_2ghz_channels),
4659 band = &ar->mac.sbands[IEEE80211_BAND_2GHZ];
4660 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels);
4661 band->channels = channels;
4662 band->n_bitrates = ath10k_g_rates_size;
4663 band->bitrates = ath10k_g_rates;
4664 band->ht_cap = ht_cap;
4666 /* vht is not supported in 2.4 GHz */
4668 ar->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = band;
4671 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) {
4672 channels = kmemdup(ath10k_5ghz_channels,
4673 sizeof(ath10k_5ghz_channels),
4680 band = &ar->mac.sbands[IEEE80211_BAND_5GHZ];
4681 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels);
4682 band->channels = channels;
4683 band->n_bitrates = ath10k_a_rates_size;
4684 band->bitrates = ath10k_a_rates;
4685 band->ht_cap = ht_cap;
4686 band->vht_cap = vht_cap;
4687 ar->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = band;
4690 ar->hw->wiphy->interface_modes =
4691 BIT(NL80211_IFTYPE_STATION) |
4692 BIT(NL80211_IFTYPE_ADHOC) |
4693 BIT(NL80211_IFTYPE_AP);
4695 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
4696 /* TODO: Have to deal with 2x2 chips if/when the come out. */
4697 ar->supp_tx_chainmask = TARGET_10X_TX_CHAIN_MASK;
4698 ar->supp_rx_chainmask = TARGET_10X_RX_CHAIN_MASK;
4700 ar->supp_tx_chainmask = TARGET_TX_CHAIN_MASK;
4701 ar->supp_rx_chainmask = TARGET_RX_CHAIN_MASK;
4704 ar->hw->wiphy->available_antennas_rx = ar->supp_rx_chainmask;
4705 ar->hw->wiphy->available_antennas_tx = ar->supp_tx_chainmask;
4707 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->fw_features))
4708 ar->hw->wiphy->interface_modes |=
4709 BIT(NL80211_IFTYPE_P2P_CLIENT) |
4710 BIT(NL80211_IFTYPE_P2P_GO);
4712 ar->hw->flags = IEEE80211_HW_SIGNAL_DBM |
4713 IEEE80211_HW_SUPPORTS_PS |
4714 IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
4715 IEEE80211_HW_SUPPORTS_UAPSD |
4716 IEEE80211_HW_MFP_CAPABLE |
4717 IEEE80211_HW_REPORTS_TX_ACK_STATUS |
4718 IEEE80211_HW_HAS_RATE_CONTROL |
4719 IEEE80211_HW_SUPPORTS_STATIC_SMPS |
4720 IEEE80211_HW_AP_LINK_PS |
4721 IEEE80211_HW_SPECTRUM_MGMT;
4723 /* MSDU can have HTT TX fragment pushed in front. The additional 4
4724 * bytes is used for padding/alignment if necessary. */
4725 ar->hw->extra_tx_headroom += sizeof(struct htt_data_tx_desc_frag)*2 + 4;
4727 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS)
4728 ar->hw->flags |= IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS;
4730 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) {
4731 ar->hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
4732 ar->hw->flags |= IEEE80211_HW_TX_AMPDU_SETUP_IN_HW;
4735 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID;
4736 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN;
4738 ar->hw->vif_data_size = sizeof(struct ath10k_vif);
4739 ar->hw->sta_data_size = sizeof(struct ath10k_sta);
4741 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL;
4743 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
4744 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
4745 ar->hw->wiphy->max_remain_on_channel_duration = 5000;
4747 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
4749 * on LL hardware queues are managed entirely by the FW
4750 * so we only advertise to mac we can do the queues thing
4754 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) {
4755 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb;
4756 ar->hw->wiphy->n_iface_combinations =
4757 ARRAY_SIZE(ath10k_10x_if_comb);
4759 ar->hw->wiphy->iface_combinations = ath10k_if_comb;
4760 ar->hw->wiphy->n_iface_combinations =
4761 ARRAY_SIZE(ath10k_if_comb);
4764 ar->hw->netdev_features = NETIF_F_HW_CSUM;
4766 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED)) {
4767 /* Init ath dfs pattern detector */
4768 ar->ath_common.debug_mask = ATH_DBG_DFS;
4769 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common,
4772 if (!ar->dfs_detector)
4773 ath10k_warn("failed to initialise DFS pattern detector\n");
4776 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy,
4777 ath10k_reg_notifier);
4779 ath10k_err("failed to initialise regulatory: %i\n", ret);
4783 ret = ieee80211_register_hw(ar->hw);
4785 ath10k_err("failed to register ieee80211: %d\n", ret);
4789 if (!ath_is_world_regd(&ar->ath_common.regulatory)) {
4790 ret = regulatory_hint(ar->hw->wiphy,
4791 ar->ath_common.regulatory.alpha2);
4793 goto err_unregister;
4799 ieee80211_unregister_hw(ar->hw);
4801 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
4802 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
4807 void ath10k_mac_unregister(struct ath10k *ar)
4809 ieee80211_unregister_hw(ar->hw);
4811 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector)
4812 ar->dfs_detector->exit(ar->dfs_detector);
4814 kfree(ar->mac.sbands[IEEE80211_BAND_2GHZ].channels);
4815 kfree(ar->mac.sbands[IEEE80211_BAND_5GHZ].channels);
4817 SET_IEEE80211_DEV(ar->hw, NULL);