Sfoglia il codice sorgente

qcacmn: Correct the offsets & byte cnt computation in HTT stats

Offsets used by host for HTT stats are not aligned as per the
structure declaration given in file htt.h .
Make change to use the correct offsets to get the correct stats.

Also make change for byte count computation.

Also make cleanup changes for FR65817.

Change-Id: I8bc6164cc4994c49536d7277779f25b258be1592
CRs-Fixed: 3082742
Harsh Kumar Bijlani 3 anni fa
parent
commit
21fb667866

+ 8 - 7
dp/wifi3.0/dp_htt.c

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -2174,27 +2175,27 @@ static void dp_vdev_txrx_hw_stats_handler(struct htt_soc *soc,
 			tag_buf = tlv_buf_temp +
 				HTT_VDEV_STATS_GET_INDEX(TX_SUCCESS_PKT_CNT);
 			pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf);
-			tx_comp.num += pkt_count;
+			tx_comp.num = pkt_count;
 
 			/* Extract tx success packet byte count from buffer */
 			tag_buf = tlv_buf_temp +
 				HTT_VDEV_STATS_GET_INDEX(TX_SUCCESS_BYTE_CNT);
 			byte_count = HTT_VDEV_GET_STATS_U64(tag_buf);
-			tx_comp.bytes += byte_count;
+			tx_comp.bytes = byte_count;
 
 			/* Extract tx retry packet count from buffer */
 			tag_buf = tlv_buf_temp +
 				HTT_VDEV_STATS_GET_INDEX(TX_RETRY_PKT_CNT);
 			pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf);
 			tx_comp.num += pkt_count;
-			tx_failed.num += pkt_count;
+			tx_failed.num = pkt_count;
 
 			/* Extract tx retry packet byte count from buffer */
 			tag_buf = tlv_buf_temp +
 				HTT_VDEV_STATS_GET_INDEX(TX_RETRY_BYTE_CNT);
-			pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf);
+			byte_count = HTT_VDEV_GET_STATS_U64(tag_buf);
 			tx_comp.bytes += byte_count;
-			tx_failed.bytes += byte_count;
+			tx_failed.bytes = byte_count;
 
 			/* Extract tx drop packet count from buffer */
 			tag_buf = tlv_buf_temp +
@@ -2206,7 +2207,7 @@ static void dp_vdev_txrx_hw_stats_handler(struct htt_soc *soc,
 			/* Extract tx drop packet byte count from buffer */
 			tag_buf = tlv_buf_temp +
 				HTT_VDEV_STATS_GET_INDEX(TX_DROP_BYTE_CNT);
-			pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf);
+			byte_count = HTT_VDEV_GET_STATS_U64(tag_buf);
 			tx_comp.bytes += byte_count;
 			tx_failed.bytes += byte_count;
 
