소스 검색

qcacmn: Get deterministic stats from DP PDEV

Add cdp layer API to get stats and
Copy pdev deterministic stats from dp_pdev to cdp structure

Change-Id: Ia7dbbe4cfe7ebe66a040879144505b17aaaa625a
CRs-Fixed: 3380939
aloksing 2 년 전
부모
커밋
1442fb17b6
5개의 변경된 파일79개의 추가작업 그리고 0개의 파일을 삭제
  1. 27 0
      dp/inc/cdp_txrx_host_stats.h
  2. 5 0
      dp/inc/cdp_txrx_ops.h
  3. 13 0
      dp/wifi3.0/dp_internal.h
  4. 1 0
      dp/wifi3.0/dp_main.c
  5. 33 0
      dp/wifi3.0/dp_stats.c

+ 27 - 0
dp/inc/cdp_txrx_host_stats.h

@@ -1035,6 +1035,33 @@ static inline QDF_STATUS cdp_get_peer_telemetry_stats(
 					soc, addr, stats);
 }
 
+/**
+ * cdp_get_pdev_deter_stats(): function to get pdev deterministic stats
+ * @soc: soc handle
+ * @pdev_id: pdev id
+ * @stats: pointer to pdev deterministic stats
+ *
+ * return: status
+ */
+static inline QDF_STATUS cdp_get_pdev_deter_stats(
+				ol_txrx_soc_handle soc,
+				uint8_t pdev_id,
+				struct cdp_pdev_deter_stats *stats)
+{
+	if (!soc || !soc->ops) {
+		dp_cdp_debug("Invalid Instance");
+		QDF_BUG(0);
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	if (!soc->ops->host_stats_ops ||
+	    !soc->ops->host_stats_ops->txrx_pdev_deter_stats)
+		return QDF_STATUS_E_FAILURE;
+
+	return soc->ops->host_stats_ops->txrx_pdev_deter_stats(
+					soc, pdev_id, stats);
+}
+
 /**
  * cdp_get_peer_deter_stats(): function to get peer deterministic stats
  * @soc: soc handle

+ 5 - 0
dp/inc/cdp_txrx_ops.h

@@ -1244,6 +1244,11 @@ struct cdp_host_stats_ops {
 				struct cdp_soc_t *soc,
 				uint8_t *addr,
 				struct cdp_peer_telemetry_stats *stats);
+	QDF_STATUS
+		(*txrx_pdev_deter_stats)(
+				struct cdp_soc_t *soc,
+				uint8_t pdev_id,
+				struct cdp_pdev_deter_stats *stats);
 	QDF_STATUS
 		(*txrx_peer_deter_stats)(
 				struct cdp_soc_t *soc,

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

@@ -4240,6 +4240,19 @@ dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
 QDF_STATUS
 dp_get_peer_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
 			struct cdp_peer_deter_stats *stats);
+
+/*
+ * dp_get_pdev_deter_stats- API to get pdev deterministic stats
+ * @soc_hdl: soc handle
+ * @pdev_id: id of pdev handle
+ * @stats: pointer to pdev deterministic stats
+ *
+ * Return: QDF_STATUS_SUCCESS: Success
+ *         QDF_STATUS_E_FAILURE: Error
+ */
+QDF_STATUS
+dp_get_pdev_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
+			struct cdp_pdev_deter_stats *stats);
 #endif /* WLAN_TELEMETRY_STATS_SUPPORT */
 
 #ifdef CONNECTIVITY_PKTLOG

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

@@ -14202,6 +14202,7 @@ static struct cdp_host_stats_ops dp_ops_host_stats = {
 #ifdef WLAN_TELEMETRY_STATS_SUPPORT
 	.txrx_pdev_telemetry_stats = dp_get_pdev_telemetry_stats,
 	.txrx_peer_telemetry_stats = dp_get_peer_telemetry_stats,
+	.txrx_pdev_deter_stats = dp_get_pdev_deter_stats,
 	.txrx_peer_deter_stats = dp_get_peer_deter_stats,
 #endif
 	.txrx_get_peer_extd_rate_link_stats =

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

@@ -9287,6 +9287,39 @@ dp_get_peer_telemetry_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
 	return QDF_STATUS_SUCCESS;
 }
 
+QDF_STATUS
+dp_get_pdev_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
+			struct cdp_pdev_deter_stats *stats)
+{
+	struct dp_soc *soc = (struct dp_soc *)soc_hdl;
+	struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
+
+	if (!pdev)
+		return QDF_STATUS_E_FAILURE;
+
+	qdf_mem_copy(stats->dl_ofdma_usr, pdev->stats.deter_stats.dl_ofdma_usr,
+		     sizeof(stats->dl_ofdma_usr[0]) * CDP_MU_MAX_USERS);
+	qdf_mem_copy(stats->ul_ofdma_usr, pdev->stats.deter_stats.ul_ofdma_usr,
+		     sizeof(stats->ul_ofdma_usr[0]) * CDP_MU_MAX_USERS);
+	qdf_mem_copy(stats->dl_mimo_usr, pdev->stats.deter_stats.dl_mimo_usr,
+		     sizeof(stats->dl_mimo_usr[0]) * CDP_MU_MAX_USERS);
+	qdf_mem_copy(stats->ul_mimo_usr, pdev->stats.deter_stats.ul_mimo_usr,
+		     sizeof(stats->ul_mimo_usr[0]) * CDP_MU_MAX_USERS);
+
+	qdf_mem_copy(stats->ul_mode_cnt, pdev->stats.deter_stats.ul_mode_cnt,
+		     sizeof(stats->ul_mode_cnt[0]) * TX_MODE_UL_MAX);
+	qdf_mem_copy(stats->dl_mode_cnt, pdev->stats.deter_stats.dl_mode_cnt,
+		     sizeof(stats->dl_mode_cnt[0]) * TX_MODE_DL_MAX);
+	qdf_mem_copy(stats->ch_access_delay,
+		     pdev->stats.deter_stats.ch_access_delay,
+		     sizeof(stats->ch_access_delay[0]) * WME_AC_MAX);
+
+	stats->trigger_success = pdev->stats.deter_stats.trigger_success;
+	stats->trigger_fail = pdev->stats.deter_stats.trigger_fail;
+
+	return QDF_STATUS_SUCCESS;
+}
+
 QDF_STATUS
 dp_get_peer_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
 			struct cdp_peer_deter_stats *stats)