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

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
...@@ -3189,14 +3189,18 @@ static int iwl_mvm_pre_channel_switch(struct ieee80211_hw *hw, ...@@ -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:
......
...@@ -87,12 +87,17 @@ ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment