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; } /*