178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
378ee8d1cSJulian Grajkowski /**
478ee8d1cSJulian Grajkowski  *****************************************************************************
578ee8d1cSJulian Grajkowski  * @file sal_statistics.c
678ee8d1cSJulian Grajkowski  *
778ee8d1cSJulian Grajkowski  * @defgroup SalStats  Sal Statistics
878ee8d1cSJulian Grajkowski  *
978ee8d1cSJulian Grajkowski  * @ingroup SalStats
1078ee8d1cSJulian Grajkowski  *
1178ee8d1cSJulian Grajkowski  * @description
1278ee8d1cSJulian Grajkowski  *    This file contains implementation of statistic related functions
1378ee8d1cSJulian Grajkowski  *
1478ee8d1cSJulian Grajkowski  *****************************************************************************/
1578ee8d1cSJulian Grajkowski 
1678ee8d1cSJulian Grajkowski #include "cpa.h"
1778ee8d1cSJulian Grajkowski #include "lac_common.h"
1878ee8d1cSJulian Grajkowski #include "lac_mem.h"
1978ee8d1cSJulian Grajkowski #include "icp_adf_cfg.h"
2078ee8d1cSJulian Grajkowski #include "icp_accel_devices.h"
2178ee8d1cSJulian Grajkowski #include "sal_statistics.h"
2278ee8d1cSJulian Grajkowski 
2378ee8d1cSJulian Grajkowski #include "icp_adf_debug.h"
2478ee8d1cSJulian Grajkowski #include "lac_sal_types.h"
2578ee8d1cSJulian Grajkowski #include "lac_sal.h"
2678ee8d1cSJulian Grajkowski 
2778ee8d1cSJulian Grajkowski /**
2878ee8d1cSJulian Grajkowski  ******************************************************************************
2978ee8d1cSJulian Grajkowski  * @ingroup SalStats
3078ee8d1cSJulian Grajkowski  *      Reads from the config file if the given statistic is enabled
3178ee8d1cSJulian Grajkowski  *
3278ee8d1cSJulian Grajkowski  * @description
3378ee8d1cSJulian Grajkowski  *      Reads from the config file if the given statistic is enabled
3478ee8d1cSJulian Grajkowski  *
3578ee8d1cSJulian Grajkowski  * @param[in]  device           Pointer to an acceleration device structure
3678ee8d1cSJulian Grajkowski  * @param[in]  statsName        Name of the config value to read the value from
3778ee8d1cSJulian Grajkowski  * @param[out] pIsEnabled       Pointer to a variable where information if the
3878ee8d1cSJulian Grajkowski  *                              given stat is enabled or disabled will be stored
3978ee8d1cSJulian Grajkowski  *
4078ee8d1cSJulian Grajkowski  * @retval  CPA_STATUS_SUCCESS          Operation successful
4178ee8d1cSJulian Grajkowski  * @retval  CPA_STATUS_INVALID_PARAM    Invalid param provided
4278ee8d1cSJulian Grajkowski  * @retval  CPA_STATUS_FAIL             Operation failed
4378ee8d1cSJulian Grajkowski  *
4478ee8d1cSJulian Grajkowski  ******************************************************************************/
4578ee8d1cSJulian Grajkowski static CpaStatus
SalStatistics_GetStatEnabled(icp_accel_dev_t * device,const char * statsName,CpaBoolean * pIsEnabled)4678ee8d1cSJulian Grajkowski SalStatistics_GetStatEnabled(icp_accel_dev_t *device,
4778ee8d1cSJulian Grajkowski 			     const char *statsName,
4878ee8d1cSJulian Grajkowski 			     CpaBoolean *pIsEnabled)
4978ee8d1cSJulian Grajkowski {
5078ee8d1cSJulian Grajkowski 	CpaStatus status = CPA_STATUS_SUCCESS;
5178ee8d1cSJulian Grajkowski 	char param_value[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
5278ee8d1cSJulian Grajkowski 
5378ee8d1cSJulian Grajkowski 	LAC_CHECK_NULL_PARAM(pIsEnabled);
5478ee8d1cSJulian Grajkowski 	LAC_CHECK_NULL_PARAM(statsName);
5578ee8d1cSJulian Grajkowski 
5678ee8d1cSJulian Grajkowski 	status = icp_adf_cfgGetParamValue(device,
5778ee8d1cSJulian Grajkowski 					  LAC_CFG_SECTION_GENERAL,
5878ee8d1cSJulian Grajkowski 					  statsName,
5978ee8d1cSJulian Grajkowski 					  param_value);
6078ee8d1cSJulian Grajkowski 
6178ee8d1cSJulian Grajkowski 	if (CPA_STATUS_SUCCESS != status) {
6278ee8d1cSJulian Grajkowski 		QAT_UTILS_LOG("Failed to get %s from configuration.\n",
6378ee8d1cSJulian Grajkowski 			      statsName);
6478ee8d1cSJulian Grajkowski 		return status;
6578ee8d1cSJulian Grajkowski 	}
6678ee8d1cSJulian Grajkowski 
6778ee8d1cSJulian Grajkowski 	if (0 == strncmp(param_value,
6878ee8d1cSJulian Grajkowski 			 SAL_STATISTICS_STRING_OFF,
6978ee8d1cSJulian Grajkowski 			 strlen(SAL_STATISTICS_STRING_OFF))) {
7078ee8d1cSJulian Grajkowski 		*pIsEnabled = CPA_FALSE;
7178ee8d1cSJulian Grajkowski 	} else {
7278ee8d1cSJulian Grajkowski 		*pIsEnabled = CPA_TRUE;
7378ee8d1cSJulian Grajkowski 	}
7478ee8d1cSJulian Grajkowski 
7578ee8d1cSJulian Grajkowski 	return status;
7678ee8d1cSJulian Grajkowski }
7778ee8d1cSJulian Grajkowski 
7878ee8d1cSJulian Grajkowski /* @ingroup SalStats */
7978ee8d1cSJulian Grajkowski CpaStatus
SalStatistics_InitStatisticsCollection(icp_accel_dev_t * device)8078ee8d1cSJulian Grajkowski SalStatistics_InitStatisticsCollection(icp_accel_dev_t *device)
8178ee8d1cSJulian Grajkowski {
8278ee8d1cSJulian Grajkowski 	CpaStatus status = CPA_STATUS_SUCCESS;
8378ee8d1cSJulian Grajkowski 	sal_statistics_collection_t *pStatsCollection = NULL;
8478ee8d1cSJulian Grajkowski 	Cpa32U enabled_services = 0;
8578ee8d1cSJulian Grajkowski 
8678ee8d1cSJulian Grajkowski 	LAC_CHECK_NULL_PARAM(device);
8778ee8d1cSJulian Grajkowski 
8878ee8d1cSJulian Grajkowski 	pStatsCollection = LAC_OS_MALLOC(sizeof(sal_statistics_collection_t));
8978ee8d1cSJulian Grajkowski 	if (NULL == pStatsCollection) {
9078ee8d1cSJulian Grajkowski 		QAT_UTILS_LOG("Failed to allocate memory for statistic.\n");
9178ee8d1cSJulian Grajkowski 		return CPA_STATUS_RESOURCE;
9278ee8d1cSJulian Grajkowski 	}
9378ee8d1cSJulian Grajkowski 	device->pQatStats = pStatsCollection;
9478ee8d1cSJulian Grajkowski 
9578ee8d1cSJulian Grajkowski 	status = SalStatistics_GetStatEnabled(device,
9678ee8d1cSJulian Grajkowski 					      SAL_STATS_CFG_ENABLED,
9778ee8d1cSJulian Grajkowski 					      &pStatsCollection->bStatsEnabled);
9878ee8d1cSJulian Grajkowski 	LAC_CHECK_STATUS(status);
9978ee8d1cSJulian Grajkowski 
10078ee8d1cSJulian Grajkowski 	if (CPA_FALSE == pStatsCollection->bStatsEnabled) {
10178ee8d1cSJulian Grajkowski 		pStatsCollection->bDcStatsEnabled = CPA_FALSE;
10278ee8d1cSJulian Grajkowski 		pStatsCollection->bDhStatsEnabled = CPA_FALSE;
10378ee8d1cSJulian Grajkowski 		pStatsCollection->bDsaStatsEnabled = CPA_FALSE;
10478ee8d1cSJulian Grajkowski 		pStatsCollection->bEccStatsEnabled = CPA_FALSE;
10578ee8d1cSJulian Grajkowski 		pStatsCollection->bKeyGenStatsEnabled = CPA_FALSE;
10678ee8d1cSJulian Grajkowski 		pStatsCollection->bLnStatsEnabled = CPA_FALSE;
10778ee8d1cSJulian Grajkowski 		pStatsCollection->bPrimeStatsEnabled = CPA_FALSE;
10878ee8d1cSJulian Grajkowski 		pStatsCollection->bRsaStatsEnabled = CPA_FALSE;
10978ee8d1cSJulian Grajkowski 		pStatsCollection->bSymStatsEnabled = CPA_FALSE;
11078ee8d1cSJulian Grajkowski 
11178ee8d1cSJulian Grajkowski 		return status;
11278ee8d1cSJulian Grajkowski 	}
11378ee8d1cSJulian Grajkowski 
11478ee8d1cSJulian Grajkowski 	/* What services are enabled */
11578ee8d1cSJulian Grajkowski 	status = SalCtrl_GetEnabledServices(device, &enabled_services);
11678ee8d1cSJulian Grajkowski 	if (CPA_STATUS_SUCCESS != status) {
11778ee8d1cSJulian Grajkowski 		QAT_UTILS_LOG("Failed to get enabled services.\n");
11878ee8d1cSJulian Grajkowski 		return CPA_STATUS_FAIL;
11978ee8d1cSJulian Grajkowski 	}
12078ee8d1cSJulian Grajkowski 
12178ee8d1cSJulian Grajkowski 	/* Check if the compression service is enabled */
12278ee8d1cSJulian Grajkowski 	if (SalCtrl_IsServiceEnabled(enabled_services,
12378ee8d1cSJulian Grajkowski 				     SAL_SERVICE_TYPE_COMPRESSION)) {
12478ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
12578ee8d1cSJulian Grajkowski 		    device,
12678ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_DC,
12778ee8d1cSJulian Grajkowski 		    &pStatsCollection->bDcStatsEnabled);
12878ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
12978ee8d1cSJulian Grajkowski 	}
13078ee8d1cSJulian Grajkowski 	/* Check if the asym service is enabled */
13178ee8d1cSJulian Grajkowski 	if (SalCtrl_IsServiceEnabled(enabled_services,
13278ee8d1cSJulian Grajkowski 				     SAL_SERVICE_TYPE_CRYPTO_ASYM) ||
13378ee8d1cSJulian Grajkowski 	    SalCtrl_IsServiceEnabled(enabled_services,
13478ee8d1cSJulian Grajkowski 				     SAL_SERVICE_TYPE_CRYPTO)) {
13578ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
13678ee8d1cSJulian Grajkowski 		    device,
13778ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_DH,
13878ee8d1cSJulian Grajkowski 		    &pStatsCollection->bDhStatsEnabled);
13978ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
14078ee8d1cSJulian Grajkowski 
14178ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
14278ee8d1cSJulian Grajkowski 		    device,
14378ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_DSA,
14478ee8d1cSJulian Grajkowski 		    &pStatsCollection->bDsaStatsEnabled);
14578ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
14678ee8d1cSJulian Grajkowski 
14778ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
14878ee8d1cSJulian Grajkowski 		    device,
14978ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_ECC,
15078ee8d1cSJulian Grajkowski 		    &pStatsCollection->bEccStatsEnabled);
15178ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
15278ee8d1cSJulian Grajkowski 
15378ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
15478ee8d1cSJulian Grajkowski 		    device,
15578ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_KEYGEN,
15678ee8d1cSJulian Grajkowski 		    &pStatsCollection->bKeyGenStatsEnabled);
15778ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
15878ee8d1cSJulian Grajkowski 
15978ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
16078ee8d1cSJulian Grajkowski 		    device,
16178ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_LN,
16278ee8d1cSJulian Grajkowski 		    &pStatsCollection->bLnStatsEnabled);
16378ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
16478ee8d1cSJulian Grajkowski 
16578ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
16678ee8d1cSJulian Grajkowski 		    device,
16778ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_PRIME,
16878ee8d1cSJulian Grajkowski 		    &pStatsCollection->bPrimeStatsEnabled);
16978ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
17078ee8d1cSJulian Grajkowski 
17178ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
17278ee8d1cSJulian Grajkowski 		    device,
17378ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_RSA,
17478ee8d1cSJulian Grajkowski 		    &pStatsCollection->bRsaStatsEnabled);
17578ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
17678ee8d1cSJulian Grajkowski 	}
17778ee8d1cSJulian Grajkowski 
17878ee8d1cSJulian Grajkowski 	/* Check if the sym service is enabled */
17978ee8d1cSJulian Grajkowski 	if (SalCtrl_IsServiceEnabled(enabled_services,
18078ee8d1cSJulian Grajkowski 				     SAL_SERVICE_TYPE_CRYPTO_SYM) ||
18178ee8d1cSJulian Grajkowski 	    SalCtrl_IsServiceEnabled(enabled_services,
18278ee8d1cSJulian Grajkowski 				     SAL_SERVICE_TYPE_CRYPTO)) {
18378ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
18478ee8d1cSJulian Grajkowski 		    device,
18578ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_SYM,
18678ee8d1cSJulian Grajkowski 		    &pStatsCollection->bSymStatsEnabled);
18778ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
18878ee8d1cSJulian Grajkowski 	}
18978ee8d1cSJulian Grajkowski 	return status;
19078ee8d1cSJulian Grajkowski };
19178ee8d1cSJulian Grajkowski 
19278ee8d1cSJulian Grajkowski /* @ingroup SalStats */
19378ee8d1cSJulian Grajkowski CpaStatus
SalStatistics_CleanStatisticsCollection(icp_accel_dev_t * device)19478ee8d1cSJulian Grajkowski SalStatistics_CleanStatisticsCollection(icp_accel_dev_t *device)
19578ee8d1cSJulian Grajkowski {
19678ee8d1cSJulian Grajkowski 	sal_statistics_collection_t *pStatsCollection = NULL;
19778ee8d1cSJulian Grajkowski 	LAC_CHECK_NULL_PARAM(device);
19878ee8d1cSJulian Grajkowski 	pStatsCollection = (sal_statistics_collection_t *)device->pQatStats;
19978ee8d1cSJulian Grajkowski 	LAC_OS_FREE(pStatsCollection);
20078ee8d1cSJulian Grajkowski 	device->pQatStats = NULL;
20178ee8d1cSJulian Grajkowski 	return CPA_STATUS_SUCCESS;
20278ee8d1cSJulian Grajkowski }
203