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>
37 static int ath10k_send_key(struct ath10k_vif
*arvif
,
38 struct ieee80211_key_conf
*key
,
42 struct ath10k
*ar
= arvif
->ar
;
43 struct wmi_vdev_install_key_arg arg
= {
44 .vdev_id
= arvif
->vdev_id
,
45 .key_idx
= key
->keyidx
,
46 .key_len
= key
->keylen
,
51 lockdep_assert_held(&arvif
->ar
->conf_mutex
);
53 if (key
->flags
& IEEE80211_KEY_FLAG_PAIRWISE
)
54 arg
.key_flags
= WMI_KEY_PAIRWISE
;
56 arg
.key_flags
= WMI_KEY_GROUP
;
58 switch (key
->cipher
) {
59 case WLAN_CIPHER_SUITE_CCMP
:
60 arg
.key_cipher
= WMI_CIPHER_AES_CCM
;
61 if (arvif
->vdev_type
== WMI_VDEV_TYPE_AP
)
62 key
->flags
|= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT
;
64 key
->flags
|= IEEE80211_KEY_FLAG_SW_MGMT_TX
;
66 case WLAN_CIPHER_SUITE_TKIP
:
67 arg
.key_cipher
= WMI_CIPHER_TKIP
;
68 arg
.key_txmic_len
= 8;
69 arg
.key_rxmic_len
= 8;
71 case WLAN_CIPHER_SUITE_WEP40
:
72 case WLAN_CIPHER_SUITE_WEP104
:
73 arg
.key_cipher
= WMI_CIPHER_WEP
;
74 /* AP/IBSS mode requires self-key to be groupwise
75 * Otherwise pairwise key must be set */
76 if (memcmp(macaddr
, arvif
->vif
->addr
, ETH_ALEN
))
77 arg
.key_flags
= WMI_KEY_PAIRWISE
;
80 ath10k_warn(ar
, "cipher %d is not supported\n", key
->cipher
);
84 if (cmd
== DISABLE_KEY
) {
85 arg
.key_cipher
= WMI_CIPHER_NONE
;
89 return ath10k_wmi_vdev_install_key(arvif
->ar
, &arg
);
92 static int ath10k_install_key(struct ath10k_vif
*arvif
,
93 struct ieee80211_key_conf
*key
,
97 struct ath10k
*ar
= arvif
->ar
;
100 lockdep_assert_held(&ar
->conf_mutex
);
102 reinit_completion(&ar
->install_key_done
);
104 ret
= ath10k_send_key(arvif
, key
, cmd
, macaddr
);
108 ret
= wait_for_completion_timeout(&ar
->install_key_done
, 3*HZ
);
115 static int ath10k_install_peer_wep_keys(struct ath10k_vif
*arvif
,
118 struct ath10k
*ar
= arvif
->ar
;
119 struct ath10k_peer
*peer
;
123 lockdep_assert_held(&ar
->conf_mutex
);
125 spin_lock_bh(&ar
->data_lock
);
126 peer
= ath10k_peer_find(ar
, arvif
->vdev_id
, addr
);
127 spin_unlock_bh(&ar
->data_lock
);
132 for (i
= 0; i
< ARRAY_SIZE(arvif
->wep_keys
); i
++) {
133 if (arvif
->wep_keys
[i
] == NULL
)
136 ret
= ath10k_install_key(arvif
, arvif
->wep_keys
[i
], SET_KEY
,
141 spin_lock_bh(&ar
->data_lock
);
142 peer
->keys
[i
] = arvif
->wep_keys
[i
];
143 spin_unlock_bh(&ar
->data_lock
);
149 static int ath10k_clear_peer_keys(struct ath10k_vif
*arvif
,
152 struct ath10k
*ar
= arvif
->ar
;
153 struct ath10k_peer
*peer
;
158 lockdep_assert_held(&ar
->conf_mutex
);
160 spin_lock_bh(&ar
->data_lock
);
161 peer
= ath10k_peer_find(ar
, arvif
->vdev_id
, addr
);
162 spin_unlock_bh(&ar
->data_lock
);
167 for (i
= 0; i
< ARRAY_SIZE(peer
->keys
); i
++) {
168 if (peer
->keys
[i
] == NULL
)
171 ret
= ath10k_install_key(arvif
, peer
->keys
[i
],
173 if (ret
&& first_errno
== 0)
177 ath10k_warn(ar
, "failed to remove peer wep key %d: %d\n",
180 spin_lock_bh(&ar
->data_lock
);
181 peer
->keys
[i
] = NULL
;
182 spin_unlock_bh(&ar
->data_lock
);
188 bool ath10k_mac_is_peer_wep_key_set(struct ath10k
*ar
, const u8
*addr
,
191 struct ath10k_peer
*peer
;
194 lockdep_assert_held(&ar
->data_lock
);
196 /* We don't know which vdev this peer belongs to,
197 * since WMI doesn't give us that information.
199 * FIXME: multi-bss needs to be handled.
201 peer
= ath10k_peer_find(ar
, 0, addr
);
205 for (i
= 0; i
< ARRAY_SIZE(peer
->keys
); i
++) {
206 if (peer
->keys
[i
] && peer
->keys
[i
]->keyidx
== keyidx
)
213 static int ath10k_clear_vdev_key(struct ath10k_vif
*arvif
,
214 struct ieee80211_key_conf
*key
)
216 struct ath10k
*ar
= arvif
->ar
;
217 struct ath10k_peer
*peer
;
223 lockdep_assert_held(&ar
->conf_mutex
);
226 /* since ath10k_install_key we can't hold data_lock all the
227 * time, so we try to remove the keys incrementally */
228 spin_lock_bh(&ar
->data_lock
);
230 list_for_each_entry(peer
, &ar
->peers
, list
) {
231 for (i
= 0; i
< ARRAY_SIZE(peer
->keys
); i
++) {
232 if (peer
->keys
[i
] == key
) {
233 ether_addr_copy(addr
, peer
->addr
);
234 peer
->keys
[i
] = NULL
;
239 if (i
< ARRAY_SIZE(peer
->keys
))
242 spin_unlock_bh(&ar
->data_lock
);
244 if (i
== ARRAY_SIZE(peer
->keys
))
247 ret
= ath10k_install_key(arvif
, key
, DISABLE_KEY
, addr
);
248 if (ret
&& first_errno
== 0)
252 ath10k_warn(ar
, "failed to remove key for %pM: %d\n",
259 /*********************/
260 /* General utilities */
261 /*********************/
263 static inline enum wmi_phy_mode
264 chan_to_phymode(const struct cfg80211_chan_def
*chandef
)
266 enum wmi_phy_mode phymode
= MODE_UNKNOWN
;
268 switch (chandef
->chan
->band
) {
269 case IEEE80211_BAND_2GHZ
:
270 switch (chandef
->width
) {
271 case NL80211_CHAN_WIDTH_20_NOHT
:
272 if (chandef
->chan
->flags
& IEEE80211_CHAN_NO_OFDM
)
277 case NL80211_CHAN_WIDTH_20
:
278 phymode
= MODE_11NG_HT20
;
280 case NL80211_CHAN_WIDTH_40
:
281 phymode
= MODE_11NG_HT40
;
283 case NL80211_CHAN_WIDTH_5
:
284 case NL80211_CHAN_WIDTH_10
:
285 case NL80211_CHAN_WIDTH_80
:
286 case NL80211_CHAN_WIDTH_80P80
:
287 case NL80211_CHAN_WIDTH_160
:
288 phymode
= MODE_UNKNOWN
;
292 case IEEE80211_BAND_5GHZ
:
293 switch (chandef
->width
) {
294 case NL80211_CHAN_WIDTH_20_NOHT
:
297 case NL80211_CHAN_WIDTH_20
:
298 phymode
= MODE_11NA_HT20
;
300 case NL80211_CHAN_WIDTH_40
:
301 phymode
= MODE_11NA_HT40
;
303 case NL80211_CHAN_WIDTH_80
:
304 phymode
= MODE_11AC_VHT80
;
306 case NL80211_CHAN_WIDTH_5
:
307 case NL80211_CHAN_WIDTH_10
:
308 case NL80211_CHAN_WIDTH_80P80
:
309 case NL80211_CHAN_WIDTH_160
:
310 phymode
= MODE_UNKNOWN
;
318 WARN_ON(phymode
== MODE_UNKNOWN
);
322 static u8
ath10k_parse_mpdudensity(u8 mpdudensity
)
325 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
326 * 0 for no restriction
335 switch (mpdudensity
) {
341 /* Our lower layer calculations limit our precision to
357 static int ath10k_peer_create(struct ath10k
*ar
, u32 vdev_id
, const u8
*addr
)
361 lockdep_assert_held(&ar
->conf_mutex
);
363 if (ar
->num_peers
>= ar
->max_num_peers
)
366 ret
= ath10k_wmi_peer_create(ar
, vdev_id
, addr
);
368 ath10k_warn(ar
, "failed to create wmi peer %pM on vdev %i: %i\n",
373 ret
= ath10k_wait_for_peer_created(ar
, vdev_id
, addr
);
375 ath10k_warn(ar
, "failed to wait for created wmi peer %pM on vdev %i: %i\n",
385 static int ath10k_mac_set_kickout(struct ath10k_vif
*arvif
)
387 struct ath10k
*ar
= arvif
->ar
;
391 param
= ar
->wmi
.pdev_param
->sta_kickout_th
;
392 ret
= ath10k_wmi_pdev_set_param(ar
, param
,
393 ATH10K_KICKOUT_THRESHOLD
);
395 ath10k_warn(ar
, "failed to set kickout threshold on vdev %i: %d\n",
396 arvif
->vdev_id
, ret
);
400 param
= ar
->wmi
.vdev_param
->ap_keepalive_min_idle_inactive_time_secs
;
401 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, param
,
402 ATH10K_KEEPALIVE_MIN_IDLE
);
404 ath10k_warn(ar
, "failed to set keepalive minimum idle time on vdev %i: %d\n",
405 arvif
->vdev_id
, ret
);
409 param
= ar
->wmi
.vdev_param
->ap_keepalive_max_idle_inactive_time_secs
;
410 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, param
,
411 ATH10K_KEEPALIVE_MAX_IDLE
);
413 ath10k_warn(ar
, "failed to set keepalive maximum idle time on vdev %i: %d\n",
414 arvif
->vdev_id
, ret
);
418 param
= ar
->wmi
.vdev_param
->ap_keepalive_max_unresponsive_time_secs
;
419 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, param
,
420 ATH10K_KEEPALIVE_MAX_UNRESPONSIVE
);
422 ath10k_warn(ar
, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n",
423 arvif
->vdev_id
, ret
);
430 static int ath10k_mac_set_rts(struct ath10k_vif
*arvif
, u32 value
)
432 struct ath10k
*ar
= arvif
->ar
;
435 vdev_param
= ar
->wmi
.vdev_param
->rts_threshold
;
436 return ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
, value
);
439 static int ath10k_mac_set_frag(struct ath10k_vif
*arvif
, u32 value
)
441 struct ath10k
*ar
= arvif
->ar
;
444 if (value
!= 0xFFFFFFFF)
445 value
= clamp_t(u32
, arvif
->ar
->hw
->wiphy
->frag_threshold
,
446 ATH10K_FRAGMT_THRESHOLD_MIN
,
447 ATH10K_FRAGMT_THRESHOLD_MAX
);
449 vdev_param
= ar
->wmi
.vdev_param
->fragmentation_threshold
;
450 return ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
, value
);
453 static int ath10k_peer_delete(struct ath10k
*ar
, u32 vdev_id
, const u8
*addr
)
457 lockdep_assert_held(&ar
->conf_mutex
);
459 ret
= ath10k_wmi_peer_delete(ar
, vdev_id
, addr
);
463 ret
= ath10k_wait_for_peer_deleted(ar
, vdev_id
, addr
);
472 static void ath10k_peer_cleanup(struct ath10k
*ar
, u32 vdev_id
)
474 struct ath10k_peer
*peer
, *tmp
;
476 lockdep_assert_held(&ar
->conf_mutex
);
478 spin_lock_bh(&ar
->data_lock
);
479 list_for_each_entry_safe(peer
, tmp
, &ar
->peers
, list
) {
480 if (peer
->vdev_id
!= vdev_id
)
483 ath10k_warn(ar
, "removing stale peer %pM from vdev_id %d\n",
484 peer
->addr
, vdev_id
);
486 list_del(&peer
->list
);
490 spin_unlock_bh(&ar
->data_lock
);
493 static void ath10k_peer_cleanup_all(struct ath10k
*ar
)
495 struct ath10k_peer
*peer
, *tmp
;
497 lockdep_assert_held(&ar
->conf_mutex
);
499 spin_lock_bh(&ar
->data_lock
);
500 list_for_each_entry_safe(peer
, tmp
, &ar
->peers
, list
) {
501 list_del(&peer
->list
);
504 spin_unlock_bh(&ar
->data_lock
);
507 ar
->num_stations
= 0;
510 /************************/
511 /* Interface management */
512 /************************/
514 void ath10k_mac_vif_beacon_free(struct ath10k_vif
*arvif
)
516 struct ath10k
*ar
= arvif
->ar
;
518 lockdep_assert_held(&ar
->data_lock
);
523 if (!arvif
->beacon_buf
)
524 dma_unmap_single(ar
->dev
, ATH10K_SKB_CB(arvif
->beacon
)->paddr
,
525 arvif
->beacon
->len
, DMA_TO_DEVICE
);
527 dev_kfree_skb_any(arvif
->beacon
);
529 arvif
->beacon
= NULL
;
530 arvif
->beacon_sent
= false;
533 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif
*arvif
)
535 struct ath10k
*ar
= arvif
->ar
;
537 lockdep_assert_held(&ar
->data_lock
);
539 ath10k_mac_vif_beacon_free(arvif
);
541 if (arvif
->beacon_buf
) {
542 dma_free_coherent(ar
->dev
, IEEE80211_MAX_FRAME_LEN
,
543 arvif
->beacon_buf
, arvif
->beacon_paddr
);
544 arvif
->beacon_buf
= NULL
;
548 static inline int ath10k_vdev_setup_sync(struct ath10k
*ar
)
552 lockdep_assert_held(&ar
->conf_mutex
);
554 if (test_bit(ATH10K_FLAG_CRASH_FLUSH
, &ar
->dev_flags
))
557 ret
= wait_for_completion_timeout(&ar
->vdev_setup_done
,
558 ATH10K_VDEV_SETUP_TIMEOUT_HZ
);
565 static int ath10k_monitor_vdev_start(struct ath10k
*ar
, int vdev_id
)
567 struct cfg80211_chan_def
*chandef
= &ar
->chandef
;
568 struct ieee80211_channel
*channel
= chandef
->chan
;
569 struct wmi_vdev_start_request_arg arg
= {};
572 lockdep_assert_held(&ar
->conf_mutex
);
574 arg
.vdev_id
= vdev_id
;
575 arg
.channel
.freq
= channel
->center_freq
;
576 arg
.channel
.band_center_freq1
= chandef
->center_freq1
;
578 /* TODO setup this dynamically, what in case we
579 don't have any vifs? */
580 arg
.channel
.mode
= chan_to_phymode(chandef
);
581 arg
.channel
.chan_radar
=
582 !!(channel
->flags
& IEEE80211_CHAN_RADAR
);
584 arg
.channel
.min_power
= 0;
585 arg
.channel
.max_power
= channel
->max_power
* 2;
586 arg
.channel
.max_reg_power
= channel
->max_reg_power
* 2;
587 arg
.channel
.max_antenna_gain
= channel
->max_antenna_gain
* 2;
589 reinit_completion(&ar
->vdev_setup_done
);
591 ret
= ath10k_wmi_vdev_start(ar
, &arg
);
593 ath10k_warn(ar
, "failed to request monitor vdev %i start: %d\n",
598 ret
= ath10k_vdev_setup_sync(ar
);
600 ath10k_warn(ar
, "failed to synchronize setup for monitor vdev %i: %d\n",
605 ret
= ath10k_wmi_vdev_up(ar
, vdev_id
, 0, ar
->mac_addr
);
607 ath10k_warn(ar
, "failed to put up monitor vdev %i: %d\n",
612 ar
->monitor_vdev_id
= vdev_id
;
614 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac monitor vdev %i started\n",
615 ar
->monitor_vdev_id
);
619 ret
= ath10k_wmi_vdev_stop(ar
, ar
->monitor_vdev_id
);
621 ath10k_warn(ar
, "failed to stop monitor vdev %i after start failure: %d\n",
622 ar
->monitor_vdev_id
, ret
);
627 static int ath10k_monitor_vdev_stop(struct ath10k
*ar
)
631 lockdep_assert_held(&ar
->conf_mutex
);
633 ret
= ath10k_wmi_vdev_down(ar
, ar
->monitor_vdev_id
);
635 ath10k_warn(ar
, "failed to put down monitor vdev %i: %d\n",
636 ar
->monitor_vdev_id
, ret
);
638 reinit_completion(&ar
->vdev_setup_done
);
640 ret
= ath10k_wmi_vdev_stop(ar
, ar
->monitor_vdev_id
);
642 ath10k_warn(ar
, "failed to to request monitor vdev %i stop: %d\n",
643 ar
->monitor_vdev_id
, ret
);
645 ret
= ath10k_vdev_setup_sync(ar
);
647 ath10k_warn(ar
, "failed to synchronise monitor vdev %i: %d\n",
648 ar
->monitor_vdev_id
, ret
);
650 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac monitor vdev %i stopped\n",
651 ar
->monitor_vdev_id
);
655 static int ath10k_monitor_vdev_create(struct ath10k
*ar
)
659 lockdep_assert_held(&ar
->conf_mutex
);
661 if (ar
->free_vdev_map
== 0) {
662 ath10k_warn(ar
, "failed to find free vdev id for monitor vdev\n");
666 bit
= __ffs64(ar
->free_vdev_map
);
668 ar
->monitor_vdev_id
= bit
;
670 ret
= ath10k_wmi_vdev_create(ar
, ar
->monitor_vdev_id
,
671 WMI_VDEV_TYPE_MONITOR
,
674 ath10k_warn(ar
, "failed to request monitor vdev %i creation: %d\n",
675 ar
->monitor_vdev_id
, ret
);
679 ar
->free_vdev_map
&= ~(1LL << ar
->monitor_vdev_id
);
680 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac monitor vdev %d created\n",
681 ar
->monitor_vdev_id
);
686 static int ath10k_monitor_vdev_delete(struct ath10k
*ar
)
690 lockdep_assert_held(&ar
->conf_mutex
);
692 ret
= ath10k_wmi_vdev_delete(ar
, ar
->monitor_vdev_id
);
694 ath10k_warn(ar
, "failed to request wmi monitor vdev %i removal: %d\n",
695 ar
->monitor_vdev_id
, ret
);
699 ar
->free_vdev_map
|= 1LL << ar
->monitor_vdev_id
;
701 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac monitor vdev %d deleted\n",
702 ar
->monitor_vdev_id
);
706 static int ath10k_monitor_start(struct ath10k
*ar
)
710 lockdep_assert_held(&ar
->conf_mutex
);
712 ret
= ath10k_monitor_vdev_create(ar
);
714 ath10k_warn(ar
, "failed to create monitor vdev: %d\n", ret
);
718 ret
= ath10k_monitor_vdev_start(ar
, ar
->monitor_vdev_id
);
720 ath10k_warn(ar
, "failed to start monitor vdev: %d\n", ret
);
721 ath10k_monitor_vdev_delete(ar
);
725 ar
->monitor_started
= true;
726 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac monitor started\n");
731 static int ath10k_monitor_stop(struct ath10k
*ar
)
735 lockdep_assert_held(&ar
->conf_mutex
);
737 ret
= ath10k_monitor_vdev_stop(ar
);
739 ath10k_warn(ar
, "failed to stop monitor vdev: %d\n", ret
);
743 ret
= ath10k_monitor_vdev_delete(ar
);
745 ath10k_warn(ar
, "failed to delete monitor vdev: %d\n", ret
);
749 ar
->monitor_started
= false;
750 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac monitor stopped\n");
755 static int ath10k_monitor_recalc(struct ath10k
*ar
)
759 lockdep_assert_held(&ar
->conf_mutex
);
761 should_start
= ar
->monitor
||
762 ar
->filter_flags
& FIF_PROMISC_IN_BSS
||
763 test_bit(ATH10K_CAC_RUNNING
, &ar
->dev_flags
);
765 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
766 "mac monitor recalc started? %d should? %d\n",
767 ar
->monitor_started
, should_start
);
769 if (should_start
== ar
->monitor_started
)
773 return ath10k_monitor_start(ar
);
775 return ath10k_monitor_stop(ar
);
778 static int ath10k_recalc_rtscts_prot(struct ath10k_vif
*arvif
)
780 struct ath10k
*ar
= arvif
->ar
;
781 u32 vdev_param
, rts_cts
= 0;
783 lockdep_assert_held(&ar
->conf_mutex
);
785 vdev_param
= ar
->wmi
.vdev_param
->enable_rtscts
;
787 if (arvif
->use_cts_prot
|| arvif
->num_legacy_stations
> 0)
788 rts_cts
|= SM(WMI_RTSCTS_ENABLED
, WMI_RTSCTS_SET
);
790 if (arvif
->num_legacy_stations
> 0)
791 rts_cts
|= SM(WMI_RTSCTS_ACROSS_SW_RETRIES
,
794 return ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
,
798 static int ath10k_start_cac(struct ath10k
*ar
)
802 lockdep_assert_held(&ar
->conf_mutex
);
804 set_bit(ATH10K_CAC_RUNNING
, &ar
->dev_flags
);
806 ret
= ath10k_monitor_recalc(ar
);
808 ath10k_warn(ar
, "failed to start monitor (cac): %d\n", ret
);
809 clear_bit(ATH10K_CAC_RUNNING
, &ar
->dev_flags
);
813 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac cac start monitor vdev %d\n",
814 ar
->monitor_vdev_id
);
819 static int ath10k_stop_cac(struct ath10k
*ar
)
821 lockdep_assert_held(&ar
->conf_mutex
);
823 /* CAC is not running - do nothing */
824 if (!test_bit(ATH10K_CAC_RUNNING
, &ar
->dev_flags
))
827 clear_bit(ATH10K_CAC_RUNNING
, &ar
->dev_flags
);
828 ath10k_monitor_stop(ar
);
830 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac cac finished\n");
835 static void ath10k_recalc_radar_detection(struct ath10k
*ar
)
839 lockdep_assert_held(&ar
->conf_mutex
);
843 if (!ar
->radar_enabled
)
846 if (ar
->num_started_vdevs
> 0)
849 ret
= ath10k_start_cac(ar
);
852 * Not possible to start CAC on current channel so starting
853 * radiation is not allowed, make this channel DFS_UNAVAILABLE
854 * by indicating that radar was detected.
856 ath10k_warn(ar
, "failed to start CAC: %d\n", ret
);
857 ieee80211_radar_detected(ar
->hw
);
861 static int ath10k_vdev_start_restart(struct ath10k_vif
*arvif
, bool restart
)
863 struct ath10k
*ar
= arvif
->ar
;
864 struct cfg80211_chan_def
*chandef
= &ar
->chandef
;
865 struct wmi_vdev_start_request_arg arg
= {};
868 lockdep_assert_held(&ar
->conf_mutex
);
870 reinit_completion(&ar
->vdev_setup_done
);
872 arg
.vdev_id
= arvif
->vdev_id
;
873 arg
.dtim_period
= arvif
->dtim_period
;
874 arg
.bcn_intval
= arvif
->beacon_interval
;
876 arg
.channel
.freq
= chandef
->chan
->center_freq
;
877 arg
.channel
.band_center_freq1
= chandef
->center_freq1
;
878 arg
.channel
.mode
= chan_to_phymode(chandef
);
880 arg
.channel
.min_power
= 0;
881 arg
.channel
.max_power
= chandef
->chan
->max_power
* 2;
882 arg
.channel
.max_reg_power
= chandef
->chan
->max_reg_power
* 2;
883 arg
.channel
.max_antenna_gain
= chandef
->chan
->max_antenna_gain
* 2;
885 if (arvif
->vdev_type
== WMI_VDEV_TYPE_AP
) {
886 arg
.ssid
= arvif
->u
.ap
.ssid
;
887 arg
.ssid_len
= arvif
->u
.ap
.ssid_len
;
888 arg
.hidden_ssid
= arvif
->u
.ap
.hidden_ssid
;
890 /* For now allow DFS for AP mode */
891 arg
.channel
.chan_radar
=
892 !!(chandef
->chan
->flags
& IEEE80211_CHAN_RADAR
);
893 } else if (arvif
->vdev_type
== WMI_VDEV_TYPE_IBSS
) {
894 arg
.ssid
= arvif
->vif
->bss_conf
.ssid
;
895 arg
.ssid_len
= arvif
->vif
->bss_conf
.ssid_len
;
898 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
899 "mac vdev %d start center_freq %d phymode %s\n",
900 arg
.vdev_id
, arg
.channel
.freq
,
901 ath10k_wmi_phymode_str(arg
.channel
.mode
));
904 ret
= ath10k_wmi_vdev_restart(ar
, &arg
);
906 ret
= ath10k_wmi_vdev_start(ar
, &arg
);
909 ath10k_warn(ar
, "failed to start WMI vdev %i: %d\n",
914 ret
= ath10k_vdev_setup_sync(ar
);
916 ath10k_warn(ar
, "failed to synchronise setup for vdev %i: %d\n",
921 ar
->num_started_vdevs
++;
922 ath10k_recalc_radar_detection(ar
);
927 static int ath10k_vdev_start(struct ath10k_vif
*arvif
)
929 return ath10k_vdev_start_restart(arvif
, false);
932 static int ath10k_vdev_restart(struct ath10k_vif
*arvif
)
934 return ath10k_vdev_start_restart(arvif
, true);
937 static int ath10k_vdev_stop(struct ath10k_vif
*arvif
)
939 struct ath10k
*ar
= arvif
->ar
;
942 lockdep_assert_held(&ar
->conf_mutex
);
944 reinit_completion(&ar
->vdev_setup_done
);
946 ret
= ath10k_wmi_vdev_stop(ar
, arvif
->vdev_id
);
948 ath10k_warn(ar
, "failed to stop WMI vdev %i: %d\n",
949 arvif
->vdev_id
, ret
);
953 ret
= ath10k_vdev_setup_sync(ar
);
955 ath10k_warn(ar
, "failed to syncronise setup for vdev %i: %d\n",
956 arvif
->vdev_id
, ret
);
960 WARN_ON(ar
->num_started_vdevs
== 0);
962 if (ar
->num_started_vdevs
!= 0) {
963 ar
->num_started_vdevs
--;
964 ath10k_recalc_radar_detection(ar
);
970 static int ath10k_mac_setup_bcn_p2p_ie(struct ath10k_vif
*arvif
,
973 struct ath10k
*ar
= arvif
->ar
;
974 struct ieee80211_mgmt
*mgmt
;
978 if (arvif
->vdev_type
!= WMI_VDEV_TYPE_AP
)
981 if (arvif
->vdev_subtype
!= WMI_VDEV_SUBTYPE_P2P_GO
)
984 mgmt
= (void *)bcn
->data
;
985 p2p_ie
= cfg80211_find_vendor_ie(WLAN_OUI_WFA
, WLAN_OUI_TYPE_WFA_P2P
,
986 mgmt
->u
.beacon
.variable
,
987 bcn
->len
- (mgmt
->u
.beacon
.variable
-
992 ret
= ath10k_wmi_p2p_go_bcn_ie(ar
, arvif
->vdev_id
, p2p_ie
);
994 ath10k_warn(ar
, "failed to submit p2p go bcn ie for vdev %i: %d\n",
995 arvif
->vdev_id
, ret
);
1002 static int ath10k_mac_remove_vendor_ie(struct sk_buff
*skb
, unsigned int oui
,
1003 u8 oui_type
, size_t ie_offset
)
1010 if (WARN_ON(skb
->len
< ie_offset
))
1013 ie
= (u8
*)cfg80211_find_vendor_ie(oui
, oui_type
,
1014 skb
->data
+ ie_offset
,
1015 skb
->len
- ie_offset
);
1020 end
= skb
->data
+ skb
->len
;
1023 if (WARN_ON(next
> end
))
1026 memmove(ie
, next
, end
- next
);
1027 skb_trim(skb
, skb
->len
- len
);
1032 static int ath10k_mac_setup_bcn_tmpl(struct ath10k_vif
*arvif
)
1034 struct ath10k
*ar
= arvif
->ar
;
1035 struct ieee80211_hw
*hw
= ar
->hw
;
1036 struct ieee80211_vif
*vif
= arvif
->vif
;
1037 struct ieee80211_mutable_offsets offs
= {};
1038 struct sk_buff
*bcn
;
1041 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD
, ar
->wmi
.svc_map
))
1044 bcn
= ieee80211_beacon_get_template(hw
, vif
, &offs
);
1046 ath10k_warn(ar
, "failed to get beacon template from mac80211\n");
1050 ret
= ath10k_mac_setup_bcn_p2p_ie(arvif
, bcn
);
1052 ath10k_warn(ar
, "failed to setup p2p go bcn ie: %d\n", ret
);
1057 /* P2P IE is inserted by firmware automatically (as configured above)
1058 * so remove it from the base beacon template to avoid duplicate P2P
1059 * IEs in beacon frames.
1061 ath10k_mac_remove_vendor_ie(bcn
, WLAN_OUI_WFA
, WLAN_OUI_TYPE_WFA_P2P
,
1062 offsetof(struct ieee80211_mgmt
,
1063 u
.beacon
.variable
));
1065 ret
= ath10k_wmi_bcn_tmpl(ar
, arvif
->vdev_id
, offs
.tim_offset
, bcn
, 0,
1070 ath10k_warn(ar
, "failed to submit beacon template command: %d\n",
1078 static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif
*arvif
)
1080 struct ath10k
*ar
= arvif
->ar
;
1081 struct ieee80211_hw
*hw
= ar
->hw
;
1082 struct ieee80211_vif
*vif
= arvif
->vif
;
1083 struct sk_buff
*prb
;
1086 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD
, ar
->wmi
.svc_map
))
1089 prb
= ieee80211_proberesp_get(hw
, vif
);
1091 ath10k_warn(ar
, "failed to get probe resp template from mac80211\n");
1095 ret
= ath10k_wmi_prb_tmpl(ar
, arvif
->vdev_id
, prb
);
1099 ath10k_warn(ar
, "failed to submit probe resp template command: %d\n",
1107 static void ath10k_control_beaconing(struct ath10k_vif
*arvif
,
1108 struct ieee80211_bss_conf
*info
)
1110 struct ath10k
*ar
= arvif
->ar
;
1113 lockdep_assert_held(&arvif
->ar
->conf_mutex
);
1115 if (!info
->enable_beacon
) {
1116 ath10k_vdev_stop(arvif
);
1118 arvif
->is_started
= false;
1119 arvif
->is_up
= false;
1121 spin_lock_bh(&arvif
->ar
->data_lock
);
1122 ath10k_mac_vif_beacon_free(arvif
);
1123 spin_unlock_bh(&arvif
->ar
->data_lock
);
1128 arvif
->tx_seq_no
= 0x1000;
1130 ret
= ath10k_vdev_start(arvif
);
1135 ether_addr_copy(arvif
->bssid
, info
->bssid
);
1137 ret
= ath10k_wmi_vdev_up(arvif
->ar
, arvif
->vdev_id
, arvif
->aid
,
1140 ath10k_warn(ar
, "failed to bring up vdev %d: %i\n",
1141 arvif
->vdev_id
, ret
);
1142 ath10k_vdev_stop(arvif
);
1146 arvif
->is_started
= true;
1147 arvif
->is_up
= true;
1149 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev %d up\n", arvif
->vdev_id
);
1152 static void ath10k_control_ibss(struct ath10k_vif
*arvif
,
1153 struct ieee80211_bss_conf
*info
,
1154 const u8 self_peer
[ETH_ALEN
])
1156 struct ath10k
*ar
= arvif
->ar
;
1160 lockdep_assert_held(&arvif
->ar
->conf_mutex
);
1162 if (!info
->ibss_joined
) {
1163 ret
= ath10k_peer_delete(arvif
->ar
, arvif
->vdev_id
, self_peer
);
1165 ath10k_warn(ar
, "failed to delete IBSS self peer %pM for vdev %d: %d\n",
1166 self_peer
, arvif
->vdev_id
, ret
);
1168 if (is_zero_ether_addr(arvif
->bssid
))
1171 memset(arvif
->bssid
, 0, ETH_ALEN
);
1176 ret
= ath10k_peer_create(arvif
->ar
, arvif
->vdev_id
, self_peer
);
1178 ath10k_warn(ar
, "failed to create IBSS self peer %pM for vdev %d: %d\n",
1179 self_peer
, arvif
->vdev_id
, ret
);
1183 vdev_param
= arvif
->ar
->wmi
.vdev_param
->atim_window
;
1184 ret
= ath10k_wmi_vdev_set_param(arvif
->ar
, arvif
->vdev_id
, vdev_param
,
1185 ATH10K_DEFAULT_ATIM
);
1187 ath10k_warn(ar
, "failed to set IBSS ATIM for vdev %d: %d\n",
1188 arvif
->vdev_id
, ret
);
1191 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif
*arvif
)
1193 struct ath10k
*ar
= arvif
->ar
;
1198 lockdep_assert_held(&arvif
->ar
->conf_mutex
);
1200 if (arvif
->u
.sta
.uapsd
)
1201 value
= WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER
;
1203 value
= WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS
;
1205 param
= WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD
;
1206 ret
= ath10k_wmi_set_sta_ps_param(ar
, arvif
->vdev_id
, param
, value
);
1208 ath10k_warn(ar
, "failed to submit ps wake threshold %u on vdev %i: %d\n",
1209 value
, arvif
->vdev_id
, ret
);
1216 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif
*arvif
)
1218 struct ath10k
*ar
= arvif
->ar
;
1223 lockdep_assert_held(&arvif
->ar
->conf_mutex
);
1225 if (arvif
->u
.sta
.uapsd
)
1226 value
= WMI_STA_PS_PSPOLL_COUNT_UAPSD
;
1228 value
= WMI_STA_PS_PSPOLL_COUNT_NO_MAX
;
1230 param
= WMI_STA_PS_PARAM_PSPOLL_COUNT
;
1231 ret
= ath10k_wmi_set_sta_ps_param(ar
, arvif
->vdev_id
,
1234 ath10k_warn(ar
, "failed to submit ps poll count %u on vdev %i: %d\n",
1235 value
, arvif
->vdev_id
, ret
);
1242 static int ath10k_mac_vif_setup_ps(struct ath10k_vif
*arvif
)
1244 struct ath10k
*ar
= arvif
->ar
;
1245 struct ieee80211_vif
*vif
= arvif
->vif
;
1246 struct ieee80211_conf
*conf
= &ar
->hw
->conf
;
1247 enum wmi_sta_powersave_param param
;
1248 enum wmi_sta_ps_mode psmode
;
1252 lockdep_assert_held(&arvif
->ar
->conf_mutex
);
1254 if (arvif
->vif
->type
!= NL80211_IFTYPE_STATION
)
1257 if (vif
->bss_conf
.ps
) {
1258 psmode
= WMI_STA_PS_MODE_ENABLED
;
1259 param
= WMI_STA_PS_PARAM_INACTIVITY_TIME
;
1261 ps_timeout
= conf
->dynamic_ps_timeout
;
1262 if (ps_timeout
== 0) {
1263 /* Firmware doesn't like 0 */
1264 ps_timeout
= ieee80211_tu_to_usec(
1265 vif
->bss_conf
.beacon_int
) / 1000;
1268 ret
= ath10k_wmi_set_sta_ps_param(ar
, arvif
->vdev_id
, param
,
1271 ath10k_warn(ar
, "failed to set inactivity time for vdev %d: %i\n",
1272 arvif
->vdev_id
, ret
);
1276 psmode
= WMI_STA_PS_MODE_DISABLED
;
1279 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev %d psmode %s\n",
1280 arvif
->vdev_id
, psmode
? "enable" : "disable");
1282 ret
= ath10k_wmi_set_psmode(ar
, arvif
->vdev_id
, psmode
);
1284 ath10k_warn(ar
, "failed to set PS Mode %d for vdev %d: %d\n",
1285 psmode
, arvif
->vdev_id
, ret
);
1292 /**********************/
1293 /* Station management */
1294 /**********************/
1296 static u32
ath10k_peer_assoc_h_listen_intval(struct ath10k
*ar
,
1297 struct ieee80211_vif
*vif
)
1299 /* Some firmware revisions have unstable STA powersave when listen
1300 * interval is set too high (e.g. 5). The symptoms are firmware doesn't
1301 * generate NullFunc frames properly even if buffered frames have been
1302 * indicated in Beacon TIM. Firmware would seldom wake up to pull
1303 * buffered frames. Often pinging the device from AP would simply fail.
1305 * As a workaround set it to 1.
1307 if (vif
->type
== NL80211_IFTYPE_STATION
)
1310 return ar
->hw
->conf
.listen_interval
;
1313 static void ath10k_peer_assoc_h_basic(struct ath10k
*ar
,
1314 struct ieee80211_vif
*vif
,
1315 struct ieee80211_sta
*sta
,
1316 struct wmi_peer_assoc_complete_arg
*arg
)
1318 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
1320 lockdep_assert_held(&ar
->conf_mutex
);
1322 ether_addr_copy(arg
->addr
, sta
->addr
);
1323 arg
->vdev_id
= arvif
->vdev_id
;
1324 arg
->peer_aid
= sta
->aid
;
1325 arg
->peer_flags
|= WMI_PEER_AUTH
;
1326 arg
->peer_listen_intval
= ath10k_peer_assoc_h_listen_intval(ar
, vif
);
1327 arg
->peer_num_spatial_streams
= 1;
1328 arg
->peer_caps
= vif
->bss_conf
.assoc_capability
;
1331 static void ath10k_peer_assoc_h_crypto(struct ath10k
*ar
,
1332 struct ieee80211_vif
*vif
,
1333 struct wmi_peer_assoc_complete_arg
*arg
)
1335 struct ieee80211_bss_conf
*info
= &vif
->bss_conf
;
1336 struct cfg80211_bss
*bss
;
1337 const u8
*rsnie
= NULL
;
1338 const u8
*wpaie
= NULL
;
1340 lockdep_assert_held(&ar
->conf_mutex
);
1342 bss
= cfg80211_get_bss(ar
->hw
->wiphy
, ar
->hw
->conf
.chandef
.chan
,
1343 info
->bssid
, NULL
, 0, 0, 0);
1345 const struct cfg80211_bss_ies
*ies
;
1348 rsnie
= ieee80211_bss_get_ie(bss
, WLAN_EID_RSN
);
1350 ies
= rcu_dereference(bss
->ies
);
1352 wpaie
= cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT
,
1353 WLAN_OUI_TYPE_MICROSOFT_WPA
,
1357 cfg80211_put_bss(ar
->hw
->wiphy
, bss
);
1360 /* FIXME: base on RSN IE/WPA IE is a correct idea? */
1361 if (rsnie
|| wpaie
) {
1362 ath10k_dbg(ar
, ATH10K_DBG_WMI
, "%s: rsn ie found\n", __func__
);
1363 arg
->peer_flags
|= WMI_PEER_NEED_PTK_4_WAY
;
1367 ath10k_dbg(ar
, ATH10K_DBG_WMI
, "%s: wpa ie found\n", __func__
);
1368 arg
->peer_flags
|= WMI_PEER_NEED_GTK_2_WAY
;
1372 static void ath10k_peer_assoc_h_rates(struct ath10k
*ar
,
1373 struct ieee80211_sta
*sta
,
1374 struct wmi_peer_assoc_complete_arg
*arg
)
1376 struct wmi_rate_set_arg
*rateset
= &arg
->peer_legacy_rates
;
1377 const struct ieee80211_supported_band
*sband
;
1378 const struct ieee80211_rate
*rates
;
1382 lockdep_assert_held(&ar
->conf_mutex
);
1384 sband
= ar
->hw
->wiphy
->bands
[ar
->hw
->conf
.chandef
.chan
->band
];
1385 ratemask
= sta
->supp_rates
[ar
->hw
->conf
.chandef
.chan
->band
];
1386 rates
= sband
->bitrates
;
1388 rateset
->num_rates
= 0;
1390 for (i
= 0; i
< 32; i
++, ratemask
>>= 1, rates
++) {
1391 if (!(ratemask
& 1))
1394 rateset
->rates
[rateset
->num_rates
] = rates
->hw_value
;
1395 rateset
->num_rates
++;
1399 static void ath10k_peer_assoc_h_ht(struct ath10k
*ar
,
1400 struct ieee80211_sta
*sta
,
1401 struct wmi_peer_assoc_complete_arg
*arg
)
1403 const struct ieee80211_sta_ht_cap
*ht_cap
= &sta
->ht_cap
;
1407 lockdep_assert_held(&ar
->conf_mutex
);
1409 if (!ht_cap
->ht_supported
)
1412 arg
->peer_flags
|= WMI_PEER_HT
;
1413 arg
->peer_max_mpdu
= (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR
+
1414 ht_cap
->ampdu_factor
)) - 1;
1416 arg
->peer_mpdu_density
=
1417 ath10k_parse_mpdudensity(ht_cap
->ampdu_density
);
1419 arg
->peer_ht_caps
= ht_cap
->cap
;
1420 arg
->peer_rate_caps
|= WMI_RC_HT_FLAG
;
1422 if (ht_cap
->cap
& IEEE80211_HT_CAP_LDPC_CODING
)
1423 arg
->peer_flags
|= WMI_PEER_LDPC
;
1425 if (sta
->bandwidth
>= IEEE80211_STA_RX_BW_40
) {
1426 arg
->peer_flags
|= WMI_PEER_40MHZ
;
1427 arg
->peer_rate_caps
|= WMI_RC_CW40_FLAG
;
1430 if (ht_cap
->cap
& IEEE80211_HT_CAP_SGI_20
)
1431 arg
->peer_rate_caps
|= WMI_RC_SGI_FLAG
;
1433 if (ht_cap
->cap
& IEEE80211_HT_CAP_SGI_40
)
1434 arg
->peer_rate_caps
|= WMI_RC_SGI_FLAG
;
1436 if (ht_cap
->cap
& IEEE80211_HT_CAP_TX_STBC
) {
1437 arg
->peer_rate_caps
|= WMI_RC_TX_STBC_FLAG
;
1438 arg
->peer_flags
|= WMI_PEER_STBC
;
1441 if (ht_cap
->cap
& IEEE80211_HT_CAP_RX_STBC
) {
1442 stbc
= ht_cap
->cap
& IEEE80211_HT_CAP_RX_STBC
;
1443 stbc
= stbc
>> IEEE80211_HT_CAP_RX_STBC_SHIFT
;
1444 stbc
= stbc
<< WMI_RC_RX_STBC_FLAG_S
;
1445 arg
->peer_rate_caps
|= stbc
;
1446 arg
->peer_flags
|= WMI_PEER_STBC
;
1449 if (ht_cap
->mcs
.rx_mask
[1] && ht_cap
->mcs
.rx_mask
[2])
1450 arg
->peer_rate_caps
|= WMI_RC_TS_FLAG
;
1451 else if (ht_cap
->mcs
.rx_mask
[1])
1452 arg
->peer_rate_caps
|= WMI_RC_DS_FLAG
;
1454 for (i
= 0, n
= 0; i
< IEEE80211_HT_MCS_MASK_LEN
*8; i
++)
1455 if (ht_cap
->mcs
.rx_mask
[i
/8] & (1 << i
%8))
1456 arg
->peer_ht_rates
.rates
[n
++] = i
;
1459 * This is a workaround for HT-enabled STAs which break the spec
1460 * and have no HT capabilities RX mask (no HT RX MCS map).
1462 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS),
1463 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs.
1465 * Firmware asserts if such situation occurs.
1468 arg
->peer_ht_rates
.num_rates
= 8;
1469 for (i
= 0; i
< arg
->peer_ht_rates
.num_rates
; i
++)
1470 arg
->peer_ht_rates
.rates
[i
] = i
;
1472 arg
->peer_ht_rates
.num_rates
= n
;
1473 arg
->peer_num_spatial_streams
= sta
->rx_nss
;
1476 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac ht peer %pM mcs cnt %d nss %d\n",
1478 arg
->peer_ht_rates
.num_rates
,
1479 arg
->peer_num_spatial_streams
);
1482 static int ath10k_peer_assoc_qos_ap(struct ath10k
*ar
,
1483 struct ath10k_vif
*arvif
,
1484 struct ieee80211_sta
*sta
)
1490 lockdep_assert_held(&ar
->conf_mutex
);
1492 if (sta
->wme
&& sta
->uapsd_queues
) {
1493 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac uapsd_queues 0x%x max_sp %d\n",
1494 sta
->uapsd_queues
, sta
->max_sp
);
1496 if (sta
->uapsd_queues
& IEEE80211_WMM_IE_STA_QOSINFO_AC_VO
)
1497 uapsd
|= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN
|
1498 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN
;
1499 if (sta
->uapsd_queues
& IEEE80211_WMM_IE_STA_QOSINFO_AC_VI
)
1500 uapsd
|= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN
|
1501 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN
;
1502 if (sta
->uapsd_queues
& IEEE80211_WMM_IE_STA_QOSINFO_AC_BK
)
1503 uapsd
|= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN
|
1504 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN
;
1505 if (sta
->uapsd_queues
& IEEE80211_WMM_IE_STA_QOSINFO_AC_BE
)
1506 uapsd
|= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN
|
1507 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN
;
1509 if (sta
->max_sp
< MAX_WMI_AP_PS_PEER_PARAM_MAX_SP
)
1510 max_sp
= sta
->max_sp
;
1512 ret
= ath10k_wmi_set_ap_ps_param(ar
, arvif
->vdev_id
,
1514 WMI_AP_PS_PEER_PARAM_UAPSD
,
1517 ath10k_warn(ar
, "failed to set ap ps peer param uapsd for vdev %i: %d\n",
1518 arvif
->vdev_id
, ret
);
1522 ret
= ath10k_wmi_set_ap_ps_param(ar
, arvif
->vdev_id
,
1524 WMI_AP_PS_PEER_PARAM_MAX_SP
,
1527 ath10k_warn(ar
, "failed to set ap ps peer param max sp for vdev %i: %d\n",
1528 arvif
->vdev_id
, ret
);
1532 /* TODO setup this based on STA listen interval and
1533 beacon interval. Currently we don't know
1534 sta->listen_interval - mac80211 patch required.
1535 Currently use 10 seconds */
1536 ret
= ath10k_wmi_set_ap_ps_param(ar
, arvif
->vdev_id
, sta
->addr
,
1537 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME
,
1540 ath10k_warn(ar
, "failed to set ap ps peer param ageout time for vdev %i: %d\n",
1541 arvif
->vdev_id
, ret
);
1549 static void ath10k_peer_assoc_h_vht(struct ath10k
*ar
,
1550 struct ieee80211_sta
*sta
,
1551 struct wmi_peer_assoc_complete_arg
*arg
)
1553 const struct ieee80211_sta_vht_cap
*vht_cap
= &sta
->vht_cap
;
1556 if (!vht_cap
->vht_supported
)
1559 arg
->peer_flags
|= WMI_PEER_VHT
;
1560 arg
->peer_vht_caps
= vht_cap
->cap
;
1562 ampdu_factor
= (vht_cap
->cap
&
1563 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK
) >>
1564 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT
;
1566 /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to
1567 * zero in VHT IE. Using it would result in degraded throughput.
1568 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep
1569 * it if VHT max_mpdu is smaller. */
1570 arg
->peer_max_mpdu
= max(arg
->peer_max_mpdu
,
1571 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR
+
1572 ampdu_factor
)) - 1);
1574 if (sta
->bandwidth
== IEEE80211_STA_RX_BW_80
)
1575 arg
->peer_flags
|= WMI_PEER_80MHZ
;
1577 arg
->peer_vht_rates
.rx_max_rate
=
1578 __le16_to_cpu(vht_cap
->vht_mcs
.rx_highest
);
1579 arg
->peer_vht_rates
.rx_mcs_set
=
1580 __le16_to_cpu(vht_cap
->vht_mcs
.rx_mcs_map
);
1581 arg
->peer_vht_rates
.tx_max_rate
=
1582 __le16_to_cpu(vht_cap
->vht_mcs
.tx_highest
);
1583 arg
->peer_vht_rates
.tx_mcs_set
=
1584 __le16_to_cpu(vht_cap
->vht_mcs
.tx_mcs_map
);
1586 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vht peer %pM max_mpdu %d flags 0x%x\n",
1587 sta
->addr
, arg
->peer_max_mpdu
, arg
->peer_flags
);
1590 static void ath10k_peer_assoc_h_qos(struct ath10k
*ar
,
1591 struct ieee80211_vif
*vif
,
1592 struct ieee80211_sta
*sta
,
1593 struct wmi_peer_assoc_complete_arg
*arg
)
1595 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
1597 switch (arvif
->vdev_type
) {
1598 case WMI_VDEV_TYPE_AP
:
1600 arg
->peer_flags
|= WMI_PEER_QOS
;
1602 if (sta
->wme
&& sta
->uapsd_queues
) {
1603 arg
->peer_flags
|= WMI_PEER_APSD
;
1604 arg
->peer_rate_caps
|= WMI_RC_UAPSD_FLAG
;
1607 case WMI_VDEV_TYPE_STA
:
1608 if (vif
->bss_conf
.qos
)
1609 arg
->peer_flags
|= WMI_PEER_QOS
;
1611 case WMI_VDEV_TYPE_IBSS
:
1613 arg
->peer_flags
|= WMI_PEER_QOS
;
1619 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac peer %pM qos %d\n",
1620 sta
->addr
, !!(arg
->peer_flags
& WMI_PEER_QOS
));
1623 static bool ath10k_mac_sta_has_11g_rates(struct ieee80211_sta
*sta
)
1625 /* First 4 rates in ath10k_rates are CCK (11b) rates. */
1626 return sta
->supp_rates
[IEEE80211_BAND_2GHZ
] >> 4;
1629 static void ath10k_peer_assoc_h_phymode(struct ath10k
*ar
,
1630 struct ieee80211_vif
*vif
,
1631 struct ieee80211_sta
*sta
,
1632 struct wmi_peer_assoc_complete_arg
*arg
)
1634 enum wmi_phy_mode phymode
= MODE_UNKNOWN
;
1636 switch (ar
->hw
->conf
.chandef
.chan
->band
) {
1637 case IEEE80211_BAND_2GHZ
:
1638 if (sta
->ht_cap
.ht_supported
) {
1639 if (sta
->bandwidth
== IEEE80211_STA_RX_BW_40
)
1640 phymode
= MODE_11NG_HT40
;
1642 phymode
= MODE_11NG_HT20
;
1643 } else if (ath10k_mac_sta_has_11g_rates(sta
)) {
1650 case IEEE80211_BAND_5GHZ
:
1654 if (sta
->vht_cap
.vht_supported
) {
1655 if (sta
->bandwidth
== IEEE80211_STA_RX_BW_80
)
1656 phymode
= MODE_11AC_VHT80
;
1657 else if (sta
->bandwidth
== IEEE80211_STA_RX_BW_40
)
1658 phymode
= MODE_11AC_VHT40
;
1659 else if (sta
->bandwidth
== IEEE80211_STA_RX_BW_20
)
1660 phymode
= MODE_11AC_VHT20
;
1661 } else if (sta
->ht_cap
.ht_supported
) {
1662 if (sta
->bandwidth
== IEEE80211_STA_RX_BW_40
)
1663 phymode
= MODE_11NA_HT40
;
1665 phymode
= MODE_11NA_HT20
;
1675 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac peer %pM phymode %s\n",
1676 sta
->addr
, ath10k_wmi_phymode_str(phymode
));
1678 arg
->peer_phymode
= phymode
;
1679 WARN_ON(phymode
== MODE_UNKNOWN
);
1682 static int ath10k_peer_assoc_prepare(struct ath10k
*ar
,
1683 struct ieee80211_vif
*vif
,
1684 struct ieee80211_sta
*sta
,
1685 struct wmi_peer_assoc_complete_arg
*arg
)
1687 lockdep_assert_held(&ar
->conf_mutex
);
1689 memset(arg
, 0, sizeof(*arg
));
1691 ath10k_peer_assoc_h_basic(ar
, vif
, sta
, arg
);
1692 ath10k_peer_assoc_h_crypto(ar
, vif
, arg
);
1693 ath10k_peer_assoc_h_rates(ar
, sta
, arg
);
1694 ath10k_peer_assoc_h_ht(ar
, sta
, arg
);
1695 ath10k_peer_assoc_h_vht(ar
, sta
, arg
);
1696 ath10k_peer_assoc_h_qos(ar
, vif
, sta
, arg
);
1697 ath10k_peer_assoc_h_phymode(ar
, vif
, sta
, arg
);
1702 static const u32 ath10k_smps_map
[] = {
1703 [WLAN_HT_CAP_SM_PS_STATIC
] = WMI_PEER_SMPS_STATIC
,
1704 [WLAN_HT_CAP_SM_PS_DYNAMIC
] = WMI_PEER_SMPS_DYNAMIC
,
1705 [WLAN_HT_CAP_SM_PS_INVALID
] = WMI_PEER_SMPS_PS_NONE
,
1706 [WLAN_HT_CAP_SM_PS_DISABLED
] = WMI_PEER_SMPS_PS_NONE
,
1709 static int ath10k_setup_peer_smps(struct ath10k
*ar
, struct ath10k_vif
*arvif
,
1711 const struct ieee80211_sta_ht_cap
*ht_cap
)
1715 if (!ht_cap
->ht_supported
)
1718 smps
= ht_cap
->cap
& IEEE80211_HT_CAP_SM_PS
;
1719 smps
>>= IEEE80211_HT_CAP_SM_PS_SHIFT
;
1721 if (smps
>= ARRAY_SIZE(ath10k_smps_map
))
1724 return ath10k_wmi_peer_set_param(ar
, arvif
->vdev_id
, addr
,
1725 WMI_PEER_SMPS_STATE
,
1726 ath10k_smps_map
[smps
]);
1729 /* can be called only in mac80211 callbacks due to `key_count` usage */
1730 static void ath10k_bss_assoc(struct ieee80211_hw
*hw
,
1731 struct ieee80211_vif
*vif
,
1732 struct ieee80211_bss_conf
*bss_conf
)
1734 struct ath10k
*ar
= hw
->priv
;
1735 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
1736 struct ieee80211_sta_ht_cap ht_cap
;
1737 struct wmi_peer_assoc_complete_arg peer_arg
;
1738 struct ieee80211_sta
*ap_sta
;
1741 lockdep_assert_held(&ar
->conf_mutex
);
1743 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev %i assoc bssid %pM aid %d\n",
1744 arvif
->vdev_id
, arvif
->bssid
, arvif
->aid
);
1748 ap_sta
= ieee80211_find_sta(vif
, bss_conf
->bssid
);
1750 ath10k_warn(ar
, "failed to find station entry for bss %pM vdev %i\n",
1751 bss_conf
->bssid
, arvif
->vdev_id
);
1756 /* ap_sta must be accessed only within rcu section which must be left
1757 * before calling ath10k_setup_peer_smps() which might sleep. */
1758 ht_cap
= ap_sta
->ht_cap
;
1760 ret
= ath10k_peer_assoc_prepare(ar
, vif
, ap_sta
, &peer_arg
);
1762 ath10k_warn(ar
, "failed to prepare peer assoc for %pM vdev %i: %d\n",
1763 bss_conf
->bssid
, arvif
->vdev_id
, ret
);
1770 ret
= ath10k_wmi_peer_assoc(ar
, &peer_arg
);
1772 ath10k_warn(ar
, "failed to run peer assoc for %pM vdev %i: %d\n",
1773 bss_conf
->bssid
, arvif
->vdev_id
, ret
);
1777 ret
= ath10k_setup_peer_smps(ar
, arvif
, bss_conf
->bssid
, &ht_cap
);
1779 ath10k_warn(ar
, "failed to setup peer SMPS for vdev %i: %d\n",
1780 arvif
->vdev_id
, ret
);
1784 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
1785 "mac vdev %d up (associated) bssid %pM aid %d\n",
1786 arvif
->vdev_id
, bss_conf
->bssid
, bss_conf
->aid
);
1788 WARN_ON(arvif
->is_up
);
1790 arvif
->aid
= bss_conf
->aid
;
1791 ether_addr_copy(arvif
->bssid
, bss_conf
->bssid
);
1793 ret
= ath10k_wmi_vdev_up(ar
, arvif
->vdev_id
, arvif
->aid
, arvif
->bssid
);
1795 ath10k_warn(ar
, "failed to set vdev %d up: %d\n",
1796 arvif
->vdev_id
, ret
);
1800 arvif
->is_up
= true;
1803 static void ath10k_bss_disassoc(struct ieee80211_hw
*hw
,
1804 struct ieee80211_vif
*vif
)
1806 struct ath10k
*ar
= hw
->priv
;
1807 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
1810 lockdep_assert_held(&ar
->conf_mutex
);
1812 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev %i disassoc bssid %pM\n",
1813 arvif
->vdev_id
, arvif
->bssid
);
1815 ret
= ath10k_wmi_vdev_down(ar
, arvif
->vdev_id
);
1817 ath10k_warn(ar
, "faield to down vdev %i: %d\n",
1818 arvif
->vdev_id
, ret
);
1820 arvif
->def_wep_key_idx
= 0;
1821 arvif
->is_up
= false;
1824 static int ath10k_station_assoc(struct ath10k
*ar
,
1825 struct ieee80211_vif
*vif
,
1826 struct ieee80211_sta
*sta
,
1829 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
1830 struct wmi_peer_assoc_complete_arg peer_arg
;
1833 lockdep_assert_held(&ar
->conf_mutex
);
1835 ret
= ath10k_peer_assoc_prepare(ar
, vif
, sta
, &peer_arg
);
1837 ath10k_warn(ar
, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n",
1838 sta
->addr
, arvif
->vdev_id
, ret
);
1842 peer_arg
.peer_reassoc
= reassoc
;
1843 ret
= ath10k_wmi_peer_assoc(ar
, &peer_arg
);
1845 ath10k_warn(ar
, "failed to run peer assoc for STA %pM vdev %i: %d\n",
1846 sta
->addr
, arvif
->vdev_id
, ret
);
1850 /* Re-assoc is run only to update supported rates for given station. It
1851 * doesn't make much sense to reconfigure the peer completely.
1854 ret
= ath10k_setup_peer_smps(ar
, arvif
, sta
->addr
,
1857 ath10k_warn(ar
, "failed to setup peer SMPS for vdev %d: %d\n",
1858 arvif
->vdev_id
, ret
);
1862 ret
= ath10k_peer_assoc_qos_ap(ar
, arvif
, sta
);
1864 ath10k_warn(ar
, "failed to set qos params for STA %pM for vdev %i: %d\n",
1865 sta
->addr
, arvif
->vdev_id
, ret
);
1870 arvif
->num_legacy_stations
++;
1871 ret
= ath10k_recalc_rtscts_prot(arvif
);
1873 ath10k_warn(ar
, "failed to recalculate rts/cts prot for vdev %d: %d\n",
1874 arvif
->vdev_id
, ret
);
1879 ret
= ath10k_install_peer_wep_keys(arvif
, sta
->addr
);
1881 ath10k_warn(ar
, "failed to install peer wep keys for vdev %i: %d\n",
1882 arvif
->vdev_id
, ret
);
1890 static int ath10k_station_disassoc(struct ath10k
*ar
,
1891 struct ieee80211_vif
*vif
,
1892 struct ieee80211_sta
*sta
)
1894 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
1897 lockdep_assert_held(&ar
->conf_mutex
);
1900 arvif
->num_legacy_stations
--;
1901 ret
= ath10k_recalc_rtscts_prot(arvif
);
1903 ath10k_warn(ar
, "failed to recalculate rts/cts prot for vdev %d: %d\n",
1904 arvif
->vdev_id
, ret
);
1909 ret
= ath10k_clear_peer_keys(arvif
, sta
->addr
);
1911 ath10k_warn(ar
, "failed to clear all peer wep keys for vdev %i: %d\n",
1912 arvif
->vdev_id
, ret
);
1923 static int ath10k_update_channel_list(struct ath10k
*ar
)
1925 struct ieee80211_hw
*hw
= ar
->hw
;
1926 struct ieee80211_supported_band
**bands
;
1927 enum ieee80211_band band
;
1928 struct ieee80211_channel
*channel
;
1929 struct wmi_scan_chan_list_arg arg
= {0};
1930 struct wmi_channel_arg
*ch
;
1936 lockdep_assert_held(&ar
->conf_mutex
);
1938 bands
= hw
->wiphy
->bands
;
1939 for (band
= 0; band
< IEEE80211_NUM_BANDS
; band
++) {
1943 for (i
= 0; i
< bands
[band
]->n_channels
; i
++) {
1944 if (bands
[band
]->channels
[i
].flags
&
1945 IEEE80211_CHAN_DISABLED
)
1952 len
= sizeof(struct wmi_channel_arg
) * arg
.n_channels
;
1953 arg
.channels
= kzalloc(len
, GFP_KERNEL
);
1958 for (band
= 0; band
< IEEE80211_NUM_BANDS
; band
++) {
1962 for (i
= 0; i
< bands
[band
]->n_channels
; i
++) {
1963 channel
= &bands
[band
]->channels
[i
];
1965 if (channel
->flags
& IEEE80211_CHAN_DISABLED
)
1968 ch
->allow_ht
= true;
1970 /* FIXME: when should we really allow VHT? */
1971 ch
->allow_vht
= true;
1974 !(channel
->flags
& IEEE80211_CHAN_NO_IR
);
1977 !(channel
->flags
& IEEE80211_CHAN_NO_HT40PLUS
);
1980 !!(channel
->flags
& IEEE80211_CHAN_RADAR
);
1982 passive
= channel
->flags
& IEEE80211_CHAN_NO_IR
;
1983 ch
->passive
= passive
;
1985 ch
->freq
= channel
->center_freq
;
1986 ch
->band_center_freq1
= channel
->center_freq
;
1988 ch
->max_power
= channel
->max_power
* 2;
1989 ch
->max_reg_power
= channel
->max_reg_power
* 2;
1990 ch
->max_antenna_gain
= channel
->max_antenna_gain
* 2;
1991 ch
->reg_class_id
= 0; /* FIXME */
1993 /* FIXME: why use only legacy modes, why not any
1994 * HT/VHT modes? Would that even make any
1996 if (channel
->band
== IEEE80211_BAND_2GHZ
)
1997 ch
->mode
= MODE_11G
;
1999 ch
->mode
= MODE_11A
;
2001 if (WARN_ON_ONCE(ch
->mode
== MODE_UNKNOWN
))
2004 ath10k_dbg(ar
, ATH10K_DBG_WMI
,
2005 "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n",
2006 ch
- arg
.channels
, arg
.n_channels
,
2007 ch
->freq
, ch
->max_power
, ch
->max_reg_power
,
2008 ch
->max_antenna_gain
, ch
->mode
);
2014 ret
= ath10k_wmi_scan_chan_list(ar
, &arg
);
2015 kfree(arg
.channels
);
2020 static enum wmi_dfs_region
2021 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region
)
2023 switch (dfs_region
) {
2024 case NL80211_DFS_UNSET
:
2025 return WMI_UNINIT_DFS_DOMAIN
;
2026 case NL80211_DFS_FCC
:
2027 return WMI_FCC_DFS_DOMAIN
;
2028 case NL80211_DFS_ETSI
:
2029 return WMI_ETSI_DFS_DOMAIN
;
2030 case NL80211_DFS_JP
:
2031 return WMI_MKK4_DFS_DOMAIN
;
2033 return WMI_UNINIT_DFS_DOMAIN
;
2036 static void ath10k_regd_update(struct ath10k
*ar
)
2038 struct reg_dmn_pair_mapping
*regpair
;
2040 enum wmi_dfs_region wmi_dfs_reg
;
2041 enum nl80211_dfs_regions nl_dfs_reg
;
2043 lockdep_assert_held(&ar
->conf_mutex
);
2045 ret
= ath10k_update_channel_list(ar
);
2047 ath10k_warn(ar
, "failed to update channel list: %d\n", ret
);
2049 regpair
= ar
->ath_common
.regulatory
.regpair
;
2051 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED
) && ar
->dfs_detector
) {
2052 nl_dfs_reg
= ar
->dfs_detector
->region
;
2053 wmi_dfs_reg
= ath10k_mac_get_dfs_region(nl_dfs_reg
);
2055 wmi_dfs_reg
= WMI_UNINIT_DFS_DOMAIN
;
2058 /* Target allows setting up per-band regdomain but ath_common provides
2059 * a combined one only */
2060 ret
= ath10k_wmi_pdev_set_regdomain(ar
,
2061 regpair
->reg_domain
,
2062 regpair
->reg_domain
, /* 2ghz */
2063 regpair
->reg_domain
, /* 5ghz */
2064 regpair
->reg_2ghz_ctl
,
2065 regpair
->reg_5ghz_ctl
,
2068 ath10k_warn(ar
, "failed to set pdev regdomain: %d\n", ret
);
2071 static void ath10k_reg_notifier(struct wiphy
*wiphy
,
2072 struct regulatory_request
*request
)
2074 struct ieee80211_hw
*hw
= wiphy_to_ieee80211_hw(wiphy
);
2075 struct ath10k
*ar
= hw
->priv
;
2078 ath_reg_notifier_apply(wiphy
, request
, &ar
->ath_common
.regulatory
);
2080 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED
) && ar
->dfs_detector
) {
2081 ath10k_dbg(ar
, ATH10K_DBG_REGULATORY
, "dfs region 0x%x\n",
2082 request
->dfs_region
);
2083 result
= ar
->dfs_detector
->set_dfs_domain(ar
->dfs_detector
,
2084 request
->dfs_region
);
2086 ath10k_warn(ar
, "DFS region 0x%X not supported, will trigger radar for every pulse\n",
2087 request
->dfs_region
);
2090 mutex_lock(&ar
->conf_mutex
);
2091 if (ar
->state
== ATH10K_STATE_ON
)
2092 ath10k_regd_update(ar
);
2093 mutex_unlock(&ar
->conf_mutex
);
2100 static u8
ath10k_tx_h_get_tid(struct ieee80211_hdr
*hdr
)
2102 if (ieee80211_is_mgmt(hdr
->frame_control
))
2103 return HTT_DATA_TX_EXT_TID_MGMT
;
2105 if (!ieee80211_is_data_qos(hdr
->frame_control
))
2106 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST
;
2108 if (!is_unicast_ether_addr(ieee80211_get_DA(hdr
)))
2109 return HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST
;
2111 return ieee80211_get_qos_ctl(hdr
)[0] & IEEE80211_QOS_CTL_TID_MASK
;
2114 static u8
ath10k_tx_h_get_vdev_id(struct ath10k
*ar
, struct ieee80211_vif
*vif
)
2117 return ath10k_vif_to_arvif(vif
)->vdev_id
;
2119 if (ar
->monitor_started
)
2120 return ar
->monitor_vdev_id
;
2122 ath10k_warn(ar
, "failed to resolve vdev id\n");
2126 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS
2127 * Control in the header.
2129 static void ath10k_tx_h_nwifi(struct ieee80211_hw
*hw
, struct sk_buff
*skb
)
2131 struct ieee80211_hdr
*hdr
= (void *)skb
->data
;
2132 struct ath10k_skb_cb
*cb
= ATH10K_SKB_CB(skb
);
2135 if (!ieee80211_is_data_qos(hdr
->frame_control
))
2138 qos_ctl
= ieee80211_get_qos_ctl(hdr
);
2139 memmove(skb
->data
+ IEEE80211_QOS_CTL_LEN
,
2140 skb
->data
, (void *)qos_ctl
- (void *)skb
->data
);
2141 skb_pull(skb
, IEEE80211_QOS_CTL_LEN
);
2143 /* Fw/Hw generates a corrupted QoS Control Field for QoS NullFunc
2144 * frames. Powersave is handled by the fw/hw so QoS NyllFunc frames are
2145 * used only for CQM purposes (e.g. hostapd station keepalive ping) so
2146 * it is safe to downgrade to NullFunc.
2148 hdr
= (void *)skb
->data
;
2149 if (ieee80211_is_qos_nullfunc(hdr
->frame_control
)) {
2150 hdr
->frame_control
&= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA
);
2151 cb
->htt
.tid
= HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST
;
2155 static void ath10k_tx_wep_key_work(struct work_struct
*work
)
2157 struct ath10k_vif
*arvif
= container_of(work
, struct ath10k_vif
,
2159 struct ath10k
*ar
= arvif
->ar
;
2160 int ret
, keyidx
= arvif
->def_wep_key_newidx
;
2162 mutex_lock(&arvif
->ar
->conf_mutex
);
2164 if (arvif
->ar
->state
!= ATH10K_STATE_ON
)
2167 if (arvif
->def_wep_key_idx
== keyidx
)
2170 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev %d set keyidx %d\n",
2171 arvif
->vdev_id
, keyidx
);
2173 ret
= ath10k_wmi_vdev_set_param(arvif
->ar
,
2175 arvif
->ar
->wmi
.vdev_param
->def_keyid
,
2178 ath10k_warn(ar
, "failed to update wep key index for vdev %d: %d\n",
2184 arvif
->def_wep_key_idx
= keyidx
;
2187 mutex_unlock(&arvif
->ar
->conf_mutex
);
2190 static void ath10k_tx_h_update_wep_key(struct ieee80211_vif
*vif
,
2191 struct ieee80211_key_conf
*key
,
2192 struct sk_buff
*skb
)
2194 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
2195 struct ath10k
*ar
= arvif
->ar
;
2196 struct ieee80211_hdr
*hdr
= (struct ieee80211_hdr
*)skb
->data
;
2198 if (!ieee80211_has_protected(hdr
->frame_control
))
2204 if (key
->cipher
!= WLAN_CIPHER_SUITE_WEP40
&&
2205 key
->cipher
!= WLAN_CIPHER_SUITE_WEP104
)
2208 if (key
->keyidx
== arvif
->def_wep_key_idx
)
2211 /* FIXME: Most likely a few frames will be TXed with an old key. Simply
2212 * queueing frames until key index is updated is not an option because
2213 * sk_buff may need more processing to be done, e.g. offchannel */
2214 arvif
->def_wep_key_newidx
= key
->keyidx
;
2215 ieee80211_queue_work(ar
->hw
, &arvif
->wep_key_work
);
2218 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k
*ar
,
2219 struct ieee80211_vif
*vif
,
2220 struct sk_buff
*skb
)
2222 struct ieee80211_hdr
*hdr
= (struct ieee80211_hdr
*)skb
->data
;
2223 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
2225 /* This is case only for P2P_GO */
2226 if (arvif
->vdev_type
!= WMI_VDEV_TYPE_AP
||
2227 arvif
->vdev_subtype
!= WMI_VDEV_SUBTYPE_P2P_GO
)
2230 if (unlikely(ieee80211_is_probe_resp(hdr
->frame_control
))) {
2231 spin_lock_bh(&ar
->data_lock
);
2232 if (arvif
->u
.ap
.noa_data
)
2233 if (!pskb_expand_head(skb
, 0, arvif
->u
.ap
.noa_len
,
2235 memcpy(skb_put(skb
, arvif
->u
.ap
.noa_len
),
2236 arvif
->u
.ap
.noa_data
,
2237 arvif
->u
.ap
.noa_len
);
2238 spin_unlock_bh(&ar
->data_lock
);
2242 static bool ath10k_mac_need_offchan_tx_work(struct ath10k
*ar
)
2244 /* FIXME: Not really sure since when the behaviour changed. At some
2245 * point new firmware stopped requiring creation of peer entries for
2246 * offchannel tx (and actually creating them causes issues with wmi-htc
2247 * tx credit replenishment and reliability). Assuming it's at least 3.4
2248 * because that's when the `freq` was introduced to TX_FRM HTT command.
2250 return !(ar
->htt
.target_version_major
>= 3 &&
2251 ar
->htt
.target_version_minor
>= 4);
2254 static void ath10k_tx_htt(struct ath10k
*ar
, struct sk_buff
*skb
)
2256 struct ieee80211_hdr
*hdr
= (struct ieee80211_hdr
*)skb
->data
;
2259 if (ar
->htt
.target_version_major
>= 3) {
2260 /* Since HTT 3.0 there is no separate mgmt tx command */
2261 ret
= ath10k_htt_tx(&ar
->htt
, skb
);
2265 if (ieee80211_is_mgmt(hdr
->frame_control
)) {
2266 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX
,
2268 if (skb_queue_len(&ar
->wmi_mgmt_tx_queue
) >=
2269 ATH10K_MAX_NUM_MGMT_PENDING
) {
2270 ath10k_warn(ar
, "reached WMI management transmit queue limit\n");
2275 skb_queue_tail(&ar
->wmi_mgmt_tx_queue
, skb
);
2276 ieee80211_queue_work(ar
->hw
, &ar
->wmi_mgmt_tx_work
);
2278 ret
= ath10k_htt_mgmt_tx(&ar
->htt
, skb
);
2280 } else if (!test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX
,
2282 ieee80211_is_nullfunc(hdr
->frame_control
)) {
2283 /* FW does not report tx status properly for NullFunc frames
2284 * unless they are sent through mgmt tx path. mac80211 sends
2285 * those frames when it detects link/beacon loss and depends
2286 * on the tx status to be correct. */
2287 ret
= ath10k_htt_mgmt_tx(&ar
->htt
, skb
);
2289 ret
= ath10k_htt_tx(&ar
->htt
, skb
);
2294 ath10k_warn(ar
, "failed to transmit packet, dropping: %d\n",
2296 ieee80211_free_txskb(ar
->hw
, skb
);
2300 void ath10k_offchan_tx_purge(struct ath10k
*ar
)
2302 struct sk_buff
*skb
;
2305 skb
= skb_dequeue(&ar
->offchan_tx_queue
);
2309 ieee80211_free_txskb(ar
->hw
, skb
);
2313 void ath10k_offchan_tx_work(struct work_struct
*work
)
2315 struct ath10k
*ar
= container_of(work
, struct ath10k
, offchan_tx_work
);
2316 struct ath10k_peer
*peer
;
2317 struct ieee80211_hdr
*hdr
;
2318 struct sk_buff
*skb
;
2319 const u8
*peer_addr
;
2323 /* FW requirement: We must create a peer before FW will send out
2324 * an offchannel frame. Otherwise the frame will be stuck and
2325 * never transmitted. We delete the peer upon tx completion.
2326 * It is unlikely that a peer for offchannel tx will already be
2327 * present. However it may be in some rare cases so account for that.
2328 * Otherwise we might remove a legitimate peer and break stuff. */
2331 skb
= skb_dequeue(&ar
->offchan_tx_queue
);
2335 mutex_lock(&ar
->conf_mutex
);
2337 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac offchannel skb %p\n",
2340 hdr
= (struct ieee80211_hdr
*)skb
->data
;
2341 peer_addr
= ieee80211_get_DA(hdr
);
2342 vdev_id
= ATH10K_SKB_CB(skb
)->vdev_id
;
2344 spin_lock_bh(&ar
->data_lock
);
2345 peer
= ath10k_peer_find(ar
, vdev_id
, peer_addr
);
2346 spin_unlock_bh(&ar
->data_lock
);
2349 /* FIXME: should this use ath10k_warn()? */
2350 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "peer %pM on vdev %d already present\n",
2351 peer_addr
, vdev_id
);
2354 ret
= ath10k_peer_create(ar
, vdev_id
, peer_addr
);
2356 ath10k_warn(ar
, "failed to create peer %pM on vdev %d: %d\n",
2357 peer_addr
, vdev_id
, ret
);
2360 spin_lock_bh(&ar
->data_lock
);
2361 reinit_completion(&ar
->offchan_tx_completed
);
2362 ar
->offchan_tx_skb
= skb
;
2363 spin_unlock_bh(&ar
->data_lock
);
2365 ath10k_tx_htt(ar
, skb
);
2367 ret
= wait_for_completion_timeout(&ar
->offchan_tx_completed
,
2370 ath10k_warn(ar
, "timed out waiting for offchannel skb %p\n",
2374 ret
= ath10k_peer_delete(ar
, vdev_id
, peer_addr
);
2376 ath10k_warn(ar
, "failed to delete peer %pM on vdev %d: %d\n",
2377 peer_addr
, vdev_id
, ret
);
2380 mutex_unlock(&ar
->conf_mutex
);
2384 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k
*ar
)
2386 struct sk_buff
*skb
;
2389 skb
= skb_dequeue(&ar
->wmi_mgmt_tx_queue
);
2393 ieee80211_free_txskb(ar
->hw
, skb
);
2397 void ath10k_mgmt_over_wmi_tx_work(struct work_struct
*work
)
2399 struct ath10k
*ar
= container_of(work
, struct ath10k
, wmi_mgmt_tx_work
);
2400 struct sk_buff
*skb
;
2404 skb
= skb_dequeue(&ar
->wmi_mgmt_tx_queue
);
2408 ret
= ath10k_wmi_mgmt_tx(ar
, skb
);
2410 ath10k_warn(ar
, "failed to transmit management frame via WMI: %d\n",
2412 ieee80211_free_txskb(ar
->hw
, skb
);
2421 void __ath10k_scan_finish(struct ath10k
*ar
)
2423 lockdep_assert_held(&ar
->data_lock
);
2425 switch (ar
->scan
.state
) {
2426 case ATH10K_SCAN_IDLE
:
2428 case ATH10K_SCAN_RUNNING
:
2429 if (ar
->scan
.is_roc
)
2430 ieee80211_remain_on_channel_expired(ar
->hw
);
2432 case ATH10K_SCAN_ABORTING
:
2433 if (!ar
->scan
.is_roc
)
2434 ieee80211_scan_completed(ar
->hw
,
2436 ATH10K_SCAN_ABORTING
));
2438 case ATH10K_SCAN_STARTING
:
2439 ar
->scan
.state
= ATH10K_SCAN_IDLE
;
2440 ar
->scan_channel
= NULL
;
2441 ath10k_offchan_tx_purge(ar
);
2442 cancel_delayed_work(&ar
->scan
.timeout
);
2443 complete_all(&ar
->scan
.completed
);
2448 void ath10k_scan_finish(struct ath10k
*ar
)
2450 spin_lock_bh(&ar
->data_lock
);
2451 __ath10k_scan_finish(ar
);
2452 spin_unlock_bh(&ar
->data_lock
);
2455 static int ath10k_scan_stop(struct ath10k
*ar
)
2457 struct wmi_stop_scan_arg arg
= {
2458 .req_id
= 1, /* FIXME */
2459 .req_type
= WMI_SCAN_STOP_ONE
,
2460 .u
.scan_id
= ATH10K_SCAN_ID
,
2464 lockdep_assert_held(&ar
->conf_mutex
);
2466 ret
= ath10k_wmi_stop_scan(ar
, &arg
);
2468 ath10k_warn(ar
, "failed to stop wmi scan: %d\n", ret
);
2472 ret
= wait_for_completion_timeout(&ar
->scan
.completed
, 3*HZ
);
2474 ath10k_warn(ar
, "failed to receive scan abortion completion: timed out\n");
2476 } else if (ret
> 0) {
2481 /* Scan state should be updated upon scan completion but in case
2482 * firmware fails to deliver the event (for whatever reason) it is
2483 * desired to clean up scan state anyway. Firmware may have just
2484 * dropped the scan completion event delivery due to transport pipe
2485 * being overflown with data and/or it can recover on its own before
2486 * next scan request is submitted.
2488 spin_lock_bh(&ar
->data_lock
);
2489 if (ar
->scan
.state
!= ATH10K_SCAN_IDLE
)
2490 __ath10k_scan_finish(ar
);
2491 spin_unlock_bh(&ar
->data_lock
);
2496 static void ath10k_scan_abort(struct ath10k
*ar
)
2500 lockdep_assert_held(&ar
->conf_mutex
);
2502 spin_lock_bh(&ar
->data_lock
);
2504 switch (ar
->scan
.state
) {
2505 case ATH10K_SCAN_IDLE
:
2506 /* This can happen if timeout worker kicked in and called
2507 * abortion while scan completion was being processed.
2510 case ATH10K_SCAN_STARTING
:
2511 case ATH10K_SCAN_ABORTING
:
2512 ath10k_warn(ar
, "refusing scan abortion due to invalid scan state: %s (%d)\n",
2513 ath10k_scan_state_str(ar
->scan
.state
),
2516 case ATH10K_SCAN_RUNNING
:
2517 ar
->scan
.state
= ATH10K_SCAN_ABORTING
;
2518 spin_unlock_bh(&ar
->data_lock
);
2520 ret
= ath10k_scan_stop(ar
);
2522 ath10k_warn(ar
, "failed to abort scan: %d\n", ret
);
2524 spin_lock_bh(&ar
->data_lock
);
2528 spin_unlock_bh(&ar
->data_lock
);
2531 void ath10k_scan_timeout_work(struct work_struct
*work
)
2533 struct ath10k
*ar
= container_of(work
, struct ath10k
,
2536 mutex_lock(&ar
->conf_mutex
);
2537 ath10k_scan_abort(ar
);
2538 mutex_unlock(&ar
->conf_mutex
);
2541 static int ath10k_start_scan(struct ath10k
*ar
,
2542 const struct wmi_start_scan_arg
*arg
)
2546 lockdep_assert_held(&ar
->conf_mutex
);
2548 ret
= ath10k_wmi_start_scan(ar
, arg
);
2552 ret
= wait_for_completion_timeout(&ar
->scan
.started
, 1*HZ
);
2554 ret
= ath10k_scan_stop(ar
);
2556 ath10k_warn(ar
, "failed to stop scan: %d\n", ret
);
2561 /* Add a 200ms margin to account for event/command processing */
2562 ieee80211_queue_delayed_work(ar
->hw
, &ar
->scan
.timeout
,
2563 msecs_to_jiffies(arg
->max_scan_time
+200));
2567 /**********************/
2568 /* mac80211 callbacks */
2569 /**********************/
2571 static void ath10k_tx(struct ieee80211_hw
*hw
,
2572 struct ieee80211_tx_control
*control
,
2573 struct sk_buff
*skb
)
2575 struct ath10k
*ar
= hw
->priv
;
2576 struct ieee80211_tx_info
*info
= IEEE80211_SKB_CB(skb
);
2577 struct ieee80211_vif
*vif
= info
->control
.vif
;
2578 struct ieee80211_key_conf
*key
= info
->control
.hw_key
;
2579 struct ieee80211_hdr
*hdr
= (struct ieee80211_hdr
*)skb
->data
;
2581 /* We should disable CCK RATE due to P2P */
2582 if (info
->flags
& IEEE80211_TX_CTL_NO_CCK_RATE
)
2583 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "IEEE80211_TX_CTL_NO_CCK_RATE\n");
2585 ATH10K_SKB_CB(skb
)->htt
.is_offchan
= false;
2586 ATH10K_SKB_CB(skb
)->htt
.tid
= ath10k_tx_h_get_tid(hdr
);
2587 ATH10K_SKB_CB(skb
)->vdev_id
= ath10k_tx_h_get_vdev_id(ar
, vif
);
2589 /* it makes no sense to process injected frames like that */
2590 if (vif
&& vif
->type
!= NL80211_IFTYPE_MONITOR
) {
2591 ath10k_tx_h_nwifi(hw
, skb
);
2592 ath10k_tx_h_update_wep_key(vif
, key
, skb
);
2593 ath10k_tx_h_add_p2p_noa_ie(ar
, vif
, skb
);
2594 ath10k_tx_h_seq_no(vif
, skb
);
2597 if (info
->flags
& IEEE80211_TX_CTL_TX_OFFCHAN
) {
2598 spin_lock_bh(&ar
->data_lock
);
2599 ATH10K_SKB_CB(skb
)->htt
.freq
= ar
->scan
.roc_freq
;
2600 ATH10K_SKB_CB(skb
)->vdev_id
= ar
->scan
.vdev_id
;
2601 spin_unlock_bh(&ar
->data_lock
);
2603 if (ath10k_mac_need_offchan_tx_work(ar
)) {
2604 ATH10K_SKB_CB(skb
)->htt
.freq
= 0;
2605 ATH10K_SKB_CB(skb
)->htt
.is_offchan
= true;
2607 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "queued offchannel skb %p\n",
2610 skb_queue_tail(&ar
->offchan_tx_queue
, skb
);
2611 ieee80211_queue_work(hw
, &ar
->offchan_tx_work
);
2616 ath10k_tx_htt(ar
, skb
);
2619 /* Must not be called with conf_mutex held as workers can use that also. */
2620 void ath10k_drain_tx(struct ath10k
*ar
)
2622 /* make sure rcu-protected mac80211 tx path itself is drained */
2625 ath10k_offchan_tx_purge(ar
);
2626 ath10k_mgmt_over_wmi_tx_purge(ar
);
2628 cancel_work_sync(&ar
->offchan_tx_work
);
2629 cancel_work_sync(&ar
->wmi_mgmt_tx_work
);
2632 void ath10k_halt(struct ath10k
*ar
)
2634 struct ath10k_vif
*arvif
;
2636 lockdep_assert_held(&ar
->conf_mutex
);
2638 clear_bit(ATH10K_CAC_RUNNING
, &ar
->dev_flags
);
2639 ar
->filter_flags
= 0;
2640 ar
->monitor
= false;
2642 if (ar
->monitor_started
)
2643 ath10k_monitor_stop(ar
);
2645 ar
->monitor_started
= false;
2647 ath10k_scan_finish(ar
);
2648 ath10k_peer_cleanup_all(ar
);
2649 ath10k_core_stop(ar
);
2650 ath10k_hif_power_down(ar
);
2652 spin_lock_bh(&ar
->data_lock
);
2653 list_for_each_entry(arvif
, &ar
->arvifs
, list
)
2654 ath10k_mac_vif_beacon_cleanup(arvif
);
2655 spin_unlock_bh(&ar
->data_lock
);
2658 static int ath10k_get_antenna(struct ieee80211_hw
*hw
, u32
*tx_ant
, u32
*rx_ant
)
2660 struct ath10k
*ar
= hw
->priv
;
2662 mutex_lock(&ar
->conf_mutex
);
2664 if (ar
->cfg_tx_chainmask
) {
2665 *tx_ant
= ar
->cfg_tx_chainmask
;
2666 *rx_ant
= ar
->cfg_rx_chainmask
;
2668 *tx_ant
= ar
->supp_tx_chainmask
;
2669 *rx_ant
= ar
->supp_rx_chainmask
;
2672 mutex_unlock(&ar
->conf_mutex
);
2677 static void ath10k_check_chain_mask(struct ath10k
*ar
, u32 cm
, const char *dbg
)
2679 /* It is not clear that allowing gaps in chainmask
2680 * is helpful. Probably it will not do what user
2681 * is hoping for, so warn in that case.
2683 if (cm
== 15 || cm
== 7 || cm
== 3 || cm
== 1 || cm
== 0)
2686 ath10k_warn(ar
, "mac %s antenna chainmask may be invalid: 0x%x. Suggested values: 15, 7, 3, 1 or 0.\n",
2690 static int __ath10k_set_antenna(struct ath10k
*ar
, u32 tx_ant
, u32 rx_ant
)
2694 lockdep_assert_held(&ar
->conf_mutex
);
2696 ath10k_check_chain_mask(ar
, tx_ant
, "tx");
2697 ath10k_check_chain_mask(ar
, rx_ant
, "rx");
2699 ar
->cfg_tx_chainmask
= tx_ant
;
2700 ar
->cfg_rx_chainmask
= rx_ant
;
2702 if ((ar
->state
!= ATH10K_STATE_ON
) &&
2703 (ar
->state
!= ATH10K_STATE_RESTARTED
))
2706 ret
= ath10k_wmi_pdev_set_param(ar
, ar
->wmi
.pdev_param
->tx_chain_mask
,
2709 ath10k_warn(ar
, "failed to set tx-chainmask: %d, req 0x%x\n",
2714 ret
= ath10k_wmi_pdev_set_param(ar
, ar
->wmi
.pdev_param
->rx_chain_mask
,
2717 ath10k_warn(ar
, "failed to set rx-chainmask: %d, req 0x%x\n",
2725 static int ath10k_set_antenna(struct ieee80211_hw
*hw
, u32 tx_ant
, u32 rx_ant
)
2727 struct ath10k
*ar
= hw
->priv
;
2730 mutex_lock(&ar
->conf_mutex
);
2731 ret
= __ath10k_set_antenna(ar
, tx_ant
, rx_ant
);
2732 mutex_unlock(&ar
->conf_mutex
);
2736 static int ath10k_start(struct ieee80211_hw
*hw
)
2738 struct ath10k
*ar
= hw
->priv
;
2742 * This makes sense only when restarting hw. It is harmless to call
2743 * uncoditionally. This is necessary to make sure no HTT/WMI tx
2744 * commands will be submitted while restarting.
2746 ath10k_drain_tx(ar
);
2748 mutex_lock(&ar
->conf_mutex
);
2750 switch (ar
->state
) {
2751 case ATH10K_STATE_OFF
:
2752 ar
->state
= ATH10K_STATE_ON
;
2754 case ATH10K_STATE_RESTARTING
:
2756 ar
->state
= ATH10K_STATE_RESTARTED
;
2758 case ATH10K_STATE_ON
:
2759 case ATH10K_STATE_RESTARTED
:
2760 case ATH10K_STATE_WEDGED
:
2764 case ATH10K_STATE_UTF
:
2769 ret
= ath10k_hif_power_up(ar
);
2771 ath10k_err(ar
, "Could not init hif: %d\n", ret
);
2775 ret
= ath10k_core_start(ar
, ATH10K_FIRMWARE_MODE_NORMAL
);
2777 ath10k_err(ar
, "Could not init core: %d\n", ret
);
2778 goto err_power_down
;
2781 ret
= ath10k_wmi_pdev_set_param(ar
, ar
->wmi
.pdev_param
->pmf_qos
, 1);
2783 ath10k_warn(ar
, "failed to enable PMF QOS: %d\n", ret
);
2787 ret
= ath10k_wmi_pdev_set_param(ar
, ar
->wmi
.pdev_param
->dynamic_bw
, 1);
2789 ath10k_warn(ar
, "failed to enable dynamic BW: %d\n", ret
);
2793 if (ar
->cfg_tx_chainmask
)
2794 __ath10k_set_antenna(ar
, ar
->cfg_tx_chainmask
,
2795 ar
->cfg_rx_chainmask
);
2798 * By default FW set ARP frames ac to voice (6). In that case ARP
2799 * exchange is not working properly for UAPSD enabled AP. ARP requests
2800 * which arrives with access category 0 are processed by network stack
2801 * and send back with access category 0, but FW changes access category
2802 * to 6. Set ARP frames access category to best effort (0) solves
2806 ret
= ath10k_wmi_pdev_set_param(ar
,
2807 ar
->wmi
.pdev_param
->arp_ac_override
, 0);
2809 ath10k_warn(ar
, "failed to set arp ac override parameter: %d\n",
2814 ar
->num_started_vdevs
= 0;
2815 ath10k_regd_update(ar
);
2817 ath10k_spectral_start(ar
);
2819 mutex_unlock(&ar
->conf_mutex
);
2823 ath10k_core_stop(ar
);
2826 ath10k_hif_power_down(ar
);
2829 ar
->state
= ATH10K_STATE_OFF
;
2832 mutex_unlock(&ar
->conf_mutex
);
2836 static void ath10k_stop(struct ieee80211_hw
*hw
)
2838 struct ath10k
*ar
= hw
->priv
;
2840 ath10k_drain_tx(ar
);
2842 mutex_lock(&ar
->conf_mutex
);
2843 if (ar
->state
!= ATH10K_STATE_OFF
) {
2845 ar
->state
= ATH10K_STATE_OFF
;
2847 mutex_unlock(&ar
->conf_mutex
);
2849 cancel_delayed_work_sync(&ar
->scan
.timeout
);
2850 cancel_work_sync(&ar
->restart_work
);
2853 static int ath10k_config_ps(struct ath10k
*ar
)
2855 struct ath10k_vif
*arvif
;
2858 lockdep_assert_held(&ar
->conf_mutex
);
2860 list_for_each_entry(arvif
, &ar
->arvifs
, list
) {
2861 ret
= ath10k_mac_vif_setup_ps(arvif
);
2863 ath10k_warn(ar
, "failed to setup powersave: %d\n", ret
);
2871 static const char *chandef_get_width(enum nl80211_chan_width width
)
2874 case NL80211_CHAN_WIDTH_20_NOHT
:
2876 case NL80211_CHAN_WIDTH_20
:
2878 case NL80211_CHAN_WIDTH_40
:
2880 case NL80211_CHAN_WIDTH_80
:
2882 case NL80211_CHAN_WIDTH_80P80
:
2884 case NL80211_CHAN_WIDTH_160
:
2886 case NL80211_CHAN_WIDTH_5
:
2888 case NL80211_CHAN_WIDTH_10
:
2894 static void ath10k_config_chan(struct ath10k
*ar
)
2896 struct ath10k_vif
*arvif
;
2899 lockdep_assert_held(&ar
->conf_mutex
);
2901 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
2902 "mac config channel to %dMHz (cf1 %dMHz cf2 %dMHz width %s)\n",
2903 ar
->chandef
.chan
->center_freq
,
2904 ar
->chandef
.center_freq1
,
2905 ar
->chandef
.center_freq2
,
2906 chandef_get_width(ar
->chandef
.width
));
2908 /* First stop monitor interface. Some FW versions crash if there's a
2909 * lone monitor interface. */
2910 if (ar
->monitor_started
)
2911 ath10k_monitor_stop(ar
);
2913 list_for_each_entry(arvif
, &ar
->arvifs
, list
) {
2914 if (!arvif
->is_started
)
2920 if (arvif
->vdev_type
== WMI_VDEV_TYPE_MONITOR
)
2923 ret
= ath10k_wmi_vdev_down(ar
, arvif
->vdev_id
);
2925 ath10k_warn(ar
, "failed to down vdev %d: %d\n",
2926 arvif
->vdev_id
, ret
);
2931 /* all vdevs are downed now - attempt to restart and re-up them */
2933 list_for_each_entry(arvif
, &ar
->arvifs
, list
) {
2934 if (!arvif
->is_started
)
2937 if (arvif
->vdev_type
== WMI_VDEV_TYPE_MONITOR
)
2940 ret
= ath10k_vdev_restart(arvif
);
2942 ath10k_warn(ar
, "failed to restart vdev %d: %d\n",
2943 arvif
->vdev_id
, ret
);
2950 ret
= ath10k_wmi_vdev_up(arvif
->ar
, arvif
->vdev_id
, arvif
->aid
,
2953 ath10k_warn(ar
, "failed to bring vdev up %d: %d\n",
2954 arvif
->vdev_id
, ret
);
2959 ath10k_monitor_recalc(ar
);
2962 static int ath10k_mac_txpower_setup(struct ath10k
*ar
, int txpower
)
2967 lockdep_assert_held(&ar
->conf_mutex
);
2969 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac txpower %d\n", txpower
);
2971 param
= ar
->wmi
.pdev_param
->txpower_limit2g
;
2972 ret
= ath10k_wmi_pdev_set_param(ar
, param
, txpower
* 2);
2974 ath10k_warn(ar
, "failed to set 2g txpower %d: %d\n",
2979 param
= ar
->wmi
.pdev_param
->txpower_limit5g
;
2980 ret
= ath10k_wmi_pdev_set_param(ar
, param
, txpower
* 2);
2982 ath10k_warn(ar
, "failed to set 5g txpower %d: %d\n",
2990 static int ath10k_mac_txpower_recalc(struct ath10k
*ar
)
2992 struct ath10k_vif
*arvif
;
2993 int ret
, txpower
= -1;
2995 lockdep_assert_held(&ar
->conf_mutex
);
2997 list_for_each_entry(arvif
, &ar
->arvifs
, list
) {
2998 WARN_ON(arvif
->txpower
< 0);
3001 txpower
= arvif
->txpower
;
3003 txpower
= min(txpower
, arvif
->txpower
);
3006 if (WARN_ON(txpower
== -1))
3009 ret
= ath10k_mac_txpower_setup(ar
, txpower
);
3011 ath10k_warn(ar
, "failed to setup tx power %d: %d\n",
3019 static int ath10k_config(struct ieee80211_hw
*hw
, u32 changed
)
3021 struct ath10k
*ar
= hw
->priv
;
3022 struct ieee80211_conf
*conf
= &hw
->conf
;
3025 mutex_lock(&ar
->conf_mutex
);
3027 if (changed
& IEEE80211_CONF_CHANGE_CHANNEL
) {
3028 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
3029 "mac config channel %dMHz flags 0x%x radar %d\n",
3030 conf
->chandef
.chan
->center_freq
,
3031 conf
->chandef
.chan
->flags
,
3032 conf
->radar_enabled
);
3034 spin_lock_bh(&ar
->data_lock
);
3035 ar
->rx_channel
= conf
->chandef
.chan
;
3036 spin_unlock_bh(&ar
->data_lock
);
3038 ar
->radar_enabled
= conf
->radar_enabled
;
3039 ath10k_recalc_radar_detection(ar
);
3041 if (!cfg80211_chandef_identical(&ar
->chandef
, &conf
->chandef
)) {
3042 ar
->chandef
= conf
->chandef
;
3043 ath10k_config_chan(ar
);
3047 if (changed
& IEEE80211_CONF_CHANGE_PS
)
3048 ath10k_config_ps(ar
);
3050 if (changed
& IEEE80211_CONF_CHANGE_MONITOR
) {
3051 ar
->monitor
= conf
->flags
& IEEE80211_CONF_MONITOR
;
3052 ret
= ath10k_monitor_recalc(ar
);
3054 ath10k_warn(ar
, "failed to recalc monitor: %d\n", ret
);
3057 mutex_unlock(&ar
->conf_mutex
);
3061 static u32
get_nss_from_chainmask(u16 chain_mask
)
3063 if ((chain_mask
& 0x15) == 0x15)
3065 else if ((chain_mask
& 0x7) == 0x7)
3067 else if ((chain_mask
& 0x3) == 0x3)
3074 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE,
3075 * because we will send mgmt frames without CCK. This requirement
3076 * for P2P_FIND/GO_NEG should be handled by checking CCK flag
3079 static int ath10k_add_interface(struct ieee80211_hw
*hw
,
3080 struct ieee80211_vif
*vif
)
3082 struct ath10k
*ar
= hw
->priv
;
3083 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
3084 enum wmi_sta_powersave_param param
;
3090 mutex_lock(&ar
->conf_mutex
);
3092 memset(arvif
, 0, sizeof(*arvif
));
3097 INIT_WORK(&arvif
->wep_key_work
, ath10k_tx_wep_key_work
);
3098 INIT_LIST_HEAD(&arvif
->list
);
3100 if (ar
->free_vdev_map
== 0) {
3101 ath10k_warn(ar
, "Free vdev map is empty, no more interfaces allowed.\n");
3105 bit
= __ffs64(ar
->free_vdev_map
);
3107 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac create vdev %i map %llx\n",
3108 bit
, ar
->free_vdev_map
);
3110 arvif
->vdev_id
= bit
;
3111 arvif
->vdev_subtype
= WMI_VDEV_SUBTYPE_NONE
;
3113 switch (vif
->type
) {
3114 case NL80211_IFTYPE_P2P_DEVICE
:
3115 arvif
->vdev_type
= WMI_VDEV_TYPE_STA
;
3116 arvif
->vdev_subtype
= WMI_VDEV_SUBTYPE_P2P_DEVICE
;
3118 case NL80211_IFTYPE_UNSPECIFIED
:
3119 case NL80211_IFTYPE_STATION
:
3120 arvif
->vdev_type
= WMI_VDEV_TYPE_STA
;
3122 arvif
->vdev_subtype
= WMI_VDEV_SUBTYPE_P2P_CLIENT
;
3124 case NL80211_IFTYPE_ADHOC
:
3125 arvif
->vdev_type
= WMI_VDEV_TYPE_IBSS
;
3127 case NL80211_IFTYPE_AP
:
3128 arvif
->vdev_type
= WMI_VDEV_TYPE_AP
;
3131 arvif
->vdev_subtype
= WMI_VDEV_SUBTYPE_P2P_GO
;
3133 case NL80211_IFTYPE_MONITOR
:
3134 arvif
->vdev_type
= WMI_VDEV_TYPE_MONITOR
;
3141 /* Some firmware revisions don't wait for beacon tx completion before
3142 * sending another SWBA event. This could lead to hardware using old
3143 * (freed) beacon data in some cases, e.g. tx credit starvation
3144 * combined with missed TBTT. This is very very rare.
3146 * On non-IOMMU-enabled hosts this could be a possible security issue
3147 * because hw could beacon some random data on the air. On
3148 * IOMMU-enabled hosts DMAR faults would occur in most cases and target
3149 * device would crash.
3151 * Since there are no beacon tx completions (implicit nor explicit)
3152 * propagated to host the only workaround for this is to allocate a
3153 * DMA-coherent buffer for a lifetime of a vif and use it for all
3154 * beacon tx commands. Worst case for this approach is some beacons may
3155 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap.
3157 if (vif
->type
== NL80211_IFTYPE_ADHOC
||
3158 vif
->type
== NL80211_IFTYPE_AP
) {
3159 arvif
->beacon_buf
= dma_zalloc_coherent(ar
->dev
,
3160 IEEE80211_MAX_FRAME_LEN
,
3161 &arvif
->beacon_paddr
,
3163 if (!arvif
->beacon_buf
) {
3165 ath10k_warn(ar
, "failed to allocate beacon buffer: %d\n",
3171 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n",
3172 arvif
->vdev_id
, arvif
->vdev_type
, arvif
->vdev_subtype
,
3173 arvif
->beacon_buf
? "single-buf" : "per-skb");
3175 ret
= ath10k_wmi_vdev_create(ar
, arvif
->vdev_id
, arvif
->vdev_type
,
3176 arvif
->vdev_subtype
, vif
->addr
);
3178 ath10k_warn(ar
, "failed to create WMI vdev %i: %d\n",
3179 arvif
->vdev_id
, ret
);
3183 ar
->free_vdev_map
&= ~(1LL << arvif
->vdev_id
);
3184 list_add(&arvif
->list
, &ar
->arvifs
);
3186 vdev_param
= ar
->wmi
.vdev_param
->def_keyid
;
3187 ret
= ath10k_wmi_vdev_set_param(ar
, 0, vdev_param
,
3188 arvif
->def_wep_key_idx
);
3190 ath10k_warn(ar
, "failed to set vdev %i default key id: %d\n",
3191 arvif
->vdev_id
, ret
);
3192 goto err_vdev_delete
;
3195 vdev_param
= ar
->wmi
.vdev_param
->tx_encap_type
;
3196 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
,
3197 ATH10K_HW_TXRX_NATIVE_WIFI
);
3198 /* 10.X firmware does not support this VDEV parameter. Do not warn */
3199 if (ret
&& ret
!= -EOPNOTSUPP
) {
3200 ath10k_warn(ar
, "failed to set vdev %i TX encapsulation: %d\n",
3201 arvif
->vdev_id
, ret
);
3202 goto err_vdev_delete
;
3205 if (ar
->cfg_tx_chainmask
) {
3206 u16 nss
= get_nss_from_chainmask(ar
->cfg_tx_chainmask
);
3208 vdev_param
= ar
->wmi
.vdev_param
->nss
;
3209 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
,
3212 ath10k_warn(ar
, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n",
3213 arvif
->vdev_id
, ar
->cfg_tx_chainmask
, nss
,
3215 goto err_vdev_delete
;
3219 if (arvif
->vdev_type
== WMI_VDEV_TYPE_AP
) {
3220 ret
= ath10k_peer_create(ar
, arvif
->vdev_id
, vif
->addr
);
3222 ath10k_warn(ar
, "failed to create vdev %i peer for AP: %d\n",
3223 arvif
->vdev_id
, ret
);
3224 goto err_vdev_delete
;
3227 ret
= ath10k_mac_set_kickout(arvif
);
3229 ath10k_warn(ar
, "failed to set vdev %i kickout parameters: %d\n",
3230 arvif
->vdev_id
, ret
);
3231 goto err_peer_delete
;
3235 if (arvif
->vdev_type
== WMI_VDEV_TYPE_STA
) {
3236 param
= WMI_STA_PS_PARAM_RX_WAKE_POLICY
;
3237 value
= WMI_STA_PS_RX_WAKE_POLICY_WAKE
;
3238 ret
= ath10k_wmi_set_sta_ps_param(ar
, arvif
->vdev_id
,
3241 ath10k_warn(ar
, "failed to set vdev %i RX wake policy: %d\n",
3242 arvif
->vdev_id
, ret
);
3243 goto err_peer_delete
;
3246 ret
= ath10k_mac_vif_recalc_ps_wake_threshold(arvif
);
3248 ath10k_warn(ar
, "failed to recalc ps wake threshold on vdev %i: %d\n",
3249 arvif
->vdev_id
, ret
);
3250 goto err_peer_delete
;
3253 ret
= ath10k_mac_vif_recalc_ps_poll_count(arvif
);
3255 ath10k_warn(ar
, "failed to recalc ps poll count on vdev %i: %d\n",
3256 arvif
->vdev_id
, ret
);
3257 goto err_peer_delete
;
3261 ret
= ath10k_mac_set_rts(arvif
, ar
->hw
->wiphy
->rts_threshold
);
3263 ath10k_warn(ar
, "failed to set rts threshold for vdev %d: %d\n",
3264 arvif
->vdev_id
, ret
);
3265 goto err_peer_delete
;
3268 ret
= ath10k_mac_set_frag(arvif
, ar
->hw
->wiphy
->frag_threshold
);
3270 ath10k_warn(ar
, "failed to set frag threshold for vdev %d: %d\n",
3271 arvif
->vdev_id
, ret
);
3272 goto err_peer_delete
;
3275 arvif
->txpower
= vif
->bss_conf
.txpower
;
3276 ret
= ath10k_mac_txpower_recalc(ar
);
3278 ath10k_warn(ar
, "failed to recalc tx power: %d\n", ret
);
3279 goto err_peer_delete
;
3282 mutex_unlock(&ar
->conf_mutex
);
3286 if (arvif
->vdev_type
== WMI_VDEV_TYPE_AP
)
3287 ath10k_wmi_peer_delete(ar
, arvif
->vdev_id
, vif
->addr
);
3290 ath10k_wmi_vdev_delete(ar
, arvif
->vdev_id
);
3291 ar
->free_vdev_map
|= 1LL << arvif
->vdev_id
;
3292 list_del(&arvif
->list
);
3295 if (arvif
->beacon_buf
) {
3296 dma_free_coherent(ar
->dev
, IEEE80211_MAX_FRAME_LEN
,
3297 arvif
->beacon_buf
, arvif
->beacon_paddr
);
3298 arvif
->beacon_buf
= NULL
;
3301 mutex_unlock(&ar
->conf_mutex
);
3306 static void ath10k_remove_interface(struct ieee80211_hw
*hw
,
3307 struct ieee80211_vif
*vif
)
3309 struct ath10k
*ar
= hw
->priv
;
3310 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
3313 cancel_work_sync(&arvif
->wep_key_work
);
3315 mutex_lock(&ar
->conf_mutex
);
3317 spin_lock_bh(&ar
->data_lock
);
3318 ath10k_mac_vif_beacon_cleanup(arvif
);
3319 spin_unlock_bh(&ar
->data_lock
);
3321 ret
= ath10k_spectral_vif_stop(arvif
);
3323 ath10k_warn(ar
, "failed to stop spectral for vdev %i: %d\n",
3324 arvif
->vdev_id
, ret
);
3326 ar
->free_vdev_map
|= 1LL << arvif
->vdev_id
;
3327 list_del(&arvif
->list
);
3329 if (arvif
->vdev_type
== WMI_VDEV_TYPE_AP
) {
3330 ret
= ath10k_peer_delete(arvif
->ar
, arvif
->vdev_id
, vif
->addr
);
3332 ath10k_warn(ar
, "failed to remove peer for AP vdev %i: %d\n",
3333 arvif
->vdev_id
, ret
);
3335 kfree(arvif
->u
.ap
.noa_data
);
3338 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev %i delete (remove interface)\n",
3341 ret
= ath10k_wmi_vdev_delete(ar
, arvif
->vdev_id
);
3343 ath10k_warn(ar
, "failed to delete WMI vdev %i: %d\n",
3344 arvif
->vdev_id
, ret
);
3346 ath10k_peer_cleanup(ar
, arvif
->vdev_id
);
3348 mutex_unlock(&ar
->conf_mutex
);
3352 * FIXME: Has to be verified.
3354 #define SUPPORTED_FILTERS \
3355 (FIF_PROMISC_IN_BSS | \
3360 FIF_BCN_PRBRESP_PROMISC | \
3364 static void ath10k_configure_filter(struct ieee80211_hw
*hw
,
3365 unsigned int changed_flags
,
3366 unsigned int *total_flags
,
3369 struct ath10k
*ar
= hw
->priv
;
3372 mutex_lock(&ar
->conf_mutex
);
3374 changed_flags
&= SUPPORTED_FILTERS
;
3375 *total_flags
&= SUPPORTED_FILTERS
;
3376 ar
->filter_flags
= *total_flags
;
3378 ret
= ath10k_monitor_recalc(ar
);
3380 ath10k_warn(ar
, "failed to recalc montior: %d\n", ret
);
3382 mutex_unlock(&ar
->conf_mutex
);
3385 static void ath10k_bss_info_changed(struct ieee80211_hw
*hw
,
3386 struct ieee80211_vif
*vif
,
3387 struct ieee80211_bss_conf
*info
,
3390 struct ath10k
*ar
= hw
->priv
;
3391 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
3393 u32 vdev_param
, pdev_param
, slottime
, preamble
;
3395 mutex_lock(&ar
->conf_mutex
);
3397 if (changed
& BSS_CHANGED_IBSS
)
3398 ath10k_control_ibss(arvif
, info
, vif
->addr
);
3400 if (changed
& BSS_CHANGED_BEACON_INT
) {
3401 arvif
->beacon_interval
= info
->beacon_int
;
3402 vdev_param
= ar
->wmi
.vdev_param
->beacon_interval
;
3403 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
,
3404 arvif
->beacon_interval
);
3405 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
3406 "mac vdev %d beacon_interval %d\n",
3407 arvif
->vdev_id
, arvif
->beacon_interval
);
3410 ath10k_warn(ar
, "failed to set beacon interval for vdev %d: %i\n",
3411 arvif
->vdev_id
, ret
);
3414 if (changed
& BSS_CHANGED_BEACON
) {
3415 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
3416 "vdev %d set beacon tx mode to staggered\n",
3419 pdev_param
= ar
->wmi
.pdev_param
->beacon_tx_mode
;
3420 ret
= ath10k_wmi_pdev_set_param(ar
, pdev_param
,
3421 WMI_BEACON_STAGGERED_MODE
);
3423 ath10k_warn(ar
, "failed to set beacon mode for vdev %d: %i\n",
3424 arvif
->vdev_id
, ret
);
3426 ret
= ath10k_mac_setup_bcn_tmpl(arvif
);
3428 ath10k_warn(ar
, "failed to update beacon template: %d\n",
3432 if (changed
& BSS_CHANGED_AP_PROBE_RESP
) {
3433 ret
= ath10k_mac_setup_prb_tmpl(arvif
);
3435 ath10k_warn(ar
, "failed to setup probe resp template on vdev %i: %d\n",
3436 arvif
->vdev_id
, ret
);
3439 if (changed
& (BSS_CHANGED_BEACON_INFO
| BSS_CHANGED_BEACON
)) {
3440 arvif
->dtim_period
= info
->dtim_period
;
3442 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
3443 "mac vdev %d dtim_period %d\n",
3444 arvif
->vdev_id
, arvif
->dtim_period
);
3446 vdev_param
= ar
->wmi
.vdev_param
->dtim_period
;
3447 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
,
3448 arvif
->dtim_period
);
3450 ath10k_warn(ar
, "failed to set dtim period for vdev %d: %i\n",
3451 arvif
->vdev_id
, ret
);
3454 if (changed
& BSS_CHANGED_SSID
&&
3455 vif
->type
== NL80211_IFTYPE_AP
) {
3456 arvif
->u
.ap
.ssid_len
= info
->ssid_len
;
3458 memcpy(arvif
->u
.ap
.ssid
, info
->ssid
, info
->ssid_len
);
3459 arvif
->u
.ap
.hidden_ssid
= info
->hidden_ssid
;
3462 if (changed
& BSS_CHANGED_BSSID
&& !is_zero_ether_addr(info
->bssid
))
3463 ether_addr_copy(arvif
->bssid
, info
->bssid
);
3465 if (changed
& BSS_CHANGED_BEACON_ENABLED
)
3466 ath10k_control_beaconing(arvif
, info
);
3468 if (changed
& BSS_CHANGED_ERP_CTS_PROT
) {
3469 arvif
->use_cts_prot
= info
->use_cts_prot
;
3470 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev %d cts_prot %d\n",
3471 arvif
->vdev_id
, info
->use_cts_prot
);
3473 ret
= ath10k_recalc_rtscts_prot(arvif
);
3475 ath10k_warn(ar
, "failed to recalculate rts/cts prot for vdev %d: %d\n",
3476 arvif
->vdev_id
, ret
);
3479 if (changed
& BSS_CHANGED_ERP_SLOT
) {
3480 if (info
->use_short_slot
)
3481 slottime
= WMI_VDEV_SLOT_TIME_SHORT
; /* 9us */
3484 slottime
= WMI_VDEV_SLOT_TIME_LONG
; /* 20us */
3486 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev %d slot_time %d\n",
3487 arvif
->vdev_id
, slottime
);
3489 vdev_param
= ar
->wmi
.vdev_param
->slot_time
;
3490 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
,
3493 ath10k_warn(ar
, "failed to set erp slot for vdev %d: %i\n",
3494 arvif
->vdev_id
, ret
);
3497 if (changed
& BSS_CHANGED_ERP_PREAMBLE
) {
3498 if (info
->use_short_preamble
)
3499 preamble
= WMI_VDEV_PREAMBLE_SHORT
;
3501 preamble
= WMI_VDEV_PREAMBLE_LONG
;
3503 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
3504 "mac vdev %d preamble %dn",
3505 arvif
->vdev_id
, preamble
);
3507 vdev_param
= ar
->wmi
.vdev_param
->preamble
;
3508 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
,
3511 ath10k_warn(ar
, "failed to set preamble for vdev %d: %i\n",
3512 arvif
->vdev_id
, ret
);
3515 if (changed
& BSS_CHANGED_ASSOC
) {
3517 /* Workaround: Make sure monitor vdev is not running
3518 * when associating to prevent some firmware revisions
3519 * (e.g. 10.1 and 10.2) from crashing.
3521 if (ar
->monitor_started
)
3522 ath10k_monitor_stop(ar
);
3523 ath10k_bss_assoc(hw
, vif
, info
);
3524 ath10k_monitor_recalc(ar
);
3526 ath10k_bss_disassoc(hw
, vif
);
3530 if (changed
& BSS_CHANGED_TXPOWER
) {
3531 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev_id %i txpower %d\n",
3532 arvif
->vdev_id
, info
->txpower
);
3534 arvif
->txpower
= info
->txpower
;
3535 ret
= ath10k_mac_txpower_recalc(ar
);
3537 ath10k_warn(ar
, "failed to recalc tx power: %d\n", ret
);
3540 if (changed
& BSS_CHANGED_PS
) {
3541 ret
= ath10k_mac_vif_setup_ps(arvif
);
3543 ath10k_warn(ar
, "failed to setup ps on vdev %i: %d\n",
3544 arvif
->vdev_id
, ret
);
3547 mutex_unlock(&ar
->conf_mutex
);
3550 static int ath10k_hw_scan(struct ieee80211_hw
*hw
,
3551 struct ieee80211_vif
*vif
,
3552 struct ieee80211_scan_request
*hw_req
)
3554 struct ath10k
*ar
= hw
->priv
;
3555 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
3556 struct cfg80211_scan_request
*req
= &hw_req
->req
;
3557 struct wmi_start_scan_arg arg
;
3561 mutex_lock(&ar
->conf_mutex
);
3563 spin_lock_bh(&ar
->data_lock
);
3564 switch (ar
->scan
.state
) {
3565 case ATH10K_SCAN_IDLE
:
3566 reinit_completion(&ar
->scan
.started
);
3567 reinit_completion(&ar
->scan
.completed
);
3568 ar
->scan
.state
= ATH10K_SCAN_STARTING
;
3569 ar
->scan
.is_roc
= false;
3570 ar
->scan
.vdev_id
= arvif
->vdev_id
;
3573 case ATH10K_SCAN_STARTING
:
3574 case ATH10K_SCAN_RUNNING
:
3575 case ATH10K_SCAN_ABORTING
:
3579 spin_unlock_bh(&ar
->data_lock
);
3584 memset(&arg
, 0, sizeof(arg
));
3585 ath10k_wmi_start_scan_init(ar
, &arg
);
3586 arg
.vdev_id
= arvif
->vdev_id
;
3587 arg
.scan_id
= ATH10K_SCAN_ID
;
3590 arg
.scan_ctrl_flags
|= WMI_SCAN_ADD_CCK_RATES
;
3593 arg
.ie_len
= req
->ie_len
;
3594 memcpy(arg
.ie
, req
->ie
, arg
.ie_len
);
3598 arg
.n_ssids
= req
->n_ssids
;
3599 for (i
= 0; i
< arg
.n_ssids
; i
++) {
3600 arg
.ssids
[i
].len
= req
->ssids
[i
].ssid_len
;
3601 arg
.ssids
[i
].ssid
= req
->ssids
[i
].ssid
;
3604 arg
.scan_ctrl_flags
|= WMI_SCAN_FLAG_PASSIVE
;
3607 if (req
->n_channels
) {
3608 arg
.n_channels
= req
->n_channels
;
3609 for (i
= 0; i
< arg
.n_channels
; i
++)
3610 arg
.channels
[i
] = req
->channels
[i
]->center_freq
;
3613 ret
= ath10k_start_scan(ar
, &arg
);
3615 ath10k_warn(ar
, "failed to start hw scan: %d\n", ret
);
3616 spin_lock_bh(&ar
->data_lock
);
3617 ar
->scan
.state
= ATH10K_SCAN_IDLE
;
3618 spin_unlock_bh(&ar
->data_lock
);
3622 mutex_unlock(&ar
->conf_mutex
);
3626 static void ath10k_cancel_hw_scan(struct ieee80211_hw
*hw
,
3627 struct ieee80211_vif
*vif
)
3629 struct ath10k
*ar
= hw
->priv
;
3631 mutex_lock(&ar
->conf_mutex
);
3632 ath10k_scan_abort(ar
);
3633 mutex_unlock(&ar
->conf_mutex
);
3635 cancel_delayed_work_sync(&ar
->scan
.timeout
);
3638 static void ath10k_set_key_h_def_keyidx(struct ath10k
*ar
,
3639 struct ath10k_vif
*arvif
,
3640 enum set_key_cmd cmd
,
3641 struct ieee80211_key_conf
*key
)
3643 u32 vdev_param
= arvif
->ar
->wmi
.vdev_param
->def_keyid
;
3646 /* 10.1 firmware branch requires default key index to be set to group
3647 * key index after installing it. Otherwise FW/HW Txes corrupted
3648 * frames with multi-vif APs. This is not required for main firmware
3649 * branch (e.g. 636).
3651 * FIXME: This has been tested only in AP. It remains unknown if this
3652 * is required for multi-vif STA interfaces on 10.1 */
3654 if (arvif
->vdev_type
!= WMI_VDEV_TYPE_AP
)
3657 if (key
->cipher
== WLAN_CIPHER_SUITE_WEP40
)
3660 if (key
->cipher
== WLAN_CIPHER_SUITE_WEP104
)
3663 if (key
->flags
& IEEE80211_KEY_FLAG_PAIRWISE
)
3669 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
,
3672 ath10k_warn(ar
, "failed to set vdev %i group key as default key: %d\n",
3673 arvif
->vdev_id
, ret
);
3676 static int ath10k_set_key(struct ieee80211_hw
*hw
, enum set_key_cmd cmd
,
3677 struct ieee80211_vif
*vif
, struct ieee80211_sta
*sta
,
3678 struct ieee80211_key_conf
*key
)
3680 struct ath10k
*ar
= hw
->priv
;
3681 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
3682 struct ath10k_peer
*peer
;
3683 const u8
*peer_addr
;
3684 bool is_wep
= key
->cipher
== WLAN_CIPHER_SUITE_WEP40
||
3685 key
->cipher
== WLAN_CIPHER_SUITE_WEP104
;
3688 if (key
->keyidx
> WMI_MAX_KEY_INDEX
)
3691 mutex_lock(&ar
->conf_mutex
);
3694 peer_addr
= sta
->addr
;
3695 else if (arvif
->vdev_type
== WMI_VDEV_TYPE_STA
)
3696 peer_addr
= vif
->bss_conf
.bssid
;
3698 peer_addr
= vif
->addr
;
3700 key
->hw_key_idx
= key
->keyidx
;
3702 /* the peer should not disappear in mid-way (unless FW goes awry) since
3703 * we already hold conf_mutex. we just make sure its there now. */
3704 spin_lock_bh(&ar
->data_lock
);
3705 peer
= ath10k_peer_find(ar
, arvif
->vdev_id
, peer_addr
);
3706 spin_unlock_bh(&ar
->data_lock
);
3709 if (cmd
== SET_KEY
) {
3710 ath10k_warn(ar
, "failed to install key for non-existent peer %pM\n",
3715 /* if the peer doesn't exist there is no key to disable
3723 arvif
->wep_keys
[key
->keyidx
] = key
;
3725 arvif
->wep_keys
[key
->keyidx
] = NULL
;
3727 if (cmd
== DISABLE_KEY
)
3728 ath10k_clear_vdev_key(arvif
, key
);
3731 ret
= ath10k_install_key(arvif
, key
, cmd
, peer_addr
);
3733 ath10k_warn(ar
, "failed to install key for vdev %i peer %pM: %d\n",
3734 arvif
->vdev_id
, peer_addr
, ret
);
3738 ath10k_set_key_h_def_keyidx(ar
, arvif
, cmd
, key
);
3740 spin_lock_bh(&ar
->data_lock
);
3741 peer
= ath10k_peer_find(ar
, arvif
->vdev_id
, peer_addr
);
3742 if (peer
&& cmd
== SET_KEY
)
3743 peer
->keys
[key
->keyidx
] = key
;
3744 else if (peer
&& cmd
== DISABLE_KEY
)
3745 peer
->keys
[key
->keyidx
] = NULL
;
3746 else if (peer
== NULL
)
3747 /* impossible unless FW goes crazy */
3748 ath10k_warn(ar
, "Peer %pM disappeared!\n", peer_addr
);
3749 spin_unlock_bh(&ar
->data_lock
);
3752 mutex_unlock(&ar
->conf_mutex
);
3756 static void ath10k_sta_rc_update_wk(struct work_struct
*wk
)
3759 struct ath10k_vif
*arvif
;
3760 struct ath10k_sta
*arsta
;
3761 struct ieee80211_sta
*sta
;
3762 u32 changed
, bw
, nss
, smps
;
3765 arsta
= container_of(wk
, struct ath10k_sta
, update_wk
);
3766 sta
= container_of((void *)arsta
, struct ieee80211_sta
, drv_priv
);
3767 arvif
= arsta
->arvif
;
3770 spin_lock_bh(&ar
->data_lock
);
3772 changed
= arsta
->changed
;
3779 spin_unlock_bh(&ar
->data_lock
);
3781 mutex_lock(&ar
->conf_mutex
);
3783 if (changed
& IEEE80211_RC_BW_CHANGED
) {
3784 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac update sta %pM peer bw %d\n",
3787 err
= ath10k_wmi_peer_set_param(ar
, arvif
->vdev_id
, sta
->addr
,
3788 WMI_PEER_CHAN_WIDTH
, bw
);
3790 ath10k_warn(ar
, "failed to update STA %pM peer bw %d: %d\n",
3791 sta
->addr
, bw
, err
);
3794 if (changed
& IEEE80211_RC_NSS_CHANGED
) {
3795 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac update sta %pM nss %d\n",
3798 err
= ath10k_wmi_peer_set_param(ar
, arvif
->vdev_id
, sta
->addr
,
3801 ath10k_warn(ar
, "failed to update STA %pM nss %d: %d\n",
3802 sta
->addr
, nss
, err
);
3805 if (changed
& IEEE80211_RC_SMPS_CHANGED
) {
3806 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac update sta %pM smps %d\n",
3809 err
= ath10k_wmi_peer_set_param(ar
, arvif
->vdev_id
, sta
->addr
,
3810 WMI_PEER_SMPS_STATE
, smps
);
3812 ath10k_warn(ar
, "failed to update STA %pM smps %d: %d\n",
3813 sta
->addr
, smps
, err
);
3816 if (changed
& IEEE80211_RC_SUPP_RATES_CHANGED
||
3817 changed
& IEEE80211_RC_NSS_CHANGED
) {
3818 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac update sta %pM supp rates/nss\n",
3821 err
= ath10k_station_assoc(ar
, arvif
->vif
, sta
, true);
3823 ath10k_warn(ar
, "failed to reassociate station: %pM\n",
3827 mutex_unlock(&ar
->conf_mutex
);
3830 static int ath10k_mac_inc_num_stations(struct ath10k_vif
*arvif
)
3832 struct ath10k
*ar
= arvif
->ar
;
3834 lockdep_assert_held(&ar
->conf_mutex
);
3836 if (arvif
->vdev_type
!= WMI_VDEV_TYPE_AP
&&
3837 arvif
->vdev_type
!= WMI_VDEV_TYPE_IBSS
)
3840 if (ar
->num_stations
>= ar
->max_num_stations
)
3848 static void ath10k_mac_dec_num_stations(struct ath10k_vif
*arvif
)
3850 struct ath10k
*ar
= arvif
->ar
;
3852 lockdep_assert_held(&ar
->conf_mutex
);
3854 if (arvif
->vdev_type
!= WMI_VDEV_TYPE_AP
&&
3855 arvif
->vdev_type
!= WMI_VDEV_TYPE_IBSS
)
3861 static int ath10k_sta_state(struct ieee80211_hw
*hw
,
3862 struct ieee80211_vif
*vif
,
3863 struct ieee80211_sta
*sta
,
3864 enum ieee80211_sta_state old_state
,
3865 enum ieee80211_sta_state new_state
)
3867 struct ath10k
*ar
= hw
->priv
;
3868 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
3869 struct ath10k_sta
*arsta
= (struct ath10k_sta
*)sta
->drv_priv
;
3872 if (old_state
== IEEE80211_STA_NOTEXIST
&&
3873 new_state
== IEEE80211_STA_NONE
) {
3874 memset(arsta
, 0, sizeof(*arsta
));
3875 arsta
->arvif
= arvif
;
3876 INIT_WORK(&arsta
->update_wk
, ath10k_sta_rc_update_wk
);
3879 /* cancel must be done outside the mutex to avoid deadlock */
3880 if ((old_state
== IEEE80211_STA_NONE
&&
3881 new_state
== IEEE80211_STA_NOTEXIST
))
3882 cancel_work_sync(&arsta
->update_wk
);
3884 mutex_lock(&ar
->conf_mutex
);
3886 if (old_state
== IEEE80211_STA_NOTEXIST
&&
3887 new_state
== IEEE80211_STA_NONE
) {
3889 * New station addition.
3891 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
3892 "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n",
3893 arvif
->vdev_id
, sta
->addr
,
3894 ar
->num_stations
+ 1, ar
->max_num_stations
,
3895 ar
->num_peers
+ 1, ar
->max_num_peers
);
3897 ret
= ath10k_mac_inc_num_stations(arvif
);
3899 ath10k_warn(ar
, "refusing to associate station: too many connected already (%d)\n",
3900 ar
->max_num_stations
);
3904 ret
= ath10k_peer_create(ar
, arvif
->vdev_id
, sta
->addr
);
3906 ath10k_warn(ar
, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
3907 sta
->addr
, arvif
->vdev_id
, ret
);
3908 ath10k_mac_dec_num_stations(arvif
);
3912 if (vif
->type
== NL80211_IFTYPE_STATION
) {
3913 WARN_ON(arvif
->is_started
);
3915 ret
= ath10k_vdev_start(arvif
);
3917 ath10k_warn(ar
, "failed to start vdev %i: %d\n",
3918 arvif
->vdev_id
, ret
);
3919 WARN_ON(ath10k_peer_delete(ar
, arvif
->vdev_id
,
3921 ath10k_mac_dec_num_stations(arvif
);
3925 arvif
->is_started
= true;
3927 } else if ((old_state
== IEEE80211_STA_NONE
&&
3928 new_state
== IEEE80211_STA_NOTEXIST
)) {
3930 * Existing station deletion.
3932 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
3933 "mac vdev %d peer delete %pM (sta gone)\n",
3934 arvif
->vdev_id
, sta
->addr
);
3936 if (vif
->type
== NL80211_IFTYPE_STATION
) {
3937 WARN_ON(!arvif
->is_started
);
3939 ret
= ath10k_vdev_stop(arvif
);
3941 ath10k_warn(ar
, "failed to stop vdev %i: %d\n",
3942 arvif
->vdev_id
, ret
);
3944 arvif
->is_started
= false;
3947 ret
= ath10k_peer_delete(ar
, arvif
->vdev_id
, sta
->addr
);
3949 ath10k_warn(ar
, "failed to delete peer %pM for vdev %d: %i\n",
3950 sta
->addr
, arvif
->vdev_id
, ret
);
3952 ath10k_mac_dec_num_stations(arvif
);
3953 } else if (old_state
== IEEE80211_STA_AUTH
&&
3954 new_state
== IEEE80211_STA_ASSOC
&&
3955 (vif
->type
== NL80211_IFTYPE_AP
||
3956 vif
->type
== NL80211_IFTYPE_ADHOC
)) {
3960 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac sta %pM associated\n",
3963 ret
= ath10k_station_assoc(ar
, vif
, sta
, false);
3965 ath10k_warn(ar
, "failed to associate station %pM for vdev %i: %i\n",
3966 sta
->addr
, arvif
->vdev_id
, ret
);
3967 } else if (old_state
== IEEE80211_STA_ASSOC
&&
3968 new_state
== IEEE80211_STA_AUTH
&&
3969 (vif
->type
== NL80211_IFTYPE_AP
||
3970 vif
->type
== NL80211_IFTYPE_ADHOC
)) {
3974 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac sta %pM disassociated\n",
3977 ret
= ath10k_station_disassoc(ar
, vif
, sta
);
3979 ath10k_warn(ar
, "failed to disassociate station: %pM vdev %i: %i\n",
3980 sta
->addr
, arvif
->vdev_id
, ret
);
3983 mutex_unlock(&ar
->conf_mutex
);
3987 static int ath10k_conf_tx_uapsd(struct ath10k
*ar
, struct ieee80211_vif
*vif
,
3988 u16 ac
, bool enable
)
3990 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
3991 struct wmi_sta_uapsd_auto_trig_arg arg
= {};
3992 u32 prio
= 0, acc
= 0;
3996 lockdep_assert_held(&ar
->conf_mutex
);
3998 if (arvif
->vdev_type
!= WMI_VDEV_TYPE_STA
)
4002 case IEEE80211_AC_VO
:
4003 value
= WMI_STA_PS_UAPSD_AC3_DELIVERY_EN
|
4004 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN
;
4008 case IEEE80211_AC_VI
:
4009 value
= WMI_STA_PS_UAPSD_AC2_DELIVERY_EN
|
4010 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN
;
4014 case IEEE80211_AC_BE
:
4015 value
= WMI_STA_PS_UAPSD_AC1_DELIVERY_EN
|
4016 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN
;
4020 case IEEE80211_AC_BK
:
4021 value
= WMI_STA_PS_UAPSD_AC0_DELIVERY_EN
|
4022 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN
;
4029 arvif
->u
.sta
.uapsd
|= value
;
4031 arvif
->u
.sta
.uapsd
&= ~value
;
4033 ret
= ath10k_wmi_set_sta_ps_param(ar
, arvif
->vdev_id
,
4034 WMI_STA_PS_PARAM_UAPSD
,
4035 arvif
->u
.sta
.uapsd
);
4037 ath10k_warn(ar
, "failed to set uapsd params: %d\n", ret
);
4041 if (arvif
->u
.sta
.uapsd
)
4042 value
= WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD
;
4044 value
= WMI_STA_PS_RX_WAKE_POLICY_WAKE
;
4046 ret
= ath10k_wmi_set_sta_ps_param(ar
, arvif
->vdev_id
,
4047 WMI_STA_PS_PARAM_RX_WAKE_POLICY
,
4050 ath10k_warn(ar
, "failed to set rx wake param: %d\n", ret
);
4052 ret
= ath10k_mac_vif_recalc_ps_wake_threshold(arvif
);
4054 ath10k_warn(ar
, "failed to recalc ps wake threshold on vdev %i: %d\n",
4055 arvif
->vdev_id
, ret
);
4059 ret
= ath10k_mac_vif_recalc_ps_poll_count(arvif
);
4061 ath10k_warn(ar
, "failed to recalc ps poll count on vdev %i: %d\n",
4062 arvif
->vdev_id
, ret
);
4066 if (test_bit(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG
, ar
->wmi
.svc_map
) ||
4067 test_bit(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG
, ar
->wmi
.svc_map
)) {
4068 /* Only userspace can make an educated decision when to send
4069 * trigger frame. The following effectively disables u-UAPSD
4070 * autotrigger in firmware (which is enabled by default
4071 * provided the autotrigger service is available).
4075 arg
.user_priority
= prio
;
4076 arg
.service_interval
= 0;
4077 arg
.suspend_interval
= WMI_STA_UAPSD_MAX_INTERVAL_MSEC
;
4078 arg
.delay_interval
= WMI_STA_UAPSD_MAX_INTERVAL_MSEC
;
4080 ret
= ath10k_wmi_vdev_sta_uapsd(ar
, arvif
->vdev_id
,
4081 arvif
->bssid
, &arg
, 1);
4083 ath10k_warn(ar
, "failed to set uapsd auto trigger %d\n",
4093 static int ath10k_conf_tx(struct ieee80211_hw
*hw
,
4094 struct ieee80211_vif
*vif
, u16 ac
,
4095 const struct ieee80211_tx_queue_params
*params
)
4097 struct ath10k
*ar
= hw
->priv
;
4098 struct wmi_wmm_params_arg
*p
= NULL
;
4101 mutex_lock(&ar
->conf_mutex
);
4104 case IEEE80211_AC_VO
:
4105 p
= &ar
->wmm_params
.ac_vo
;
4107 case IEEE80211_AC_VI
:
4108 p
= &ar
->wmm_params
.ac_vi
;
4110 case IEEE80211_AC_BE
:
4111 p
= &ar
->wmm_params
.ac_be
;
4113 case IEEE80211_AC_BK
:
4114 p
= &ar
->wmm_params
.ac_bk
;
4123 p
->cwmin
= params
->cw_min
;
4124 p
->cwmax
= params
->cw_max
;
4125 p
->aifs
= params
->aifs
;
4128 * The channel time duration programmed in the HW is in absolute
4129 * microseconds, while mac80211 gives the txop in units of
4132 p
->txop
= params
->txop
* 32;
4134 /* FIXME: FW accepts wmm params per hw, not per vif */
4135 ret
= ath10k_wmi_pdev_set_wmm_params(ar
, &ar
->wmm_params
);
4137 ath10k_warn(ar
, "failed to set wmm params: %d\n", ret
);
4141 ret
= ath10k_conf_tx_uapsd(ar
, vif
, ac
, params
->uapsd
);
4143 ath10k_warn(ar
, "failed to set sta uapsd: %d\n", ret
);
4146 mutex_unlock(&ar
->conf_mutex
);
4150 #define ATH10K_ROC_TIMEOUT_HZ (2*HZ)
4152 static int ath10k_remain_on_channel(struct ieee80211_hw
*hw
,
4153 struct ieee80211_vif
*vif
,
4154 struct ieee80211_channel
*chan
,
4156 enum ieee80211_roc_type type
)
4158 struct ath10k
*ar
= hw
->priv
;
4159 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
4160 struct wmi_start_scan_arg arg
;
4163 mutex_lock(&ar
->conf_mutex
);
4165 spin_lock_bh(&ar
->data_lock
);
4166 switch (ar
->scan
.state
) {
4167 case ATH10K_SCAN_IDLE
:
4168 reinit_completion(&ar
->scan
.started
);
4169 reinit_completion(&ar
->scan
.completed
);
4170 reinit_completion(&ar
->scan
.on_channel
);
4171 ar
->scan
.state
= ATH10K_SCAN_STARTING
;
4172 ar
->scan
.is_roc
= true;
4173 ar
->scan
.vdev_id
= arvif
->vdev_id
;
4174 ar
->scan
.roc_freq
= chan
->center_freq
;
4177 case ATH10K_SCAN_STARTING
:
4178 case ATH10K_SCAN_RUNNING
:
4179 case ATH10K_SCAN_ABORTING
:
4183 spin_unlock_bh(&ar
->data_lock
);
4188 duration
= max(duration
, WMI_SCAN_CHAN_MIN_TIME_MSEC
);
4190 memset(&arg
, 0, sizeof(arg
));
4191 ath10k_wmi_start_scan_init(ar
, &arg
);
4192 arg
.vdev_id
= arvif
->vdev_id
;
4193 arg
.scan_id
= ATH10K_SCAN_ID
;
4195 arg
.channels
[0] = chan
->center_freq
;
4196 arg
.dwell_time_active
= duration
;
4197 arg
.dwell_time_passive
= duration
;
4198 arg
.max_scan_time
= 2 * duration
;
4199 arg
.scan_ctrl_flags
|= WMI_SCAN_FLAG_PASSIVE
;
4200 arg
.scan_ctrl_flags
|= WMI_SCAN_FILTER_PROBE_REQ
;
4202 ret
= ath10k_start_scan(ar
, &arg
);
4204 ath10k_warn(ar
, "failed to start roc scan: %d\n", ret
);
4205 spin_lock_bh(&ar
->data_lock
);
4206 ar
->scan
.state
= ATH10K_SCAN_IDLE
;
4207 spin_unlock_bh(&ar
->data_lock
);
4211 ret
= wait_for_completion_timeout(&ar
->scan
.on_channel
, 3*HZ
);
4213 ath10k_warn(ar
, "failed to switch to channel for roc scan\n");
4215 ret
= ath10k_scan_stop(ar
);
4217 ath10k_warn(ar
, "failed to stop scan: %d\n", ret
);
4225 mutex_unlock(&ar
->conf_mutex
);
4229 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw
*hw
)
4231 struct ath10k
*ar
= hw
->priv
;
4233 mutex_lock(&ar
->conf_mutex
);
4234 ath10k_scan_abort(ar
);
4235 mutex_unlock(&ar
->conf_mutex
);
4237 cancel_delayed_work_sync(&ar
->scan
.timeout
);
4243 * Both RTS and Fragmentation threshold are interface-specific
4244 * in ath10k, but device-specific in mac80211.
4247 static int ath10k_set_rts_threshold(struct ieee80211_hw
*hw
, u32 value
)
4249 struct ath10k
*ar
= hw
->priv
;
4250 struct ath10k_vif
*arvif
;
4253 mutex_lock(&ar
->conf_mutex
);
4254 list_for_each_entry(arvif
, &ar
->arvifs
, list
) {
4255 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac vdev %d rts threshold %d\n",
4256 arvif
->vdev_id
, value
);
4258 ret
= ath10k_mac_set_rts(arvif
, value
);
4260 ath10k_warn(ar
, "failed to set rts threshold for vdev %d: %d\n",
4261 arvif
->vdev_id
, ret
);
4265 mutex_unlock(&ar
->conf_mutex
);
4270 static void ath10k_flush(struct ieee80211_hw
*hw
, struct ieee80211_vif
*vif
,
4271 u32 queues
, bool drop
)
4273 struct ath10k
*ar
= hw
->priv
;
4277 /* mac80211 doesn't care if we really xmit queued frames or not
4278 * we'll collect those frames either way if we stop/delete vdevs */
4282 mutex_lock(&ar
->conf_mutex
);
4284 if (ar
->state
== ATH10K_STATE_WEDGED
)
4287 ret
= wait_event_timeout(ar
->htt
.empty_tx_wq
, ({
4290 spin_lock_bh(&ar
->htt
.tx_lock
);
4291 empty
= (ar
->htt
.num_pending_tx
== 0);
4292 spin_unlock_bh(&ar
->htt
.tx_lock
);
4294 skip
= (ar
->state
== ATH10K_STATE_WEDGED
) ||
4295 test_bit(ATH10K_FLAG_CRASH_FLUSH
,
4299 }), ATH10K_FLUSH_TIMEOUT_HZ
);
4301 if (ret
<= 0 || skip
)
4302 ath10k_warn(ar
, "failed to flush transmit queue (skip %i ar-state %i): %i\n",
4303 skip
, ar
->state
, ret
);
4306 mutex_unlock(&ar
->conf_mutex
);
4309 /* TODO: Implement this function properly
4310 * For now it is needed to reply to Probe Requests in IBSS mode.
4311 * Propably we need this information from FW.
4313 static int ath10k_tx_last_beacon(struct ieee80211_hw
*hw
)
4319 static int ath10k_suspend(struct ieee80211_hw
*hw
,
4320 struct cfg80211_wowlan
*wowlan
)
4322 struct ath10k
*ar
= hw
->priv
;
4325 mutex_lock(&ar
->conf_mutex
);
4327 ret
= ath10k_wait_for_suspend(ar
, WMI_PDEV_SUSPEND
);
4329 if (ret
== -ETIMEDOUT
)
4335 ret
= ath10k_hif_suspend(ar
);
4337 ath10k_warn(ar
, "failed to suspend hif: %d\n", ret
);
4344 ret
= ath10k_wmi_pdev_resume_target(ar
);
4346 ath10k_warn(ar
, "failed to resume target: %d\n", ret
);
4350 mutex_unlock(&ar
->conf_mutex
);
4354 static int ath10k_resume(struct ieee80211_hw
*hw
)
4356 struct ath10k
*ar
= hw
->priv
;
4359 mutex_lock(&ar
->conf_mutex
);
4361 ret
= ath10k_hif_resume(ar
);
4363 ath10k_warn(ar
, "failed to resume hif: %d\n", ret
);
4368 ret
= ath10k_wmi_pdev_resume_target(ar
);
4370 ath10k_warn(ar
, "failed to resume target: %d\n", ret
);
4377 mutex_unlock(&ar
->conf_mutex
);
4382 static void ath10k_reconfig_complete(struct ieee80211_hw
*hw
,
4383 enum ieee80211_reconfig_type reconfig_type
)
4385 struct ath10k
*ar
= hw
->priv
;
4387 if (reconfig_type
!= IEEE80211_RECONFIG_TYPE_RESTART
)
4390 mutex_lock(&ar
->conf_mutex
);
4392 /* If device failed to restart it will be in a different state, e.g.
4393 * ATH10K_STATE_WEDGED */
4394 if (ar
->state
== ATH10K_STATE_RESTARTED
) {
4395 ath10k_info(ar
, "device successfully recovered\n");
4396 ar
->state
= ATH10K_STATE_ON
;
4397 ieee80211_wake_queues(ar
->hw
);
4400 mutex_unlock(&ar
->conf_mutex
);
4403 static int ath10k_get_survey(struct ieee80211_hw
*hw
, int idx
,
4404 struct survey_info
*survey
)
4406 struct ath10k
*ar
= hw
->priv
;
4407 struct ieee80211_supported_band
*sband
;
4408 struct survey_info
*ar_survey
= &ar
->survey
[idx
];
4411 mutex_lock(&ar
->conf_mutex
);
4413 sband
= hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
];
4414 if (sband
&& idx
>= sband
->n_channels
) {
4415 idx
-= sband
->n_channels
;
4420 sband
= hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
];
4422 if (!sband
|| idx
>= sband
->n_channels
) {
4427 spin_lock_bh(&ar
->data_lock
);
4428 memcpy(survey
, ar_survey
, sizeof(*survey
));
4429 spin_unlock_bh(&ar
->data_lock
);
4431 survey
->channel
= &sband
->channels
[idx
];
4433 if (ar
->rx_channel
== survey
->channel
)
4434 survey
->filled
|= SURVEY_INFO_IN_USE
;
4437 mutex_unlock(&ar
->conf_mutex
);
4441 /* Helper table for legacy fixed_rate/bitrate_mask */
4442 static const u8 cck_ofdm_rate
[] = {
4459 /* Check if only one bit set */
4460 static int ath10k_check_single_mask(u32 mask
)
4468 mask
&= ~BIT(bit
- 1);
4476 ath10k_default_bitrate_mask(struct ath10k
*ar
,
4477 enum ieee80211_band band
,
4478 const struct cfg80211_bitrate_mask
*mask
)
4480 u32 legacy
= 0x00ff;
4483 u16 nrf
= ar
->num_rf_chains
;
4485 if (ar
->cfg_tx_chainmask
)
4486 nrf
= get_nss_from_chainmask(ar
->cfg_tx_chainmask
);
4489 case IEEE80211_BAND_2GHZ
:
4493 case IEEE80211_BAND_5GHZ
:
4499 if (mask
->control
[band
].legacy
!= legacy
)
4502 for (i
= 0; i
< nrf
; i
++)
4503 if (mask
->control
[band
].ht_mcs
[i
] != ht
)
4506 for (i
= 0; i
< nrf
; i
++)
4507 if (mask
->control
[band
].vht_mcs
[i
] != vht
)
4514 ath10k_bitrate_mask_nss(const struct cfg80211_bitrate_mask
*mask
,
4515 enum ieee80211_band band
,
4518 int ht_nss
= 0, vht_nss
= 0, i
;
4521 if (ath10k_check_single_mask(mask
->control
[band
].legacy
))
4525 for (i
= 0; i
< IEEE80211_HT_MCS_MASK_LEN
; i
++) {
4526 if (mask
->control
[band
].ht_mcs
[i
] == 0xff)
4528 else if (mask
->control
[band
].ht_mcs
[i
] == 0x00)
4537 for (i
= 0; i
< NL80211_VHT_NSS_MAX
; i
++) {
4538 if (mask
->control
[band
].vht_mcs
[i
] == 0x03ff)
4540 else if (mask
->control
[band
].vht_mcs
[i
] == 0x0000)
4548 if (ht_nss
> 0 && vht_nss
> 0)
4552 *fixed_nss
= ht_nss
;
4554 *fixed_nss
= vht_nss
;
4562 ath10k_bitrate_mask_correct(const struct cfg80211_bitrate_mask
*mask
,
4563 enum ieee80211_band band
,
4564 enum wmi_rate_preamble
*preamble
)
4566 int legacy
= 0, ht
= 0, vht
= 0, i
;
4568 *preamble
= WMI_RATE_PREAMBLE_OFDM
;
4571 legacy
= ath10k_check_single_mask(mask
->control
[band
].legacy
);
4576 for (i
= 0; i
< IEEE80211_HT_MCS_MASK_LEN
; i
++)
4577 ht
+= ath10k_check_single_mask(mask
->control
[band
].ht_mcs
[i
]);
4582 for (i
= 0; i
< NL80211_VHT_NSS_MAX
; i
++)
4583 vht
+= ath10k_check_single_mask(mask
->control
[band
].vht_mcs
[i
]);
4587 /* Currently we support only one fixed_rate */
4588 if ((legacy
+ ht
+ vht
) != 1)
4592 *preamble
= WMI_RATE_PREAMBLE_HT
;
4594 *preamble
= WMI_RATE_PREAMBLE_VHT
;
4600 ath10k_bitrate_mask_rate(struct ath10k
*ar
,
4601 const struct cfg80211_bitrate_mask
*mask
,
4602 enum ieee80211_band band
,
4606 u8 rate
= 0, pream
= 0, nss
= 0, i
;
4607 enum wmi_rate_preamble preamble
;
4609 /* Check if single rate correct */
4610 if (!ath10k_bitrate_mask_correct(mask
, band
, &preamble
))
4616 case WMI_RATE_PREAMBLE_CCK
:
4617 case WMI_RATE_PREAMBLE_OFDM
:
4618 i
= ffs(mask
->control
[band
].legacy
) - 1;
4620 if (band
== IEEE80211_BAND_2GHZ
&& i
< 4)
4621 pream
= WMI_RATE_PREAMBLE_CCK
;
4623 if (band
== IEEE80211_BAND_5GHZ
)
4626 if (i
>= ARRAY_SIZE(cck_ofdm_rate
))
4629 rate
= cck_ofdm_rate
[i
];
4631 case WMI_RATE_PREAMBLE_HT
:
4632 for (i
= 0; i
< IEEE80211_HT_MCS_MASK_LEN
; i
++)
4633 if (mask
->control
[band
].ht_mcs
[i
])
4636 if (i
== IEEE80211_HT_MCS_MASK_LEN
)
4639 rate
= ffs(mask
->control
[band
].ht_mcs
[i
]) - 1;
4642 case WMI_RATE_PREAMBLE_VHT
:
4643 for (i
= 0; i
< NL80211_VHT_NSS_MAX
; i
++)
4644 if (mask
->control
[band
].vht_mcs
[i
])
4647 if (i
== NL80211_VHT_NSS_MAX
)
4650 rate
= ffs(mask
->control
[band
].vht_mcs
[i
]) - 1;
4655 *fixed_nss
= nss
+ 1;
4659 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac fixed rate pream 0x%02x nss 0x%02x rate 0x%02x\n",
4662 *fixed_rate
= pream
| nss
| rate
;
4667 static bool ath10k_get_fixed_rate_nss(struct ath10k
*ar
,
4668 const struct cfg80211_bitrate_mask
*mask
,
4669 enum ieee80211_band band
,
4673 /* First check full NSS mask, if we can simply limit NSS */
4674 if (ath10k_bitrate_mask_nss(mask
, band
, fixed_nss
))
4677 /* Next Check single rate is set */
4678 return ath10k_bitrate_mask_rate(ar
, mask
, band
, fixed_rate
, fixed_nss
);
4681 static int ath10k_set_fixed_rate_param(struct ath10k_vif
*arvif
,
4686 struct ath10k
*ar
= arvif
->ar
;
4690 mutex_lock(&ar
->conf_mutex
);
4692 if (arvif
->fixed_rate
== fixed_rate
&&
4693 arvif
->fixed_nss
== fixed_nss
&&
4694 arvif
->force_sgi
== force_sgi
)
4697 if (fixed_rate
== WMI_FIXED_RATE_NONE
)
4698 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac disable fixed bitrate mask\n");
4701 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac force sgi\n");
4703 vdev_param
= ar
->wmi
.vdev_param
->fixed_rate
;
4704 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
,
4705 vdev_param
, fixed_rate
);
4707 ath10k_warn(ar
, "failed to set fixed rate param 0x%02x: %d\n",
4713 arvif
->fixed_rate
= fixed_rate
;
4715 vdev_param
= ar
->wmi
.vdev_param
->nss
;
4716 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
,
4717 vdev_param
, fixed_nss
);
4720 ath10k_warn(ar
, "failed to set fixed nss param %d: %d\n",
4726 arvif
->fixed_nss
= fixed_nss
;
4728 vdev_param
= ar
->wmi
.vdev_param
->sgi
;
4729 ret
= ath10k_wmi_vdev_set_param(ar
, arvif
->vdev_id
, vdev_param
,
4733 ath10k_warn(ar
, "failed to set sgi param %d: %d\n",
4739 arvif
->force_sgi
= force_sgi
;
4742 mutex_unlock(&ar
->conf_mutex
);
4746 static int ath10k_set_bitrate_mask(struct ieee80211_hw
*hw
,
4747 struct ieee80211_vif
*vif
,
4748 const struct cfg80211_bitrate_mask
*mask
)
4750 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
4751 struct ath10k
*ar
= arvif
->ar
;
4752 enum ieee80211_band band
= ar
->hw
->conf
.chandef
.chan
->band
;
4753 u8 fixed_rate
= WMI_FIXED_RATE_NONE
;
4754 u8 fixed_nss
= ar
->num_rf_chains
;
4757 if (ar
->cfg_tx_chainmask
)
4758 fixed_nss
= get_nss_from_chainmask(ar
->cfg_tx_chainmask
);
4760 force_sgi
= mask
->control
[band
].gi
;
4761 if (force_sgi
== NL80211_TXRATE_FORCE_LGI
)
4764 if (!ath10k_default_bitrate_mask(ar
, band
, mask
)) {
4765 if (!ath10k_get_fixed_rate_nss(ar
, mask
, band
,
4771 if (fixed_rate
== WMI_FIXED_RATE_NONE
&& force_sgi
) {
4772 ath10k_warn(ar
, "failed to force SGI usage for default rate settings\n");
4776 return ath10k_set_fixed_rate_param(arvif
, fixed_rate
,
4777 fixed_nss
, force_sgi
);
4780 static void ath10k_sta_rc_update(struct ieee80211_hw
*hw
,
4781 struct ieee80211_vif
*vif
,
4782 struct ieee80211_sta
*sta
,
4785 struct ath10k
*ar
= hw
->priv
;
4786 struct ath10k_sta
*arsta
= (struct ath10k_sta
*)sta
->drv_priv
;
4789 spin_lock_bh(&ar
->data_lock
);
4791 ath10k_dbg(ar
, ATH10K_DBG_MAC
,
4792 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
4793 sta
->addr
, changed
, sta
->bandwidth
, sta
->rx_nss
,
4796 if (changed
& IEEE80211_RC_BW_CHANGED
) {
4797 bw
= WMI_PEER_CHWIDTH_20MHZ
;
4799 switch (sta
->bandwidth
) {
4800 case IEEE80211_STA_RX_BW_20
:
4801 bw
= WMI_PEER_CHWIDTH_20MHZ
;
4803 case IEEE80211_STA_RX_BW_40
:
4804 bw
= WMI_PEER_CHWIDTH_40MHZ
;
4806 case IEEE80211_STA_RX_BW_80
:
4807 bw
= WMI_PEER_CHWIDTH_80MHZ
;
4809 case IEEE80211_STA_RX_BW_160
:
4810 ath10k_warn(ar
, "Invalid bandwith %d in rc update for %pM\n",
4811 sta
->bandwidth
, sta
->addr
);
4812 bw
= WMI_PEER_CHWIDTH_20MHZ
;
4819 if (changed
& IEEE80211_RC_NSS_CHANGED
)
4820 arsta
->nss
= sta
->rx_nss
;
4822 if (changed
& IEEE80211_RC_SMPS_CHANGED
) {
4823 smps
= WMI_PEER_SMPS_PS_NONE
;
4825 switch (sta
->smps_mode
) {
4826 case IEEE80211_SMPS_AUTOMATIC
:
4827 case IEEE80211_SMPS_OFF
:
4828 smps
= WMI_PEER_SMPS_PS_NONE
;
4830 case IEEE80211_SMPS_STATIC
:
4831 smps
= WMI_PEER_SMPS_STATIC
;
4833 case IEEE80211_SMPS_DYNAMIC
:
4834 smps
= WMI_PEER_SMPS_DYNAMIC
;
4836 case IEEE80211_SMPS_NUM_MODES
:
4837 ath10k_warn(ar
, "Invalid smps %d in sta rc update for %pM\n",
4838 sta
->smps_mode
, sta
->addr
);
4839 smps
= WMI_PEER_SMPS_PS_NONE
;
4846 arsta
->changed
|= changed
;
4848 spin_unlock_bh(&ar
->data_lock
);
4850 ieee80211_queue_work(hw
, &arsta
->update_wk
);
4853 static u64
ath10k_get_tsf(struct ieee80211_hw
*hw
, struct ieee80211_vif
*vif
)
4856 * FIXME: Return 0 for time being. Need to figure out whether FW
4857 * has the API to fetch 64-bit local TSF
4863 static int ath10k_ampdu_action(struct ieee80211_hw
*hw
,
4864 struct ieee80211_vif
*vif
,
4865 enum ieee80211_ampdu_mlme_action action
,
4866 struct ieee80211_sta
*sta
, u16 tid
, u16
*ssn
,
4869 struct ath10k
*ar
= hw
->priv
;
4870 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
4872 ath10k_dbg(ar
, ATH10K_DBG_MAC
, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
4873 arvif
->vdev_id
, sta
->addr
, tid
, action
);
4876 case IEEE80211_AMPDU_RX_START
:
4877 case IEEE80211_AMPDU_RX_STOP
:
4878 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
4879 * creation/removal. Do we need to verify this?
4882 case IEEE80211_AMPDU_TX_START
:
4883 case IEEE80211_AMPDU_TX_STOP_CONT
:
4884 case IEEE80211_AMPDU_TX_STOP_FLUSH
:
4885 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT
:
4886 case IEEE80211_AMPDU_TX_OPERATIONAL
:
4887 /* Firmware offloads Tx aggregation entirely so deny mac80211
4888 * Tx aggregation requests.
4896 static const struct ieee80211_ops ath10k_ops
= {
4898 .start
= ath10k_start
,
4899 .stop
= ath10k_stop
,
4900 .config
= ath10k_config
,
4901 .add_interface
= ath10k_add_interface
,
4902 .remove_interface
= ath10k_remove_interface
,
4903 .configure_filter
= ath10k_configure_filter
,
4904 .bss_info_changed
= ath10k_bss_info_changed
,
4905 .hw_scan
= ath10k_hw_scan
,
4906 .cancel_hw_scan
= ath10k_cancel_hw_scan
,
4907 .set_key
= ath10k_set_key
,
4908 .sta_state
= ath10k_sta_state
,
4909 .conf_tx
= ath10k_conf_tx
,
4910 .remain_on_channel
= ath10k_remain_on_channel
,
4911 .cancel_remain_on_channel
= ath10k_cancel_remain_on_channel
,
4912 .set_rts_threshold
= ath10k_set_rts_threshold
,
4913 .flush
= ath10k_flush
,
4914 .tx_last_beacon
= ath10k_tx_last_beacon
,
4915 .set_antenna
= ath10k_set_antenna
,
4916 .get_antenna
= ath10k_get_antenna
,
4917 .reconfig_complete
= ath10k_reconfig_complete
,
4918 .get_survey
= ath10k_get_survey
,
4919 .set_bitrate_mask
= ath10k_set_bitrate_mask
,
4920 .sta_rc_update
= ath10k_sta_rc_update
,
4921 .get_tsf
= ath10k_get_tsf
,
4922 .ampdu_action
= ath10k_ampdu_action
,
4923 .get_et_sset_count
= ath10k_debug_get_et_sset_count
,
4924 .get_et_stats
= ath10k_debug_get_et_stats
,
4925 .get_et_strings
= ath10k_debug_get_et_strings
,
4927 CFG80211_TESTMODE_CMD(ath10k_tm_cmd
)
4930 .suspend
= ath10k_suspend
,
4931 .resume
= ath10k_resume
,
4933 #ifdef CONFIG_MAC80211_DEBUGFS
4934 .sta_add_debugfs
= ath10k_sta_add_debugfs
,
4938 #define RATETAB_ENT(_rate, _rateid, _flags) { \
4939 .bitrate = (_rate), \
4940 .flags = (_flags), \
4941 .hw_value = (_rateid), \
4944 #define CHAN2G(_channel, _freq, _flags) { \
4945 .band = IEEE80211_BAND_2GHZ, \
4946 .hw_value = (_channel), \
4947 .center_freq = (_freq), \
4948 .flags = (_flags), \
4949 .max_antenna_gain = 0, \
4953 #define CHAN5G(_channel, _freq, _flags) { \
4954 .band = IEEE80211_BAND_5GHZ, \
4955 .hw_value = (_channel), \
4956 .center_freq = (_freq), \
4957 .flags = (_flags), \
4958 .max_antenna_gain = 0, \
4962 static const struct ieee80211_channel ath10k_2ghz_channels
[] = {
4972 CHAN2G(10, 2457, 0),
4973 CHAN2G(11, 2462, 0),
4974 CHAN2G(12, 2467, 0),
4975 CHAN2G(13, 2472, 0),
4976 CHAN2G(14, 2484, 0),
4979 static const struct ieee80211_channel ath10k_5ghz_channels
[] = {
4980 CHAN5G(36, 5180, 0),
4981 CHAN5G(40, 5200, 0),
4982 CHAN5G(44, 5220, 0),
4983 CHAN5G(48, 5240, 0),
4984 CHAN5G(52, 5260, 0),
4985 CHAN5G(56, 5280, 0),
4986 CHAN5G(60, 5300, 0),
4987 CHAN5G(64, 5320, 0),
4988 CHAN5G(100, 5500, 0),
4989 CHAN5G(104, 5520, 0),
4990 CHAN5G(108, 5540, 0),
4991 CHAN5G(112, 5560, 0),
4992 CHAN5G(116, 5580, 0),
4993 CHAN5G(120, 5600, 0),
4994 CHAN5G(124, 5620, 0),
4995 CHAN5G(128, 5640, 0),
4996 CHAN5G(132, 5660, 0),
4997 CHAN5G(136, 5680, 0),
4998 CHAN5G(140, 5700, 0),
4999 CHAN5G(149, 5745, 0),
5000 CHAN5G(153, 5765, 0),
5001 CHAN5G(157, 5785, 0),
5002 CHAN5G(161, 5805, 0),
5003 CHAN5G(165, 5825, 0),
5006 /* Note: Be careful if you re-order these. There is code which depends on this
5009 static struct ieee80211_rate ath10k_rates
[] = {
5011 RATETAB_ENT(10, 0x82, 0),
5012 RATETAB_ENT(20, 0x84, 0),
5013 RATETAB_ENT(55, 0x8b, 0),
5014 RATETAB_ENT(110, 0x96, 0),
5016 RATETAB_ENT(60, 0x0c, 0),
5017 RATETAB_ENT(90, 0x12, 0),
5018 RATETAB_ENT(120, 0x18, 0),
5019 RATETAB_ENT(180, 0x24, 0),
5020 RATETAB_ENT(240, 0x30, 0),
5021 RATETAB_ENT(360, 0x48, 0),
5022 RATETAB_ENT(480, 0x60, 0),
5023 RATETAB_ENT(540, 0x6c, 0),
5026 #define ath10k_a_rates (ath10k_rates + 4)
5027 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - 4)
5028 #define ath10k_g_rates (ath10k_rates + 0)
5029 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates))
5031 struct ath10k
*ath10k_mac_create(size_t priv_size
)
5033 struct ieee80211_hw
*hw
;
5036 hw
= ieee80211_alloc_hw(sizeof(struct ath10k
) + priv_size
, &ath10k_ops
);
5046 void ath10k_mac_destroy(struct ath10k
*ar
)
5048 ieee80211_free_hw(ar
->hw
);
5051 static const struct ieee80211_iface_limit ath10k_if_limits
[] = {
5054 .types
= BIT(NL80211_IFTYPE_STATION
)
5055 | BIT(NL80211_IFTYPE_P2P_CLIENT
)
5059 .types
= BIT(NL80211_IFTYPE_P2P_GO
)
5063 .types
= BIT(NL80211_IFTYPE_P2P_DEVICE
)
5067 .types
= BIT(NL80211_IFTYPE_AP
)
5071 static const struct ieee80211_iface_limit ath10k_10x_if_limits
[] = {
5074 .types
= BIT(NL80211_IFTYPE_AP
)
5078 static const struct ieee80211_iface_combination ath10k_if_comb
[] = {
5080 .limits
= ath10k_if_limits
,
5081 .n_limits
= ARRAY_SIZE(ath10k_if_limits
),
5082 .max_interfaces
= 8,
5083 .num_different_channels
= 1,
5084 .beacon_int_infra_match
= true,
5088 static const struct ieee80211_iface_combination ath10k_10x_if_comb
[] = {
5090 .limits
= ath10k_10x_if_limits
,
5091 .n_limits
= ARRAY_SIZE(ath10k_10x_if_limits
),
5092 .max_interfaces
= 8,
5093 .num_different_channels
= 1,
5094 .beacon_int_infra_match
= true,
5095 #ifdef CONFIG_ATH10K_DFS_CERTIFIED
5096 .radar_detect_widths
= BIT(NL80211_CHAN_WIDTH_20_NOHT
) |
5097 BIT(NL80211_CHAN_WIDTH_20
) |
5098 BIT(NL80211_CHAN_WIDTH_40
) |
5099 BIT(NL80211_CHAN_WIDTH_80
),
5104 static struct ieee80211_sta_vht_cap
ath10k_create_vht_cap(struct ath10k
*ar
)
5106 struct ieee80211_sta_vht_cap vht_cap
= {0};
5110 vht_cap
.vht_supported
= 1;
5111 vht_cap
.cap
= ar
->vht_cap_info
;
5114 for (i
= 0; i
< 8; i
++) {
5115 if (i
< ar
->num_rf_chains
)
5116 mcs_map
|= IEEE80211_VHT_MCS_SUPPORT_0_9
<< (i
*2);
5118 mcs_map
|= IEEE80211_VHT_MCS_NOT_SUPPORTED
<< (i
*2);
5121 vht_cap
.vht_mcs
.rx_mcs_map
= cpu_to_le16(mcs_map
);
5122 vht_cap
.vht_mcs
.tx_mcs_map
= cpu_to_le16(mcs_map
);
5127 static struct ieee80211_sta_ht_cap
ath10k_get_ht_cap(struct ath10k
*ar
)
5130 struct ieee80211_sta_ht_cap ht_cap
= {0};
5132 if (!(ar
->ht_cap_info
& WMI_HT_CAP_ENABLED
))
5135 ht_cap
.ht_supported
= 1;
5136 ht_cap
.ampdu_factor
= IEEE80211_HT_MAX_AMPDU_64K
;
5137 ht_cap
.ampdu_density
= IEEE80211_HT_MPDU_DENSITY_8
;
5138 ht_cap
.cap
|= IEEE80211_HT_CAP_SUP_WIDTH_20_40
;
5139 ht_cap
.cap
|= IEEE80211_HT_CAP_DSSSCCK40
;
5140 ht_cap
.cap
|= WLAN_HT_CAP_SM_PS_STATIC
<< IEEE80211_HT_CAP_SM_PS_SHIFT
;
5142 if (ar
->ht_cap_info
& WMI_HT_CAP_HT20_SGI
)
5143 ht_cap
.cap
|= IEEE80211_HT_CAP_SGI_20
;
5145 if (ar
->ht_cap_info
& WMI_HT_CAP_HT40_SGI
)
5146 ht_cap
.cap
|= IEEE80211_HT_CAP_SGI_40
;
5148 if (ar
->ht_cap_info
& WMI_HT_CAP_DYNAMIC_SMPS
) {
5151 smps
= WLAN_HT_CAP_SM_PS_DYNAMIC
;
5152 smps
<<= IEEE80211_HT_CAP_SM_PS_SHIFT
;
5157 if (ar
->ht_cap_info
& WMI_HT_CAP_TX_STBC
)
5158 ht_cap
.cap
|= IEEE80211_HT_CAP_TX_STBC
;
5160 if (ar
->ht_cap_info
& WMI_HT_CAP_RX_STBC
) {
5163 stbc
= ar
->ht_cap_info
;
5164 stbc
&= WMI_HT_CAP_RX_STBC
;
5165 stbc
>>= WMI_HT_CAP_RX_STBC_MASK_SHIFT
;
5166 stbc
<<= IEEE80211_HT_CAP_RX_STBC_SHIFT
;
5167 stbc
&= IEEE80211_HT_CAP_RX_STBC
;
5172 if (ar
->ht_cap_info
& WMI_HT_CAP_LDPC
)
5173 ht_cap
.cap
|= IEEE80211_HT_CAP_LDPC_CODING
;
5175 if (ar
->ht_cap_info
& WMI_HT_CAP_L_SIG_TXOP_PROT
)
5176 ht_cap
.cap
|= IEEE80211_HT_CAP_LSIG_TXOP_PROT
;
5178 /* max AMSDU is implicitly taken from vht_cap_info */
5179 if (ar
->vht_cap_info
& WMI_VHT_CAP_MAX_MPDU_LEN_MASK
)
5180 ht_cap
.cap
|= IEEE80211_HT_CAP_MAX_AMSDU
;
5182 for (i
= 0; i
< ar
->num_rf_chains
; i
++)
5183 ht_cap
.mcs
.rx_mask
[i
] = 0xFF;
5185 ht_cap
.mcs
.tx_params
|= IEEE80211_HT_MCS_TX_DEFINED
;
5190 static void ath10k_get_arvif_iter(void *data
, u8
*mac
,
5191 struct ieee80211_vif
*vif
)
5193 struct ath10k_vif_iter
*arvif_iter
= data
;
5194 struct ath10k_vif
*arvif
= ath10k_vif_to_arvif(vif
);
5196 if (arvif
->vdev_id
== arvif_iter
->vdev_id
)
5197 arvif_iter
->arvif
= arvif
;
5200 struct ath10k_vif
*ath10k_get_arvif(struct ath10k
*ar
, u32 vdev_id
)
5202 struct ath10k_vif_iter arvif_iter
;
5205 memset(&arvif_iter
, 0, sizeof(struct ath10k_vif_iter
));
5206 arvif_iter
.vdev_id
= vdev_id
;
5208 flags
= IEEE80211_IFACE_ITER_RESUME_ALL
;
5209 ieee80211_iterate_active_interfaces_atomic(ar
->hw
,
5211 ath10k_get_arvif_iter
,
5213 if (!arvif_iter
.arvif
) {
5214 ath10k_warn(ar
, "No VIF found for vdev %d\n", vdev_id
);
5218 return arvif_iter
.arvif
;
5221 int ath10k_mac_register(struct ath10k
*ar
)
5223 struct ieee80211_supported_band
*band
;
5224 struct ieee80211_sta_vht_cap vht_cap
;
5225 struct ieee80211_sta_ht_cap ht_cap
;
5229 SET_IEEE80211_PERM_ADDR(ar
->hw
, ar
->mac_addr
);
5231 SET_IEEE80211_DEV(ar
->hw
, ar
->dev
);
5233 ht_cap
= ath10k_get_ht_cap(ar
);
5234 vht_cap
= ath10k_create_vht_cap(ar
);
5236 if (ar
->phy_capability
& WHAL_WLAN_11G_CAPABILITY
) {
5237 channels
= kmemdup(ath10k_2ghz_channels
,
5238 sizeof(ath10k_2ghz_channels
),
5245 band
= &ar
->mac
.sbands
[IEEE80211_BAND_2GHZ
];
5246 band
->n_channels
= ARRAY_SIZE(ath10k_2ghz_channels
);
5247 band
->channels
= channels
;
5248 band
->n_bitrates
= ath10k_g_rates_size
;
5249 band
->bitrates
= ath10k_g_rates
;
5250 band
->ht_cap
= ht_cap
;
5252 /* vht is not supported in 2.4 GHz */
5254 ar
->hw
->wiphy
->bands
[IEEE80211_BAND_2GHZ
] = band
;
5257 if (ar
->phy_capability
& WHAL_WLAN_11A_CAPABILITY
) {
5258 channels
= kmemdup(ath10k_5ghz_channels
,
5259 sizeof(ath10k_5ghz_channels
),
5266 band
= &ar
->mac
.sbands
[IEEE80211_BAND_5GHZ
];
5267 band
->n_channels
= ARRAY_SIZE(ath10k_5ghz_channels
);
5268 band
->channels
= channels
;
5269 band
->n_bitrates
= ath10k_a_rates_size
;
5270 band
->bitrates
= ath10k_a_rates
;
5271 band
->ht_cap
= ht_cap
;
5272 band
->vht_cap
= vht_cap
;
5273 ar
->hw
->wiphy
->bands
[IEEE80211_BAND_5GHZ
] = band
;
5276 ar
->hw
->wiphy
->interface_modes
=
5277 BIT(NL80211_IFTYPE_STATION
) |
5278 BIT(NL80211_IFTYPE_AP
);
5280 ar
->hw
->wiphy
->available_antennas_rx
= ar
->supp_rx_chainmask
;
5281 ar
->hw
->wiphy
->available_antennas_tx
= ar
->supp_tx_chainmask
;
5283 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P
, ar
->fw_features
))
5284 ar
->hw
->wiphy
->interface_modes
|=
5285 BIT(NL80211_IFTYPE_P2P_DEVICE
) |
5286 BIT(NL80211_IFTYPE_P2P_CLIENT
) |
5287 BIT(NL80211_IFTYPE_P2P_GO
);
5289 ar
->hw
->flags
= IEEE80211_HW_SIGNAL_DBM
|
5290 IEEE80211_HW_SUPPORTS_PS
|
5291 IEEE80211_HW_SUPPORTS_DYNAMIC_PS
|
5292 IEEE80211_HW_SUPPORTS_UAPSD
|
5293 IEEE80211_HW_MFP_CAPABLE
|
5294 IEEE80211_HW_REPORTS_TX_ACK_STATUS
|
5295 IEEE80211_HW_HAS_RATE_CONTROL
|
5296 IEEE80211_HW_AP_LINK_PS
|
5297 IEEE80211_HW_SPECTRUM_MGMT
;
5299 ar
->hw
->wiphy
->features
|= NL80211_FEATURE_STATIC_SMPS
;
5301 if (ar
->ht_cap_info
& WMI_HT_CAP_DYNAMIC_SMPS
)
5302 ar
->hw
->wiphy
->features
|= NL80211_FEATURE_DYNAMIC_SMPS
;
5304 if (ar
->ht_cap_info
& WMI_HT_CAP_ENABLED
) {
5305 ar
->hw
->flags
|= IEEE80211_HW_AMPDU_AGGREGATION
;
5306 ar
->hw
->flags
|= IEEE80211_HW_TX_AMPDU_SETUP_IN_HW
;
5309 ar
->hw
->wiphy
->max_scan_ssids
= WLAN_SCAN_PARAMS_MAX_SSID
;
5310 ar
->hw
->wiphy
->max_scan_ie_len
= WLAN_SCAN_PARAMS_MAX_IE_LEN
;
5312 ar
->hw
->vif_data_size
= sizeof(struct ath10k_vif
);
5313 ar
->hw
->sta_data_size
= sizeof(struct ath10k_sta
);
5315 ar
->hw
->max_listen_interval
= ATH10K_MAX_HW_LISTEN_INTERVAL
;
5317 if (test_bit(WMI_SERVICE_BEACON_OFFLOAD
, ar
->wmi
.svc_map
)) {
5318 ar
->hw
->wiphy
->flags
|= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD
;
5320 /* Firmware delivers WPS/P2P Probe Requests frames to driver so
5321 * that userspace (e.g. wpa_supplicant/hostapd) can generate
5322 * correct Probe Responses. This is more of a hack advert..
5324 ar
->hw
->wiphy
->probe_resp_offload
|=
5325 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS
|
5326 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2
|
5327 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P
;
5330 ar
->hw
->wiphy
->flags
|= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL
;
5331 ar
->hw
->wiphy
->flags
|= WIPHY_FLAG_HAS_CHANNEL_SWITCH
;
5332 ar
->hw
->wiphy
->max_remain_on_channel_duration
= 5000;
5334 ar
->hw
->wiphy
->flags
|= WIPHY_FLAG_AP_UAPSD
;
5335 ar
->hw
->wiphy
->features
|= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE
;
5338 * on LL hardware queues are managed entirely by the FW
5339 * so we only advertise to mac we can do the queues thing
5343 switch (ar
->wmi
.op_version
) {
5344 case ATH10K_FW_WMI_OP_VERSION_MAIN
:
5345 case ATH10K_FW_WMI_OP_VERSION_TLV
:
5346 ar
->hw
->wiphy
->iface_combinations
= ath10k_if_comb
;
5347 ar
->hw
->wiphy
->n_iface_combinations
=
5348 ARRAY_SIZE(ath10k_if_comb
);
5349 ar
->hw
->wiphy
->interface_modes
|= BIT(NL80211_IFTYPE_ADHOC
);
5351 case ATH10K_FW_WMI_OP_VERSION_10_1
:
5352 case ATH10K_FW_WMI_OP_VERSION_10_2
:
5353 case ATH10K_FW_WMI_OP_VERSION_10_2_4
:
5354 ar
->hw
->wiphy
->iface_combinations
= ath10k_10x_if_comb
;
5355 ar
->hw
->wiphy
->n_iface_combinations
=
5356 ARRAY_SIZE(ath10k_10x_if_comb
);
5358 case ATH10K_FW_WMI_OP_VERSION_UNSET
:
5359 case ATH10K_FW_WMI_OP_VERSION_MAX
:
5365 ar
->hw
->netdev_features
= NETIF_F_HW_CSUM
;
5367 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED
)) {
5368 /* Init ath dfs pattern detector */
5369 ar
->ath_common
.debug_mask
= ATH_DBG_DFS
;
5370 ar
->dfs_detector
= dfs_pattern_detector_init(&ar
->ath_common
,
5373 if (!ar
->dfs_detector
)
5374 ath10k_warn(ar
, "failed to initialise DFS pattern detector\n");
5377 ret
= ath_regd_init(&ar
->ath_common
.regulatory
, ar
->hw
->wiphy
,
5378 ath10k_reg_notifier
);
5380 ath10k_err(ar
, "failed to initialise regulatory: %i\n", ret
);
5384 ret
= ieee80211_register_hw(ar
->hw
);
5386 ath10k_err(ar
, "failed to register ieee80211: %d\n", ret
);
5390 if (!ath_is_world_regd(&ar
->ath_common
.regulatory
)) {
5391 ret
= regulatory_hint(ar
->hw
->wiphy
,
5392 ar
->ath_common
.regulatory
.alpha2
);
5394 goto err_unregister
;
5400 ieee80211_unregister_hw(ar
->hw
);
5402 kfree(ar
->mac
.sbands
[IEEE80211_BAND_2GHZ
].channels
);
5403 kfree(ar
->mac
.sbands
[IEEE80211_BAND_5GHZ
].channels
);
5408 void ath10k_mac_unregister(struct ath10k
*ar
)
5410 ieee80211_unregister_hw(ar
->hw
);
5412 if (config_enabled(CONFIG_ATH10K_DFS_CERTIFIED
) && ar
->dfs_detector
)
5413 ar
->dfs_detector
->exit(ar
->dfs_detector
);
5415 kfree(ar
->mac
.sbands
[IEEE80211_BAND_2GHZ
].channels
);
5416 kfree(ar
->mac
.sbands
[IEEE80211_BAND_5GHZ
].channels
);
5418 SET_IEEE80211_DEV(ar
->hw
, NULL
);