Commit 9fd171a7 authored by Johannes Berg's avatar Johannes Berg

wifi: cfg80211: refactor regulatory beaconing checking

There are two functions exported now, with different settings,
refactor to just export a single function that take a struct
with different settings. This will make it easier to add more
parameters.
Reviewed-by: default avatarMiriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Link: https://msgid.link/20240523120945.d44c34dadfc2.I59b4403108e0dbf7fc6ae8f7522e1af520cffb1c@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 459662e8
......@@ -8800,6 +8800,31 @@ static inline void cfg80211_report_obss_beacon(struct wiphy *wiphy,
sig_dbm);
}
/**
* struct cfg80211_beaconing_check_config - beacon check configuration
* @iftype: the interface type to check for
* @relax: allow IR-relaxation conditions to apply (e.g. another
* interface connected already on the same channel)
* NOTE: If this is set, wiphy mutex must be held.
*/
struct cfg80211_beaconing_check_config {
enum nl80211_iftype iftype;
bool relax;
};
/**
* cfg80211_reg_check_beaconing - check if beaconing is allowed
* @wiphy: the wiphy
* @chandef: the channel definition
* @cfg: additional parameters for the checking
*
* Return: %true if there is no secondary channel or the secondary channel(s)
* can be used for beaconing (i.e. is not a radar channel etc.)
*/
bool cfg80211_reg_check_beaconing(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
struct cfg80211_beaconing_check_config *cfg);
/**
* cfg80211_reg_can_beacon - check if beaconing is allowed
* @wiphy: the wiphy
......@@ -8809,9 +8834,17 @@ static inline void cfg80211_report_obss_beacon(struct wiphy *wiphy,
* Return: %true if there is no secondary channel or the secondary channel(s)
* can be used for beaconing (i.e. is not a radar channel etc.)
*/
bool cfg80211_reg_can_beacon(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype);
static inline bool
cfg80211_reg_can_beacon(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype)
{
struct cfg80211_beaconing_check_config config = {
.iftype = iftype,
};
return cfg80211_reg_check_beaconing(wiphy, chandef, &config);
}
/**
* cfg80211_reg_can_beacon_relax - check if beaconing is allowed with relaxation
......@@ -8826,9 +8859,18 @@ bool cfg80211_reg_can_beacon(struct wiphy *wiphy,
*
* Context: Requires the wiphy mutex to be held.
*/
bool cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype);
static inline bool
cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype)
{
struct cfg80211_beaconing_check_config config = {
.iftype = iftype,
.relax = true,
};
return cfg80211_reg_check_beaconing(wiphy, chandef, &config);
}
/**
* cfg80211_ch_switch_notify - update wdev channel and notify userspace
......
......@@ -1550,22 +1550,12 @@ static bool _cfg80211_reg_can_beacon(struct wiphy *wiphy,
return res;
}
bool cfg80211_reg_can_beacon(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype)
{
return _cfg80211_reg_can_beacon(wiphy, chandef, iftype, true);
}
EXPORT_SYMBOL(cfg80211_reg_can_beacon);
bool cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
enum nl80211_iftype iftype)
bool cfg80211_reg_check_beaconing(struct wiphy *wiphy,
struct cfg80211_chan_def *chandef,
struct cfg80211_beaconing_check_config *cfg)
{
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
bool check_no_ir;
lockdep_assert_held(&rdev->wiphy.mtx);
bool check_no_ir = true;
/*
* Under certain conditions suggested by some regulatory bodies a
......@@ -1573,12 +1563,16 @@ bool cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
* only if such relaxations are not enabled and the conditions are not
* met.
*/
check_no_ir = !cfg80211_ir_permissive_chan(wiphy, iftype,
chandef->chan);
if (cfg->relax) {
lockdep_assert_held(&rdev->wiphy.mtx);
check_no_ir = !cfg80211_ir_permissive_chan(wiphy, cfg->iftype,
chandef->chan);
}
return _cfg80211_reg_can_beacon(wiphy, chandef, iftype, check_no_ir);
return _cfg80211_reg_can_beacon(wiphy, chandef, cfg->iftype,
check_no_ir);
}
EXPORT_SYMBOL(cfg80211_reg_can_beacon_relax);
EXPORT_SYMBOL(cfg80211_reg_check_beaconing);
int cfg80211_set_monitor_channel(struct cfg80211_registered_device *rdev,
struct cfg80211_chan_def *chandef)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment