فهرست منبع

qcacmn: Add MSDU counters to account for 11BE puncturing BW stats

Add MSDU counters to account for 11BE puncturing BW stats.

Change-Id: I2c1d420b8d8b4533dcbf64f206783c07555cac99
CRs-Fixed: 3171770
Harsh Kumar Bijlani 3 سال پیش
والد
کامیت
484198b257

+ 4 - 0
dp/inc/cdp_txrx_cmn_struct.h

@@ -1862,6 +1862,8 @@ struct cdp_delayed_tx_completion_ppdu_user {
  * @peer_last_delayed_ba: flag to indicate peer last delayed ba
  * @phy_tx_time_us: Phy TX duration for the User
  * @mpdu_bytes: accumulated bytes per mpdu for mem limit feature
+ * @punc_mode: puncutured mode to indicate punctured bw
+ * @punc_pattern_bitmap: bitmap indicating punctured pattern
  */
 struct cdp_tx_completion_ppdu_user {
 	uint32_t completion_status:8,
@@ -1965,6 +1967,8 @@ struct cdp_tx_completion_ppdu_user {
 
 	uint16_t phy_tx_time_us;
 	uint32_t mpdu_bytes;
+	uint8_t punc_mode;
+	uint16_t punc_pattern_bitmap;
 };
 
 /**

+ 5 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -47,6 +47,7 @@
 #ifdef WLAN_FEATURE_11BE
 #define MAX_MCS (16 + 1)
 #define MAX_MCS_11BE 16
+#define MAX_PUNCTURED_MODE 5
 #else
 #define MAX_MCS (14 + 1)
 #endif
@@ -1364,6 +1365,7 @@ struct protocol_trace_count {
  * @last_tx_ts: last timestamp in jiffies when tx comp occurred
  * @su_be_ppdu_cnt: SU Tx packet count
  * @mu_be_ppdu_cnt: MU Tx packet count
+ * @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured BW
  */
 struct cdp_tx_stats {
 	struct cdp_pkt_info comp_pkt;
@@ -1479,6 +1481,7 @@ struct cdp_tx_stats {
 #ifdef WLAN_FEATURE_11BE
 	struct cdp_pkt_type su_be_ppdu_cnt;
 	struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
+	uint32_t punc_bw[MAX_PUNCTURED_MODE];
 #endif
 };
 
@@ -1567,6 +1570,7 @@ struct cdp_tx_stats {
  * @mpdu_retry_cnt: retries of mpdu in rx
  * @su_be_ppdu_cnt: SU Rx packet count for BE
  * @mu_be_ppdu_cnt: MU rx packet count for BE
+ * @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured BW
  */
 struct cdp_rx_stats {
 	struct cdp_pkt_info to_stack;
@@ -1652,6 +1656,7 @@ struct cdp_rx_stats {
 #ifdef WLAN_FEATURE_11BE
 	struct cdp_pkt_type su_be_ppdu_cnt;
 	struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
+	uint32_t punc_bw[MAX_PUNCTURED_MODE];
 #endif
 };
 

+ 4 - 0
dp/wifi3.0/dp_internal.h

@@ -1508,6 +1508,10 @@ void dp_update_vdev_stats_on_peer_unmap(struct dp_vdev *vdev,
 					_srcobj->rx.mu_be_ppdu_cnt[mu_type].mcs_count[i]; \
 			} \
 		} \
+		for (i = 0; i < MAX_PUNCTURED_MODE; i++) { \
+			_tgtobj->tx.punc_bw[i] += _srcobj->tx.punc_bw[i]; \
+			_tgtobj->rx.punc_bw[i] += _srcobj->rx.punc_bw[i]; \
+		} \
 	} while (0)
 #else
 #define DP_UPDATE_11BE_STATS(_tgtobj, _srcobj)

+ 13 - 1
dp/wifi3.0/dp_stats.c

@@ -5659,7 +5659,7 @@ dp_print_mu_be_ppdu_rates_info(struct cdp_pkt_type *pkt_type_array)
 
 			DP_PRINT_STATS("	%s = %d",
 				       dp_mu_be_rate_string[pkt_type][mcs].mcs_type,
-				       pkt_type_array->mcs_count[mcs]);
+				       pkt_type_array[pkt_type].mcs_count[mcs]);
 		}
 
 		DP_PRINT_STATS("\n");
@@ -6052,6 +6052,12 @@ void dp_print_peer_txrx_stats_be(struct cdp_peer_stats *peer_stats,
 			       peer_stats->tx.bw[CMN_BW_80MHZ],
 			       peer_stats->tx.bw[CMN_BW_160MHZ],
 			       peer_stats->tx.bw[CMN_BW_320MHZ]);
+		DP_PRINT_STATS("Punctured BW Counts = NO_PUNC %d 20MHz %d 40MHz %d 80MHz %d 120MHz %d\n",
+			       peer_stats->tx.punc_bw[NO_PUNCTURE],
+			       peer_stats->tx.punc_bw[PUNCTURED_20MHZ],
+			       peer_stats->tx.punc_bw[PUNCTURED_40MHZ],
+			       peer_stats->tx.punc_bw[PUNCTURED_80MHZ],
+			       peer_stats->tx.punc_bw[PUNCTURED_120MHZ]);
 		DP_PRINT_STATS("RU Locations RU[26 52 52_26 106 106_26 242 484 484_242 996 996_484 996_484_242 2X996 2X996_484 3X996 3X996_484 4X996]:");
 		for (i = 0; i < RU_INDEX_MAX; i++)
 			DP_PRINT_STATS("%s:  %d", cdp_ru_string[i].ru_type,
@@ -6067,6 +6073,12 @@ void dp_print_peer_txrx_stats_be(struct cdp_peer_stats *peer_stats,
 			       peer_stats->rx.bw[CMN_BW_80MHZ],
 			       peer_stats->rx.bw[CMN_BW_160MHZ],
 			       peer_stats->rx.bw[CMN_BW_320MHZ]);
+		DP_PRINT_STATS("Punctured BW Counts = NO_PUNC %d 20MHz %d 40MHz %d 80MHz %d 120MHz %d\n",
+			       peer_stats->rx.punc_bw[NO_PUNCTURE],
+			       peer_stats->rx.punc_bw[PUNCTURED_20MHZ],
+			       peer_stats->rx.punc_bw[PUNCTURED_40MHZ],
+			       peer_stats->rx.punc_bw[PUNCTURED_80MHZ],
+			       peer_stats->rx.punc_bw[PUNCTURED_120MHZ]);
 		dp_print_common_ppdu_rates_info(&peer_stats->rx.su_be_ppdu_cnt,
 						DOT11_BE);
 		dp_print_mu_be_ppdu_rates_info(&peer_stats->rx.mu_be_ppdu_cnt[0]);

+ 4 - 0
dp/wifi3.0/dp_types.h

@@ -3521,6 +3521,7 @@ struct dp_peer_per_pkt_tx_stats {
  * @mpdu_success_with_retries: mpdu retry count in case of successful tx
  * @su_be_ppdu_cnt: SU Tx packet count for 11BE
  * @mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX]: MU Tx packet count for 11BE
+ * @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured bw
  */
 struct dp_peer_extd_tx_stats {
 	uint32_t stbc;
@@ -3569,6 +3570,7 @@ struct dp_peer_extd_tx_stats {
 #ifdef WLAN_FEATURE_11BE
 	struct cdp_pkt_type su_be_ppdu_cnt;
 	struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
+	uint32_t punc_bw[MAX_PUNCTURED_MODE];
 #endif
 };
 
@@ -3681,6 +3683,7 @@ struct dp_peer_per_pkt_rx_stats {
  * @mpdu_retry_cnt: retries of mpdu in rx
  * @su_be_ppdu_cnt: SU Rx packet count for BE
  * @mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX]: MU rx packet count for BE
+ * @punc_bw[MAX_PUNCTURED_MODE]: MSDU count for punctured bw
  */
 struct dp_peer_extd_rx_stats {
 	struct cdp_pkt_type pkt_type[DOT11_MAX];
@@ -3724,6 +3727,7 @@ struct dp_peer_extd_rx_stats {
 #ifdef WLAN_FEATURE_11BE
 	struct cdp_pkt_type su_be_ppdu_cnt;
 	struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
+	uint32_t punc_bw[MAX_PUNCTURED_MODE];
 #endif
 };
 

+ 14 - 3
dp/wifi3.0/monitor/1.0/dp_mon_1.0.c

@@ -942,6 +942,19 @@ static bool dp_ppdu_stats_feat_enable_check_1_0(struct dp_pdev *pdev)
 	else
 		return true;
 }
+
+/**
+ * dp_mon_tx_stats_update_1_0 - Update Tx stats from HTT PPDU completion path
+ *
+ * @monitor: Monitor peer
+ * @ppdu: Tx PPDU user completion info
+ */
+void
+dp_mon_tx_stats_update_1_0(struct dp_mon_peer *mon_peer,
+			   struct cdp_tx_completion_ppdu_user *ppdu)
+{
+	ppdu->punc_mode = NO_PUNCTURE;
+}
 #endif
 
 #ifndef QCA_SUPPORT_FULL_MON
@@ -1081,9 +1094,7 @@ dp_mon_register_feature_ops_1_0(struct dp_soc *soc)
 #else
 	mon_ops->mon_ppdu_desc_deliver = dp_ppdu_desc_deliver_1_0;
 #endif
-#ifdef WLAN_FEATURE_11BE
-	mon_ops->mon_tx_stats_update = NULL;
-#endif
+	mon_ops->mon_tx_stats_update = dp_mon_tx_stats_update_1_0;
 #endif
 #if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
 	mon_ops->mon_filter_setup_smart_monitor =

+ 10 - 2
dp/wifi3.0/monitor/2.0/dp_mon_2.0.c

@@ -475,12 +475,16 @@ void
 dp_mon_tx_stats_update_2_0(struct dp_mon_peer *mon_peer,
 			   struct cdp_tx_completion_ppdu_user *ppdu)
 {
-	uint8_t preamble;
-	uint8_t mcs;
+	uint8_t preamble, mcs, punc_mode;
 
 	preamble = ppdu->preamble;
 	mcs = ppdu->mcs;
 
+	punc_mode = dp_mon_get_puncture_type(ppdu->punc_pattern_bitmap,
+					     ppdu->bw);
+	ppdu->punc_mode = punc_mode;
+
+	DP_STATS_INC(mon_peer, tx.punc_bw[punc_mode], ppdu->num_msdu);
 	DP_STATS_INCC(mon_peer,
 		      tx.pkt_type[preamble].mcs_count[MAX_MCS - 1],
 		      ppdu->num_msdu,
@@ -525,6 +529,9 @@ dp_mon_get_puncture_type(uint16_t puncture_pattern, uint8_t bw)
 	uint16_t mask;
 	uint8_t punctured_bits;
 
+	if (!puncture_pattern)
+		return NO_PUNCTURE;
+
 	switch (bw) {
 	case CMN_BW_80MHZ:
 		mask = PUNCTURE_80MHZ_MASK;
@@ -584,6 +591,7 @@ void
 dp_mon_tx_stats_update_2_0(struct dp_mon_peer *mon_peer,
 			   struct cdp_tx_completion_ppdu_user *ppdu)
 {
+	ppdu->punc_mode = NO_PUNCTURE;
 }
 
 enum cdp_punctured_modes

+ 3 - 1
dp/wifi3.0/monitor/2.0/dp_rx_mon_2.0.c

@@ -630,12 +630,13 @@ void dp_rx_mon_stats_update_2_0(struct dp_mon_peer *mon_peer,
 				struct cdp_rx_indication_ppdu *ppdu,
 				struct cdp_rx_stats_ppdu_user *ppdu_user)
 {
-	uint8_t mcs, preamble, ppdu_type;
+	uint8_t mcs, preamble, ppdu_type, punc_mode;
 	uint32_t num_msdu;
 
 	preamble = ppdu->u.preamble;
 	ppdu_type = ppdu->u.ppdu_type;
 	num_msdu = ppdu_user->num_msdu;
+	punc_mode = ppdu->punc_bw;
 
 	if (ppdu_type == HAL_RX_TYPE_SU)
 		mcs = ppdu->u.mcs;
@@ -643,6 +644,7 @@ void dp_rx_mon_stats_update_2_0(struct dp_mon_peer *mon_peer,
 		mcs = ppdu_user->mcs;
 
 	DP_STATS_INC(mon_peer, rx.mpdu_retry_cnt, ppdu_user->mpdu_retries);
+	DP_STATS_INC(mon_peer, rx.punc_bw[punc_mode], num_msdu);
 	DP_STATS_INCC(mon_peer,
 		      rx.pkt_type[preamble].mcs_count[MAX_MCS - 1], num_msdu,
 		      ((mcs >= MAX_MCS_11BE) && (preamble == DOT11_BE)));

+ 1 - 2
dp/wifi3.0/monitor/dp_mon.c

@@ -2411,7 +2411,6 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
 	uint32_t rix;
 	uint16_t ratecode = 0;
 	struct dp_mon_peer *mon_peer = NULL;
-	enum cdp_punctured_modes punc_mode = NO_PUNCTURE;
 
 	if (!peer || !ppdu)
 		return;
@@ -2428,7 +2427,7 @@ dp_tx_rate_stats_update(struct dp_peer *peer,
 				   ppdu->nss,
 				   ppdu->preamble,
 				   ppdu->bw,
-				   punc_mode,
+				   ppdu->punc_mode,
 				   &rix,
 				   &ratecode);