From eeab4787d95b05a338e2a7ce125dc660c5fb232f Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Pouiller?= Date: Fri, 10 Apr 2020 15:32:28 +0200 Subject: [PATCH] staging: wfx: fix support for BSS_CHANGED_KEEP_ALIVE MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Chip firmware is able to send periodic null frames to keep the association with the AP. The driver arbitrary set this period to 30sec. We prefer to rely on BSS_CHANGED_KEEP_ALIVE that provide a true value. Note that if BSS_CHANGED_KEEP_ALIVE is not received, we just disable keep_alive feature. It is not very disturbing since AP will probably ping the station before to disconnect it. Signed-off-by: Jérôme Pouiller Link: https://lore.kernel.org/r/20200410133239.438347-9-Jerome.Pouiller@silabs.com Signed-off-by: Greg Kroah-Hartman --- drivers/staging/wfx/sta.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c index 7693ce22f300f..67e16c4358485 100644 --- a/drivers/staging/wfx/sta.c +++ b/drivers/staging/wfx/sta.c @@ -646,7 +646,7 @@ static void wfx_join_finalize(struct wfx_vif *wvif, if (!info->ibss_joined) { wvif->state = WFX_STATE_STA; - hif_keep_alive_period(wvif, 30 /* sec */); + hif_keep_alive_period(wvif, 0); hif_set_bss_params(wvif, &wvif->bss_params); hif_set_beacon_wakeup_period(wvif, info->dtim_period, info->dtim_period); @@ -728,6 +728,10 @@ void wfx_bss_info_changed(struct ieee80211_hw *hw, __func__); } + if (changed & BSS_CHANGED_KEEP_ALIVE) + hif_keep_alive_period(wvif, info->max_idle_period * + USEC_PER_TU / USEC_PER_MSEC); + if (changed & BSS_CHANGED_ASSOC || changed & BSS_CHANGED_ERP_CTS_PROT || changed & BSS_CHANGED_ERP_PREAMBLE) { -- 2.30.2