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:
Johannes Berg 2012-12-06 15:57:14 +01:00
parent c492db370c
commit 361c9c8b0e
5 changed files with 41 additions and 52 deletions

View File

@ -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))
&reg_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, &reg_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, &reg_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;

View File

@ -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))

View File

@ -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, &reg_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, &reg_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, &reg_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;

View File

@ -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

View File

@ -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), &reg_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),
&reg_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;