From: "Luis R. Rodriguez" <lrodriguez@atheros.com>
To: Helmut Schaa <hschaa@suse.de>
Cc: Luis Rodriguez <Luis.Rodriguez@Atheros.com>,
"linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>
Subject: Re: [RFC] 802.11d Country IE parsing/support
Date: Thu, 4 Sep 2008 11:15:15 -0700 [thread overview]
Message-ID: <20080904181515.GE6051@tesla> (raw)
In-Reply-To: <200809041023.11169.hschaa@suse.de>
On Thu, Sep 04, 2008 at 01:23:10AM -0700, Helmut Schaa wrote:
> Am Donnerstag, 4. September 2008 schrieb Luis R. Rodriguez:
> > static int reg_rules_intersect(
> > struct ieee80211_reg_rule *rule1,
> > struct ieee80211_reg_rule *rule2,
> > struct ieee80211_reg_rule **intersected_rule)
> > {
> > struct ieee80211_freq_range *freq_range1, *freq_range2, *freq_range;
> > struct ieee80211_power_rule *power_rule1, *power_rule2, *power_rule;
> > u32 freq_diff;
> >
> > freq_range1 = &rule1->freq_range;
> > freq_range2 = &rule2->freq_range;
> > freq_range = &(*intersected_rule)->freq_range;
> >
> > power_rule1 = &rule1->power_rule;
> > power_rule2 = &rule2->power_rule;
> > power_rule = &(*intersected_rule)->power_rule;
> >
> > freq_range->start_freq = max(freq_range1->start_freq,
> > freq_range2->start_freq);
> > freq_range->end_freq = min(freq_range1->end_freq,
> > freq_range2->end_freq);
> > freq_range->max_bandwidth = min(freq_range1->max_bandwidth,
> > freq_range2->max_bandwidth);
> >
> > freq_diff = freq_range->end_freq - freq_range->start_freq;
> > if (freq_range->max_bandwidth > freq_diff)
> > freq_range->max_bandwidth = freq_diff;
> >
> > power_rule->max_eirp = min(power_rule1->max_eirp,
> > power_rule2->max_eirp);
> > power_rule->max_eirp = min(power_rule1->max_eirp,
> > power_rule2->max_eirp);
>
> max_eirp should be max_antenna_gain in the second block, right?
Yes, thanks.
>
> > (*intersected_rule)->flags = (rule1->flags | rule2->flags);
>
> Wouldn't (rule1->flags & rule2->flags) be more feasible?
Well the flags are all negatives, so like:
* Thou shall not kill = 1 << 1
* Thou shall not send "fix" patches after merge window = 1 << 2
And you have one rule with 1 << 1 and another with 1 << 2, you'd want
both so you use "or" to be more restrictive. Using "&" would get you
the negatives they both have in common.
>
> > if (!reg_is_valid_rule(*intersected_rule))
> > return -EINVAL;
> >
> > return 0;
> > }
> >
> > static int regdom_intersect(
> > struct ieee80211_regdomain *rd1,
> > struct ieee80211_regdomain *rd2,
> > struct ieee80211_regdomain **rd)
> > {
> > int r, size_of_regd;
> > unsigned int x, y;
> > unsigned int num_rules = 0, rule_idx = 0;
> > struct ieee80211_reg_rule *rule1, *rule2, *intersected_rule;
> >
> > *rd = NULL;
> >
> > if (!rd1 || !rd2)
> > return -EINVAL;
> >
> > /* First we get a count of the rules we'll need, then we actually
> > * build them. This is to so we can kzalloc() and kfree() a
> > * regdomain once */
> >
> > for (x = 0; x < rd1->n_reg_rules; x++) {
> > rule1 = &rd1->reg_rules[x];
> > for (y = 0; y < rd2->n_reg_rules; y++) {
> > rule2 = &rd2->reg_rules[y];
> > if (!reg_rules_intersect(rule1, rule2,
> > &intersected_rule))
>
> Hmm, &intersected_rule is uninitialized here and reg_rules_intersect does not
> allocate anything.
Ah yes, since its just a temporary rule we will disregard we can use the
stack then for this, will fix, thanks.
>
> > num_rules++;
> > }
> > }
> >
> > if (!num_rules)
> > return -ENODATA;
> >
> > size_of_regd = sizeof(struct ieee80211_regdomain) +
> > (num_rules * sizeof(struct ieee80211_reg_rule));
> >
> > *rd = kzalloc(size_of_regd, GFP_KERNEL);
> > if (!*rd)
> > return -ENOMEM;
> >
> > for (x = 0; x < rd1->n_reg_rules; x++) {
> > rule1 = &rd1->reg_rules[x];
> > for (y = 0; y < rd2->n_reg_rules; y++) {
> > rule2 = &rd2->reg_rules[y];
> > r = reg_rules_intersect(rule1, rule2,
> > &intersected_rule);
>
> Same here.
Thanks, we can use the stack.
>
> > if (r)
> > continue;
> > memcpy(&(*rd)->reg_rules[rule_idx],
> > intersected_rule,
> > sizeof(intersected_rule));
>
> sizeof(*intersected_rule)?
Yes, thanks for your review!
Luis
prev parent reply other threads:[~2008-09-04 18:15 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-04 1:49 [RFC] 802.11d Country IE parsing/support Luis R. Rodriguez
2008-09-04 8:23 ` Helmut Schaa
2008-09-04 18:15 ` Luis R. Rodriguez [this message]
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=20080904181515.GE6051@tesla \
--to=lrodriguez@atheros.com \
--cc=Luis.Rodriguez@Atheros.com \
--cc=hschaa@suse.de \
--cc=linux-wireless@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).