diff options
author | Tzu-En Huang <tehuang@realtek.com> | 2018-05-18 17:29:54 +0800 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2018-05-29 10:16:40 +0300 |
commit | 6acfbb81ab0a800fd0ce0795103852255d671635 (patch) | |
tree | dec7cde6b6598566764eec936f01c3da9f53dc05 /drivers/net/wireless/realtek/rtlwifi/base.h | |
parent | wlcore: sdio: Fix flakey SDIO runtime PM handling (diff) | |
download | linux-dev-6acfbb81ab0a800fd0ce0795103852255d671635.tar.xz linux-dev-6acfbb81ab0a800fd0ce0795103852255d671635.zip |
rtlwifi: support accurate nullfunc frame tx ack report
In order to realize the keep-alive mechanism in mac80211 stack, reporting
accurate tx ack status for nullfunc frame is added in this commit.
If current frame is nullfunc frame, we ask firmware to report by filling
TX report bit in TX descriptor. After this frame DMA done, TX interrupt is
triggered but TX status is unknown at this moment, so enqueue this skb
into tx_report->queue. Finally, C2H report will be received if the frame
is transmitted successfully or retried over, and then we report to mac80211
with IEEE80211_TX_STAT_ACK flag only if it's successful. Otherwise, if
failure or timeout (one second), we report to mac80211 without this flag.
Signed-off-by: Tzu-En Huang <tehuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/realtek/rtlwifi/base.h')
-rw-r--r-- | drivers/net/wireless/realtek/rtlwifi/base.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/wireless/realtek/rtlwifi/base.h b/drivers/net/wireless/realtek/rtlwifi/base.h index acc924635818..19e7477839e4 100644 --- a/drivers/net/wireless/realtek/rtlwifi/base.h +++ b/drivers/net/wireless/realtek/rtlwifi/base.h @@ -130,9 +130,10 @@ bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb); u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx, bool is_enc); +void rtl_tx_ackqueue(struct ieee80211_hw *hw, struct sk_buff *skb); bool rtl_is_tx_report_skb(struct ieee80211_hw *hw, struct sk_buff *skb); -void rtl_get_tx_report(struct rtl_tcb_desc *ptcb_desc, u8 *pdesc, - struct ieee80211_hw *hw); +void rtl_set_tx_report(struct rtl_tcb_desc *ptcb_desc, u8 *pdesc, + struct ieee80211_hw *hw, struct rtlwifi_tx_info *info); void rtl_tx_report_handler(struct ieee80211_hw *hw, u8 *tmp_buf, u8 c2h_cmd_len); bool rtl_check_tx_report_acked(struct ieee80211_hw *hw); |