Browse Source

qcacmn: Fill appropriate statistics value

Update stats request value if statistics request
from user level is greater that CDP_TXRX_STATS_HTT_MAX value.

Change-Id: I0e36200021fb70662481bc823a95f9e64a8b1e14
CRs-Fixed: 2291842
Venkata Sharath Chandra Manchala 6 years ago
parent
commit
599b14ce03
3 changed files with 22 additions and 10 deletions
  1. 1 1
      dp/inc/cdp_txrx_cmn_struct.h
  2. 2 2
      dp/inc/cdp_txrx_ops.h
  3. 19 7
      dp/wifi3.0/dp_main.c

+ 1 - 1
dp/inc/cdp_txrx_cmn_struct.h

@@ -868,7 +868,7 @@ enum cdp_stats {
 	CDP_TXRX_STATS_27,
 	CDP_TXRX_STATS_28,
 	CDP_TXRX_STATS_HTT_MAX = 256,
-	CDP_TXRX_MAX_STATS = 512,
+	CDP_TXRX_MAX_STATS = 265,
 };
 
 /*

+ 2 - 2
dp/inc/cdp_txrx_ops.h

@@ -295,8 +295,8 @@ struct cdp_cmn_ops {
 	void (*set_pdev_dscp_tid_map)(struct cdp_pdev *pdev, uint8_t map_id,
 			uint8_t tos, uint8_t tid);
 
-	int (*txrx_stats_request)(struct cdp_vdev *vdev,
-			struct cdp_txrx_stats_req *req);
+	QDF_STATUS (*txrx_stats_request)(struct cdp_vdev *vdev,
+					 struct cdp_txrx_stats_req *req);
 
 	QDF_STATUS (*display_stats)(void *psoc, uint16_t value,
 				    enum qdf_stats_verbosity_level level);

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

@@ -6898,24 +6898,26 @@ static int dp_fw_stats_process(struct cdp_vdev *vdev_handle,
  * @vdev: virtual handle
  * @req: stats request
  *
- * Return: integer
+ * Return: QDF_STATUS
  */
-static int dp_txrx_stats_request(struct cdp_vdev *vdev,
-		struct cdp_txrx_stats_req *req)
+static
+QDF_STATUS dp_txrx_stats_request(struct cdp_vdev *vdev,
+				 struct cdp_txrx_stats_req *req)
 {
 	int host_stats;
 	int fw_stats;
 	enum cdp_stats stats;
+	int num_stats;
 
 	if (!vdev || !req) {
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
 				"Invalid vdev/req instance");
-		return 0;
+		return QDF_STATUS_E_INVAL;
 	}
 
 	stats = req->stats;
 	if (stats >= CDP_TXRX_MAX_STATS)
-		return 0;
+		return QDF_STATUS_E_INVAL;
 
 	/*
 	 * DP_CURR_FW_STATS_AVAIL: no of FW stats currently available
@@ -6923,11 +6925,21 @@ static int dp_txrx_stats_request(struct cdp_vdev *vdev,
 	 */
 	if (stats > CDP_TXRX_STATS_HTT_MAX)
 		stats = stats + DP_CURR_FW_STATS_AVAIL - DP_HTT_DBG_EXT_STATS_MAX;
+
+	num_stats  = QDF_ARRAY_SIZE(dp_stats_mapping_table);
+
+	if (stats >= num_stats) {
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
+			  "%s: Invalid stats option: %d", __func__, stats);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	req->stats = stats;
 	fw_stats = dp_stats_mapping_table[stats][STATS_FW];
 	host_stats = dp_stats_mapping_table[stats][STATS_HOST];
 
 	QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
-		 "stats: %u fw_stats_type: %d host_stats_type: %d",
+		 "stats: %u fw_stats_type: %d host_stats: %d",
 		  stats, fw_stats, host_stats);
 
 	if (fw_stats != TXRX_FW_STATS_INVALID) {
@@ -6943,7 +6955,7 @@ static int dp_txrx_stats_request(struct cdp_vdev *vdev,
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
 				"Wrong Input for TxRx Stats");
 
-	return 0;
+	return QDF_STATUS_SUCCESS;
 }
 
 /*