فهرست منبع

qcacmn: Get channel utilization from dp pdev

Set channel util stats to dp pdev from channel stats event

CRs-Fixed: 3380939
Change-Id: Ib908946a42077f936402afbe846a835cb91b0a8d
aloksing 2 سال پیش
والد
کامیت
01569fa038
6فایلهای تغییر یافته به همراه82 افزوده شده و 0 حذف شده
  1. 27 0
      dp/inc/cdp_txrx_host_stats.h
  2. 5 0
      dp/inc/cdp_txrx_ops.h
  3. 14 0
      dp/inc/cdp_txrx_stats_struct.h
  4. 13 0
      dp/wifi3.0/dp_internal.h
  5. 1 0
      dp/wifi3.0/dp_main.c
  6. 22 0
      dp/wifi3.0/dp_stats.c

+ 27 - 0
dp/inc/cdp_txrx_host_stats.h

@@ -1088,6 +1088,33 @@ static inline QDF_STATUS cdp_get_peer_deter_stats(
 	return soc->ops->host_stats_ops->txrx_peer_deter_stats(
 					soc, addr, stats);
 }
+
+/**
+ * cdp_update_pdev_chan_util_stats(): function to update pdev channel util stats
+ * @soc: soc handle
+ * @pdev_id: pdev id
+ * @ch_util: pointer to pdev ch util stats
+ *
+ * return: status
+ */
+static inline QDF_STATUS cdp_update_pdev_chan_util_stats(
+				ol_txrx_soc_handle soc,
+				uint8_t pdev_id,
+				struct cdp_pdev_chan_util_stats *ch_util)
+{
+	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_update_pdev_chan_util_stats)
+		return QDF_STATUS_E_FAILURE;
+
+	return soc->ops->host_stats_ops->txrx_update_pdev_chan_util_stats(
+					soc, pdev_id, ch_util);
+}
 #endif
 
 /**

+ 5 - 0
dp/inc/cdp_txrx_ops.h

@@ -1254,6 +1254,11 @@ struct cdp_host_stats_ops {
 				struct cdp_soc_t *soc,
 				uint8_t *addr,
 				struct cdp_peer_deter_stats *stats);
+	QDF_STATUS
+		(*txrx_update_pdev_chan_util_stats)(
+				struct cdp_soc_t *soc,
+				uint8_t pdev_id,
+				struct cdp_pdev_chan_util_stats *ch_util);
 #endif
 	QDF_STATUS
 		(*txrx_get_peer_extd_rate_link_stats)

+ 14 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -2961,6 +2961,18 @@ struct cdp_peer_deter_stats {
 	struct cdp_peer_rx_deter rx_det;
 };
 
+/**
+ * struct cdp_pdev_deter_stats- Structure to hold pdev deterministic stats
+ * @ap_chan_util: Channel utilization
+ * @ap_tx_util: TX utilization
+ * @ap_rx_util: RX utilization
+ */
+struct cdp_pdev_chan_util_stats {
+	uint8_t ap_chan_util;
+	uint8_t ap_tx_util;
+	uint8_t ap_rx_util;
+};
+
 /**
  * struct cdp_pdev_deter_stats- Structure to hold pdev deterministic stats
  * @dl_ofdma_usr: num_user counter for dl ofdma
@@ -2970,6 +2982,7 @@ struct cdp_peer_deter_stats {
  * @dl_mode_cnt: DL tx mode counter
  * @ul_mode_cnt: UL tx mode counter
  * @ch_access_delay
+ * @ch_util: channel congestion stats
  */
 struct cdp_pdev_deter_stats {
 	uint64_t dl_ofdma_usr[CDP_MU_MAX_USERS];
@@ -2981,6 +2994,7 @@ struct cdp_pdev_deter_stats {
 	uint32_t ch_access_delay[WME_AC_MAX];
 	uint64_t trigger_success;
 	uint64_t trigger_fail;
+	struct cdp_pdev_chan_util_stats ch_util;
 };
 #endif
 

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

@@ -4253,6 +4253,19 @@ dp_get_peer_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
 QDF_STATUS
 dp_get_pdev_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 			struct cdp_pdev_deter_stats *stats);
+
+/*
+ * dp_update_pdev_chan_util_stats- API to update channel utilization stats
+ * @soc_hdl: soc handle
+ * @pdev_id: id of pdev handle
+ * @ch_util: Pointer to channel util stats
+ *
+ * Return: QDF_STATUS_SUCCESS: Success
+ *         QDF_STATUS_E_FAILURE: Error
+ */
+QDF_STATUS
+dp_update_pdev_chan_util_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
+			       struct cdp_pdev_chan_util_stats *ch_util);
 #endif /* WLAN_TELEMETRY_STATS_SUPPORT */
 
 #ifdef CONNECTIVITY_PKTLOG

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

@@ -14204,6 +14204,7 @@ static struct cdp_host_stats_ops dp_ops_host_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,
+	.txrx_update_pdev_chan_util_stats = dp_update_pdev_chan_util_stats,
 #endif
 	.txrx_get_peer_extd_rate_link_stats =
 					dp_get_peer_extd_rate_link_stats,

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

@@ -9317,6 +9317,11 @@ dp_get_pdev_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 	stats->trigger_success = pdev->stats.deter_stats.trigger_success;
 	stats->trigger_fail = pdev->stats.deter_stats.trigger_fail;
 
+	stats->ch_util.ap_tx_util = pdev->stats.deter_stats.ch_util.ap_tx_util;
+	stats->ch_util.ap_rx_util = pdev->stats.deter_stats.ch_util.ap_rx_util;
+	stats->ch_util.ap_chan_util =
+			pdev->stats.deter_stats.ch_util.ap_chan_util;
+
 	return QDF_STATUS_SUCCESS;
 }
 
@@ -9336,4 +9341,21 @@ dp_get_peer_deter_stats(struct cdp_soc_t *soc_hdl, uint8_t *addr,
 
 	return QDF_STATUS_SUCCESS;
 }
+
+QDF_STATUS
+dp_update_pdev_chan_util_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
+			       struct cdp_pdev_chan_util_stats *ch_util)
+{
+	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;
+
+	pdev->stats.deter_stats.ch_util.ap_tx_util = ch_util->ap_tx_util;
+	pdev->stats.deter_stats.ch_util.ap_rx_util = ch_util->ap_rx_util;
+	pdev->stats.deter_stats.ch_util.ap_chan_util = ch_util->ap_chan_util;
+
+	return QDF_STATUS_SUCCESS;
+}
 #endif