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