@@ -2220,7 +2221,7 @@ static void dp_vdev_txrx_hw_stats_handler(struct htt_soc *soc,
 			/* Extract tx age-out packet byte count from buffer */
 			tag_buf = tlv_buf_temp +
 				HTT_VDEV_STATS_GET_INDEX(TX_AGE_OUT_BYTE_CNT);
-			pkt_count = HTT_VDEV_GET_STATS_U64(tag_buf);
+			byte_count = HTT_VDEV_GET_STATS_U64(tag_buf);
 			tx_comp.bytes += byte_count;
 			tx_failed.bytes += byte_count;
 

+ 7 - 6
dp/wifi3.0/dp_htt.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -147,12 +148,12 @@ void htt_htc_pkt_pool_free(struct htt_soc *soc);
 #define HTT_VDEV_STATS_TLV_RX_PKT_CNT_OFFSET          4
 #define HTT_VDEV_STATS_TLV_TX_SUCCESS_BYTE_CNT_OFFSET 6
 #define HTT_VDEV_STATS_TLV_TX_SUCCESS_PKT_CNT_OFFSET  8
-#define HTT_VDEV_STATS_TLV_TX_RETRY_BYTE_CNT_OFFSET   10
-#define HTT_VDEV_STATS_TLV_TX_RETRY_PKT_CNT_OFFSET    12
-#define HTT_VDEV_STATS_TLV_TX_DROP_BYTE_CNT_OFFSET    14
-#define HTT_VDEV_STATS_TLV_TX_DROP_PKT_CNT_OFFSET     16
-#define HTT_VDEV_STATS_TLV_TX_AGE_OUT_BYTE_CNT_OFFSET 18
-#define HTT_VDEV_STATS_TLV_TX_AGE_OUT_PKT_CNT_OFFSET  20
+#define HTT_VDEV_STATS_TLV_TX_RETRY_PKT_CNT_OFFSET    10
+#define HTT_VDEV_STATS_TLV_TX_DROP_PKT_CNT_OFFSET     12
+#define HTT_VDEV_STATS_TLV_TX_AGE_OUT_PKT_CNT_OFFSET  14
+#define HTT_VDEV_STATS_TLV_TX_RETRY_BYTE_CNT_OFFSET   16
+#define HTT_VDEV_STATS_TLV_TX_DROP_BYTE_CNT_OFFSET    18
+#define HTT_VDEV_STATS_TLV_TX_AGE_OUT_BYTE_CNT_OFFSET 20
 
 #define HTT_VDEV_STATS_GET_INDEX(index) \
 	HTT_VDEV_STATS_TLV_##index##_OFFSET

+ 10 - 9
dp/wifi3.0/dp_main.c

@@ -6411,11 +6411,11 @@ static QDF_STATUS dp_txrx_alloc_vdev_stats_id(struct cdp_soc_t *soc_hdl,
 	uint8_t id = 0;
 
 	if (!wlan_cfg_get_vdev_stats_hw_offload_config(soc->wlan_cfg_ctx)) {
-		*vdev_stats_id = DP_INVALID_VDEV_STATS_ID;
+		*vdev_stats_id = CDP_INVALID_VDEV_STATS_ID;
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	while (id < DP_MAX_VDEV_STATS_ID) {
+	while (id < CDP_MAX_VDEV_STATS_ID) {
 		if (!qdf_atomic_test_and_set_bit(id, &soc->vdev_stats_id_map)) {
 			*vdev_stats_id = id;
 			return QDF_STATUS_SUCCESS;
@@ -6423,7 +6423,7 @@ static QDF_STATUS dp_txrx_alloc_vdev_stats_id(struct cdp_soc_t *soc_hdl,
 		id++;
 	}
 
-	*vdev_stats_id = DP_INVALID_VDEV_STATS_ID;
+	*vdev_stats_id = CDP_INVALID_VDEV_STATS_ID;
 	return QDF_STATUS_E_FAILURE;
 }
 
@@ -6440,7 +6440,7 @@ static void dp_txrx_reset_vdev_stats_id(struct cdp_soc_t *soc_hdl,
 	struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
 
 	if ((!wlan_cfg_get_vdev_stats_hw_offload_config(soc->wlan_cfg_ctx)) ||
-	    (vdev_stats_id >= DP_MAX_VDEV_STATS_ID))
+	    (vdev_stats_id >= CDP_MAX_VDEV_STATS_ID))
 		return;
 
 	qdf_atomic_clear_bit(vdev_stats_id, &soc->vdev_stats_id_map);
@@ -6665,7 +6665,10 @@ void dp_peer_hw_txrx_stats_init(struct dp_soc *soc, struct dp_peer *peer)
 }
 #else
 static inline
-void dp_peer_hw_txrx_stats_init(struct dp_soc *soc, struct dp_peer *peer) {}
+void dp_peer_hw_txrx_stats_init(struct dp_soc *soc, struct dp_peer *peer)
+{
+	peer->hw_txrx_stats_en = 0;
+}
 #endif
 /*
  * dp_peer_create_wifi3() - attach txrx peer
@@ -9536,12 +9539,10 @@ dp_set_psoc_param(struct cdp_soc_t *cdp_soc,
 	case CDP_IPA_ENABLE:
 		soc->wlan_cfg_ctx->ipa_enabled = val.cdp_ipa_enabled;
 		break;
-#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
 	case CDP_SET_VDEV_STATS_HW_OFFLOAD:
-		wlan_cfg_ctx->vdev_stats_hw_offload_config =
-				val.cdp_psoc_param_vdev_stats_hw_offload;
+		wlan_cfg_set_vdev_stats_hw_offload_config(wlan_cfg_ctx,
+				val.cdp_psoc_param_vdev_stats_hw_offload);
 		break;
-#endif
 	default:
 		break;
 	}

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

@@ -161,9 +161,6 @@
 #define DP_SKIP_BAR_UPDATE_TIMEOUT 5000
 #endif
 
-#define DP_MAX_VDEV_STATS_ID        CDP_MAX_VDEV_STATS_ID
-#define DP_INVALID_VDEV_STATS_ID    CDP_INVALID_VDEV_STATS_ID
-
 enum rx_pktlog_mode {
 	DP_RX_PKTLOG_DISABLED = 0,
 	DP_RX_PKTLOG_FULL,

+ 2 - 3
hal/wifi3.0/be/hal_be_reo.h

@@ -28,14 +28,13 @@
 #define HAL_MAX_REO2SW_RINGS 8
 #define HAL_NUM_RX_RING_PER_IX_MAP 8
 
-#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
+#if defined(QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT) && \
+	defined(RX_REO_QUEUE_STATISTICS_COUNTER_INDEX_MASK)
 static inline void hal_update_stats_counter_index(uint32_t *reo_queue_desc,
 						  uint8_t vdev_stats_id)
 {
-#ifdef RX_REO_QUEUE_STATISTICS_COUNTER_INDEX_MASK
 	HAL_DESC_SET_FIELD(reo_queue_desc, RX_REO_QUEUE,
 			   STATISTICS_COUNTER_INDEX, vdev_stats_id);
-#endif
 }
 #else
 static inline void hal_update_stats_counter_index(uint32_t *reo_queue_desc,

+ 12 - 0
wlan_cfg/wlan_cfg.c

@@ -3141,6 +3141,13 @@ int wlan_cfg_get_vdev_stats_hw_offload_timer(struct wlan_cfg_dp_soc_ctxt *cfg)
 {
 	return cfg->vdev_stats_hw_offload_timer;
 }
+
+void
+wlan_cfg_set_vdev_stats_hw_offload_config(struct wlan_cfg_dp_soc_ctxt *cfg,
+					  bool val)
+{
+	cfg->vdev_stats_hw_offload_config = val;
+}
 #else
 bool
 wlan_cfg_get_vdev_stats_hw_offload_config(struct wlan_cfg_dp_soc_ctxt *cfg)
@@ -3152,4 +3159,9 @@ int wlan_cfg_get_vdev_stats_hw_offload_timer(struct wlan_cfg_dp_soc_ctxt *cfg)
 {
 	return 0;
 }
+
+void
+wlan_cfg_set_vdev_stats_hw_offload_config(struct wlan_cfg_dp_soc_ctxt *cfg,
+					  bool val)
+{}
 #endif

+ 12 - 0
wlan_cfg/wlan_cfg.h

@@ -1954,6 +1954,18 @@ void
 wlan_cfg_set_rx_rel_ring_id(struct wlan_cfg_dp_soc_ctxt *cfg,
 			    uint8_t wbm2sw_ring_id);
 
+/**
+ * wlan_cfg_set_vdev_stats_hw_offload_config() - Set hw vdev stats offload
+ *						 config
+ * @cfg: config context
+ * @value: value to be set
+ *
+ * Return: none
+ */
+void
+wlan_cfg_set_vdev_stats_hw_offload_config(struct wlan_cfg_dp_soc_ctxt *cfg,
+					  bool value);
+
 /**
  * wlan_cfg_get_vdev_stats_hw_offload_config() - Get hw vdev stats offload
  *						 config