1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /**
4  ***************************************************************************
5  * @file lac_sal_types.h
6  *
7  * @ingroup SalCtrl
8  *
9  * Generic instance type definitions of SAL controller
10  *
11  ***************************************************************************/
12 
13 #ifndef LAC_SAL_TYPES_H
14 #define LAC_SAL_TYPES_H
15 
16 #include "lac_sync.h"
17 #include "lac_list.h"
18 #include "icp_accel_devices.h"
19 #include "sal_statistics.h"
20 #include "icp_adf_debug.h"
21 
22 #define SAL_CFG_BASE_DEC 10
23 #define SAL_CFG_BASE_HEX 16
24 
25 /**
26  *****************************************************************************
27  * @ingroup SalCtrl
28  *      Instance States
29  *
30  * @description
31  *    An enumeration containing the possible states for an instance.
32  *
33  *****************************************************************************/
34 typedef enum sal_service_state_s {
35 	SAL_SERVICE_STATE_UNINITIALIZED = 0,
36 	SAL_SERVICE_STATE_INITIALIZING,
37 	SAL_SERVICE_STATE_INITIALIZED,
38 	SAL_SERVICE_STATE_RUNNING,
39 	SAL_SERVICE_STATE_SHUTTING_DOWN,
40 	SAL_SERVICE_STATE_SHUTDOWN,
41 	SAL_SERVICE_STATE_RESTARTING,
42 	SAL_SERVICE_STATE_END
43 } sal_service_state_t;
44 
45 /**
46  *****************************************************************************
47  * @ingroup SalCtrl
48  *      Service Instance Types
49  *
50  * @description
51  *      An enumeration containing the possible types for a service.
52  *
53  *****************************************************************************/
54 typedef enum {
55 	SAL_SERVICE_TYPE_UNKNOWN = 0,
56 	/* symmetric and asymmetric crypto service */
57 	SAL_SERVICE_TYPE_CRYPTO = 1,
58 	/* compression service */
59 	SAL_SERVICE_TYPE_COMPRESSION = 2,
60 	/* inline service */
61 	SAL_SERVICE_TYPE_INLINE = 4,
62 	/* asymmetric crypto only service*/
63 	SAL_SERVICE_TYPE_CRYPTO_ASYM = 8,
64 	/* symmetric crypto only service*/
65 	SAL_SERVICE_TYPE_CRYPTO_SYM = 16,
66 	SAL_SERVICE_TYPE_QAT = 32
67 } sal_service_type_t;
68 
69 /**
70  *****************************************************************************
71  * @ingroup SalCtrl
72  *      Device generations
73  *
74  * @description
75  *      List in an enum all the QAT device generations.
76  *
77  *****************************************************************************/
78 typedef enum { GEN2, GEN3, GEN4 } sal_generation_t;
79 
80 /**
81  *****************************************************************************
82  * @ingroup SalCtrl
83  *      Generic Instance Container
84  *
85  * @description
86  *      Contains all the common information across the different instances.
87  *
88  *****************************************************************************/
89 typedef struct sal_service_s {
90 	sal_service_type_t type;
91 	/**< Service type (e.g. SAL_SERVICE_TYPE_CRYPTO)*/
92 
93 	Cpa8U state;
94 	/**< Status of the service instance
95 	   (e.g. SAL_SERVICE_STATE_INITIALIZED) */
96 
97 	Cpa32U instance;
98 	/**< Instance number */
99 
100 	CpaVirtualToPhysical virt2PhysClient;
101 	/**< Function pointer to client supplied virt_to_phys */
102 
103 	CpaStatus (*init)(icp_accel_dev_t *device,
104 			  struct sal_service_s *service);
105 	/**< Function pointer for instance INIT function */
106 	CpaStatus (*start)(icp_accel_dev_t *device,
107 			   struct sal_service_s *service);
108 	/**< Function pointer for instance START function */
109 	CpaStatus (*stop)(icp_accel_dev_t *device,
110 			  struct sal_service_s *service);
111 	/**< Function pointer for instance STOP function */
112 	CpaStatus (*shutdown)(icp_accel_dev_t *device,
113 			      struct sal_service_s *service);
114 	/**< Function pointer for instance SHUTDOWN function */
115 
116 	CpaCyInstanceNotificationCbFunc notification_cb;
117 	/**< Function pointer for instance restarting handler */
118 
119 	void *cb_tag;
120 	/**< Restarting handler priv data */
121 
122 	sal_statistics_collection_t *stats;
123 	/**< Pointer to device statistics configuration */
124 
125 	void *debug_parent_dir;
126 	/**< Pointer to parent proc dir entry */
127 
128 	CpaBoolean is_dyn;
129 
130 	Cpa32U capabilitiesMask;
131 	/**< Capabilities mask of the device */
132 
133 	Cpa32U dcExtendedFeatures;
134 	/**< Bit field of features. I.e. Compress And Verify */
135 
136 	CpaBoolean isInstanceStarted;
137 	/**< True if user called StartInstance on this instance */
138 
139 	CpaBoolean integrityCrcCheck;
140 	/** < True if the device supports end to end data integrity checks */
141 
142 	sal_generation_t gen;
143 	/** Generation of devices */
144 } sal_service_t;
145 
146 /**
147  *****************************************************************************
148  * @ingroup SalCtrl
149  *      SAL structure
150  *
151  * @description
152  *      Contains lists to crypto and compression instances.
153  *
154  *****************************************************************************/
155 typedef struct sal_s {
156 	sal_list_t *crypto_services;
157 	/**< Container of sal_crypto_service_t */
158 	sal_list_t *asym_services;
159 	/**< Container of sal_asym_service_t */
160 	sal_list_t *sym_services;
161 	/**< Container of sal_sym_service_t */
162 	sal_list_t *compression_services;
163 	/**< Container of sal_compression_service_t */
164 	debug_dir_info_t *cy_dir;
165 	/**< Container for crypto proc debug */
166 	debug_dir_info_t *asym_dir;
167 	/**< Container for asym proc debug */
168 	debug_dir_info_t *sym_dir;
169 	/**< Container for sym proc debug */
170 	debug_dir_info_t *dc_dir;
171 	/**< Container for compression proc debug */
172 	debug_file_info_t *ver_file;
173 	/**< Container for version debug file */
174 } sal_t;
175 
176 /**
177  *****************************************************************************
178  * @ingroup SalCtrl
179  *      SAL debug structure
180  *
181  * @description
182  *      Service debug handler
183  *
184  *****************************************************************************/
185 typedef struct sal_service_debug_s {
186 	icp_accel_dev_t *accel_dev;
187 	debug_file_info_t debug_file;
188 } sal_service_debug_t;
189 
190 /**
191  *******************************************************************************
192  * @ingroup SalCtrl
193  *      This macro verifies that the right service type has been passed in.
194  *
195  * @param[in] pService         pointer to service instance
196  * @param[in] service_type     service type to check againstx.
197  *
198  * @return CPA_STATUS_FAIL      Parameter is incorrect type
199   *
200  ******************************************************************************/
201 #define SAL_CHECK_INSTANCE_TYPE(pService, service_type)                        \
202 	do {                                                                   \
203 		sal_service_t *pGenericService = NULL;                         \
204 		pGenericService = (sal_service_t *)pService;                   \
205 		if (!(service_type & pGenericService->type)) {                 \
206 			QAT_UTILS_LOG("Instance handle type is incorrect.\n"); \
207 			return CPA_STATUS_FAIL;                                \
208 		}                                                              \
209 	} while (0)
210 
211 #endif
212