diff options
author | Jérôme Pouiller <jerome.pouiller@silabs.com> | 2020-01-15 13:55:25 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-01-16 20:59:52 +0100 |
commit | a3c529a835890b0eecd324d9f0c37c67345f84e2 (patch) | |
tree | 6fe2feabcbb779233a3c2314d8d73abd781d3145 /drivers/staging/wfx/queue.h | |
parent | 22c03264e5a914966c93baa367d63eb77f60ebaf (diff) |
staging: wfx: simplify handling of IEEE80211_TX_CTL_SEND_AFTER_DTIM
When mac80211 ask for a frame to be sent after a DTIM, driver should:
1. Update TIM with multicast bit set (using update_ie). This function
can be called whenever.
2. Keep buffered all frames marked "after dtim"
3. When it receive a suspend_resume indication (see
wfx_suspend_resume_mc()), send all the buffered frames. This
indication is sent by the firmware 4ms before the dtim.
4. If one of the frames returns status "REQUEUE", it means that the
DTIM period was ended before to be able to send the frame.
5. When all the buffered frames were sent or if DTIM period was ended,
driver should update the TIM with multicast bit reset.
All the mess with the asynchronous works can be dropped.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Link: https://lore.kernel.org/r/20200115135338.14374-58-Jerome.Pouiller@silabs.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/wfx/queue.h')
-rw-r--r-- | drivers/staging/wfx/queue.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/staging/wfx/queue.h b/drivers/staging/wfx/queue.h index 813c2d09e034..096ae86135cc 100644 --- a/drivers/staging/wfx/queue.h +++ b/drivers/staging/wfx/queue.h @@ -47,6 +47,7 @@ void wfx_tx_queues_clear(struct wfx_dev *wdev); bool wfx_tx_queues_is_empty(struct wfx_dev *wdev); void wfx_tx_queues_wait_empty_vif(struct wfx_vif *wvif); struct hif_msg *wfx_tx_queues_get(struct wfx_dev *wdev); +struct hif_msg *wfx_tx_queues_get_after_dtim(struct wfx_vif *wvif); void wfx_tx_queue_put(struct wfx_dev *wdev, struct wfx_queue *queue, struct sk_buff *skb); |