From 599b14ce0335d4169dedf20e763019f4df1d61e4 Mon Sep 17 00:00:00 2001 From: Venkata Sharath Chandra Manchala Date: Mon, 6 Aug 2018 10:59:11 -0700 Subject: [PATCH] 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 --- dp/inc/cdp_txrx_cmn_struct.h | 2 +- dp/inc/cdp_txrx_ops.h | 4 ++-- dp/wifi3.0/dp_main.c | 26 +++++++++++++++++++------- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index c0a3e12a73cf..6d7bcdc9fcd7 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/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, }; /* diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 54bd78b4fc08..9f762a60afe4 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/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); diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 625049a61cd3..77f19586233a 100644 --- a/dp/wifi3.0/dp_main.c +++ b/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; } /*