Linux wireless drivers development
 help / color / mirror / Atom feed
From: Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>,
	linux-wireless@vger.kernel.org, victorg@ti.com,
	linville@tuxdriver.com, kgiori@qca.qualcomm.com,
	zefir.kurtisi@neratec.com, adrian@freebsd.org, j@w1.fi,
	coelho@ti.com, igalc@ti.com, nbd@nbd.name,
	mathias.kretschmer@fokus.fraunhofer.de,
	Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
Subject: Re: [PATCHv8 1/3] nl80211/cfg80211: add radar detection command/event
Date: Thu, 7 Feb 2013 12:00:49 +0100	[thread overview]
Message-ID: <20130207110047.GA26957@pandem0nium> (raw)
In-Reply-To: <1360171448.7910.43.camel@jlt4.sipsolutions.net>

[-- Attachment #1: Type: text/plain, Size: 5372 bytes --]

On Wed, Feb 06, 2013 at 06:24:08PM +0100, Johannes Berg wrote:
> On Mon, 2013-02-04 at 13:49 +0100, Simon Wunderlich wrote:
> 
> >  /**
> > + * cfg80211_chandef_dfs_required - checks if radar detection
> > + *	is required on any of the channels
> 
> pretty sure this isn't valid kernel-doc, I think it has to fit into one
> line
> 
OK
> > @@ -3663,6 +3694,21 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev,
> >  			      gfp_t gfp);
> >  
> >  /**
> > + * cfg80211_radar_event - radar detection event
> > + * @dev: network device
> > + * @chandef: chandef for the current channel
> > + * @event: type of event
> > + * @gfp: context flags
> > + *
> > + * This function is called when a radar is detected or a CAC event occured
> 
> occurred :)
> 
> 
OK
> > @@ -2014,6 +2029,7 @@ enum nl80211_band_attr {
> >   *	(100 * dBm).
> >   * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
> >   *	currently defined
> > + * @NL80211_FREQUENCY_ATTR_DFS_STATE: current state for DFS
> 
> missed docs for _DFS_TIME, maybe should put it before _MAX :)
> also, what values does this take?
> 
Yeah, I'll fix that. States are the DFS states below.

> > +/**
> > + * enum nl80211_dfs_state - DFS states for channels
> > + *
> > + * Channel states used by the DFS code.
> > + *
> > + * @IEEE80211_DFS_USABLE: The channel can be used, but channel availability
> > + *	check (CAC) must be performed before using it for AP or IBSS.
> > + * @IEEE80211_DFS_UNAVAILABLE: A radar has been detected on this channel, it
> > + *	is therefore marked as not available.
> > + * @IEEE80211_DFS_AVAILABLE: The channel has been CAC checked and is available.
> > + */
> > +
> > +enum nl80211_dfs_state {
> > +	NL80211_DFS_USABLE	= 0,
> 
> I don't really see a reason for explicit values?
> 

You've suggested explicit values yourself last time [1], or did I misunderstand?

[1] http://article.gmane.org/gmane.linux.kernel.wireless.general/103278
"Should UNAVAILABLE be = 0, so that's the default?" (usable should be the default, btw)

> > +static inline int cfg80211_chandef_get_width(const struct cfg80211_chan_def *c)
> 
> no need for inline
> 
OK

> > +int cfg80211_chandef_dfs_required(struct wiphy *wiphy,
> > +				  const struct cfg80211_chan_def *chandef)
> > +{
> > +	int width;
> > +	int r;
> > +
> > +	if (WARN_ON(!cfg80211_chandef_valid(chandef)))
> > +		return -EINVAL;
> > +
> > +	width = cfg80211_chandef_get_width(chandef);
> > +	if (width < 0)
> > +		return -EINVAL;
> > +
> > +	r = cfg80211_get_chans_dfs_required(wiphy, chandef->center_freq1,
> > +					    width);
> > +	if (r)
> > +		return r;
> > +
> > +	if (!chandef->center_freq2)
> > +		return 0;
> > +
> > +	return cfg80211_get_chans_dfs_required(wiphy, chandef->center_freq2,
> > +					       width);
> > +}
> 
> If you don't export it why is it in the public header file -- either you
> need to export it as well or it doesn't need to be in cfg80211.h :)
> 

right, will move it into net/wireless/core.h

> > @@ -454,6 +462,16 @@ cfg80211_can_use_chan(struct cfg80211_registered_device *rdev,
> >  					    chan, chanmode, 0);
> >  }
> >  
> > +static inline unsigned int elapsed_jiffies_msecs(unsigned long start)
> > +{
> > +	unsigned long end = jiffies;
> > +
> > +	if (end >= start)
> > +		return jiffies_to_msecs(end - start);
> > +
> > +	return jiffies_to_msecs(end + (MAX_JIFFY_OFFSET - start) + 1);
> > +}
> 
> That seems a bit magic, like it should be hidden away in jiffies.h. Is
> there really no function already to do something like this?
> 

I've just moved this magic function from scan.c to core.h because I need it too.
It appears another driver (drivers/net/wireless/ipw2x00) also implements this
privately. We can suggest this patch for include/linux/jiffies.h if you prefer.

> > +static void cfg80211_notify_nop_ended(struct cfg80211_registered_device *rdev,
> > +					struct ieee80211_channel *c)
> 
> indentation :)
> 

