mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 05:32:00 +00:00
wifi: mac80211: refactor channel checks
To later introduce an override for VLP APs being allowed despite NO-IR flags, which is somewhat similar in construction to being allowed to monitor on disabled channels, refactor the code that checks channel flags to have not a 'monitor' argument but a set of 'permitting' flags that permit the operation without checking for 'prohibited' flags. Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com> Reviewed-by: Ilan Peer <ilan.peer@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Link: https://msgid.link/20240523120945.3da28ded4a50.I90cffc633d0510293d511f60097dc75e719b55f0@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
0a9314ad5f
commit
ca41bfe367
@ -1145,7 +1145,8 @@ EXPORT_SYMBOL(cfg80211_chandef_dfs_cac_time);
|
||||
|
||||
static bool cfg80211_secondary_chans_ok(struct wiphy *wiphy,
|
||||
u32 center_freq, u32 bandwidth,
|
||||
u32 prohibited_flags, bool monitor)
|
||||
u32 prohibited_flags,
|
||||
u32 permitting_flags)
|
||||
{
|
||||
struct ieee80211_channel *c;
|
||||
u32 freq, start_freq, end_freq;
|
||||
@ -1157,7 +1158,7 @@ static bool cfg80211_secondary_chans_ok(struct wiphy *wiphy,
|
||||
c = ieee80211_get_channel_khz(wiphy, freq);
|
||||
if (!c)
|
||||
return false;
|
||||
if (monitor && c->flags & IEEE80211_CHAN_CAN_MONITOR)
|
||||
if (c->flags & permitting_flags)
|
||||
continue;
|
||||
if (c->flags & prohibited_flags)
|
||||
return false;
|
||||
@ -1221,7 +1222,8 @@ static bool cfg80211_edmg_usable(struct wiphy *wiphy, u8 edmg_channels,
|
||||
|
||||
bool _cfg80211_chandef_usable(struct wiphy *wiphy,
|
||||
const struct cfg80211_chan_def *chandef,
|
||||
u32 prohibited_flags, bool monitor)
|
||||
u32 prohibited_flags,
|
||||
u32 permitting_flags)
|
||||
{
|
||||
struct ieee80211_sta_ht_cap *ht_cap;
|
||||
struct ieee80211_sta_vht_cap *vht_cap;
|
||||
@ -1383,22 +1385,23 @@ bool _cfg80211_chandef_usable(struct wiphy *wiphy,
|
||||
|
||||
if (!cfg80211_secondary_chans_ok(wiphy,
|
||||
ieee80211_chandef_to_khz(chandef),
|
||||
width, prohibited_flags, monitor))
|
||||
width, prohibited_flags,
|
||||
permitting_flags))
|
||||
return false;
|
||||
|
||||
if (!chandef->center_freq2)
|
||||
return true;
|
||||
return cfg80211_secondary_chans_ok(wiphy,
|
||||
MHZ_TO_KHZ(chandef->center_freq2),
|
||||
width, prohibited_flags, monitor);
|
||||
width, prohibited_flags,
|
||||
permitting_flags);
|
||||
}
|
||||
|
||||
bool cfg80211_chandef_usable(struct wiphy *wiphy,
|
||||
const struct cfg80211_chan_def *chandef,
|
||||
u32 prohibited_flags)
|
||||
{
|
||||
return _cfg80211_chandef_usable(wiphy, chandef, prohibited_flags,
|
||||
false);
|
||||
return _cfg80211_chandef_usable(wiphy, chandef, prohibited_flags, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(cfg80211_chandef_usable);
|
||||
|
||||
@ -1541,7 +1544,7 @@ static bool _cfg80211_reg_can_beacon(struct wiphy *wiphy,
|
||||
prohibited_flags = IEEE80211_CHAN_DISABLED;
|
||||
}
|
||||
|
||||
res = cfg80211_chandef_usable(wiphy, chandef, prohibited_flags);
|
||||
res = _cfg80211_chandef_usable(wiphy, chandef, prohibited_flags, 0);
|
||||
|
||||
trace_cfg80211_return_bool(res);
|
||||
return res;
|
||||
|
@ -494,7 +494,8 @@ bool cfg80211_wdev_on_sub_chan(struct wireless_dev *wdev,
|
||||
bool primary_only);
|
||||
bool _cfg80211_chandef_usable(struct wiphy *wiphy,
|
||||
const struct cfg80211_chan_def *chandef,
|
||||
u32 prohibited_flags, bool monitor);
|
||||
u32 prohibited_flags,
|
||||
u32 permitting_flags);
|
||||
|
||||
static inline unsigned int elapsed_jiffies_msecs(unsigned long start)
|
||||
{
|
||||
|
@ -3347,7 +3347,7 @@ static int _nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
|
||||
|
||||
if (!_cfg80211_chandef_usable(&rdev->wiphy, chandef,
|
||||
IEEE80211_CHAN_DISABLED,
|
||||
monitor)) {
|
||||
monitor ? IEEE80211_CHAN_CAN_MONITOR : 0)) {
|
||||
NL_SET_ERR_MSG(extack, "(extension) channel is disabled");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user