1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 
4 /**
5  ***************************************************************************
6  * @file lac_sym_stats.c   Implementation of symmetric stats
7  *
8  * @ingroup LacSym
9  *
10  ***************************************************************************/
11 
12 /*
13 *******************************************************************************
14 * Include public/global header files
15 *******************************************************************************
16 */
17 #include "cpa.h"
18 #include "cpa_cy_sym.h"
19 
20 /*
21 *******************************************************************************
22 * Include private header files
23 *******************************************************************************
24 */
25 #include "lac_mem_pools.h"
26 #include "icp_adf_transport.h"
27 #include "icp_accel_devices.h"
28 #include "icp_adf_debug.h"
29 #include "icp_qat_fw_la.h"
30 #include "lac_sym_qat.h"
31 #include "lac_sym_stats.h"
32 #include "lac_sal_types_crypto.h"
33 #include "sal_statistics.h"
34 
35 /* Number of Symmetric Crypto statistics */
36 #define LAC_SYM_NUM_STATS (sizeof(CpaCySymStats64) / sizeof(Cpa64U))
37 
38 CpaStatus
LacSym_StatsInit(CpaInstanceHandle instanceHandle)39 LacSym_StatsInit(CpaInstanceHandle instanceHandle)
40 {
41 	CpaStatus status = CPA_STATUS_SUCCESS;
42 	sal_crypto_service_t *pService = (sal_crypto_service_t *)instanceHandle;
43 
44 	pService->pLacSymStatsArr =
45 	    LAC_OS_MALLOC(LAC_SYM_NUM_STATS * sizeof(QatUtilsAtomic));
46 
47 	if (NULL != pService->pLacSymStatsArr) {
48 		LAC_OS_BZERO((void *)LAC_CONST_VOLATILE_PTR_CAST(
49 				 pService->pLacSymStatsArr),
50 			     LAC_SYM_NUM_STATS * sizeof(QatUtilsAtomic));
51 	} else {
52 		status = CPA_STATUS_RESOURCE;
53 	}
54 	return status;
55 }
56 
57 void
LacSym_StatsFree(CpaInstanceHandle instanceHandle)58 LacSym_StatsFree(CpaInstanceHandle instanceHandle)
59 {
60 	sal_crypto_service_t *pService = (sal_crypto_service_t *)instanceHandle;
61 	if (NULL != pService->pLacSymStatsArr) {
62 		LAC_OS_FREE(pService->pLacSymStatsArr);
63 	}
64 }
65 
66 void
LacSym_StatsInc(Cpa32U offset,CpaInstanceHandle instanceHandle)67 LacSym_StatsInc(Cpa32U offset, CpaInstanceHandle instanceHandle)
68 {
69 	sal_crypto_service_t *pService = (sal_crypto_service_t *)instanceHandle;
70 	if (CPA_TRUE ==
71 	    pService->generic_service_info.stats->bSymStatsEnabled) {
72 		qatUtilsAtomicInc(
73 		    &pService->pLacSymStatsArr[offset / sizeof(Cpa64U)]);
74 	}
75 }
76 
77 void
LacSym_Stats32CopyGet(CpaInstanceHandle instanceHandle,struct _CpaCySymStats * const pSymStats)78 LacSym_Stats32CopyGet(CpaInstanceHandle instanceHandle,
79 		      struct _CpaCySymStats *const pSymStats)
80 {
81 	int i = 0;
82 	sal_crypto_service_t *pService = (sal_crypto_service_t *)instanceHandle;
83 
84 	for (i = 0; i < LAC_SYM_NUM_STATS; i++) {
85 		((Cpa32U *)pSymStats)[i] =
86 		    (Cpa32U)qatUtilsAtomicGet(&pService->pLacSymStatsArr[i]);
87 	}
88 }
89 
90 void
LacSym_Stats64CopyGet(CpaInstanceHandle instanceHandle,CpaCySymStats64 * const pSymStats)91 LacSym_Stats64CopyGet(CpaInstanceHandle instanceHandle,
92 		      CpaCySymStats64 *const pSymStats)
93 {
94 	int i = 0;
95 	sal_crypto_service_t *pService = (sal_crypto_service_t *)instanceHandle;
96 
97 	for (i = 0; i < LAC_SYM_NUM_STATS; i++) {
98 		((Cpa64U *)pSymStats)[i] =
99 		    qatUtilsAtomicGet(&pService->pLacSymStatsArr[i]);
100 	}
101 }
102 
103 void
LacSym_StatsShow(CpaInstanceHandle instanceHandle)104 LacSym_StatsShow(CpaInstanceHandle instanceHandle)
105 {
106 	CpaCySymStats64 symStats = { 0 };
107 
108 	LacSym_Stats64CopyGet(instanceHandle, &symStats);
109 
110 	QAT_UTILS_LOG(SEPARATOR BORDER
111 		      "              Symmetric Stats               " BORDER
112 		      "\n" SEPARATOR);
113 
114 	/* Session Info */
115 	QAT_UTILS_LOG(BORDER " Sessions Initialized:           %16llu " BORDER
116 			     "\n" BORDER
117 			     " Sessions Removed:               %16llu " BORDER
118 			     "\n" BORDER
119 			     " Session Errors:                 %16llu " BORDER
120 			     "\n" SEPARATOR,
121 		      (unsigned long long)symStats.numSessionsInitialized,
122 		      (unsigned long long)symStats.numSessionsRemoved,
123 		      (unsigned long long)symStats.numSessionErrors);
124 
125 	/* Session info */
126 	QAT_UTILS_LOG(
127 	    BORDER " Symmetric Requests:             %16llu " BORDER "\n" BORDER
128 		   " Symmetric Request Errors:       %16llu " BORDER "\n" BORDER
129 		   " Symmetric Completed:            %16llu " BORDER "\n" BORDER
130 		   " Symmetric Completed Errors:     %16llu " BORDER "\n" BORDER
131 		   " Symmetric Verify Failures:      %16llu " BORDER
132 		   "\n" SEPARATOR,
133 	    (unsigned long long)symStats.numSymOpRequests,
134 	    (unsigned long long)symStats.numSymOpRequestErrors,
135 	    (unsigned long long)symStats.numSymOpCompleted,
136 	    (unsigned long long)symStats.numSymOpCompletedErrors,
137 	    (unsigned long long)symStats.numSymOpVerifyFailures);
138 }
139