forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/net/wireless/ath/ath10k/txrx.c
....@@ -1,19 +1,8 @@
1
+// SPDX-License-Identifier: ISC
12 /*
23 * Copyright (c) 2005-2011 Atheros Communications Inc.
34 * Copyright (c) 2011-2016 Qualcomm Atheros, Inc.
45 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
5
- *
6
- * Permission to use, copy, modify, and/or distribute this software for any
7
- * purpose with or without fee is hereby granted, provided that the above
8
- * copyright notice and this permission notice appear in all copies.
9
- *
10
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
176 */
187
198 #include "core.h"
....@@ -61,6 +50,7 @@
6150 struct ath10k_skb_cb *skb_cb;
6251 struct ath10k_txq *artxq;
6352 struct sk_buff *msdu;
53
+ u8 flags;
6454
6555 ath10k_dbg(ar, ATH10K_DBG_HTT,
6656 "htt tx completion msdu_id %u status %d\n",
....@@ -89,11 +79,19 @@
8979 artxq->num_fw_queued--;
9080 }
9181
82
+ flags = skb_cb->flags;
9283 ath10k_htt_tx_free_msdu_id(htt, tx_done->msdu_id);
9384 ath10k_htt_tx_dec_pending(htt);
9485 spin_unlock_bh(&htt->tx_lock);
9586
96
- dma_unmap_single(dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
87
+ rcu_read_lock();
88
+ if (txq && txq->sta && skb_cb->airtime_est)
89
+ ieee80211_sta_register_airtime(txq->sta, txq->tid,
90
+ skb_cb->airtime_est, 0);
91
+ rcu_read_unlock();
92
+
93
+ if (ar->bus_param.dev_type != ATH10K_DEV_TYPE_HL)
94
+ dma_unmap_single(dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
9795
9896 ath10k_report_offchan_tx(htt->ar, msdu);
9997
....@@ -103,18 +101,21 @@
103101
104102 trace_ath10k_txrx_tx_unref(ar, tx_done->msdu_id);
105103
106
- if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
104
+ if (!(info->flags & IEEE80211_TX_CTL_NO_ACK) &&
105
+ !(flags & ATH10K_SKB_F_NOACK_TID))
107106 info->flags |= IEEE80211_TX_STAT_ACK;
108107
109108 if (tx_done->status == HTT_TX_COMPL_STATE_NOACK)
110109 info->flags &= ~IEEE80211_TX_STAT_ACK;
111110
112111 if ((tx_done->status == HTT_TX_COMPL_STATE_ACK) &&
113
- (info->flags & IEEE80211_TX_CTL_NO_ACK))
112
+ ((info->flags & IEEE80211_TX_CTL_NO_ACK) ||
113
+ (flags & ATH10K_SKB_F_NOACK_TID)))
114114 info->flags |= IEEE80211_TX_STAT_NOACK_TRANSMITTED;
115115
116116 if (tx_done->status == HTT_TX_COMPL_STATE_DISCARD) {
117
- if (info->flags & IEEE80211_TX_CTL_NO_ACK)
117
+ if ((info->flags & IEEE80211_TX_CTL_NO_ACK) ||
118
+ (flags & ATH10K_SKB_F_NOACK_TID))
118119 info->flags &= ~IEEE80211_TX_STAT_NOACK_TRANSMITTED;
119120 else
120121 info->flags &= ~IEEE80211_TX_STAT_ACK;