1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /* $FreeBSD$ */
4 /**
5  *****************************************************************************
6  * @file dc_stats.h
7  *
8  * @ingroup Dc_DataCompression
9  *
10  * @description
11  *      Definition of the Data Compression stats parameters.
12  *
13  *****************************************************************************/
14 #ifndef DC_STATS_H_
15 #define DC_STATS_H_
16 
17 /* Number of Compression statistics */
18 #define COMPRESSION_NUM_STATS (sizeof(CpaDcStats) / sizeof(Cpa64U))
19 
20 #define COMPRESSION_STAT_INC(statistic, pService)                              \
21 	do {                                                                   \
22 		if (CPA_TRUE ==                                                \
23 		    pService->generic_service_info.stats->bDcStatsEnabled) {   \
24 			qatUtilsAtomicInc(                                     \
25 			    &pService->pCompStatsArr[offsetof(CpaDcStats,      \
26 							      statistic) /     \
27 						     sizeof(Cpa64U)]);         \
28 		}                                                              \
29 	} while (0)
30 
31 /* Macro to get all Compression stats (from internal array of atomics) */
32 #define COMPRESSION_STATS_GET(compStats, pService)                             \
33 	do {                                                                   \
34 		int i;                                                         \
35 		for (i = 0; i < COMPRESSION_NUM_STATS; i++) {                  \
36 			((Cpa64U *)compStats)[i] =                             \
37 			    qatUtilsAtomicGet(&pService->pCompStatsArr[i]);    \
38 		}                                                              \
39 	} while (0)
40 
41 /* Macro to reset all Compression stats */
42 #define COMPRESSION_STATS_RESET(pService)                                      \
43 	do {                                                                   \
44 		int i;                                                         \
45 		for (i = 0; i < COMPRESSION_NUM_STATS; i++) {                  \
46 			qatUtilsAtomicSet(0, &pService->pCompStatsArr[i]);     \
47 		}                                                              \
48 	} while (0)
49 
50 /**
51 *******************************************************************************
52 * @ingroup Dc_DataCompression
53 *      Initialises the compression stats
54 *
55 * @description
56 *      This function allocates and initialises the stats array to 0
57 *
58 * @param[in] pService          Pointer to a compression service structure
59 *
60 * @retval CPA_STATUS_SUCCESS   initialisation successful
61 * @retval CPA_STATUS_RESOURCE  array allocation failed
62 *
63 *****************************************************************************/
64 CpaStatus dcStatsInit(sal_compression_service_t *pService);
65 
66 /**
67 *******************************************************************************
68 * @ingroup Dc_DataCompression
69 *      Frees the compression stats
70 *
71 * @description
72 *      This function frees the stats array
73 *
74 * @param[in] pService          Pointer to a compression service structure
75 *
76 * @retval None
77 *
78 *****************************************************************************/
79 void dcStatsFree(sal_compression_service_t *pService);
80 
81 #endif /* DC_STATS_H_ */
82