mirror of https://lore.kernel.org/ath12k/
 help / color / mirror / Atom feed
* [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station
@ 2025-02-27  4:58 Sarika Sharma
  2025-02-27  4:58 ` [PATCH v3 1/5] wifi: mac80211: correct RX stats packet increment for multi-link Sarika Sharma
                   ` (5 more replies)
  0 siblings, 6 replies; 10+ messages in thread
From: Sarika Sharma @ 2025-02-27  4:58 UTC (permalink / raw)
  To: ath12k; +Cc: linux-wireless, johannes, Sarika Sharma

Currently, station statistics are filled at deflink for both non-ML and
multi-link(ML) station.

Hence, add support to fill station statistics for the corresponding
link of station.

Depends-On: [RFC,v3,00/12] wifi: cfg80211/mac80211: add support to
            handle per link statistics of multi-link station
Link: https://patchwork.kernel.org/project/linux-wireless/cover/20250213171632.1646538-1-quic_sarishar@quicinc.com/

V3:
 - Fix kernel test robot build error

v2:
 - Convert RFC patch to actual PATCH with each patch bisectable.
 - Add new patch to update bw for ofdma packets.
 - Add new patch to fetch tx_retry and tx_failed packets.

Sarika Sharma (5):
  wifi: mac80211: correct RX stats packet increment for multi-link
  wifi: ath12k: add link support for multi-link in arsta
  wifi: ath12k: add EHT support for TX rate
  wifi: ath12k: correctly update bw for ofdma packets
  wifi: ath12k: fetch tx_retry and tx_failed from
    htt_ppdu_stats_user_cmpltn_common_tlv

 drivers/net/wireless/ath/ath12k/core.h   |  2 ++
 drivers/net/wireless/ath/ath12k/dp.h     |  2 ++
 drivers/net/wireless/ath/ath12k/dp_mon.c | 23 ++++++++----
 drivers/net/wireless/ath/ath12k/dp_rx.c  | 45 ++++++++++++++++++++----
 drivers/net/wireless/ath/ath12k/mac.c    |  5 +++
 drivers/net/wireless/ath/ath12k/peer.h   | 27 +++++++++++++-
 net/mac80211/rx.c                        | 15 ++++++--
 7 files changed, 102 insertions(+), 17 deletions(-)


base-commit: 704a2d7237043317ed1b0f8a08203e9ddde70097
-- 
2.34.1



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v3 1/5] wifi: mac80211: correct RX stats packet increment for multi-link
  2025-02-27  4:58 [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station Sarika Sharma
@ 2025-02-27  4:58 ` Sarika Sharma
  2025-02-27  4:58 ` [PATCH v3 2/5] wifi: ath12k: add link support for multi-link in arsta Sarika Sharma
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 10+ messages in thread
From: Sarika Sharma @ 2025-02-27  4:58 UTC (permalink / raw)
  To: ath12k; +Cc: linux-wireless, johannes, Sarika Sharma

Currently, RX stats packets are incremented for deflink member for
non-ML and multi-link(ML) station case. However, for ML station,
packets should be incremented based on the specific link.

Therefore, if a valid link_id is present, fetch the corresponding
link station information and increment the RX packets for that link.
For non-MLO stations, the deflink will still be used.

Signed-off-by: Sarika Sharma <quic_sarishar@quicinc.com>
---
 net/mac80211/rx.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 1e28efe4203c..eb3e2d550c8f 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -231,8 +231,19 @@ static void __ieee80211_queue_skb_to_iface(struct ieee80211_sub_if_data *sdata,
 
 	skb_queue_tail(&sdata->skb_queue, skb);
 	wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work);
-	if (sta)
-		sta->deflink.rx_stats.packets++;
+	if (sta) {
+		struct link_sta_info *link_sta_info;
+
+		if (link_id >= 0) {
+			link_sta_info = rcu_dereference(sta->link[link_id]);
+			if (!link_sta_info)
+				return;
+		} else {
+			link_sta_info = &sta->deflink;
+		}
+
+		link_sta_info->rx_stats.packets++;
+	}
 }
 
 static void ieee80211_queue_skb_to_iface(struct ieee80211_sub_if_data *sdata,
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 2/5] wifi: ath12k: add link support for multi-link in arsta
  2025-02-27  4:58 [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station Sarika Sharma
  2025-02-27  4:58 ` [PATCH v3 1/5] wifi: mac80211: correct RX stats packet increment for multi-link Sarika Sharma
@ 2025-02-27  4:58 ` Sarika Sharma
  2025-02-27  4:58 ` [PATCH v3 3/5] wifi: ath12k: add EHT support for TX rate Sarika Sharma
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 10+ messages in thread
From: Sarika Sharma @ 2025-02-27  4:58 UTC (permalink / raw)
  To: ath12k; +Cc: linux-wireless, johannes, Sarika Sharma

Currently, statistics in arsta are updated at deflink for both non-ML
and multi-link(ML) station. Link statistics are not updated for
multi-link operation(MLO).

Hence, add support to correctly obtain the link ID if the peer is ML,
fetch the arsta from the appropriate link ID, and update the
statistics in the corresponding arsta.

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1

Signed-off-by: Sarika Sharma <quic_sarishar@quicinc.com>
---
 drivers/net/wireless/ath/ath12k/dp_mon.c | 23 ++++++++++++++------
 drivers/net/wireless/ath/ath12k/dp_rx.c  |  9 +++++---
 drivers/net/wireless/ath/ath12k/peer.h   | 27 +++++++++++++++++++++++-
 3 files changed, 48 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/ath/ath12k/dp_mon.c b/drivers/net/wireless/ath/ath12k/dp_mon.c
index d22800e89485..aecc4612c777 100644
--- a/drivers/net/wireless/ath/ath12k/dp_mon.c
+++ b/drivers/net/wireless/ath/ath12k/dp_mon.c
@@ -3106,7 +3106,6 @@ ath12k_dp_mon_rx_update_user_stats(struct ath12k *ar,
 				   struct hal_rx_mon_ppdu_info *ppdu_info,
 				   u32 uid)
 {
-	struct ath12k_sta *ahsta;
 	struct ath12k_link_sta *arsta;
 	struct ath12k_rx_peer_stats *rx_stats = NULL;
 	struct hal_rx_user_status *user_stats = &ppdu_info->userstats[uid];
@@ -3124,10 +3123,14 @@ ath12k_dp_mon_rx_update_user_stats(struct ath12k *ar,
 		return;
 	}
 
-	ahsta = ath12k_sta_to_ahsta(peer->sta);
-	arsta = &ahsta->deflink;
-	rx_stats = arsta->rx_stats;
+	arsta = ath12k_peer_get_link_sta(ar->ab, peer);
+	if (!arsta) {
+		ath12k_warn(ar->ab, "link sta not found on peer %pM id %d\n",
+			    peer->addr, peer->peer_id);
+		return;
+	}
 
+	rx_stats = arsta->rx_stats;
 	if (!rx_stats)
 		return;
 
@@ -3240,7 +3243,6 @@ int ath12k_dp_mon_srng_process(struct ath12k *ar, int *budget,
 	struct dp_srng *mon_dst_ring;
 	struct hal_srng *srng;
 	struct dp_rxdma_mon_ring *buf_ring;
-	struct ath12k_sta *ahsta = NULL;
 	struct ath12k_link_sta *arsta;
 	struct ath12k_peer *peer;
 	struct sk_buff_head skb_list;
@@ -3367,8 +3369,15 @@ int ath12k_dp_mon_srng_process(struct ath12k *ar, int *budget,
 		}
 
 		if (ppdu_info->reception_type == HAL_RX_RECEPTION_TYPE_SU) {
-			ahsta = ath12k_sta_to_ahsta(peer->sta);
-			arsta = &ahsta->deflink;
+			arsta = ath12k_peer_get_link_sta(ar->ab, peer);
+			if (!arsta) {
+				ath12k_warn(ar->ab, "link sta not found on peer %pM id %d\n",
+					    peer->addr, peer->peer_id);
+				spin_unlock_bh(&ab->base_lock);
+				rcu_read_unlock();
+				dev_kfree_skb_any(skb);
+				continue;
+			}
 			ath12k_dp_mon_rx_update_peer_su_stats(ar, arsta,
 							      ppdu_info);
 		} else if ((ppdu_info->fc_valid) &&
diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
index 95c9056642cf..1fa7cf044afe 100644
--- a/drivers/net/wireless/ath/ath12k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
@@ -1362,7 +1362,6 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
 	struct ath12k_base *ab = ar->ab;
 	struct ath12k_peer *peer;
 	struct ieee80211_sta *sta;
-	struct ath12k_sta *ahsta;
 	struct ath12k_link_sta *arsta;
 	struct htt_ppdu_stats_user_rate *user_rate;
 	struct ath12k_per_peer_tx_stats *peer_stats = &ar->peer_tx_stats;
@@ -1444,8 +1443,12 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
 	}
 
 	sta = peer->sta;
-	ahsta = ath12k_sta_to_ahsta(sta);
-	arsta = &ahsta->deflink;
+	arsta = ath12k_peer_get_link_sta(ab, peer);
+	if (!arsta) {
+		spin_unlock_bh(&ab->base_lock);
+		rcu_read_unlock();
+		return;
+	}
 
 	memset(&arsta->txrate, 0, sizeof(arsta->txrate));
 
diff --git a/drivers/net/wireless/ath/ath12k/peer.h b/drivers/net/wireless/ath/ath12k/peer.h
index 5870ee11a8c7..7474053f54b0 100644
--- a/drivers/net/wireless/ath/ath12k/peer.h
+++ b/drivers/net/wireless/ath/ath12k/peer.h
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
 /*
  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #ifndef ATH12K_PEER_H
@@ -90,5 +90,30 @@ struct ath12k_peer *ath12k_peer_find_by_ast(struct ath12k_base *ab, int ast_hash
 int ath12k_peer_ml_create(struct ath12k_hw *ah, struct ieee80211_sta *sta);
 int ath12k_peer_ml_delete(struct ath12k_hw *ah, struct ieee80211_sta *sta);
 int ath12k_peer_mlo_link_peers_delete(struct ath12k_vif *ahvif, struct ath12k_sta *ahsta);
+static inline
+struct ath12k_link_sta *ath12k_peer_get_link_sta(struct ath12k_base *ab,
+						 struct ath12k_peer *peer)
+{
+	struct ath12k_sta *ahsta;
+	struct ath12k_link_sta *arsta;
+
+	if (!peer->sta)
+		return NULL;
+
+	ahsta = ath12k_sta_to_ahsta(peer->sta);
+	if (peer->ml_id & ATH12K_PEER_ML_ID_VALID) {
+		if (!(ahsta->links_map & BIT(peer->link_id))) {
+			ath12k_warn(ab, "peer %pM id %d link_id %d can't found in STA link_map 0x%x\n",
+				    peer->addr, peer->peer_id, peer->link_id, ahsta->links_map);
+			return NULL;
+		}
+		arsta = rcu_dereference(ahsta->link[peer->link_id]);
+		if (!arsta)
+			return NULL;
+	} else {
+		arsta =  &ahsta->deflink;
+	}
+	return arsta;
+}
 
 #endif /* _PEER_H_ */
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 3/5] wifi: ath12k: add EHT support for TX rate
  2025-02-27  4:58 [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station Sarika Sharma
  2025-02-27  4:58 ` [PATCH v3 1/5] wifi: mac80211: correct RX stats packet increment for multi-link Sarika Sharma
  2025-02-27  4:58 ` [PATCH v3 2/5] wifi: ath12k: add link support for multi-link in arsta Sarika Sharma
@ 2025-02-27  4:58 ` Sarika Sharma
  2025-02-27  4:58 ` [PATCH v3 4/5] wifi: ath12k: correctly update bw for ofdma packets Sarika Sharma
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 10+ messages in thread
From: Sarika Sharma @ 2025-02-27  4:58 UTC (permalink / raw)
  To: ath12k; +Cc: linux-wireless, johannes, Sarika Sharma

Currently, TX rates are not supported for EHT. Hence, add EHT
handling for TX rates and update the EHT-specific fields in arsta
accordingly.

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1

Signed-off-by: Sarika Sharma <quic_sarishar@quicinc.com>
---
 drivers/net/wireless/ath/ath12k/dp_rx.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
index 1fa7cf044afe..070568b8322c 100644
--- a/drivers/net/wireless/ath/ath12k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
@@ -1481,6 +1481,16 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
 		v = ath12k_he_ru_tones_to_nl80211_he_ru_alloc(tones);
 		arsta->txrate.he_ru_alloc = v;
 		break;
+	case WMI_RATE_PREAMBLE_EHT:
+		arsta->txrate.mcs = mcs;
+		arsta->txrate.flags = RATE_INFO_FLAGS_EHT_MCS;
+		arsta->txrate.he_dcm = dcm;
+		arsta->txrate.eht_gi = ath12k_mac_eht_gi_to_nl80211_eht_gi(sgi);
+		tones = le16_to_cpu(user_rate->ru_end) -
+			le16_to_cpu(user_rate->ru_start) + 1;
+		v = ath12k_mac_eht_ru_tones_to_nl80211_eht_ru_alloc(tones);
+		arsta->txrate.eht_ru_alloc = v;
+		break;
 	}
 
 	arsta->txrate.nss = nss;
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 4/5] wifi: ath12k: correctly update bw for ofdma packets
  2025-02-27  4:58 [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station Sarika Sharma
                   ` (2 preceding siblings ...)
  2025-02-27  4:58 ` [PATCH v3 3/5] wifi: ath12k: add EHT support for TX rate Sarika Sharma
@ 2025-02-27  4:58 ` Sarika Sharma
  2025-02-27  4:58 ` [PATCH v3 5/5] wifi: ath12k: fetch tx_retry and tx_failed from htt_ppdu_stats_user_cmpltn_common_tlv Sarika Sharma
  2025-02-27  8:39 ` [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station Johannes Berg
  5 siblings, 0 replies; 10+ messages in thread
From: Sarika Sharma @ 2025-02-27  4:58 UTC (permalink / raw)
  To: ath12k; +Cc: linux-wireless, johannes, Sarika Sharma

Currently, arsta->txrate.bw is filled from ath12k_mac_bw_to_mac80211_bw(bw)
during ath12k_update_per_peer_tx_stats(). But in tx_completion path bw
is filled differently if ppdu_type is ofdma for HE/EHT rates.

Hence, update arsta->txrate.bw correctly if packet is ofdma for HE
and EHT rate.

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1

Signed-off-by: Sarika Sharma <quic_sarishar@quicinc.com>
---
 drivers/net/wireless/ath/ath12k/dp.h    |  2 ++
 drivers/net/wireless/ath/ath12k/dp_rx.c | 15 ++++++++++++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/ath/ath12k/dp.h b/drivers/net/wireless/ath/ath12k/dp.h
index 75435a931548..3ddbf781c2b5 100644
--- a/drivers/net/wireless/ath/ath12k/dp.h
+++ b/drivers/net/wireless/ath/ath12k/dp.h
@@ -1508,6 +1508,8 @@ enum HTT_PPDU_STATS_PPDU_TYPE {
 #define HTT_PPDU_STATS_USER_RATE_FLAGS_DCM_M		BIT(28)
 #define HTT_PPDU_STATS_USER_RATE_FLAGS_LDPC_M		BIT(29)
 
+#define HTT_USR_RATE_PPDU_TYPE(_val) \
+		le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_INFO1_PPDU_TYPE_M)
 #define HTT_USR_RATE_PREAMBLE(_val) \
 		le32_get_bits(_val, HTT_PPDU_STATS_USER_RATE_FLAGS_PREAMBLE_M)
 #define HTT_USR_RATE_BW(_val) \
diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
index 070568b8322c..c3bd7a39150b 100644
--- a/drivers/net/wireless/ath/ath12k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
@@ -1368,12 +1368,12 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
 	struct htt_ppdu_user_stats *usr_stats = &ppdu_stats->user_stats[user];
 	struct htt_ppdu_stats_common *common = &ppdu_stats->common;
 	int ret;
-	u8 flags, mcs, nss, bw, sgi, dcm, rate_idx = 0;
+	u8 flags, mcs, nss, bw, sgi, dcm, ppdu_type, rate_idx = 0;
 	u32 v, succ_bytes = 0;
 	u16 tones, rate = 0, succ_pkts = 0;
 	u32 tx_duration = 0;
 	u8 tid = HTT_PPDU_STATS_NON_QOS_TID;
-	bool is_ampdu = false;
+	bool is_ampdu = false, is_ofdma = false;
 
 	if (!(usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_RATE)))
 		return;
@@ -1402,6 +1402,10 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
 	sgi = HTT_USR_RATE_GI(user_rate->rate_flags);
 	dcm = HTT_USR_RATE_DCM(user_rate->rate_flags);
 
+	ppdu_type = HTT_USR_RATE_PPDU_TYPE(user_rate->info1);
+	is_ofdma = (ppdu_type == HTT_PPDU_STATS_PPDU_TYPE_MU_OFDMA) ||
+		   (ppdu_type == HTT_PPDU_STATS_PPDU_TYPE_MU_MIMO_OFDMA);
+
 	/* Note: If host configured fixed rates and in some other special
 	 * cases, the broadcast/management frames are sent in different rates.
 	 * Firmware rate's control to be skipped for this?
@@ -1452,6 +1456,8 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
 
 	memset(&arsta->txrate, 0, sizeof(arsta->txrate));
 
+	arsta->txrate.bw = ath12k_mac_bw_to_mac80211_bw(bw);
+
 	switch (flags) {
 	case WMI_RATE_PREAMBLE_OFDM:
 		arsta->txrate.legacy = rate;
@@ -1480,6 +1486,8 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
 			le16_to_cpu(user_rate->ru_start) + 1;
 		v = ath12k_he_ru_tones_to_nl80211_he_ru_alloc(tones);
 		arsta->txrate.he_ru_alloc = v;
+		if (is_ofdma)
+			arsta->txrate.bw = RATE_INFO_BW_HE_RU;
 		break;
 	case WMI_RATE_PREAMBLE_EHT:
 		arsta->txrate.mcs = mcs;
@@ -1490,11 +1498,12 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
 			le16_to_cpu(user_rate->ru_start) + 1;
 		v = ath12k_mac_eht_ru_tones_to_nl80211_eht_ru_alloc(tones);
 		arsta->txrate.eht_ru_alloc = v;
+		if (is_ofdma)
+			arsta->txrate.bw = RATE_INFO_BW_EHT_RU;
 		break;
 	}
 
 	arsta->txrate.nss = nss;
-	arsta->txrate.bw = ath12k_mac_bw_to_mac80211_bw(bw);
 	arsta->tx_duration += tx_duration;
 	memcpy(&arsta->last_txrate, &arsta->txrate, sizeof(struct rate_info));
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 5/5] wifi: ath12k: fetch tx_retry and tx_failed from htt_ppdu_stats_user_cmpltn_common_tlv
  2025-02-27  4:58 [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station Sarika Sharma
                   ` (3 preceding siblings ...)
  2025-02-27  4:58 ` [PATCH v3 4/5] wifi: ath12k: correctly update bw for ofdma packets Sarika Sharma
@ 2025-02-27  4:58 ` Sarika Sharma
  2025-02-27  8:39 ` [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station Johannes Berg
  5 siblings, 0 replies; 10+ messages in thread
From: Sarika Sharma @ 2025-02-27  4:58 UTC (permalink / raw)
  To: ath12k; +Cc: linux-wireless, johannes, Sarika Sharma

Currently, tx_retries and tx_failed are updated only in mac80211 during
tx_completion path for sta->deflink. This works fine for non-ML
station but for multi-link (ML) station, these values should be updated
for sta->link[link_id] as per tx link_id. However, in tx_completion path
there is no way to determine the link_id for which packet is retried or
failed.

Therefore, update the tx_retries and tx_failed in arsta structure from
htt_ppdu_stats_user_cmpltn_common_tlv during
ath12k_update_per_peer_tx_stats() call to utilize the values from arsta.
Also, during 'iw dev xxxx station dump' populate the tx_retries and
tx_failed in station_info structure to ensure values are correctly
reflected.

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1

Signed-off-by: Sarika Sharma <quic_sarishar@quicinc.com>
---
 drivers/net/wireless/ath/ath12k/core.h  |  2 ++
 drivers/net/wireless/ath/ath12k/dp_rx.c | 11 ++++++++++-
 drivers/net/wireless/ath/ath12k/mac.c   |  5 +++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/ath/ath12k/core.h
index 3fac4f00d383..8050dd70f077 100644
--- a/drivers/net/wireless/ath/ath12k/core.h
+++ b/drivers/net/wireless/ath/ath12k/core.h
@@ -517,6 +517,8 @@ struct ath12k_link_sta {
 
 	 /* for firmware use only */
 	u8 link_idx;
+	u32 tx_retry_failed;
+	u32 tx_retry_count;
 };
 
 struct ath12k_sta {
diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
index c3bd7a39150b..6fc1ab1faa4d 100644
--- a/drivers/net/wireless/ath/ath12k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
@@ -1374,13 +1374,20 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
 	u32 tx_duration = 0;
 	u8 tid = HTT_PPDU_STATS_NON_QOS_TID;
 	bool is_ampdu = false, is_ofdma = false;
+	u16 tx_retry_failed = 0, tx_retry_count = 0;
 
 	if (!(usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_RATE)))
 		return;
 
-	if (usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON))
+	if (usr_stats->tlv_flags & BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON)) {
 		is_ampdu =
 			HTT_USR_CMPLTN_IS_AMPDU(usr_stats->cmpltn_cmn.flags);
+		tx_retry_failed =
+			usr_stats->cmpltn_cmn.mpdu_tried - usr_stats->cmpltn_cmn.mpdu_success;
+		tx_retry_count =
+			HTT_USR_CMPLTN_LONG_RETRY(usr_stats->cmpltn_cmn.flags) +
+			HTT_USR_CMPLTN_SHORT_RETRY(usr_stats->cmpltn_cmn.flags);
+	}
 
 	if (usr_stats->tlv_flags &
 	    BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS)) {
@@ -1503,6 +1510,8 @@ ath12k_update_per_peer_tx_stats(struct ath12k *ar,
 		break;
 	}
 
+	arsta->tx_retry_failed += tx_retry_failed;
+	arsta->tx_retry_count += tx_retry_count;
 	arsta->txrate.nss = nss;
 	arsta->tx_duration += tx_duration;
 	memcpy(&arsta->last_txrate, &arsta->txrate, sizeof(struct rate_info));
diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c
index accdf4b2241f..243bf2ac599f 100644
--- a/drivers/net/wireless/ath/ath12k/mac.c
+++ b/drivers/net/wireless/ath/ath12k/mac.c
@@ -10361,6 +10361,11 @@ static void ath12k_mac_op_link_sta_statistics(struct ieee80211_hw *hw,
 		sinfo->signal_avg += ATH12K_DEFAULT_NOISE_FLOOR;
 
 	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_SIGNAL_AVG);
+
+	sinfo->tx_retries = arsta->tx_retry_count;
+	sinfo->tx_failed = arsta->tx_retry_failed;
+	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_RETRIES);
+	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
 }
 
 static int ath12k_mac_op_cancel_remain_on_channel(struct ieee80211_hw *hw,
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station
  2025-02-27  4:58 [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station Sarika Sharma
                   ` (4 preceding siblings ...)
  2025-02-27  4:58 ` [PATCH v3 5/5] wifi: ath12k: fetch tx_retry and tx_failed from htt_ppdu_stats_user_cmpltn_common_tlv Sarika Sharma
@ 2025-02-27  8:39 ` Johannes Berg
       [not found]   ` <df26e3aeb3724d969f444eab65d8c872@realtek.com>
  5 siblings, 1 reply; 10+ messages in thread
From: Johannes Berg @ 2025-02-27  8:39 UTC (permalink / raw)
  To: Sarika Sharma, ath12k; +Cc: linux-wireless, Jeff Johnson

On Thu, 2025-02-27 at 10:28 +0530, Sarika Sharma wrote:
> Currently, station statistics are filled at deflink for both non-ML and
> multi-link(ML) station.
> 
> Hence, add support to fill station statistics for the corresponding
> link of station.
> 
> Depends-On: [RFC,v3,00/12] wifi: cfg80211/mac80211: add support to
>             handle per link statistics of multi-link station
> Link: https://patchwork.kernel.org/project/linux-wireless/cover/20250213171632.1646538-1-quic_sarishar@quicinc.com/

That can't work for the automation...

Also, even _with_ that, this series doesn't apply on wireless-next,
likely because it requires some changes from the ath tree.

Given that we want to run the automation now, that really means you need
to adjust your workflow to send only series to the list that can
actually apply on a single tree...

So I guess in this case it means you should split it. In fact I'm not
even sure why this is one series in the first place - the first patch
fixes an issue but it _doesn't_ introduce any API or anything that'd
actually be _required_ for the remaining patches, so it shouldn't be a
single series anyway.

johannes



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station
       [not found]   ` <df26e3aeb3724d969f444eab65d8c872@realtek.com>
@ 2025-02-27  9:32     ` Johannes Berg
  2025-02-27 19:35       ` Jeff Johnson
  0 siblings, 1 reply; 10+ messages in thread
From: Johannes Berg @ 2025-02-27  9:32 UTC (permalink / raw)
  To: Ping-Ke Shih, Sarika Sharma, ath12k@lists.infradead.org
  Cc: linux-wireless@vger.kernel.org, Jeff Johnson

On Thu, 2025-02-27 at 09:30 +0000, Ping-Ke Shih wrote:
> 
> I have encountered structural (not functional) dependency problem too. 
> Could you share how I can tell NIPA the dependency between two patchset?
> 

I don't think you can at all, at this point.

johannes


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station
  2025-02-27  9:32     ` Johannes Berg
@ 2025-02-27 19:35       ` Jeff Johnson
  2025-02-28  0:47         ` Johannes Berg
  0 siblings, 1 reply; 10+ messages in thread
From: Jeff Johnson @ 2025-02-27 19:35 UTC (permalink / raw)
  To: Johannes Berg, Ping-Ke Shih, Sarika Sharma,
	ath12k@lists.infradead.org
  Cc: linux-wireless@vger.kernel.org

On 2/27/2025 1:32 AM, Johannes Berg wrote:
> On Thu, 2025-02-27 at 09:30 +0000, Ping-Ke Shih wrote:
>>
>> I have encountered structural (not functional) dependency problem too. 
>> Could you share how I can tell NIPA the dependency between two patchset?
>>
> 
> I don't think you can at all, at this point.

So it doesn't support the mechanism 'b4' can handle, namely having a
base-commit: tag along with one or more prerequisite-patch-id: tags?

(note this series was not created with b4 so it doesn't have those tags, but
just curious if it had been created with b4, if the patches could have been
applied)


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station
  2025-02-27 19:35       ` Jeff Johnson
@ 2025-02-28  0:47         ` Johannes Berg
  0 siblings, 0 replies; 10+ messages in thread
From: Johannes Berg @ 2025-02-28  0:47 UTC (permalink / raw)
  To: Jeff Johnson, Ping-Ke Shih, Sarika Sharma,
	ath12k@lists.infradead.org
  Cc: linux-wireless@vger.kernel.org

On Thu, 2025-02-27 at 11:35 -0800, Jeff Johnson wrote:
> On 2/27/2025 1:32 AM, Johannes Berg wrote:
> > On Thu, 2025-02-27 at 09:30 +0000, Ping-Ke Shih wrote:
> > > 
> > > I have encountered structural (not functional) dependency problem too. 
> > > Could you share how I can tell NIPA the dependency between two patchset?
> > > 
> > 
> > I don't think you can at all, at this point.
> 
> So it doesn't support the mechanism 'b4' can handle, namely having a
> base-commit: tag along with one or more prerequisite-patch-id: tags?

I don't really know, but I don't think so. Note that (afaict) b4 also
doesn't really use it to select the base to apply things to, it uses it
to make a 3-way merge to the tree you want to apply the patches to. I
doubt that would have helped here, given that it was trying to apply the
patches to the wireless-next tree, where that commit likely wouldn't
have been present anyway.

johannes


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2025-02-28  0:47 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-27  4:58 [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station Sarika Sharma
2025-02-27  4:58 ` [PATCH v3 1/5] wifi: mac80211: correct RX stats packet increment for multi-link Sarika Sharma
2025-02-27  4:58 ` [PATCH v3 2/5] wifi: ath12k: add link support for multi-link in arsta Sarika Sharma
2025-02-27  4:58 ` [PATCH v3 3/5] wifi: ath12k: add EHT support for TX rate Sarika Sharma
2025-02-27  4:58 ` [PATCH v3 4/5] wifi: ath12k: correctly update bw for ofdma packets Sarika Sharma
2025-02-27  4:58 ` [PATCH v3 5/5] wifi: ath12k: fetch tx_retry and tx_failed from htt_ppdu_stats_user_cmpltn_common_tlv Sarika Sharma
2025-02-27  8:39 ` [PATCH v3 0/5] wifi: mac80211/ath12k: add support to fill link statistics of multi-link station Johannes Berg
     [not found]   ` <df26e3aeb3724d969f444eab65d8c872@realtek.com>
2025-02-27  9:32     ` Johannes Berg
2025-02-27 19:35       ` Jeff Johnson
2025-02-28  0:47         ` Johannes Berg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox