cfg80211: clarify set_channel APIs

Now that we've removed all uses of the set_channel
API except for the monitor channel and in libertas,
clarify this. Split the libertas mesh use into a
new libertas_set_mesh_channel() operation, just to
keep backward compatibility, and rename the normal
set_channel() to set_monitor_channel().

Also describe the desired set_monitor_channel()
semantics more clearly.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Johannes Berg
2012-06-06 08:18:22 +02:00
committed by John W. Linville
parent 7c9c46c16d
commit e8c9bd5b8d
13 changed files with 100 additions and 106 deletions

View File

@@ -179,6 +179,13 @@ int cfg80211_set_mesh_freq(struct cfg80211_registered_device *rdev,
{
struct ieee80211_channel *channel;
channel = rdev_freq_to_chan(rdev, freq, channel_type);
if (!channel || !cfg80211_can_beacon_sec_chan(&rdev->wiphy,
channel,
channel_type)) {
return -EINVAL;
}
/*
* Workaround for libertas (only!), it puts the interface
* into mesh mode but doesn't implement join_mesh. Instead,
@@ -186,27 +193,20 @@ int cfg80211_set_mesh_freq(struct cfg80211_registered_device *rdev,
* you set the channel. Note that the libertas mesh isn't
* compatible with 802.11 mesh.
*/
if (!rdev->ops->join_mesh) {
int err;
if (rdev->ops->libertas_set_mesh_channel) {
if (channel_type != NL80211_CHAN_NO_HT)
return -EINVAL;
if (!netif_running(wdev->netdev))
return -ENETDOWN;
wdev_lock(wdev);
err = cfg80211_set_freq(rdev, wdev, freq, channel_type);
wdev_unlock(wdev);
return err;
return rdev->ops->libertas_set_mesh_channel(&rdev->wiphy,
wdev->netdev,
channel);
}
if (wdev->mesh_id_len)
return -EBUSY;
channel = rdev_freq_to_chan(rdev, freq, channel_type);
if (!channel || !cfg80211_can_beacon_sec_chan(&rdev->wiphy,
channel,
channel_type)) {
return -EINVAL;
}
wdev->preset_chan = channel;
wdev->preset_chantype = channel_type;
return 0;