mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
77 lines
2.8 KiB
Diff
77 lines
2.8 KiB
Diff
From c677d4b1bcc4f7330043d8f039f494557d720ed4 Mon Sep 17 00:00:00 2001
|
|
From: Wen Gong <wgong@codeaurora.org>
|
|
Date: Tue, 28 Sep 2021 14:00:45 +0300
|
|
Subject: [PATCH] ath11k: indicate scan complete for scan canceled when scan
|
|
running
|
|
|
|
ath11k prints "Received scan event for unknown vdev" when doing the
|
|
following test:
|
|
1. trigger scan
|
|
2. wait 0.2 second
|
|
3. iw reg set or 11d scan complete from firmware
|
|
|
|
Reason: When iw reg set or 11d scan complete, the new country code will
|
|
be set to the firmware, and the new regdomain info indicated to ath11k,
|
|
then the new channel list will be sent to the firmware. The firmware
|
|
will cancel the current scan after receiving WMI_SCAN_CHAN_LIST_CMDID
|
|
which is used for the new channel list, and the state of ath11k is
|
|
ATH11K_SCAN_RUNNING, then ath11k_get_ar_on_scan_abort() returns NULL and
|
|
ath11k_scan_event() returns at this point and does not indicate scan
|
|
completion to mac80211.
|
|
|
|
Indicate scan completion to mac80211 and get rid of the "Received scan
|
|
event for unknown vdev" print for the above case.
|
|
|
|
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
|
|
|
|
Signed-off-by: Wen Gong <wgong@codeaurora.org>
|
|
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
Link: https://lore.kernel.org/r/20210914164226.38843-2-jouni@codeaurora.org
|
|
---
|
|
drivers/net/wireless/ath/ath11k/wmi.c | 18 ++++++++++++------
|
|
1 file changed, 12 insertions(+), 6 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
|
@@ -6290,8 +6290,9 @@ exit:
|
|
rcu_read_unlock();
|
|
}
|
|
|
|
-static struct ath11k *ath11k_get_ar_on_scan_abort(struct ath11k_base *ab,
|
|
- u32 vdev_id)
|
|
+static struct ath11k *ath11k_get_ar_on_scan_state(struct ath11k_base *ab,
|
|
+ u32 vdev_id,
|
|
+ enum ath11k_scan_state state)
|
|
{
|
|
int i;
|
|
struct ath11k_pdev *pdev;
|
|
@@ -6303,7 +6304,7 @@ static struct ath11k *ath11k_get_ar_on_s
|
|
ar = pdev->ar;
|
|
|
|
spin_lock_bh(&ar->data_lock);
|
|
- if (ar->scan.state == ATH11K_SCAN_ABORTING &&
|
|
+ if (ar->scan.state == state &&
|
|
ar->scan.vdev_id == vdev_id) {
|
|
spin_unlock_bh(&ar->data_lock);
|
|
return ar;
|
|
@@ -6333,10 +6334,15 @@ static void ath11k_scan_event(struct ath
|
|
* aborting scan's vdev id matches this event info.
|
|
*/
|
|
if (scan_ev.event_type == WMI_SCAN_EVENT_COMPLETED &&
|
|
- scan_ev.reason == WMI_SCAN_REASON_CANCELLED)
|
|
- ar = ath11k_get_ar_on_scan_abort(ab, scan_ev.vdev_id);
|
|
- else
|
|
+ scan_ev.reason == WMI_SCAN_REASON_CANCELLED) {
|
|
+ ar = ath11k_get_ar_on_scan_state(ab, scan_ev.vdev_id,
|
|
+ ATH11K_SCAN_ABORTING);
|
|
+ if (!ar)
|
|
+ ar = ath11k_get_ar_on_scan_state(ab, scan_ev.vdev_id,
|
|
+ ATH11K_SCAN_RUNNING);
|
|
+ } else {
|
|
ar = ath11k_mac_get_ar_by_vdev_id(ab, scan_ev.vdev_id);
|
|
+ }
|
|
|
|
if (!ar) {
|
|
ath11k_warn(ab, "Received scan event for unknown vdev");
|