diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/cfg.c | 11 | ||||
-rw-r--r-- | net/wireless/nl80211.c | 16 | ||||
-rw-r--r-- | net/wireless/wext-compat.c | 9 |
3 files changed, 29 insertions, 7 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index e95f24eef870..10dd9631e4da 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
@@ -2982,6 +2982,16 @@ static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev, | |||
2982 | return 0; | 2982 | return 0; |
2983 | } | 2983 | } |
2984 | 2984 | ||
2985 | static struct ieee80211_channel * | ||
2986 | ieee80211_cfg_get_channel(struct wiphy *wiphy, struct wireless_dev *wdev, | ||
2987 | enum nl80211_channel_type *type) | ||
2988 | { | ||
2989 | struct ieee80211_local *local = wiphy_priv(wiphy); | ||
2990 | |||
2991 | *type = local->_oper_channel_type; | ||
2992 | return local->oper_channel; | ||
2993 | } | ||
2994 | |||
2985 | #ifdef CONFIG_PM | 2995 | #ifdef CONFIG_PM |
2986 | static void ieee80211_set_wakeup(struct wiphy *wiphy, bool enabled) | 2996 | static void ieee80211_set_wakeup(struct wiphy *wiphy, bool enabled) |
2987 | { | 2997 | { |
@@ -3062,4 +3072,5 @@ struct cfg80211_ops mac80211_config_ops = { | |||
3062 | .get_et_sset_count = ieee80211_get_et_sset_count, | 3072 | .get_et_sset_count = ieee80211_get_et_sset_count, |
3063 | .get_et_stats = ieee80211_get_et_stats, | 3073 | .get_et_stats = ieee80211_get_et_stats, |
3064 | .get_et_strings = ieee80211_get_et_strings, | 3074 | .get_et_strings = ieee80211_get_et_strings, |
3075 | .get_channel = ieee80211_cfg_get_channel, | ||
3065 | }; | 3076 | }; |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 079fc49e3975..6b001e445718 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -1759,11 +1759,17 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 pid, u32 seq, int flags, | |||
1759 | (cfg80211_rdev_list_generation << 2))) | 1759 | (cfg80211_rdev_list_generation << 2))) |
1760 | goto nla_put_failure; | 1760 | goto nla_put_failure; |
1761 | 1761 | ||
1762 | if (rdev->monitor_channel) { | 1762 | if (rdev->ops->get_channel) { |
1763 | if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, | 1763 | struct ieee80211_channel *chan; |
1764 | rdev->monitor_channel->center_freq) || | 1764 | enum nl80211_channel_type channel_type; |
1765 | nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, | 1765 | |
1766 | rdev->monitor_channel_type)) | 1766 | chan = rdev->ops->get_channel(&rdev->wiphy, wdev, |
1767 | &channel_type); | ||
1768 | if (chan && | ||
1769 | (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, | ||
1770 | chan->center_freq) || | ||
1771 | nla_put_u32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, | ||
1772 | channel_type))) | ||
1767 | goto nla_put_failure; | 1773 | goto nla_put_failure; |
1768 | } | 1774 | } |
1769 | 1775 | ||
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c index 7df42f541873..494379eb464f 100644 --- a/net/wireless/wext-compat.c +++ b/net/wireless/wext-compat.c | |||
@@ -827,6 +827,8 @@ static int cfg80211_wext_giwfreq(struct net_device *dev, | |||
827 | { | 827 | { |
828 | struct wireless_dev *wdev = dev->ieee80211_ptr; | 828 | struct wireless_dev *wdev = dev->ieee80211_ptr; |
829 | struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); | 829 | struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); |
830 | struct ieee80211_channel *chan; | ||
831 | enum nl80211_channel_type channel_type; | ||
830 | 832 | ||
831 | switch (wdev->iftype) { | 833 | switch (wdev->iftype) { |
832 | case NL80211_IFTYPE_STATION: | 834 | case NL80211_IFTYPE_STATION: |
@@ -834,10 +836,13 @@ static int cfg80211_wext_giwfreq(struct net_device *dev, | |||
834 | case NL80211_IFTYPE_ADHOC: | 836 | case NL80211_IFTYPE_ADHOC: |
835 | return cfg80211_ibss_wext_giwfreq(dev, info, freq, extra); | 837 | return cfg80211_ibss_wext_giwfreq(dev, info, freq, extra); |
836 | case NL80211_IFTYPE_MONITOR: | 838 | case NL80211_IFTYPE_MONITOR: |
837 | if (!rdev->monitor_channel) | 839 | if (!rdev->ops->get_channel) |
838 | return -EINVAL; | 840 | return -EINVAL; |
839 | 841 | ||
840 | freq->m = rdev->monitor_channel->center_freq; | 842 | chan = rdev->ops->get_channel(wdev->wiphy, wdev, &channel_type); |
843 | if (!chan) | ||
844 | return -EINVAL; | ||
845 | freq->m = chan->center_freq; | ||
841 | freq->e = 6; | 846 | freq->e = 6; |
842 | return 0; | 847 | return 0; |
843 | default: | 848 | default: |