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
38CpaStatus
39LacSym_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
57void
58LacSym_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
66void
67LacSym_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
77void
78LacSym_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
90void
91LacSym_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
103void
104LacSym_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