Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3d9e6e12 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville
Browse files

mac80211: move ieee80211_set_channel function



Move the set_channel function up so it can be used
by other code in this file in the future.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 8a2ac260
Loading
Loading
Loading
Loading
+35 −35
Original line number Original line Diff line number Diff line
@@ -674,6 +674,41 @@ static int ieee80211_get_station(struct wiphy *wiphy, struct net_device *dev,
	return ret;
	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,
static int ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata,
				    const u8 *resp, size_t resp_len)
				    const u8 *resp, size_t resp_len)
{
{
@@ -1677,41 +1712,6 @@ static int ieee80211_set_txq_params(struct wiphy *wiphy,
	return 0;
	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
#ifdef CONFIG_PM
static int ieee80211_suspend(struct wiphy *wiphy,
static int ieee80211_suspend(struct wiphy *wiphy,
			     struct cfg80211_wowlan *wowlan)
			     struct cfg80211_wowlan *wowlan)