diff options
author | Jérôme Pouiller <jerome.pouiller@silabs.com> | 2020-04-20 18:02:57 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-04-23 13:26:02 +0200 |
commit | 5a0af69888488d2b873f55bcba4cd17b162e4bea (patch) | |
tree | b4098cd764a7b079870091282691d01915558bca /drivers/staging/wfx/data_tx.c | |
parent | 13fe5a59b3c79e03cea3f7232a05e79bc5aad70a (diff) |
staging: wfx: use ieee80211_beacon_loss() provided by mac80211
The firmware is able to filter beacons and send a notification if one or
multiple beacons are not received. Note that it send this notification
only once. Only if it receive beacons gain, it send a new notification.
Currently, the driver handle the connection loss itself (see
wfx_cqm_bssloss_sm()). It send null frames and watch the answers.
This patch fixes all this mess:
- settle firmware to send a notification on the first beacon loss
- call ieee80211_beacon_loss() and let mac80211 handle all the process
- since we do have notification for each beacon loss, add a period
task that call ieee80211_beacon_loss() until we receive "REGAIN"
notification.
Thus, we can drop the ugly wfx_cqm_bssloss_sm() and
wfx_bss_params_work().
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200420160311.57323-3-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/wfx/data_tx.c')
-rw-r--r-- | drivers/staging/wfx/data_tx.c | 7 |
1 files changed, 0 insertions, 7 deletions
diff --git a/drivers/staging/wfx/data_tx.c b/drivers/staging/wfx/data_tx.c index c30e4f5b6e2d..9c1a91207dd8 100644 --- a/drivers/staging/wfx/data_tx.c +++ b/drivers/staging/wfx/data_tx.c @@ -547,9 +547,6 @@ void wfx_tx_confirm_cb(struct wfx_vif *wvif, const struct hif_cnf_tx *arg) memset(tx_info->pad, 0, sizeof(tx_info->pad)); if (!arg->status) { - if (wvif->bss_loss_state && - arg->packet_id == wvif->bss_loss_confirm_id) - wfx_cqm_bssloss_sm(wvif, 0, 1, 0); tx_info->status.tx_time = arg->media_delay - arg->tx_queue_delay; if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK) @@ -563,10 +560,6 @@ void wfx_tx_confirm_cb(struct wfx_vif *wvif, const struct hif_cnf_tx *arg) schedule_work(&wvif->update_tim_work); } tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED; - } else { - if (wvif->bss_loss_state && - arg->packet_id == wvif->bss_loss_confirm_id) - wfx_cqm_bssloss_sm(wvif, 0, 0, 1); } wfx_skb_dtor(wvif->wdev, skb); } |