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

Commit 33787fc4 authored by Luciano Coelho's avatar Luciano Coelho Committed by Johannes Berg
Browse files

mac80211: move csa_chandef to sdata



There is no reason why we should have only one channel switch
announcement at a time for a single phy.  When support for channel
switch with multiple contexts and multiple vifs per context is
implemented, we will need the chandef data for each vif.  Move the
csa_chandef structure to sdata to prepare for this.

Reviewed-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarLuciano Coelho <luciano.coelho@intel.com>
[Fixed compilation with mesh]
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent f63f8421
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -2990,13 +2990,12 @@ void ieee80211_csa_finalize_work(struct work_struct *work)
		return;

	sdata->radar_required = sdata->csa_radar_required;
	err = ieee80211_vif_change_channel(sdata, &local->csa_chandef,
					   &changed);
	err = ieee80211_vif_change_channel(sdata, &changed);
	if (WARN_ON(err < 0))
		return;

	if (!local->use_chanctx) {
		local->_oper_chandef = local->csa_chandef;
		local->_oper_chandef = sdata->csa_chandef;
		ieee80211_hw_config(local, 0);
	}

@@ -3033,7 +3032,7 @@ void ieee80211_csa_finalize_work(struct work_struct *work)
					IEEE80211_MAX_QUEUE_MAP,
					IEEE80211_QUEUE_STOP_REASON_CSA);

	cfg80211_ch_switch_notify(sdata->dev, &local->csa_chandef);
	cfg80211_ch_switch_notify(sdata->dev, &sdata->csa_chandef);
}

static int ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
@@ -3158,7 +3157,7 @@ static int ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
				IEEE80211_MAX_QUEUE_MAP,
				IEEE80211_QUEUE_STOP_REASON_CSA);

	local->csa_chandef = params->chandef;
	sdata->csa_chandef = params->chandef;
	sdata->vif.csa_active = true;

	ieee80211_bss_info_change_notify(sdata, err);
+1 −1
Original line number Diff line number Diff line
@@ -411,12 +411,12 @@ int ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata,
}

int ieee80211_vif_change_channel(struct ieee80211_sub_if_data *sdata,
				 const struct cfg80211_chan_def *chandef,
				 u32 *changed)
{
	struct ieee80211_local *local = sdata->local;
	struct ieee80211_chanctx_conf *conf;
	struct ieee80211_chanctx *ctx;
	const struct cfg80211_chan_def *chandef = &sdata->csa_chandef;
	int ret;
	u32 chanctx_changed = 0;

+3 −3
Original line number Diff line number Diff line
@@ -550,12 +550,12 @@ int ieee80211_ibss_finish_csa(struct ieee80211_sub_if_data *sdata)
					capability);
		/* XXX: should not really modify cfg80211 data */
		if (cbss) {
			cbss->channel = sdata->local->csa_chandef.chan;
			cbss->channel = sdata->csa_chandef.chan;
			cfg80211_put_bss(sdata->local->hw.wiphy, cbss);
		}
	}

	ifibss->chandef = sdata->local->csa_chandef;
	ifibss->chandef = sdata->csa_chandef;

	/* generate the beacon */
	err = ieee80211_ibss_csa_beacon(sdata, NULL);
@@ -922,7 +922,7 @@ ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata,
				IEEE80211_MAX_QUEUE_MAP,
				IEEE80211_QUEUE_STOP_REASON_CSA);

	sdata->local->csa_chandef = params.chandef;
	sdata->csa_chandef = params.chandef;
	sdata->vif.csa_active = true;

	ieee80211_bss_info_change_notify(sdata, err);
+1 −2
Original line number Diff line number Diff line
@@ -736,6 +736,7 @@ struct ieee80211_sub_if_data {
	int csa_counter_offset_beacon;
	int csa_counter_offset_presp;
	bool csa_radar_required;
	struct cfg80211_chan_def csa_chandef;

	/* used to reconfigure hardware SM PS */
	struct work_struct recalc_smps;
@@ -1094,7 +1095,6 @@ struct ieee80211_local {
	enum mac80211_scan_state next_scan_state;
	struct delayed_work scan_work;
	struct ieee80211_sub_if_data __rcu *scan_sdata;
	struct cfg80211_chan_def csa_chandef;
	/* For backward compatibility only -- do not use */
	struct cfg80211_chan_def _oper_chandef;

@@ -1731,7 +1731,6 @@ ieee80211_vif_change_bandwidth(struct ieee80211_sub_if_data *sdata,
/* NOTE: only use ieee80211_vif_change_channel() for channel switch */
int __must_check
ieee80211_vif_change_channel(struct ieee80211_sub_if_data *sdata,
			     const struct cfg80211_chan_def *chandef,
			     u32 *changed);
void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata);
void ieee80211_vif_vlan_copy_chanctx(struct ieee80211_sub_if_data *sdata);
+1 −1
Original line number Diff line number Diff line
@@ -956,7 +956,7 @@ ieee80211_mesh_process_chnswitch(struct ieee80211_sub_if_data *sdata,
				IEEE80211_MAX_QUEUE_MAP,
				IEEE80211_QUEUE_STOP_REASON_CSA);

	sdata->local->csa_chandef = params.chandef;
	sdata->csa_chandef = params.chandef;
	sdata->vif.csa_active = true;

	ieee80211_bss_info_change_notify(sdata, err);
Loading