|
@@ -674,6 +674,41 @@ static int ieee80211_get_station(struct wiphy *wiphy, struct net_device *dev,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static int ieee80211_set_channel(struct wiphy *wiphy,
|
|
|
+ struct net_device *netdev,
|
|
|
+ struct ieee80211_channel *chan,
|
|
|
+ enum nl80211_channel_type channel_type)
|
|
|
+{
|
|
|
+ struct ieee80211_local *local = wiphy_priv(wiphy);
|
|
|
+ struct ieee80211_sub_if_data *sdata = NULL;
|
|
|
+
|
|
|
+ if (netdev)
|
|
|
+ sdata = IEEE80211_DEV_TO_SUB_IF(netdev);
|
|
|
+
|
|
|
+ switch (ieee80211_get_channel_mode(local, NULL)) {
|
|
|
+ case CHAN_MODE_HOPPING:
|
|
|
+ return -EBUSY;
|
|
|
+ case CHAN_MODE_FIXED:
|
|
|
+ if (local->oper_channel != chan)
|
|
|
+ return -EBUSY;
|
|
|
+ if (!sdata && local->_oper_channel_type == channel_type)
|
|
|
+ return 0;
|
|
|
+ break;
|
|
|
+ case CHAN_MODE_UNDEFINED:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!ieee80211_set_channel_type(local, sdata, channel_type))
|
|
|
+ return -EBUSY;
|
|
|
+
|
|
|
+ local->oper_channel = chan;
|
|
|
+
|
|
|
+ /* auto-detects changes */
|
|
|
+ ieee80211_hw_config(local, 0);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata,
|
|
|
const u8 *resp, size_t resp_len)
|
|
|
{
|
|
@@ -1677,41 +1712,6 @@ static int ieee80211_set_txq_params(struct wiphy *wiphy,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int ieee80211_set_channel(struct wiphy *wiphy,
|
|
|
- struct net_device *netdev,
|
|
|
- struct ieee80211_channel *chan,
|
|
|
- enum nl80211_channel_type channel_type)
|
|
|
-{
|
|
|
- struct ieee80211_local *local = wiphy_priv(wiphy);
|
|
|
- struct ieee80211_sub_if_data *sdata = NULL;
|
|
|
-
|
|
|
- if (netdev)
|
|
|
- sdata = IEEE80211_DEV_TO_SUB_IF(netdev);
|
|
|
-
|
|
|
- switch (ieee80211_get_channel_mode(local, NULL)) {
|
|
|
- case CHAN_MODE_HOPPING:
|
|
|
- return -EBUSY;
|
|
|
- case CHAN_MODE_FIXED:
|
|
|
- if (local->oper_channel != chan)
|
|
|
- return -EBUSY;
|
|
|
- if (!sdata && local->_oper_channel_type == channel_type)
|
|
|
- return 0;
|
|
|
- break;
|
|
|
- case CHAN_MODE_UNDEFINED:
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- if (!ieee80211_set_channel_type(local, sdata, channel_type))
|
|
|
- return -EBUSY;
|
|
|
-
|
|
|
- local->oper_channel = chan;
|
|
|
-
|
|
|
- /* auto-detects changes */
|
|
|
- ieee80211_hw_config(local, 0);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
#ifdef CONFIG_PM
|
|
|
static int ieee80211_suspend(struct wiphy *wiphy,
|
|
|
struct cfg80211_wowlan *wowlan)
|