All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Luis R. Rodriguez" <lrodriguez@atheros.com>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: Luis Rodriguez <Luis.Rodriguez@Atheros.com>,
	"linville@tuxdriver.com" <linville@tuxdriver.com>,
	"linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>
Subject: Re: [PATCH 03/13] cfg80211: add wiphy_apply_custom_regulatory()
Date: Fri, 16 Jan 2009 08:36:46 -0800	[thread overview]
Message-ID: <20090116163646.GG29609@tesla> (raw)
In-Reply-To: <1232097659.3854.20.camel@johannes>

On Fri, Jan 16, 2009 at 01:20:59AM -0800, Johannes Berg wrote:
> On Thu, 2009-01-15 at 16:12 -0800, Luis R. Rodriguez wrote:
> 
> >  /**
> >   * enum reg_set_by - Indicates who is trying to set the regulatory domain
> > + * @REGDOM_SET_BY_PROBE: regulatory domain applied came prior to wiphy
> > + * 	registration by the driver itself using some custom regulatory
> > + * 	information.
> 
> This is unnecessary, I think.

I'll make note of it below.

> > +/**
> > + * 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
> > + * @bandwidth: the bandwidth requirement you have in KHz, if you do not have one
> > + * 	you can set this to 0. If this frequency is allowed we then set
> > + * 	this value to the maximum allowed bandwidth.
> > + * @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.
> > + */
> > +static int freq_reg_info(struct wiphy *wiphy, u32 center_freq, u32 *bandwidth,
> > +			 const struct ieee80211_reg_rule **reg_rule)
> > +{
> > +	return freq_reg_info_regd(wiphy, center_freq,
> > +		bandwidth, reg_rule, NULL);
> > +}
> 
> Are you not using this or am I just not seeing the user?

Yeah -- good catch, its just cruft left over from my previous work.

> > +static void handle_channel_custom(struct wiphy *wiphy,
> > +				  enum ieee80211_band band,
> > +				  unsigned int chan_idx,
> > +				  const struct ieee80211_regdomain *regd)
> > +{
> > +	int r;
> > +	u32 max_bandwidth = 0;
> > +	const struct ieee80211_reg_rule *reg_rule = NULL;
> > +	const struct ieee80211_power_rule *power_rule = NULL;
> > +	struct ieee80211_supported_band *sband;
> > +	struct ieee80211_channel *chan;
> > +
> > +	sband = wiphy->bands[band];
> > +	BUG_ON(chan_idx >= sband->n_channels);
> > +	chan = &sband->channels[chan_idx];
> > +
> > +	r = freq_reg_info_regd(wiphy, MHZ_TO_KHZ(chan->center_freq),
> > +		&max_bandwidth, &reg_rule, regd);
> > +
> > +	if (r) {
> > +		chan->flags = IEEE80211_CHAN_DISABLED;
> > +		return;
> > +	}
> > +
> > +	power_rule = &reg_rule->power_rule;
> > +
> > +	chan->flags |= map_regdom_flags(reg_rule->flags);
> > +	chan->max_antenna_gain = (int) MBI_TO_DBI(power_rule->max_antenna_gain);
> > +	chan->max_bandwidth = KHZ_TO_MHZ(max_bandwidth);
> > +	chan->max_power = (int) MBM_TO_DBM(power_rule->max_eirp);
> > +}
> > +
> > +
> >  static void handle_band(struct wiphy *wiphy, enum ieee80211_band band)
> >  {
> >  	unsigned int i;
> > @@ -947,6 +989,19 @@ static void handle_band(struct wiphy *wiphy, enum ieee80211_band band)
> >  		handle_channel(wiphy, band, i);
> >  }
> >  
> > +static void handle_band_custom(struct wiphy *wiphy, enum ieee80211_band band,
> > +			       const struct ieee80211_regdomain *regd)
> > +{
> > +	unsigned int i;
> > +	struct ieee80211_supported_band *sband;
> > +
> > +	BUG_ON(!wiphy->bands[band]);
> > +	sband = wiphy->bands[band];
> > +
> > +	for (i = 0; i < sband->n_channels; i++)
> > +		handle_channel_custom(wiphy, band, i, regd);
> > +}
> > +
> >  static bool ignore_reg_update(struct wiphy *wiphy, enum reg_set_by setby)
> >  {
> >  	if (!last_request)
> > @@ -977,6 +1032,20 @@ void wiphy_update_regulatory(struct wiphy *wiphy, enum reg_set_by setby)
> >  		wiphy->reg_notifier(wiphy, setby);
> >  }
> >  
> > +/* Used by drivers prior to wiphy registration */
> > +void wiphy_apply_custom_regulatory(struct wiphy *wiphy,
> > +				   const struct ieee80211_regdomain *regd)
> > +{
> > +	enum ieee80211_band band;
> > +	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
> > +		if (wiphy->bands[band])
> > +			handle_band_custom(wiphy, band, regd);
> > +	}
> > +	if (wiphy->reg_notifier)
> > +		wiphy->reg_notifier(wiphy, REGDOM_SET_BY_PROBE);
> > +}
> > +EXPORT_SYMBOL(wiphy_apply_custom_regulatory);
> 
> Can you group all these functions together, rather than interspersing
> them with the others?

Yeah sure.

> Also, I don't think calling the notifier is
> appropriate since the driver just called this function.

