diff options
Diffstat (limited to 'net/wireless/wext-compat.c')
| -rw-r--r-- | net/wireless/wext-compat.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c index a60a2773b497..96342993cf93 100644 --- a/net/wireless/wext-compat.c +++ b/net/wireless/wext-compat.c | |||
| @@ -782,16 +782,22 @@ int cfg80211_wext_siwfreq(struct net_device *dev, | |||
| 782 | return cfg80211_mgd_wext_siwfreq(dev, info, wextfreq, extra); | 782 | return cfg80211_mgd_wext_siwfreq(dev, info, wextfreq, extra); |
| 783 | case NL80211_IFTYPE_ADHOC: | 783 | case NL80211_IFTYPE_ADHOC: |
| 784 | return cfg80211_ibss_wext_siwfreq(dev, info, wextfreq, extra); | 784 | return cfg80211_ibss_wext_siwfreq(dev, info, wextfreq, extra); |
| 785 | default: | 785 | case NL80211_IFTYPE_MONITOR: |
| 786 | case NL80211_IFTYPE_WDS: | ||
| 787 | case NL80211_IFTYPE_MESH_POINT: | ||
| 786 | freq = cfg80211_wext_freq(wdev->wiphy, wextfreq); | 788 | freq = cfg80211_wext_freq(wdev->wiphy, wextfreq); |
| 787 | if (freq < 0) | 789 | if (freq < 0) |
| 788 | return freq; | 790 | return freq; |
| 789 | if (freq == 0) | 791 | if (freq == 0) |
| 790 | return -EINVAL; | 792 | return -EINVAL; |
| 793 | wdev_lock(wdev); | ||
| 791 | mutex_lock(&rdev->devlist_mtx); | 794 | mutex_lock(&rdev->devlist_mtx); |
| 792 | err = rdev_set_freq(rdev, NULL, freq, NL80211_CHAN_NO_HT); | 795 | err = cfg80211_set_freq(rdev, wdev, freq, NL80211_CHAN_NO_HT); |
| 793 | mutex_unlock(&rdev->devlist_mtx); | 796 | mutex_unlock(&rdev->devlist_mtx); |
| 797 | wdev_unlock(wdev); | ||
| 794 | return err; | 798 | return err; |
| 799 | default: | ||
| 800 | return -EOPNOTSUPP; | ||
| 795 | } | 801 | } |
| 796 | } | 802 | } |
| 797 | EXPORT_SYMBOL_GPL(cfg80211_wext_siwfreq); | 803 | EXPORT_SYMBOL_GPL(cfg80211_wext_siwfreq); |
| @@ -801,7 +807,6 @@ int cfg80211_wext_giwfreq(struct net_device *dev, | |||
| 801 | struct iw_freq *freq, char *extra) | 807 | struct iw_freq *freq, char *extra) |
| 802 | { | 808 | { |
| 803 | struct wireless_dev *wdev = dev->ieee80211_ptr; | 809 | struct wireless_dev *wdev = dev->ieee80211_ptr; |
| 804 | struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); | ||
| 805 | 810 | ||
| 806 | switch (wdev->iftype) { | 811 | switch (wdev->iftype) { |
| 807 | case NL80211_IFTYPE_STATION: | 812 | case NL80211_IFTYPE_STATION: |
| @@ -809,9 +814,9 @@ int cfg80211_wext_giwfreq(struct net_device *dev, | |||
| 809 | case NL80211_IFTYPE_ADHOC: | 814 | case NL80211_IFTYPE_ADHOC: |
| 810 | return cfg80211_ibss_wext_giwfreq(dev, info, freq, extra); | 815 | return cfg80211_ibss_wext_giwfreq(dev, info, freq, extra); |
| 811 | default: | 816 | default: |
| 812 | if (!rdev->channel) | 817 | if (!wdev->channel) |
| 813 | return -EINVAL; | 818 | return -EINVAL; |
| 814 | freq->m = rdev->channel->center_freq; | 819 | freq->m = wdev->channel->center_freq; |
| 815 | freq->e = 6; | 820 | freq->e = 6; |
| 816 | return 0; | 821 | return 0; |
| 817 | } | 822 | } |
