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:
committed by
John W. Linville
parent
7c9c46c16d
commit
e8c9bd5b8d
@@ -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;
|
||||
|
Reference in New Issue
Block a user