--- 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;