mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
wifi: cfg80211: add a flag for the first part of a scan
When there are no non-6 GHz channels, then the 6 GHz scan is the first part of a split scan. Add a boolean denoting whether the scan is the first part of a scan as it might be useful to drivers for internal bookkeeping. This flag is also set if the scan is not split. Signed-off-by: Benjamin Berg <benjamin.berg@intel.com> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Link: https://patch.msgid.link/20250609213231.07e5a8a452ec.Ibf18f513e507422078fb31b28947e582a20df87a@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
984462751d
commit
62c57ebb31
|
|
@ -2754,7 +2754,10 @@ struct cfg80211_scan_6ghz_params {
|
|||
* are 0 in the mask should be randomised, bits that are 1 should
|
||||
* be taken from the @mac_addr
|
||||
* @scan_6ghz: relevant for split scan request only,
|
||||
* true if this is the second scan request
|
||||
* true if this is a 6 GHz scan request
|
||||
* @first_part: %true if this is the first part of a split scan request or a
|
||||
* scan that was not split. May be %true for a @scan_6ghz scan if no other
|
||||
* channels were requested
|
||||
* @n_6ghz_params: number of 6 GHz params
|
||||
* @scan_6ghz_params: 6 GHz params
|
||||
* @bssid: BSSID to scan for (most commonly, the wildcard BSSID)
|
||||
|
|
@ -2782,6 +2785,7 @@ struct cfg80211_scan_request {
|
|||
unsigned long scan_start;
|
||||
bool no_cck;
|
||||
bool scan_6ghz;
|
||||
bool first_part;
|
||||
u32 n_6ghz_params;
|
||||
struct cfg80211_scan_6ghz_params *scan_6ghz_params;
|
||||
s8 tsf_report_link_id;
|
||||
|
|
|
|||
|
|
@ -838,7 +838,8 @@ static bool cfg80211_find_ssid_match(struct cfg80211_colocated_ap *ap,
|
|||
return false;
|
||||
}
|
||||
|
||||
static int cfg80211_scan_6ghz(struct cfg80211_registered_device *rdev)
|
||||
static int cfg80211_scan_6ghz(struct cfg80211_registered_device *rdev,
|
||||
bool first_part)
|
||||
{
|
||||
u8 i;
|
||||
struct cfg80211_colocated_ap *ap;
|
||||
|
|
@ -850,6 +851,7 @@ static int cfg80211_scan_6ghz(struct cfg80211_registered_device *rdev)
|
|||
size_t size, offs_ssids, offs_6ghz_params, offs_ies;
|
||||
|
||||
rdev_req->req.scan_6ghz = true;
|
||||
rdev_req->req.first_part = first_part;
|
||||
|
||||
if (!rdev->wiphy.bands[NL80211_BAND_6GHZ])
|
||||
return -EOPNOTSUPP;
|
||||
|
|
@ -1046,7 +1048,7 @@ static int cfg80211_scan_6ghz(struct cfg80211_registered_device *rdev)
|
|||
* If this scan follows a previous scan, save the scan start
|
||||
* info from the first part of the scan
|
||||
*/
|
||||
if (old)
|
||||
if (!first_part && !WARN_ON(!old))
|
||||
rdev->int_scan_req->info = old->info;
|
||||
|
||||
err = rdev_scan(rdev, request);
|
||||
|
|
@ -1070,8 +1072,10 @@ int cfg80211_scan(struct cfg80211_registered_device *rdev)
|
|||
struct cfg80211_scan_request_int *rdev_req = rdev->scan_req;
|
||||
u32 n_channels = 0, idx, i;
|
||||
|
||||
if (!(rdev->wiphy.flags & WIPHY_FLAG_SPLIT_SCAN_6GHZ))
|
||||
if (!(rdev->wiphy.flags & WIPHY_FLAG_SPLIT_SCAN_6GHZ)) {
|
||||
rdev_req->req.first_part = true;
|
||||
return rdev_scan(rdev, rdev_req);
|
||||
}
|
||||
|
||||
for (i = 0; i < rdev_req->req.n_channels; i++) {
|
||||
if (rdev_req->req.channels[i]->band != NL80211_BAND_6GHZ)
|
||||
|
|
@ -1079,7 +1083,7 @@ int cfg80211_scan(struct cfg80211_registered_device *rdev)
|
|||
}
|
||||
|
||||
if (!n_channels)
|
||||
return cfg80211_scan_6ghz(rdev);
|
||||
return cfg80211_scan_6ghz(rdev, true);
|
||||
|
||||
request = kzalloc(struct_size(request, req.channels, n_channels),
|
||||
GFP_KERNEL);
|
||||
|
|
@ -1096,6 +1100,7 @@ int cfg80211_scan(struct cfg80211_registered_device *rdev)
|
|||
}
|
||||
|
||||
rdev_req->req.scan_6ghz = false;
|
||||
rdev_req->req.first_part = true;
|
||||
rdev->int_scan_req = request;
|
||||
return rdev_scan(rdev, request);
|
||||
}
|
||||
|
|
@ -1128,7 +1133,7 @@ void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev,
|
|||
if (wdev_running(wdev) &&
|
||||
(rdev->wiphy.flags & WIPHY_FLAG_SPLIT_SCAN_6GHZ) &&
|
||||
!rdev_req->req.scan_6ghz && !request->info.aborted &&
|
||||
!cfg80211_scan_6ghz(rdev))
|
||||
!cfg80211_scan_6ghz(rdev, false))
|
||||
return;
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user