Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 361c9c8b authored by Johannes Berg's avatar Johannes Berg
Browse files

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: default avatarLuis R. Rodriguez <mcgrof@do-not-panic.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent c492db37
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -195,7 +195,6 @@ ath_reg_apply_beaconing_flags(struct wiphy *wiphy,
	const struct ieee80211_reg_rule *reg_rule;
	struct ieee80211_channel *ch;
	unsigned int i;
	int r;

	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {

@@ -213,10 +212,8 @@ ath_reg_apply_beaconing_flags(struct wiphy *wiphy,
				continue;

			if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
				r = freq_reg_info(wiphy,
						  ch->center_freq,
						  &reg_rule);
				if (r)
				reg_rule = freq_reg_info(wiphy, ch->center_freq);
				if (IS_ERR(reg_rule))
					continue;
				/*
				 * 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_channel *ch;
	const struct ieee80211_reg_rule *reg_rule;
	int r;

	sband = wiphy->bands[IEEE80211_BAND_2GHZ];
	if (!sband)
@@ -280,16 +276,16 @@ ath_reg_apply_active_scan_flags(struct wiphy *wiphy,
	 */

	ch = &sband->channels[11]; /* CH 12 */
	r = freq_reg_info(wiphy, ch->center_freq, &reg_rule);
	if (!r) {
	reg_rule = freq_reg_info(wiphy, ch->center_freq);
	if (!IS_ERR(reg_rule)) {
		if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
			if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
				ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
	}

	ch = &sband->channels[12]; /* CH 13 */
	r = freq_reg_info(wiphy, ch->center_freq, &reg_rule);
	if (!r) {
	reg_rule = freq_reg_info(wiphy, ch->center_freq);
	if (!IS_ERR(reg_rule)) {
		if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
			if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
				ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
+3 −4
Original line number Diff line number Diff line
@@ -670,7 +670,7 @@ brcms_reg_apply_beaconing_flags(struct wiphy *wiphy,
	struct ieee80211_supported_band *sband;
	struct ieee80211_channel *ch;
	const struct ieee80211_reg_rule *rule;
	int band, i, ret;
	int band, i;

	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
		sband = wiphy->bands[band];
@@ -685,9 +685,8 @@ brcms_reg_apply_beaconing_flags(struct wiphy *wiphy,
				continue;

			if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
				ret = freq_reg_info(wiphy, ch->center_freq,
						    &rule);
				if (ret)
				rule = freq_reg_info(wiphy, ch->center_freq);
				if (IS_ERR(rule))
					continue;

				if (!(rule->flags & NL80211_RRF_NO_IBSS))
+6 −8
Original line number Diff line number Diff line
@@ -158,7 +158,6 @@ static void _rtl_reg_apply_beaconing_flags(struct wiphy *wiphy,
	const struct ieee80211_reg_rule *reg_rule;
	struct ieee80211_channel *ch;
	unsigned int i;
	int r;

	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))
				continue;
			if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE) {
				r = freq_reg_info(wiphy, ch->center_freq, &reg_rule);
				if (r)
				reg_rule = freq_reg_info(wiphy, ch->center_freq);
				if (IS_ERR(reg_rule))
					continue;

				/*
@@ -209,7 +208,6 @@ static void _rtl_reg_apply_active_scan_flags(struct wiphy *wiphy,
	struct ieee80211_supported_band *sband;
	struct ieee80211_channel *ch;
	const struct ieee80211_reg_rule *reg_rule;
	int r;

	if (!wiphy->bands[IEEE80211_BAND_2GHZ])
		return;
@@ -237,16 +235,16 @@ static void _rtl_reg_apply_active_scan_flags(struct wiphy *wiphy,
	 */

	ch = &sband->channels[11];	/* CH 12 */
	r = freq_reg_info(wiphy, ch->center_freq, &reg_rule);
	if (!r) {
	reg_rule = freq_reg_info(wiphy, ch->center_freq);
	if (!IS_ERR(reg_rule)) {
		if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
			if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
				ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
	}

	ch = &sband->channels[12];	/* CH 13 */
	r = freq_reg_info(wiphy, ch->center_freq, &reg_rule);
	if (!r) {
	reg_rule = freq_reg_info(wiphy, ch->center_freq);
	if (!IS_ERR(reg_rule)) {
		if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
			if (ch->flags & IEEE80211_CHAN_PASSIVE_SCAN)
				ch->flags &= ~IEEE80211_CHAN_PASSIVE_SCAN;
+9 −9
Original line number Diff line number Diff line
@@ -2938,22 +2938,22 @@ extern void wiphy_apply_custom_regulatory(
 * freq_reg_info - get regulatory information for the given frequency
 * @wiphy: the wiphy for which we want to process this rule 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
 * 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
 * and processed already.
 *
 * Returns 0 if it was able to find a valid regulatory rule which does
 * apply to the given center_freq otherwise it returns non-zero. It will
 * also return -ERANGE if we determine the given center_freq does not even have
 * a regulatory rule for a frequency range in the center_freq's band. See
 * freq_in_rule_band() for our current definition of a band -- this is purely
 * subjective and right now its 802.11 specific.
 * When an error occurs, for example if no rule can be found, the return value
 * is encoded using ERR_PTR(). Use IS_ERR() to check and PTR_ERR() to obtain
 * the numeric return value. The numeric return value will be -ERANGE if we
 * determine the given center_freq does not even have a regulatory rule for a
 * frequency range in the center_freq's band. See freq_in_rule_band() for our
 * 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 **reg_rule);
const struct ieee80211_reg_rule *freq_reg_info(struct wiphy *wiphy,
					       u32 center_freq);

/*
 * callbacks for asynchronous cfg80211 methods, notification
+17 −21
Original line number Diff line number Diff line
@@ -710,8 +710,8 @@ static u32 map_regdom_flags(u32 rd_flags)
	return channel_flags;
}

static int freq_reg_info_regd(struct wiphy *wiphy, u32 center_freq,
			      const struct ieee80211_reg_rule **reg_rule,
static const struct ieee80211_reg_rule *
freq_reg_info_regd(struct wiphy *wiphy, u32 center_freq,
		   const struct ieee80211_regdomain *regd)
{
	int i;
@@ -719,7 +719,7 @@ static int freq_reg_info_regd(struct wiphy *wiphy, u32 center_freq,
	bool bw_fits = false;

	if (!regd)
		return -EINVAL;
		return ERR_PTR(-EINVAL);

	for (i = 0; i < regd->n_reg_rules; i++) {
		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));

		if (band_rule_found && bw_fits) {
			*reg_rule = rr;
			return 0;
		}
		if (band_rule_found && bw_fits)
			return rr;
	}

	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 **reg_rule)
const struct ieee80211_reg_rule *freq_reg_info(struct wiphy *wiphy,
					       u32 center_freq)
{
	const struct ieee80211_regdomain *regd;
	struct regulatory_request *lr = get_last_request();
@@ -767,7 +765,7 @@ int freq_reg_info(struct wiphy *wiphy, u32 center_freq,
	else
		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);

@@ -829,7 +827,6 @@ static void handle_channel(struct wiphy *wiphy,
			   enum nl80211_reg_initiator initiator,
			   struct ieee80211_channel *chan)
{
	int r;
	u32 flags, bw_flags = 0;
	const struct ieee80211_reg_rule *reg_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;

	r = freq_reg_info(wiphy, MHZ_TO_KHZ(chan->center_freq), &reg_rule);
	if (r) {
	reg_rule = freq_reg_info(wiphy, MHZ_TO_KHZ(chan->center_freq));
	if (IS_ERR(reg_rule)) {
		/*
		 * We will disable all channels that do not match our
		 * 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.
		 */
		if (initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE &&
		    r == -ERANGE)
		    PTR_ERR(reg_rule) == -ERANGE)
			return;

		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,
				  const struct ieee80211_regdomain *regd)
{
	int r;
	u32 bw_flags = 0;
	const struct ieee80211_reg_rule *reg_rule = NULL;
	const struct ieee80211_power_rule *power_rule = NULL;
	const struct ieee80211_freq_range *freq_range = NULL;

	r = freq_reg_info_regd(wiphy, MHZ_TO_KHZ(chan->center_freq),
			       &reg_rule, regd);
	reg_rule = freq_reg_info_regd(wiphy, MHZ_TO_KHZ(chan->center_freq),
				      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",
			      chan->center_freq);
		chan->flags = IEEE80211_CHAN_DISABLED;