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

Commit 4500e133 authored by Luciano Coelho's avatar Luciano Coelho Committed by Emmanuel Grumbach
Browse files

iwlwifi: mvm: schedule CSA time event a bit before beacon 1



Instead of using a hardcoded number of TUs before beacon 0 as the time
to start the absence and actual channel switch, calculate it in
relation to the beacon interval.  We use 10 TUs + beacon interval
before beacon 0 to target a bit before beacon 1.  This gives us enough
time to switch to the new channel before the AP/GO switches.

Signed-off-by: default avatarLuciano Coelho <luciano.coelho@intel.com>
parent dc88b4ba
Loading
Loading
Loading
Loading
+8 −4
Original line number Original line Diff line number Diff line
@@ -3189,14 +3189,18 @@ static int iwl_mvm_pre_channel_switch(struct ieee80211_hw *hw,


		break;
		break;
	case NL80211_IFTYPE_STATION:
	case NL80211_IFTYPE_STATION:
		apply_time = chsw->timestamp +
		/* Schedule the time event to a bit before beacon 1,
			(vif->bss_conf.beacon_int * chsw->count * 1024);
		 * to make sure we're in the new channel when the
		 * GO/AP arrives.
		 */
		apply_time = chsw->device_timestamp +
			((vif->bss_conf.beacon_int * (chsw->count - 1) -
			  IWL_MVM_CHANNEL_SWITCH_TIME_CLIENT) * 1024);


		if (chsw->block_tx)
		if (chsw->block_tx)
			iwl_mvm_csa_client_absent(mvm, vif);
			iwl_mvm_csa_client_absent(mvm, vif);


		iwl_mvm_schedule_csa_period(mvm, vif,
		iwl_mvm_schedule_csa_period(mvm, vif, vif->bss_conf.beacon_int,
					    IWL_MVM_CHANNEL_SWITCH_TIME_CLIENT,
					    apply_time);
					    apply_time);
		break;
		break;
	default:
	default:
+9 −4
Original line number Original line Diff line number Diff line
@@ -87,12 +87,17 @@
/* A TimeUnit is 1024 microsecond */
/* A TimeUnit is 1024 microsecond */
#define MSEC_TO_TU(_msec)	(_msec*1000/1024)
#define MSEC_TO_TU(_msec)	(_msec*1000/1024)


/* These values represent the number of TUs before CSA "beacon 0" TBTT
/* For GO, this value represents the number of TUs before CSA "beacon
 * when the CSA time-event needs to be scheduled to start.  They must
 * 0" TBTT when the CSA time-event needs to be scheduled to start.  It
 * be big enough to ensure that we switch in time.
 * must be big enough to ensure that we switch in time.
 */
 */
#define IWL_MVM_CHANNEL_SWITCH_TIME_GO		40
#define IWL_MVM_CHANNEL_SWITCH_TIME_GO		40
#define IWL_MVM_CHANNEL_SWITCH_TIME_CLIENT	110

/* For client, this value represents the number of TUs before CSA
 * "beacon 1" TBTT, instead.  This is because we don't know when the
 * GO/AP will be in the new channel, so we switch early enough.
 */
#define IWL_MVM_CHANNEL_SWITCH_TIME_CLIENT	10


/*
/*
 * This value (in TUs) is used to fine tune the CSA NoA end time which should
 * This value (in TUs) is used to fine tune the CSA NoA end time which should