Commit eeab4787 authored by Jérôme Pouiller's avatar Jérôme Pouiller Committed by Greg Kroah-Hartman
Browse files

staging: wfx: fix support for BSS_CHANGED_KEEP_ALIVE



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: default avatarJérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200410133239.438347-9-Jerome.Pouiller@silabs.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent eb63e2fd
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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) {