git: a1272e7d9621 - stable/13 - LinuxKPI: 802.11: improve hw_scan fallback to sw_scan
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 27 Mar 2022 20:14:15 UTC
The branch stable/13 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=a1272e7d9621f95ca53f1bdef5ed78be12cac277 commit a1272e7d9621f95ca53f1bdef5ed78be12cac277 Author: Bjoern A. Zeeb <bz@FreeBSD.org> AuthorDate: 2022-03-24 17:49:59 +0000 Commit: Bjoern A. Zeeb <bz@FreeBSD.org> CommitDate: 2022-03-27 18:12:49 +0000 LinuxKPI: 802.11: improve hw_scan fallback to sw_scan Extending what was started in d3ef7fb459ff924911e5276db0c04b13cd8074d9, when a driver signals that hw_scan is not possible and expects a sw_scan to be preformed we triggered a sw_scan towards the driver but did not let net80211 know. Cancel the initial scan towards net80211. If we we defer to sw_scan then clear IEEE80211_FEXT_SCAN_OFFLOAD so net80211 will send probe requests, and actively start a new scan with net80211. This may have to be further refined in the future but seems to work for the moment. Sponsored by: The FreeBSD Foundation (cherry picked from commit 196cfd0b2eb640a63d007a7e9c3a74e4256255f3) --- sys/compat/linuxkpi/common/src/linux_80211.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c index 727c0e276af9..384d068d7920 100644 --- a/sys/compat/linuxkpi/common/src/linux_80211.c +++ b/sys/compat/linuxkpi/common/src/linux_80211.c @@ -2547,17 +2547,27 @@ sw_scan: free(hw_req, M_LKPI80211); lhw->hw_req = NULL; + ieee80211_cancel_scan(vap); /* * XXX-SIGH magic number. * rtw88 has a magic "return 1" if offloading scan is * not possible. Fall back to sw scan in that case. */ - if (error == 1) + if (error == 1) { + vap->iv_flags_ext &= ~IEEE80211_FEXT_SCAN_OFFLOAD; + ieee80211_start_scan(vap, + IEEE80211_SCAN_ACTIVE | + IEEE80211_SCAN_NOPICK | + IEEE80211_SCAN_ONCE, + IEEE80211_SCAN_FOREVER, + ss->ss_mindwell ? ss->ss_mindwell : msecs_to_ticks(20), + ss->ss_maxdwell ? ss->ss_maxdwell : msecs_to_ticks(200), + vap->iv_des_nssid, vap->iv_des_ssid); goto sw_scan; + } ic_printf(ic, "ERROR: %s: hw_scan returned %d\n", __func__, error); - ieee80211_cancel_scan(vap); } } }