From f2700e7c703c97ca5250863bc954616abd804101 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 17 Jan 2010 03:07:51 +0000 Subject: [PATCH] mac80211: allow user space to query the current operating frequency SVN-Revision: 19178 --- .../patches/560-nl80211_get_freq.patch | 47 +++++++++++++++++++ .../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 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 0000000000..25d915473c --- /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 0000000000..073fe6386c --- /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, -- 2.30.2