OK

> > +{
> > +	struct wireless_dev *wdev;
> > +	struct cfg80211_chan_def chandef;
> > +
> > +	cfg80211_chandef_create(&chandef, c, NL80211_CHAN_NO_HT);
> > +
> > +	mutex_lock(&rdev->devlist_mtx);
> > +	list_for_each_entry(wdev, &rdev->wdev_list, list) {
> > +		if (!wdev->netdev)
> > +			continue;
> > +
> > +		if (!netif_running(wdev->netdev))
> > +			continue;
> > +
> > +		nl80211_radar_notify(rdev, &chandef,
> > +				     NL80211_RADAR_NOP_FINISHED,
> > +				     wdev->netdev, GFP_ATOMIC);
> > +	}
> 
> Why for all interfaces? This is multicast anyway, so why not just send
> the event without an interface index instead?
> 

Hmm. I'll try. ;)

> > --- a/net/wireless/scan.c
> > +++ b/net/wireless/scan.c
> > @@ -1155,16 +1155,6 @@ static void ieee80211_scan_add_ies(struct iw_request_info *info,
> >  	}
> >  }
> >  
> > -static inline unsigned int elapsed_jiffies_msecs(unsigned long start)
> > -{
> > -	unsigned long end = jiffies;
> > -
> > -	if (end >= start)
> > -		return jiffies_to_msecs(end - start);
> > -
> > -	return jiffies_to_msecs(end + (MAX_JIFFY_OFFSET - start) + 1);
> > -}
> 
> Oh, heh. Oh well ...

:P

> 
> I think I should probably look at locking too ...

Would be a good idea. I'll verify with lockdep enabled too, didn't do it so far.

Thanks!
	Simon

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

  reply	other threads:[~2013-02-07 11:01 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-04 12:49 [PATCHv8 0/3] Add DFS master ability Simon Wunderlich
2013-02-04 12:49 ` [PATCHv8 1/3] nl80211/cfg80211: add radar detection command/event Simon Wunderlich
2013-02-06 17:24   ` Johannes Berg
2013-02-07 11:00     ` Simon Wunderlich [this message]
2013-02-07 11:07       ` Johannes Berg
2013-02-04 12:49 ` [PATCHv8 2/3] mac80211: " Simon Wunderlich
2013-02-06 17:33   ` Johannes Berg
2013-02-07 11:08     ` Simon Wunderlich
2013-02-06 17:36   ` Johannes Berg
2013-02-07 11:10     ` Simon Wunderlich
2013-02-04 12:49 ` [PATCHv8 3/3] nl80211: allow DFS in start_ap Simon Wunderlich
2013-02-06 17:36   ` Johannes Berg
2013-02-07 11:11     ` Simon Wunderlich
2013-02-04 12:49 ` [PATCH 1/2] iw: add radar detect widths to phy info Simon Wunderlich
2013-02-04 12:50 ` [PATCH 2/2] iw: print DFS states for channels if available Simon Wunderlich

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=20130207110047.GA26957@pandem0nium \
    --to=simon.wunderlich@s2003.tu-chemnitz.de \
    --cc=adrian@freebsd.org \
    --cc=coelho@ti.com \
    --cc=igalc@ti.com \
    --cc=j@w1.fi \
    --cc=johannes@sipsolutions.net \
    --cc=kgiori@qca.qualcomm.com \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=mathias.kretschmer@fokus.fraunhofer.de \
    --cc=nbd@nbd.name \
    --cc=siwu@hrz.tu-chemnitz.de \
    --cc=victorg@ti.com \
    --cc=zefir.kurtisi@neratec.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox