瀏覽代碼

qcacmn: Get vdev stats based on arch

With Single Netdev Unified and Hybrid Mode,
the calculation of vdev stats is changed as
per the mode. For LI platforms the path
to get vdev stats is still same while for
BE the vdev stats config path is different.
Introduced Arch ops to handle this diversion.

Change-Id: If4f0f49e78d35126942cd3f1872a5856e4d0f5ba
CRs-Fixed: 3482567
Kenvish Butani 2 年之前
父節點
當前提交
c0fe52d4c6

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

@@ -2922,6 +2922,9 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
 	arch_ops->txrx_srng_init = dp_srng_init_be;
 	arch_ops->dp_get_vdev_stats_for_unmap_peer =
 					dp_get_vdev_stats_for_unmap_peer_be;
+#ifdef WLAN_MLO_MULTI_CHIP
+	arch_ops->dp_get_interface_stats = dp_get_interface_stats_be;
+#endif
 #if defined(DP_POWER_SAVE) || defined(FEATURE_RUNTIME_PM)
 	arch_ops->dp_update_ring_hptp = dp_update_ring_hptp;
 #endif

+ 4 - 10
dp/wifi3.0/be/mlo/dp_mlo.c

@@ -665,12 +665,6 @@ void dp_aggregate_interface_stats(struct dp_vdev *vdev,
 			     DP_MOD_ID_GENERIC_STATS);
 
 	dp_update_vdev_rate_stats(vdev_stats, &vdev->stats);
-
-#if defined(FEATURE_PERPKT_INFO) && WDI_EVENT_ENABLE
-	dp_wdi_event_handler(WDI_EVENT_UPDATE_DP_STATS, vdev->pdev->soc,
-			     vdev_stats, vdev->vdev_id,
-			     UPDATE_VDEV_STATS, vdev->pdev->pdev_id);
-#endif
 }
 
 /**
@@ -766,10 +760,10 @@ complete:
 }
 
 QDF_STATUS
-dp_txrx_get_interface_stats(struct cdp_soc_t *soc_hdl,
-			    uint8_t vdev_id,
-			    void *buf,
-			    bool is_aggregate)
+dp_get_interface_stats_be(struct cdp_soc_t *soc_hdl,
+			  uint8_t vdev_id,
+			  void *buf,
+			  bool is_aggregate)
 {
 	struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
 	struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, vdev_id,

+ 13 - 0
dp/wifi3.0/be/mlo/dp_mlo.h

@@ -204,4 +204,17 @@ int32_t dp_mlo_get_delta_tsf2_wrt_mlo_offset(struct dp_soc *soc,
  * Return: int32_t
  */
 int32_t dp_mlo_get_delta_tqm_wrt_mlo_offset(struct dp_soc *soc);
+
+/**
+ * dp_get_interface_stats_be() - get vdev stats for ath interface
+ * @soc_hdl: CDP SoC handle
+ * @vdev_id: vdev Id
+ * @buf: buffer for vdev stats
+ * @is_aggregate: for aggregation
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+dp_get_interface_stats_be(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
+			  void *buf, bool is_aggregate);
 #endif /* __DP_MLO_H */

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

@@ -2849,20 +2849,17 @@ void dp_aggregate_vdev_stats(struct dp_vdev *vdev,
 			     struct cdp_vdev_stats *vdev_stats);
 
 /**
- * dp_txrx_get_interface_stats() - get vdev stats for ath interface
+ * dp_txrx_get_vdev_stats() - Update buffer with cdp_vdev_stats
  * @soc_hdl: CDP SoC handle
  * @vdev_id: vdev Id
  * @buf: buffer for vdev stats
- * @is_aggregate: for aggregation
+ * @is_aggregate: are aggregate stats being collected
  *
  * Return: QDF_STATUS
  */
-
 QDF_STATUS
-dp_txrx_get_interface_stats(struct cdp_soc_t *soc_hdl,
-			    uint8_t vdev_id,
-			    void *buf,
-			    bool is_aggregate);
+dp_txrx_get_vdev_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
+		       void *buf, bool is_aggregate);
 
 /**
  * dp_rx_bar_stats_cb() - BAR received stats callback

+ 19 - 7
dp/wifi3.0/dp_main.c

@@ -5751,8 +5751,8 @@ void dp_aggregate_vdev_stats(struct dp_vdev *vdev,
 
 #if defined(FEATURE_PERPKT_INFO) && WDI_EVENT_ENABLE
 	dp_wdi_event_handler(WDI_EVENT_UPDATE_DP_STATS, vdev->pdev->soc,
-			    vdev_stats, vdev->vdev_id,
-			    UPDATE_VDEV_STATS, vdev->pdev->pdev_id);
+			     vdev_stats, vdev->vdev_id,
+			     UPDATE_VDEV_STATS, vdev->pdev->pdev_id);
 #endif
 }
 
@@ -8191,7 +8191,7 @@ dp_txrx_reset_peer_stats(struct cdp_soc_t *soc, uint8_t vdev_id,
  *
  * Return: QDF_STATUS
  */
