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