Commit 4fb6036a authored by Jérôme Pouiller's avatar Jérôme Pouiller Committed by Greg Kroah-Hartman

staging: wfx: fix case where AP stop with CAB traffic pending

When driver has Content After DTIM Beacon (CAB) in queue, it wait for an
indication from the firmware. However, when we stop to send beacons,
this indication may never happen.

Solve this issue by simply simulate this indication. Firmware will send
data that probably nobody will heard.
Reviewed-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarJérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200401110405.80282-32-Jerome.Pouiller@silabs.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a39e761a
......@@ -686,6 +686,19 @@ static void wfx_join_finalize(struct wfx_vif *wvif,
}
}
void wfx_enable_beacon(struct wfx_vif *wvif, bool enable)
{
// Driver has Content After DTIM Beacon in queue. Driver is waiting for
// a signal from the firmware. Since we are going to stop to send
// beacons, this signal will never happens. See also
// wfx_suspend_resume_mc()
if (!enable && wfx_tx_queues_has_cab(wvif)) {
wvif->after_dtim_tx_allowed = true;
wfx_bh_request_tx(wvif->wdev);
}
hif_beacon_transmit(wvif, enable);
}
void wfx_bss_info_changed(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *info,
......@@ -724,7 +737,7 @@ void wfx_bss_info_changed(struct ieee80211_hw *hw,
if (changed & BSS_CHANGED_BEACON_ENABLED &&
wvif->state != WFX_STATE_IBSS)
hif_beacon_transmit(wvif, info->enable_beacon);
wfx_enable_beacon(wvif, info->enable_beacon);
if (changed & BSS_CHANGED_BEACON_INFO)
hif_set_beacon_wakeup_period(wvif, info->dtim_period,
......
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