From b3eea0e9a17679a580b13bf586018cb07f0f9b29 Mon Sep 17 00:00:00 2001 From: nbd Date: Sun, 17 Jan 2010 03:07:51 +0000 Subject: mac80211: allow user space to query the current operating frequency git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19178 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../mac80211/patches/560-nl80211_get_freq.patch | 47 ++++++++++++++++++++++ .../mac80211/patches/570-mac80211_get_freq.patch | 29 +++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 package/mac80211/patches/560-nl80211_get_freq.patch create mode 100644 package/mac80211/patches/570-mac80211_get_freq.patch (limited to 'package/mac80211') diff --git a/package/mac80211/patches/560-nl80211_get_freq.patch b/package/mac80211/patches/560-nl80211_get_freq.patch new file mode 100644 index 000000000..25d915473 --- /dev/null +++ b/package/mac80211/patches/560-nl80211_get_freq.patch @@ -0,0 +1,47 @@ +--- a/include/net/cfg80211.h ++++ b/include/net/cfg80211.h +@@ -954,6 +954,8 @@ struct cfg80211_pmksa { + * + * @set_txq_params: Set TX queue parameters + * ++ * @get_channel: Get operating channel ++ * + * @set_channel: Set channel + * + * @scan: Request to do a scan. If returning zero, the scan request is given +@@ -1079,6 +1081,10 @@ struct cfg80211_ops { + int (*set_txq_params)(struct wiphy *wiphy, + struct ieee80211_txq_params *params); + ++ int (*get_channel)(struct wiphy *wiphy, ++ struct ieee80211_channel **chan, ++ enum nl80211_channel_type *channel_type); ++ + int (*set_channel)(struct wiphy *wiphy, + struct ieee80211_channel *chan, + enum nl80211_channel_type channel_type); +--- a/net/wireless/nl80211.c ++++ b/net/wireless/nl80211.c +@@ -427,7 +427,8 @@ static int nl80211_send_wiphy(struct sk_ + struct nlattr *nl_modes; + struct nlattr *nl_cmds; + enum ieee80211_band band; +- struct ieee80211_channel *chan; ++ struct ieee80211_channel *chan = NULL; ++ enum nl80211_channel_type chan_type; + struct ieee80211_rate *rate; + int i; + u16 ifmodes = dev->wiphy.interface_modes; +@@ -465,6 +466,12 @@ static int nl80211_send_wiphy(struct sk_ + NLA_PUT_U8(msg, NL80211_ATTR_MAX_NUM_PMKIDS, + dev->wiphy.max_num_pmkids); + ++ if (dev->ops->get_channel && ++ dev->ops->get_channel(&dev->wiphy, &chan, &chan_type) == 0) { ++ NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, chan->center_freq); ++ NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, chan_type); ++ } ++ + nl_modes = nla_nest_start(msg, NL80211_ATTR_SUPPORTED_IFTYPES); + if (!nl_modes) + goto nla_put_failure; diff --git a/package/mac80211/patches/570-mac80211_get_freq.patch b/package/mac80211/patches/570-mac80211_get_freq.patch new file mode 100644 index 000000000..073fe6386 --- /dev/null +++ b/package/mac80211/patches/570-mac80211_get_freq.patch @@ -0,0 +1,29 @@ +--- a/net/mac80211/cfg.c ++++ b/net/mac80211/cfg.c +@@ -1154,6 +1154,18 @@ static int ieee80211_set_txq_params(stru + return 0; + } + ++static int ieee80211_get_oper_channel(struct wiphy *wiphy, ++ struct ieee80211_channel **chan, ++ enum nl80211_channel_type *channel_type) ++{ ++ struct ieee80211_local *local = wiphy_priv(wiphy); ++ ++ *chan = local->oper_channel; ++ *channel_type = local->oper_channel_type; ++ ++ return 0; ++} ++ + static int ieee80211_set_channel(struct wiphy *wiphy, + struct ieee80211_channel *chan, + enum nl80211_channel_type channel_type) +@@ -1494,6 +1506,7 @@ struct cfg80211_ops mac80211_config_ops + #endif + .change_bss = ieee80211_change_bss, + .set_txq_params = ieee80211_set_txq_params, ++ .get_channel = ieee80211_get_oper_channel, + .set_channel = ieee80211_set_channel, + .suspend = ieee80211_suspend, + .resume = ieee80211_resume, -- cgit v1.2.3