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: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Link: https://msgid.link/20240523120945.d44c34dadfc2.I59b4403108e0dbf7fc6ae8f7522e1af520cffb1c@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
459662e83d
commit
9fd171a71b
@ -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,
|
||||
static inline bool
|
||||
cfg80211_reg_can_beacon(struct wiphy *wiphy,
|
||||
struct cfg80211_chan_def *chandef,
|
||||
enum nl80211_iftype iftype);
|
||||
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,
|
||||
static inline bool
|
||||
cfg80211_reg_can_beacon_relax(struct wiphy *wiphy,
|
||||
struct cfg80211_chan_def *chandef,
|
||||
enum nl80211_iftype iftype);
|
||||
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,
|
||||
bool cfg80211_reg_check_beaconing(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)
|
||||
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,
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user