xref: /freebsd-src/sys/dev/qat/qat_api/common/utils/sal_statistics.c (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
1*78ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
2*78ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
3*78ee8d1cSJulian Grajkowski /**
4*78ee8d1cSJulian Grajkowski  *****************************************************************************
5*78ee8d1cSJulian Grajkowski  * @file sal_statistics.c
6*78ee8d1cSJulian Grajkowski  *
7*78ee8d1cSJulian Grajkowski  * @defgroup SalStats  Sal Statistics
8*78ee8d1cSJulian Grajkowski  *
9*78ee8d1cSJulian Grajkowski  * @ingroup SalStats
10*78ee8d1cSJulian Grajkowski  *
11*78ee8d1cSJulian Grajkowski  * @description
12*78ee8d1cSJulian Grajkowski  *    This file contains implementation of statistic related functions
13*78ee8d1cSJulian Grajkowski  *
14*78ee8d1cSJulian Grajkowski  *****************************************************************************/
15*78ee8d1cSJulian Grajkowski 
16*78ee8d1cSJulian Grajkowski #include "cpa.h"
17*78ee8d1cSJulian Grajkowski #include "lac_common.h"
18*78ee8d1cSJulian Grajkowski #include "lac_mem.h"
19*78ee8d1cSJulian Grajkowski #include "icp_adf_cfg.h"
20*78ee8d1cSJulian Grajkowski #include "icp_accel_devices.h"
21*78ee8d1cSJulian Grajkowski #include "sal_statistics.h"
22*78ee8d1cSJulian Grajkowski 
23*78ee8d1cSJulian Grajkowski #include "icp_adf_debug.h"
24*78ee8d1cSJulian Grajkowski #include "lac_sal_types.h"
25*78ee8d1cSJulian Grajkowski #include "lac_sal.h"
26*78ee8d1cSJulian Grajkowski 
27*78ee8d1cSJulian Grajkowski /**
28*78ee8d1cSJulian Grajkowski  ******************************************************************************
29*78ee8d1cSJulian Grajkowski  * @ingroup SalStats
30*78ee8d1cSJulian Grajkowski  *      Reads from the config file if the given statistic is enabled
31*78ee8d1cSJulian Grajkowski  *
32*78ee8d1cSJulian Grajkowski  * @description
33*78ee8d1cSJulian Grajkowski  *      Reads from the config file if the given statistic is enabled
34*78ee8d1cSJulian Grajkowski  *
35*78ee8d1cSJulian Grajkowski  * @param[in]  device           Pointer to an acceleration device structure
36*78ee8d1cSJulian Grajkowski  * @param[in]  statsName        Name of the config value to read the value from
37*78ee8d1cSJulian Grajkowski  * @param[out] pIsEnabled       Pointer to a variable where information if the
38*78ee8d1cSJulian Grajkowski  *                              given stat is enabled or disabled will be stored
39*78ee8d1cSJulian Grajkowski  *
40*78ee8d1cSJulian Grajkowski  * @retval  CPA_STATUS_SUCCESS          Operation successful
41*78ee8d1cSJulian Grajkowski  * @retval  CPA_STATUS_INVALID_PARAM    Invalid param provided
42*78ee8d1cSJulian Grajkowski  * @retval  CPA_STATUS_FAIL             Operation failed
43*78ee8d1cSJulian Grajkowski  *
44*78ee8d1cSJulian Grajkowski  ******************************************************************************/
45*78ee8d1cSJulian Grajkowski static CpaStatus
SalStatistics_GetStatEnabled(icp_accel_dev_t * device,const char * statsName,CpaBoolean * pIsEnabled)46*78ee8d1cSJulian Grajkowski SalStatistics_GetStatEnabled(icp_accel_dev_t *device,
47*78ee8d1cSJulian Grajkowski 			     const char *statsName,
48*78ee8d1cSJulian Grajkowski 			     CpaBoolean *pIsEnabled)
49*78ee8d1cSJulian Grajkowski {
50*78ee8d1cSJulian Grajkowski 	CpaStatus status = CPA_STATUS_SUCCESS;
51*78ee8d1cSJulian Grajkowski 	char param_value[ADF_CFG_MAX_VAL_LEN_IN_BYTES] = { 0 };
52*78ee8d1cSJulian Grajkowski 
53*78ee8d1cSJulian Grajkowski 	LAC_CHECK_NULL_PARAM(pIsEnabled);
54*78ee8d1cSJulian Grajkowski 	LAC_CHECK_NULL_PARAM(statsName);
55*78ee8d1cSJulian Grajkowski 
56*78ee8d1cSJulian Grajkowski 	status = icp_adf_cfgGetParamValue(device,
57*78ee8d1cSJulian Grajkowski 					  LAC_CFG_SECTION_GENERAL,
58*78ee8d1cSJulian Grajkowski 					  statsName,
59*78ee8d1cSJulian Grajkowski 					  param_value);
60*78ee8d1cSJulian Grajkowski 
61*78ee8d1cSJulian Grajkowski 	if (CPA_STATUS_SUCCESS != status) {
62*78ee8d1cSJulian Grajkowski 		QAT_UTILS_LOG("Failed to get %s from configuration.\n",
63*78ee8d1cSJulian Grajkowski 			      statsName);
64*78ee8d1cSJulian Grajkowski 		return status;
65*78ee8d1cSJulian Grajkowski 	}
66*78ee8d1cSJulian Grajkowski 
67*78ee8d1cSJulian Grajkowski 	if (0 == strncmp(param_value,
68*78ee8d1cSJulian Grajkowski 			 SAL_STATISTICS_STRING_OFF,
69*78ee8d1cSJulian Grajkowski 			 strlen(SAL_STATISTICS_STRING_OFF))) {
70*78ee8d1cSJulian Grajkowski 		*pIsEnabled = CPA_FALSE;
71*78ee8d1cSJulian Grajkowski 	} else {
72*78ee8d1cSJulian Grajkowski 		*pIsEnabled = CPA_TRUE;
73*78ee8d1cSJulian Grajkowski 	}
74*78ee8d1cSJulian Grajkowski 
75*78ee8d1cSJulian Grajkowski 	return status;
76*78ee8d1cSJulian Grajkowski }
77*78ee8d1cSJulian Grajkowski 
78*78ee8d1cSJulian Grajkowski /* @ingroup SalStats */
79*78ee8d1cSJulian Grajkowski CpaStatus
SalStatistics_InitStatisticsCollection(icp_accel_dev_t * device)80*78ee8d1cSJulian Grajkowski SalStatistics_InitStatisticsCollection(icp_accel_dev_t *device)
81*78ee8d1cSJulian Grajkowski {
82*78ee8d1cSJulian Grajkowski 	CpaStatus status = CPA_STATUS_SUCCESS;
83*78ee8d1cSJulian Grajkowski 	sal_statistics_collection_t *pStatsCollection = NULL;
84*78ee8d1cSJulian Grajkowski 	Cpa32U enabled_services = 0;
85*78ee8d1cSJulian Grajkowski 
86*78ee8d1cSJulian Grajkowski 	LAC_CHECK_NULL_PARAM(device);
87*78ee8d1cSJulian Grajkowski 
88*78ee8d1cSJulian Grajkowski 	pStatsCollection = LAC_OS_MALLOC(sizeof(sal_statistics_collection_t));
89*78ee8d1cSJulian Grajkowski 	if (NULL == pStatsCollection) {
90*78ee8d1cSJulian Grajkowski 		QAT_UTILS_LOG("Failed to allocate memory for statistic.\n");
91*78ee8d1cSJulian Grajkowski 		return CPA_STATUS_RESOURCE;
92*78ee8d1cSJulian Grajkowski 	}
93*78ee8d1cSJulian Grajkowski 	device->pQatStats = pStatsCollection;
94*78ee8d1cSJulian Grajkowski 
95*78ee8d1cSJulian Grajkowski 	status = SalStatistics_GetStatEnabled(device,
96*78ee8d1cSJulian Grajkowski 					      SAL_STATS_CFG_ENABLED,
97*78ee8d1cSJulian Grajkowski 					      &pStatsCollection->bStatsEnabled);
98*78ee8d1cSJulian Grajkowski 	LAC_CHECK_STATUS(status);
99*78ee8d1cSJulian Grajkowski 
100*78ee8d1cSJulian Grajkowski 	if (CPA_FALSE == pStatsCollection->bStatsEnabled) {
101*78ee8d1cSJulian Grajkowski 		pStatsCollection->bDcStatsEnabled = CPA_FALSE;
102*78ee8d1cSJulian Grajkowski 		pStatsCollection->bDhStatsEnabled = CPA_FALSE;
103*78ee8d1cSJulian Grajkowski 		pStatsCollection->bDsaStatsEnabled = CPA_FALSE;
104*78ee8d1cSJulian Grajkowski 		pStatsCollection->bEccStatsEnabled = CPA_FALSE;
105*78ee8d1cSJulian Grajkowski 		pStatsCollection->bKeyGenStatsEnabled = CPA_FALSE;
106*78ee8d1cSJulian Grajkowski 		pStatsCollection->bLnStatsEnabled = CPA_FALSE;
107*78ee8d1cSJulian Grajkowski 		pStatsCollection->bPrimeStatsEnabled = CPA_FALSE;
108*78ee8d1cSJulian Grajkowski 		pStatsCollection->bRsaStatsEnabled = CPA_FALSE;
109*78ee8d1cSJulian Grajkowski 		pStatsCollection->bSymStatsEnabled = CPA_FALSE;
110*78ee8d1cSJulian Grajkowski 
111*78ee8d1cSJulian Grajkowski 		return status;
112*78ee8d1cSJulian Grajkowski 	}
113*78ee8d1cSJulian Grajkowski 
114*78ee8d1cSJulian Grajkowski 	/* What services are enabled */
115*78ee8d1cSJulian Grajkowski 	status = SalCtrl_GetEnabledServices(device, &enabled_services);
116*78ee8d1cSJulian Grajkowski 	if (CPA_STATUS_SUCCESS != status) {
117*78ee8d1cSJulian Grajkowski 		QAT_UTILS_LOG("Failed to get enabled services.\n");
118*78ee8d1cSJulian Grajkowski 		return CPA_STATUS_FAIL;
119*78ee8d1cSJulian Grajkowski 	}
120*78ee8d1cSJulian Grajkowski 
121*78ee8d1cSJulian Grajkowski 	/* Check if the compression service is enabled */
122*78ee8d1cSJulian Grajkowski 	if (SalCtrl_IsServiceEnabled(enabled_services,
123*78ee8d1cSJulian Grajkowski 				     SAL_SERVICE_TYPE_COMPRESSION)) {
124*78ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
125*78ee8d1cSJulian Grajkowski 		    device,
126*78ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_DC,
127*78ee8d1cSJulian Grajkowski 		    &pStatsCollection->bDcStatsEnabled);
128*78ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
129*78ee8d1cSJulian Grajkowski 	}
130*78ee8d1cSJulian Grajkowski 	/* Check if the asym service is enabled */
131*78ee8d1cSJulian Grajkowski 	if (SalCtrl_IsServiceEnabled(enabled_services,
132*78ee8d1cSJulian Grajkowski 				     SAL_SERVICE_TYPE_CRYPTO_ASYM) ||
133*78ee8d1cSJulian Grajkowski 	    SalCtrl_IsServiceEnabled(enabled_services,
134*78ee8d1cSJulian Grajkowski 				     SAL_SERVICE_TYPE_CRYPTO)) {
135*78ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
136*78ee8d1cSJulian Grajkowski 		    device,
137*78ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_DH,
138*78ee8d1cSJulian Grajkowski 		    &pStatsCollection->bDhStatsEnabled);
139*78ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
140*78ee8d1cSJulian Grajkowski 
141*78ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
142*78ee8d1cSJulian Grajkowski 		    device,
143*78ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_DSA,
144*78ee8d1cSJulian Grajkowski 		    &pStatsCollection->bDsaStatsEnabled);
145*78ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
146*78ee8d1cSJulian Grajkowski 
147*78ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
148*78ee8d1cSJulian Grajkowski 		    device,
149*78ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_ECC,
150*78ee8d1cSJulian Grajkowski 		    &pStatsCollection->bEccStatsEnabled);
151*78ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
152*78ee8d1cSJulian Grajkowski 
153*78ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
154*78ee8d1cSJulian Grajkowski 		    device,
155*78ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_KEYGEN,
156*78ee8d1cSJulian Grajkowski 		    &pStatsCollection->bKeyGenStatsEnabled);
157*78ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
158*78ee8d1cSJulian Grajkowski 
159*78ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
160*78ee8d1cSJulian Grajkowski 		    device,
161*78ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_LN,
162*78ee8d1cSJulian Grajkowski 		    &pStatsCollection->bLnStatsEnabled);
163*78ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
164*78ee8d1cSJulian Grajkowski 
165*78ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
166*78ee8d1cSJulian Grajkowski 		    device,
167*78ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_PRIME,
168*78ee8d1cSJulian Grajkowski 		    &pStatsCollection->bPrimeStatsEnabled);
169*78ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
170*78ee8d1cSJulian Grajkowski 
171*78ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
172*78ee8d1cSJulian Grajkowski 		    device,
173*78ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_RSA,
174*78ee8d1cSJulian Grajkowski 		    &pStatsCollection->bRsaStatsEnabled);
175*78ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
176*78ee8d1cSJulian Grajkowski 	}
177*78ee8d1cSJulian Grajkowski 
178*78ee8d1cSJulian Grajkowski 	/* Check if the sym service is enabled */
179*78ee8d1cSJulian Grajkowski 	if (SalCtrl_IsServiceEnabled(enabled_services,
180*78ee8d1cSJulian Grajkowski 				     SAL_SERVICE_TYPE_CRYPTO_SYM) ||
181*78ee8d1cSJulian Grajkowski 	    SalCtrl_IsServiceEnabled(enabled_services,
182*78ee8d1cSJulian Grajkowski 				     SAL_SERVICE_TYPE_CRYPTO)) {
183*78ee8d1cSJulian Grajkowski 		status = SalStatistics_GetStatEnabled(
184*78ee8d1cSJulian Grajkowski 		    device,
185*78ee8d1cSJulian Grajkowski 		    SAL_STATS_CFG_SYM,
186*78ee8d1cSJulian Grajkowski 		    &pStatsCollection->bSymStatsEnabled);
187*78ee8d1cSJulian Grajkowski 		LAC_CHECK_STATUS(status);
188*78ee8d1cSJulian Grajkowski 	}
189*78ee8d1cSJulian Grajkowski 	return status;
190*78ee8d1cSJulian Grajkowski };
191*78ee8d1cSJulian Grajkowski 
192*78ee8d1cSJulian Grajkowski /* @ingroup SalStats */
193*78ee8d1cSJulian Grajkowski CpaStatus
SalStatistics_CleanStatisticsCollection(icp_accel_dev_t * device)194*78ee8d1cSJulian Grajkowski SalStatistics_CleanStatisticsCollection(icp_accel_dev_t *device)
195*78ee8d1cSJulian Grajkowski {
196*78ee8d1cSJulian Grajkowski 	sal_statistics_collection_t *pStatsCollection = NULL;
197*78ee8d1cSJulian Grajkowski 	LAC_CHECK_NULL_PARAM(device);
198*78ee8d1cSJulian Grajkowski 	pStatsCollection = (sal_statistics_collection_t *)device->pQatStats;
199*78ee8d1cSJulian Grajkowski 	LAC_OS_FREE(pStatsCollection);
200*78ee8d1cSJulian Grajkowski 	device->pQatStats = NULL;
201*78ee8d1cSJulian Grajkowski 	return CPA_STATUS_SUCCESS;
202*78ee8d1cSJulian Grajkowski }
203