-static QDF_STATUS
+QDF_STATUS
 dp_txrx_get_vdev_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
 		       void *buf, bool is_aggregate)
 {
@@ -8946,6 +8946,22 @@ QDF_STATUS dp_txrx_clear_dump_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 	return status;
 }
 
+static QDF_STATUS
+dp_txrx_get_interface_stats(struct cdp_soc_t *soc_hdl,
+			    uint8_t vdev_id,
+			    void *buf,
+			    bool is_aggregate)
+{
+	struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
+
+	if (soc && soc->arch_ops.dp_get_interface_stats)
+		return soc->arch_ops.dp_get_interface_stats(soc_hdl,
+							    vdev_id,
+							    buf,
+							    is_aggregate);
+	return QDF_STATUS_E_FAILURE;
+}
+
 #ifdef QCA_LL_TX_FLOW_CONTROL_V2
 /**
  * dp_update_flow_control_parameters() - API to store datapath
@@ -10908,11 +10924,7 @@ static struct cdp_host_stats_ops dp_ops_host_stats = {
 					dp_get_peer_extd_rate_link_stats,
 	.get_pdev_obss_stats = dp_get_obss_stats,
 	.clear_pdev_obss_pd_stats = dp_clear_pdev_obss_pd_stats,
-#ifdef CONFIG_MLO_SINGLE_DEV
 	.txrx_get_interface_stats  = dp_txrx_get_interface_stats,
-#else
-	.txrx_get_interface_stats  = dp_txrx_get_vdev_stats,
-#endif
 	/* TODO */
 };
 

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

@@ -8661,7 +8661,7 @@ void dp_update_vdev_stats_on_peer_unmap(struct dp_vdev *vdev,
 	uint8_t link_id = 0;
 	struct dp_pdev *pdev = vdev->pdev;
 
-	if (soc && soc->arch_ops.dp_get_vdev_stats_for_unmap_peer)
+	if (soc->arch_ops.dp_get_vdev_stats_for_unmap_peer)
 		soc->arch_ops.dp_get_vdev_stats_for_unmap_peer(vdev,
 							       peer,
 							       &vdev_stats);

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

@@ -2260,6 +2260,7 @@ enum dp_context_type {
  * @dp_tx_desc_pool_free: Free arch specific TX descriptor pool
  * @txrx_srng_init: Init txrx srng
  * @dp_get_vdev_stats_for_unmap_peer: Get vdev stats pointer for unmap peer
+ * @dp_get_interface_stats: Get interface stats
  * @ppeds_handle_attached:
  * @txrx_soc_ppeds_interrupt_stop:
  * @txrx_soc_ppeds_interrupt_start:
@@ -2511,6 +2512,10 @@ struct dp_arch_ops {
 					struct dp_vdev *vdev,
 					struct dp_peer *peer,
 					struct cdp_vdev_stats **vdev_stats);
+	QDF_STATUS (*dp_get_interface_stats)(struct cdp_soc_t *soc_hdl,
+					     uint8_t vdev_id,
+					     void *buf,
+					     bool is_aggregate);
 #ifdef WLAN_SUPPORT_PPEDS
 	void (*txrx_soc_ppeds_interrupt_stop)(struct dp_soc *soc);
 	void (*txrx_soc_ppeds_interrupt_start)(struct dp_soc *soc);

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

@@ -719,6 +719,7 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
 	arch_ops->txrx_srng_init = dp_srng_init_li;
 	arch_ops->dp_get_vdev_stats_for_unmap_peer =
 					dp_get_vdev_stats_for_unmap_peer_li;
+	arch_ops->dp_get_interface_stats = dp_txrx_get_vdev_stats;
 #if defined(DP_POWER_SAVE) || defined(FEATURE_RUNTIME_PM)
 	arch_ops->dp_update_ring_hptp = dp_update_ring_hptp;
 #endif