Kaynağa Gözat

qcacmn: Add ring stats for direct switch rings

Add ring statistics for reo2ppe and ppe2tcl rings

Change-Id: Ib9c15ba2f95d5cb97d238afad8f6f93dc5100e82
CRs-Fixed: 3279422
Pavankumar Nandeshwar 2 yıl önce
ebeveyn
işleme
c3630a234b

+ 17 - 0
dp/wifi3.0/be/dp_be.c

@@ -61,6 +61,16 @@ static struct wlan_cfg_tcl_wbm_ring_num_map g_tcl_wbm_map_array[MAX_TCL_DATA_RIN
 };
 #endif
 
+#ifdef WLAN_SUPPORT_PPEDS
+static void dp_ppeds_rings_status(struct dp_soc *soc)
+{
+	struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
+
+	dp_print_ring_stat_from_hal(soc, &be_soc->reo2ppe_ring, REO2PPE);
+	dp_print_ring_stat_from_hal(soc, &be_soc->ppe2tcl_ring, PPE2TCL);
+}
+#endif
+
 static void dp_soc_cfg_attach_be(struct dp_soc *soc)
 {
 	struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx = soc->wlan_cfg_ctx;
@@ -2022,6 +2032,13 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
 					dp_reconfig_tx_vdev_mcast_ctrl_be;
 	arch_ops->dp_cc_reg_cfg_init = dp_cc_reg_cfg_init;
 #endif
+
+#ifdef WLAN_SUPPORT_PPEDS
+	arch_ops->dp_txrx_ppeds_rings_status = dp_ppeds_rings_status;
+#else
+	arch_ops->dp_txrx_ppeds_rings_status = NULL;
+#endif
+
 	dp_init_near_full_arch_ops_be(arch_ops);
 	arch_ops->get_rx_hash_key = dp_get_rx_hash_key_be;
 	arch_ops->print_mlo_ast_stats = dp_print_mlo_ast_stats_be;

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

@@ -2377,6 +2377,17 @@ void dp_update_delay_stats(struct cdp_tid_tx_stats *tstats,
  */
 void dp_print_ring_stats(struct dp_pdev *pdev);
 
+/**
+ * dp_print_ring_stat_from_hal(): Print tail and head pointer through hal
+ * @soc: soc handle
+ * @srng: srng handle
+ * @ring_type: ring type
+ *
+ * Return:void
+ */
+void
+dp_print_ring_stat_from_hal(struct dp_soc *soc,  struct dp_srng *srng,
+			    enum hal_ring_type ring_type);
 /**
  * dp_print_pdev_cfg_params() - Print the pdev cfg parameters
  * @pdev_handle: DP pdev handle

+ 4 - 0
dp/wifi3.0/dp_main.c

@@ -9583,6 +9583,10 @@ char *dp_srng_get_str_from_hal_ring_type(enum hal_ring_type ring_type)
 		return "Rxdma_monitor_destination";
 	case WBM_IDLE_LINK:
 		return "WBM_hw_idle_link";
+	case PPE2TCL:
+		return "PPE2TCL";
+	case REO2PPE:
+		return "REO2PPE";
 	default:
 		dp_err("Invalid ring type");
 		break;

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

@@ -5819,7 +5819,7 @@ dp_print_pdev_cfg_params(struct dp_pdev *pdev)
  *
  * Return: void
  */
-static void
+void
 dp_print_ring_stat_from_hal(struct dp_soc *soc,  struct dp_srng *srng,
 			    enum hal_ring_type ring_type)
 {
@@ -6031,6 +6031,11 @@ dp_print_ring_stats(struct dp_pdev *pdev)
 					    [lmac_id],
 					    RXDMA_DST);
 	}
+
+#ifdef WLAN_SUPPORT_PPEDS
+	if (pdev->soc->arch_ops.dp_txrx_ppeds_rings_status)
+		pdev->soc->arch_ops.dp_txrx_ppeds_rings_status(pdev->soc);
+#endif
 	hif_rtpm_put(HIF_RTPM_PUT_ASYNC, HIF_RTPM_ID_DP_RING_STATS);
 }
 

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

@@ -1986,6 +1986,7 @@ struct dp_arch_ops {
 #ifdef IPA_OFFLOAD
 	int8_t (*ipa_get_bank_id)(struct dp_soc *soc);
 #endif
+	void (*dp_txrx_ppeds_rings_status)(struct dp_soc *soc);
 };
 
 /**

+ 1 - 0
dp/wifi3.0/li/dp_li.c

@@ -621,6 +621,7 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
 	arch_ops->dp_find_peer_by_destmac = dp_find_peer_by_destmac_li;
 	arch_ops->peer_get_reo_hash = dp_peer_get_reo_hash_li;
 	arch_ops->reo_remap_config = dp_reo_remap_config_li;
+	arch_ops->dp_txrx_ppeds_rings_status = NULL;
 }
 
 #ifdef QCA_DP_TX_HW_SW_NBUF_DESC_PREFETCH