Calling the notifier is why we want REGDOM_SET_BY_PROBE. We also technically
do not need to call the notifier unless we want to allow for tricks like the
one I am using in ath9k to condense the regulatory domains to 5 based on frequency
and to let a helper sort out the flags. Without this I believe we'd be forced to
use 12 full blown regds.

  Luis

  reply	other threads:[~2009-01-16 16:37 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-16  0:12 [PATCH 00/13] cfg80211/mac80211: fixes/enhancements for reg_notifier() Luis R. Rodriguez
2009-01-16  0:12 ` [PATCH 01/13] cfg80211: print correct intersected regulatory domain Luis R. Rodriguez
2009-01-16  0:12   ` [PATCH 02/13] cfg80211: add option for wiphys to disregard country IEs Luis R. Rodriguez
2009-01-16  0:12     ` [PATCH 03/13] cfg80211: add wiphy_apply_custom_regulatory() Luis R. Rodriguez
     [not found]       ` <1232064746-17134-5-git-send-email-lrodriguez@atheros.com>
2009-01-16  0:12         ` [PATCH 05/13] cfg80211: Fix sanity check on 5 GHz when processing country IE Luis R. Rodriguez
2009-01-16  0:12           ` [PATCH 06/13] cfg80211: process user requests only after previous user/driver/core requests Luis R. Rodriguez
2009-01-16  0:12             ` [PATCH 07/13] cfg80211: only export disable flag on channel disablement Luis R. Rodriguez
2009-01-16  9:23               ` Johannes Berg
2009-01-16 16:32                 ` Luis R. Rodriguez
2009-01-16 20:35                   ` Johannes Berg
2009-01-16 21:09                     ` Luis R. Rodriguez
2009-01-18  8:48                       ` Johannes Berg
2009-01-18 15:30                         ` Luis R. Rodriguez
2009-01-18 17:13                           ` Johannes Berg
2009-01-18 17:39                             ` Luis R. Rodriguez
     [not found]               ` <1232064746-17134-9-git-send-email-lrodriguez@atheros.com>
2009-01-16  0:12                 ` [PATCH 09/13] cfg80211: rename fw_handles_regulatory to custom_regulatory Luis R. Rodriguez
2009-01-16  0:12                   ` [PATCH 10/13] cfg80211: remove check for last_request on ignore_reg_update() Luis R. Rodriguez
2009-01-16  0:12                     ` [PATCH 11/13] cfg80211: move check for ignore_reg_update() on wiphy_update_regulatory() Luis R. Rodriguez
2009-01-16  0:12                       ` [PATCH 12/13] mac80211: allow mac80211 drivers to get to struct ieee80211_hw from wiphy Luis R. Rodriguez
2009-01-16  0:12                         ` [PATCH 13/13] cfg80211: Remove CONFIG_WIRELESS_OLD_REGULATORY Luis R. Rodriguez
2009-01-16  9:28                           ` Johannes Berg
2009-01-16 15:14                             ` John W. Linville
2009-01-16  9:27                         ` [PATCH 12/13] mac80211: allow mac80211 drivers to get to struct ieee80211_hw from wiphy Johannes Berg
2009-01-16  9:27                       ` [PATCH 11/13] cfg80211: move check for ignore_reg_update() on wiphy_update_regulatory() Johannes Berg
2009-01-16  9:26                     ` [PATCH 10/13] cfg80211: remove check for last_request on ignore_reg_update() Johannes Berg
2009-01-16 16:27                       ` Luis R. Rodriguez
2009-01-16 20:33                         ` Johannes Berg
2009-01-16 21:02                           ` Luis R. Rodriguez
2009-01-16  9:25                   ` [PATCH 09/13] cfg80211: rename fw_handles_regulatory to custom_regulatory Johannes Berg
2009-01-16  9:25                 ` [PATCH 08/13] cfg80211: save original values on regulatory hints Johannes Berg
2009-01-16 16:31                   ` Luis R. Rodriguez
2009-01-16 20:34                     ` Johannes Berg
2009-01-16 21:06                       ` Luis R. Rodriguez
2009-01-18  8:47                         ` Johannes Berg
2009-01-18 15:28                           ` Luis R. Rodriguez
2009-01-18 17:12                             ` Johannes Berg
2009-01-18 17:38                               ` Luis R. Rodriguez
2009-01-16  9:22             ` [PATCH 06/13] cfg80211: process user requests only after previous user/driver/core requests Johannes Berg
2009-01-16  9:21           ` [PATCH 05/13] cfg80211: Fix sanity check on 5 GHz when processing country IE Johannes Berg
2009-01-16  9:20       ` [PATCH 03/13] cfg80211: add wiphy_apply_custom_regulatory() Johannes Berg
2009-01-16 16:36         ` Luis R. Rodriguez [this message]
2009-01-16 20:37           ` Johannes Berg
2009-01-16 21:12             ` Luis R. Rodriguez
2009-01-16 22:13           ` Luis R. Rodriguez
2009-01-17  9:30             ` Johannes Berg
2009-01-17 22:06               ` Luis R. Rodriguez
2009-01-18  8:49                 ` Johannes Berg
2009-01-18 15:31                   ` Luis R. Rodriguez
2009-01-18 17:15                     ` Johannes Berg
2009-01-16  9:17     ` [PATCH 02/13] cfg80211: add option for wiphys to disregard country IEs Johannes Berg
2009-01-16 16:40       ` Luis R. Rodriguez
2009-01-16 20:38         ` Johannes Berg
2009-01-16 21:13           ` Luis R. Rodriguez
2009-01-16  9:16   ` [PATCH 01/13] cfg80211: print correct intersected regulatory domain Johannes Berg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090116163646.GG29609@tesla \
    --to=lrodriguez@atheros.com \
    --cc=Luis.Rodriguez@Atheros.com \
    --cc=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.