mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-19 07:27:50 +00:00
regulatory: use IS_ERR macro family for freq_reg_info
Instead of returning an error and filling a pointer return the pointer and an ERR_PTR value in error cases. Acked-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
c492db370c
commit
361c9c8b0e
@ -195,7 +195,6 @@ ath_reg_apply_beaconing_flags(struct wiphy *wiphy,
|
|||||||
const struct ieee80211_reg_rule *reg_rule;
|
const struct ieee80211_reg_rule *reg_rule;
|
||||||
struct ieee80211_channel *ch;
|
struct ieee80211_channel *ch;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int r;
|
|
||||||
|
|
||||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
||||||
|
|
||||||
@ -213,10 +212,8 @@ ath_reg_apply_beaconing_flags(struct wiphy *wiphy,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
|
if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
|
||||||
r = freq_reg_info(wiphy,
|
reg_rule = freq_reg_info(wiphy, ch->center_freq);
|
||||||
ch->center_freq,
|
if (IS_ERR(reg_rule))
|
||||||
®_rule);
|
|
||||||
if (r)
|
|
||||||
continue;
|
continue;
|
||||||
/*
|
/*
|
||||||
* If 11d had a rule for this channel ensure
|
* If 11d had a rule for this channel ensure
|
||||||
@ -252,7 +249,6 @@ ath_reg_apply_active_scan_flags(struct wiphy *wiphy,
|
|||||||
struct ieee80211_supported_band *sband;
|
struct ieee80211_supported_band *sband;
|
||||||
struct ieee80211_channel *ch;
|
struct ieee80211_channel *ch;
|
||||||
const struct ieee80211_reg_rule *reg_rule;
|
const struct ieee80211_reg_rule *reg_rule;
|
||||||
int r;
|
|
||||||
|
|
||||||
sband = wiphy->bands[IEEE80211_BAND_2GHZ];
|
sband = wiphy->bands[IEEE80211_BAND_2GHZ];
|
||||||
if (!sband)
|
if (!sband)
|
||||||
@ -280,16 +276,16 @@ ath_reg_apply_active_scan_flags(struct wiphy *wiphy,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
ch = &sband->channels[11]; /* CH 12 */
|
ch = &sband->channels[11]; /* CH 12 */
|
||||||
r = freq_reg_info(wiphy, ch->center_freq, ®_rule);
|
reg_rule = freq_reg_info(wiphy, ch->center_freq);
|
||||||
if (!r) {
|
if (!IS_ERR(reg_rule)) {
|
||||||
if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
|
if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
|
||||||
if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
|
if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
|
||||||
ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
|
ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
|
||||||
}
|
}
|
||||||
|
|
||||||
ch = &sband->channels[12]; /* CH 13 */
|
ch = &sband->channels[12]; /* CH 13 */
|
||||||
r = freq_reg_info(wiphy, ch->center_freq, ®_rule);
|
reg_rule = freq_reg_info(wiphy, ch->center_freq);
|
||||||
if (!r) {
|
if (!IS_ERR(reg_rule)) {
|
||||||
if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
|
if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
|
||||||
if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
|
if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
|
||||||
ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
|
ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
|
||||||
|
@ -670,7 +670,7 @@ brcms_reg_apply_beaconing_flags(struct wiphy *wiphy,
|
|||||||
struct ieee80211_supported_band *sband;
|
struct ieee80211_supported_band *sband;
|
||||||
struct ieee80211_channel *ch;
|
struct ieee80211_channel *ch;
|
||||||
const struct ieee80211_reg_rule *rule;
|
const struct ieee80211_reg_rule *rule;
|
||||||
int band, i, ret;
|
int band, i;
|
||||||
|
|
||||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
||||||
sband = wiphy->bands[band];
|
sband = wiphy->bands[band];
|
||||||
@ -685,9 +685,8 @@ brcms_reg_apply_beaconing_flags(struct wiphy *wiphy,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
|
if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
|
||||||
ret = freq_reg_info(wiphy, ch->center_freq,
|
rule = freq_reg_info(wiphy, ch->center_freq);
|
||||||
&rule);
|
if (IS_ERR(rule))
|
||||||
if (ret)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!(rule->flags & NL80211_RRF_NO_IBSS))
|
if (!(rule->flags & NL80211_RRF_NO_IBSS))
|
||||||
|
@ -158,7 +158,6 @@ static void _rtl_reg_apply_beaconing_flags(struct wiphy *wiphy,
|
|||||||
const struct ieee80211_reg_rule *reg_rule;
|
const struct ieee80211_reg_rule *reg_rule;
|
||||||
struct ieee80211_channel *ch;
|
struct ieee80211_channel *ch;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int r;
|
|
||||||
|
|
||||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
||||||
|
|
||||||
@ -173,8 +172,8 @@ static void _rtl_reg_apply_beaconing_flags(struct wiphy *wiphy,
|
|||||||
(ch->flags & IEEE80211_CHAN_RADAR))
|
(ch->flags & IEEE80211_CHAN_RADAR))
|
||||||
continue;
|
continue;
|
||||||
if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
|
if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
|
||||||
r = freq_reg_info(wiphy, ch->center_freq, ®_rule);
|
reg_rule = freq_reg_info(wiphy, ch->center_freq);
|
||||||
if (r)
|
if (IS_ERR(reg_rule))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -209,7 +208,6 @@ static void _rtl_reg_apply_active_scan_flags(struct wiphy *wiphy,
|
|||||||
struct ieee80211_supported_band *sband;
|
struct ieee80211_supported_band *sband;
|
||||||
struct ieee80211_channel *ch;
|
struct ieee80211_channel *ch;
|
||||||
const struct ieee80211_reg_rule *reg_rule;
|
const struct ieee80211_reg_rule *reg_rule;
|
||||||
int r;
|
|
||||||
|
|
||||||
if (!wiphy->bands[IEEE80211_BAND_2GHZ])
|
if (!wiphy->bands[IEEE80211_BAND_2GHZ])
|
||||||
return;
|
return;
|
||||||
@ -237,16 +235,16 @@ static void _rtl_reg_apply_active_scan_flags(struct wiphy *wiphy,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
ch = &sband->channels[11]; /* CH 12 */
|
ch = &sband->channels[11]; /* CH 12 */
|
||||||
r = freq_reg_info(wiphy, ch->center_freq, ®_rule);
|
reg_rule = freq_reg_info(wiphy, ch->center_freq);
|
||||||
if (!r) {
|
if (!IS_ERR(reg_rule)) {
|
||||||
if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
|
if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
|
||||||
if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
|
if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
|
||||||
ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
|
ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
|
||||||
}
|
}
|
||||||
|
|
||||||
ch = &sband->channels[12]; /* CH 13 */
|
ch = &sband->channels[12]; /* CH 13 */
|
||||||
r = freq_reg_info(wiphy, ch->center_freq, ®_rule);
|
reg_rule = freq_reg_info(wiphy, ch->center_freq);
|
||||||
if (!r) {
|
if (!IS_ERR(reg_rule)) {
|
||||||
if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
|
if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
|
||||||
if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
|
if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
|
||||||
ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
|
ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
|
||||||
|
@ -2938,22 +2938,22 @@ extern void wiphy_apply_custom_regulatory(
|
|||||||
* freq_reg_info - get regulatory information for the given frequency
|
* freq_reg_info - get regulatory information for the given frequency
|
||||||
* @wiphy: the wiphy for which we want to process this rule for
|
* @wiphy: the wiphy for which we want to process this rule for
|
||||||
* @center_freq: Frequency in KHz for which we want regulatory information for
|
* @center_freq: Frequency in KHz for which we want regulatory information for
|
||||||
* @reg_rule: the regulatory rule which we have for this frequency
|
|
||||||
*
|
*
|
||||||
* Use this function to get the regulatory rule for a specific frequency on
|
* Use this function to get the regulatory rule for a specific frequency on
|
||||||
* a given wireless device. If the device has a specific regulatory domain
|
* a given wireless device. If the device has a specific regulatory domain
|
||||||
* it wants to follow we respect that unless a country IE has been received
|
* it wants to follow we respect that unless a country IE has been received
|
||||||
* and processed already.
|
* and processed already.
|
||||||
*
|
*
|
||||||
* Returns 0 if it was able to find a valid regulatory rule which does
|
* When an error occurs, for example if no rule can be found, the return value
|
||||||
* apply to the given center_freq otherwise it returns non-zero. It will
|
* is encoded using ERR_PTR(). Use IS_ERR() to check and PTR_ERR() to obtain
|
||||||
* also return -ERANGE if we determine the given center_freq does not even have
|
* the numeric return value. The numeric return value will be -ERANGE if we
|
||||||
* a regulatory rule for a frequency range in the center_freq's band. See
|
* determine the given center_freq does not even have a regulatory rule for a
|
||||||
* freq_in_rule_band() for our current definition of a band -- this is purely
|
* frequency range in the center_freq's band. See freq_in_rule_band() for our
|
||||||
* subjective and right now its 802.11 specific.
|
* current definition of a band -- this is purely subjective and right now it's
|
||||||
|
* 802.11 specific.
|
||||||
*/
|
*/
|
||||||
extern int freq_reg_info(struct wiphy *wiphy, u32 center_freq,
|
const struct ieee80211_reg_rule *freq_reg_info(struct wiphy *wiphy,
|
||||||
const struct ieee80211_reg_rule **reg_rule);
|
u32 center_freq);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* callbacks for asynchronous cfg80211 methods, notification
|
* callbacks for asynchronous cfg80211 methods, notification
|
||||||
|
@ -710,16 +710,16 @@ static u32 map_regdom_flags(u32 rd_flags)
|
|||||||
return channel_flags;
|
return channel_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int freq_reg_info_regd(struct wiphy *wiphy, u32 center_freq,
|
static const struct ieee80211_reg_rule *
|
||||||
const struct ieee80211_reg_rule **reg_rule,
|
freq_reg_info_regd(struct wiphy *wiphy, u32 center_freq,
|
||||||
const struct ieee80211_regdomain *regd)
|
const struct ieee80211_regdomain *regd)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
bool band_rule_found = false;
|
bool band_rule_found = false;
|
||||||
bool bw_fits = false;
|
bool bw_fits = false;
|
||||||
|
|
||||||
if (!regd)
|
if (!regd)
|
||||||
return -EINVAL;
|
return ERR_PTR(-EINVAL);
|
||||||
|
|
||||||
for (i = 0; i < regd->n_reg_rules; i++) {
|
for (i = 0; i < regd->n_reg_rules; i++) {
|
||||||
const struct ieee80211_reg_rule *rr;
|
const struct ieee80211_reg_rule *rr;
|
||||||
@ -738,20 +738,18 @@ static int freq_reg_info_regd(struct wiphy *wiphy, u32 center_freq,
|
|||||||
|
|
||||||
bw_fits = reg_does_bw_fit(fr, center_freq, MHZ_TO_KHZ(20));
|
bw_fits = reg_does_bw_fit(fr, center_freq, MHZ_TO_KHZ(20));
|
||||||
|
|
||||||
if (band_rule_found && bw_fits) {
|
if (band_rule_found && bw_fits)
|
||||||
*reg_rule = rr;
|
return rr;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!band_rule_found)
|
if (!band_rule_found)
|
||||||
return -ERANGE;
|
return ERR_PTR(-ERANGE);
|
||||||
|
|
||||||
return -EINVAL;
|
return ERR_PTR(-EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int freq_reg_info(struct wiphy *wiphy, u32 center_freq,
|
const struct ieee80211_reg_rule *freq_reg_info(struct wiphy *wiphy,
|
||||||
const struct ieee80211_reg_rule **reg_rule)
|
u32 center_freq)
|
||||||
{
|
{
|
||||||
const struct ieee80211_regdomain *regd;
|
const struct ieee80211_regdomain *regd;
|
||||||
struct regulatory_request *lr = get_last_request();
|
struct regulatory_request *lr = get_last_request();
|
||||||
@ -767,7 +765,7 @@ int freq_reg_info(struct wiphy *wiphy, u32 center_freq,
|
|||||||
else
|
else
|
||||||
regd = get_cfg80211_regdom();
|
regd = get_cfg80211_regdom();
|
||||||
|
|
||||||
return freq_reg_info_regd(wiphy, center_freq, reg_rule, regd);
|
return freq_reg_info_regd(wiphy, center_freq, regd);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(freq_reg_info);
|
EXPORT_SYMBOL(freq_reg_info);
|
||||||
|
|
||||||
@ -829,7 +827,6 @@ static void handle_channel(struct wiphy *wiphy,
|
|||||||
enum nl80211_reg_initiator initiator,
|
enum nl80211_reg_initiator initiator,
|
||||||
struct ieee80211_channel *chan)
|
struct ieee80211_channel *chan)
|
||||||
{
|
{
|
||||||
int r;
|
|
||||||
u32 flags, bw_flags = 0;
|
u32 flags, bw_flags = 0;
|
||||||
const struct ieee80211_reg_rule *reg_rule = NULL;
|
const struct ieee80211_reg_rule *reg_rule = NULL;
|
||||||
const struct ieee80211_power_rule *power_rule = NULL;
|
const struct ieee80211_power_rule *power_rule = NULL;
|
||||||
@ -841,8 +838,8 @@ static void handle_channel(struct wiphy *wiphy,
|
|||||||
|
|
||||||
flags = chan->orig_flags;
|
flags = chan->orig_flags;
|
||||||
|
|
||||||
r = freq_reg_info(wiphy, MHZ_TO_KHZ(chan->center_freq), ®_rule);
|
reg_rule = freq_reg_info(wiphy, MHZ_TO_KHZ(chan->center_freq));
|
||||||
if (r) {
|
if (IS_ERR(reg_rule)) {
|
||||||
/*
|
/*
|
||||||
* We will disable all channels that do not match our
|
* We will disable all channels that do not match our
|
||||||
* received regulatory rule unless the hint is coming
|
* received regulatory rule unless the hint is coming
|
||||||
@ -854,7 +851,7 @@ static void handle_channel(struct wiphy *wiphy,
|
|||||||
* while 5 GHz is still supported.
|
* while 5 GHz is still supported.
|
||||||
*/
|
*/
|
||||||
if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE &&
|
if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE &&
|
||||||
r == -ERANGE)
|
PTR_ERR(reg_rule) == -ERANGE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
REG_DBG_PRINT("Disabling freq %d MHz\n", chan->center_freq);
|
REG_DBG_PRINT("Disabling freq %d MHz\n", chan->center_freq);
|
||||||
@ -1239,16 +1236,15 @@ static void handle_channel_custom(struct wiphy *wiphy,
|
|||||||
struct ieee80211_channel *chan,
|
struct ieee80211_channel *chan,
|
||||||
const struct ieee80211_regdomain *regd)
|
const struct ieee80211_regdomain *regd)
|
||||||
{
|
{
|
||||||
int r;
|
|
||||||
u32 bw_flags = 0;
|
u32 bw_flags = 0;
|
||||||
const struct ieee80211_reg_rule *reg_rule = NULL;
|
const struct ieee80211_reg_rule *reg_rule = NULL;
|
||||||
const struct ieee80211_power_rule *power_rule = NULL;
|
const struct ieee80211_power_rule *power_rule = NULL;
|
||||||
const struct ieee80211_freq_range *freq_range = NULL;
|
const struct ieee80211_freq_range *freq_range = NULL;
|
||||||
|
|
||||||
r = freq_reg_info_regd(wiphy, MHZ_TO_KHZ(chan->center_freq),
|
reg_rule = freq_reg_info_regd(wiphy, MHZ_TO_KHZ(chan->center_freq),
|
||||||
®_rule, regd);
|
regd);
|
||||||
|
|
||||||
if (r) {
|
if (IS_ERR(reg_rule)) {
|
||||||
REG_DBG_PRINT("Disabling freq %d MHz as custom regd has no rule that fits it\n",
|
REG_DBG_PRINT("Disabling freq %d MHz as custom regd has no rule that fits it\n",
|
||||||
chan->center_freq);
|
chan->center_freq);
|
||||||
chan->flags = IEEE80211_CHAN_DISABLED;
|
chan->flags = IEEE80211_CHAN_DISABLED;
|
||||||
|
Loading…
Reference in New Issue
Block a user