瀏覽代碼

qcacmn: clearing jitter statistics

adding support for clearing jitter statistics
for command "cfg80211tool athX txrx_stats 257"

Change-Id: Iaac9a6e6a849bbb08935ca581fa58c93ef51bdbd
Nitin Shetty 4 年之前
父節點
當前提交
279435cff4
共有 5 個文件被更改,包括 54 次插入22 次删除
  1. 3 1
      dp/inc/cdp_txrx_ops.h
  2. 17 0
      dp/inc/cdp_txrx_stats_struct.h
  3. 27 8
      dp/wifi3.0/dp_main.c
  4. 5 5
      dp/wifi3.0/dp_stats.c
  5. 2 8
      dp/wifi3.0/dp_types.h

+ 3 - 1
dp/inc/cdp_txrx_ops.h

@@ -1085,10 +1085,12 @@ struct ol_if_ops {
 			       uint16_t peer_id, uint8_t vdev_id, uint8_t *peer_mac_addr);
 #endif
 	int (*get_soc_nss_cfg)(struct cdp_ctrl_objmgr_psoc *ol_soc_handle);
-	/* TODO: Add any other control path calls required to OL_IF/WMA layer */
 
 	char *(*get_device_name)(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
 				 uint8_t pdev_id);
+	QDF_STATUS(*nss_stats_clr)(struct cdp_ctrl_objmgr_psoc *psoc,
+				   uint8_t vdev_id);
+	/* TODO: Add any other control path calls required to OL_IF/WMA layer */
 };
 
 #ifdef DP_PEER_EXTENDED_API

+ 17 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -1271,6 +1271,23 @@ struct cdp_peer_stats {
 	struct cdp_rx_stats rx;
 };
 
+/* struct cdp_peer_tid_stats - Per peer and per TID stats
+ * @tx_avg_jitter: tx average jitter
+ * @tx_avg_delay: tx average delay
+ * @tx_avg_err: tx average error
+ * @tx_total_success: tx total success
+ * @tx_drop: tx drop
+ */
+struct cdp_peer_tid_stats {
+#ifdef WLAN_PEER_JITTER
+	uint32_t tx_avg_jitter;
+	uint32_t tx_avg_delay;
+	uint64_t tx_avg_err;
+	uint64_t tx_total_success;
+	uint64_t tx_drop;
+#endif
+};
+
 /* struct cdp_interface_peer_stats - interface structure for txrx peer stats
  * @peer_mac: peer mac address
  * @vdev_id : vdev_id for the peer

+ 27 - 8
dp/wifi3.0/dp_main.c

@@ -7303,17 +7303,29 @@ void dp_print_napi_stats(struct dp_soc *soc)
 /**
  * dp_txrx_host_stats_clr(): Reinitialize the txrx stats
  * @vdev: DP_VDEV handle
+ * @dp_soc: DP_SOC handle
  *
  * Return: QDF_STATUS
  */
 static inline QDF_STATUS
