staging: wfx: firmware never return PS status for stations

At the beginning, firmware could send suspend_resume indication to
notify that a station wake up or sleep down. However, mac80211 already
handles power save status of stations and this behavior has been removed
from the firmware. So now, when suspend_resume indication is received,
it is always to notify that a DTIM is about to be sent.

So, it is possible to simply wfx_suspend_resume().

Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200115135338.14374-56-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Jérôme Pouiller 2020-01-15 13:55:22 +00:00 committed by Greg Kroah-Hartman
parent 6537adc3e3
commit b5d4d98ec8

View File

@ -985,38 +985,29 @@ int wfx_ampdu_action(struct ieee80211_hw *hw,
return -ENOTSUPP;
}
static void wfx_dtim_notify(struct wfx_vif *wvif)
{
spin_lock_bh(&wvif->ps_state_lock);
wvif->sta_asleep_mask = 0;
wfx_bh_request_tx(wvif->wdev);
spin_unlock_bh(&wvif->ps_state_lock);
}
void wfx_suspend_resume(struct wfx_vif *wvif,
const struct hif_ind_suspend_resume_tx *arg)
{
if (arg->suspend_resume_flags.bc_mc_only) {
bool cancel_tmo = false;
bool cancel_tmo = false;
spin_lock_bh(&wvif->ps_state_lock);
if (!arg->suspend_resume_flags.resume)
wvif->mcast_tx = false;
else
wvif->mcast_tx = wvif->aid0_bit_set &&
wvif->mcast_buffered;
if (wvif->mcast_tx) {
cancel_tmo = true;
wfx_bh_request_tx(wvif->wdev);
}
spin_unlock_bh(&wvif->ps_state_lock);
if (cancel_tmo)
del_timer_sync(&wvif->mcast_timeout);
} else if (arg->suspend_resume_flags.resume) {
wfx_dtim_notify(wvif);
} else {
if (!arg->suspend_resume_flags.bc_mc_only) {
dev_warn(wvif->wdev->dev, "unsupported suspend/resume notification\n");
return;
}
spin_lock_bh(&wvif->ps_state_lock);
if (!arg->suspend_resume_flags.resume)
wvif->mcast_tx = false;
else
wvif->mcast_tx = wvif->aid0_bit_set &&
wvif->mcast_buffered;
if (wvif->mcast_tx) {
cancel_tmo = true;
wfx_bh_request_tx(wvif->wdev);
}
spin_unlock_bh(&wvif->ps_state_lock);
if (cancel_tmo)
del_timer_sync(&wvif->mcast_timeout);
}
int wfx_add_chanctx(struct ieee80211_hw *hw,