-dp_txrx_host_stats_clr(struct dp_vdev *vdev)
+dp_txrx_host_stats_clr(struct dp_vdev *vdev, struct dp_soc *soc)
 {
 	struct dp_peer *peer = NULL;
 
 	if (!vdev || !vdev->pdev)
 		return QDF_STATUS_E_FAILURE;
 
+	/*
+	 * if NSS offload is enabled, then send message
+	 * to NSS FW to clear the stats. Once NSS FW clears the statistics
+	 * then clear host statistics.
+	 */
+	if (wlan_cfg_get_dp_soc_nss_cfg(soc->wlan_cfg_ctx)) {
+		if (soc->cdp_soc.ol_ops->nss_stats_clr)
+			soc->cdp_soc.ol_ops->nss_stats_clr(soc->ctrl_psoc,
+							   vdev->vdev_id);
+	}
+
 	DP_STATS_CLR(vdev->pdev);
 	DP_STATS_CLR(vdev->pdev->soc);
 	DP_STATS_CLR(vdev);
@@ -7321,10 +7333,15 @@ dp_txrx_host_stats_clr(struct dp_vdev *vdev)
 	hif_clear_napi_stats(vdev->pdev->soc->hif_handle);
 
 	TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
-		if (!peer)
-			return QDF_STATUS_E_FAILURE;
-		DP_STATS_CLR(peer);
+		struct dp_rx_tid *rx_tid;
+		uint8_t tid;
 
+		for (tid = 0; tid < DP_MAX_TIDS; tid++) {
+			rx_tid = &peer->rx_tid[tid];
+			DP_STATS_CLR(rx_tid);
+		}
+
+		DP_STATS_CLR(peer);
 #if defined(FEATURE_PERPKT_INFO) && WDI_EVENT_ENABLE
 		dp_wdi_event_handler(WDI_EVENT_UPDATE_DP_STATS, vdev->pdev->soc,
 				     &peer->stats,  peer->peer_id,
@@ -7424,13 +7441,15 @@ static void dp_txrx_stats_help(void)
 /**
  * dp_print_host_stats()- Function to print the stats aggregated at host
  * @vdev_handle: DP_VDEV handle
- * @type: host stats type
+ * @req: host stats type
+ * @soc: dp soc handler
  *
  * Return: 0 on success, print error message in case of failure
  */
 static int
 dp_print_host_stats(struct dp_vdev *vdev,
-		    struct cdp_txrx_stats_req *req)
+		    struct cdp_txrx_stats_req *req,
+		    struct dp_soc *soc)
 {
 	struct dp_pdev *pdev = (struct dp_pdev *)vdev->pdev;
 	enum cdp_host_txrx_stats type =
@@ -7440,7 +7459,7 @@ dp_print_host_stats(struct dp_vdev *vdev,
 
 	switch (type) {
 	case TXRX_CLEAR_STATS:
-		dp_txrx_host_stats_clr(vdev);
+		dp_txrx_host_stats_clr(vdev, soc);
 		break;
 	case TXRX_RX_RATE_STATS:
 		dp_print_rx_rates(vdev);
@@ -8996,7 +9015,7 @@ QDF_STATUS dp_txrx_stats_request(struct cdp_soc_t *soc_handle,
 
 	if ((host_stats != TXRX_HOST_STATS_INVALID) &&
 			(host_stats <= TXRX_HOST_STATS_MAX))
-		return dp_print_host_stats(vdev, req);
+		return dp_print_host_stats(vdev, req, soc);
 	else
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
 				"Wrong Input for TxRx Stats");

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

@@ -5366,11 +5366,11 @@ static void dp_print_jitter_stats(struct dp_peer *peer, struct dp_pdev *pdev)
 				"Total Success Count       : %llu\n"
 				"Total Drop                : %llu\n",
 				rx_tid->tid,
-				rx_tid->tx_avg_jitter,
-				rx_tid->tx_avg_delay,
-				rx_tid->tx_avg_err,
-				rx_tid->tx_total_success,
-				rx_tid->tx_drop);
+				rx_tid->stats.tx_avg_jitter,
+				rx_tid->stats.tx_avg_delay,
+				rx_tid->stats.tx_avg_err,
+				rx_tid->stats.tx_total_success,
+				rx_tid->stats.tx_drop);
 	}
 }
 #else

+ 2 - 8
dp/wifi3.0/dp_types.h

@@ -653,14 +653,8 @@ struct dp_rx_tid {
 	/* Coex Override preserved windows size 1 based */
 	uint16_t rx_ba_win_size_override;
 
-#ifdef WLAN_PEER_JITTER
-	/* Tx Jitter stats */
-	uint32_t tx_avg_jitter;
-	uint32_t tx_avg_delay;
-	uint64_t tx_avg_err;
-	uint64_t tx_total_success;
-	uint64_t tx_drop;
-#endif /* WLAN_PEER_JITTER */
+	/* Peer TID statistics */
+	struct cdp_peer_tid_stats stats;
 };
 
 /**