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 *****************************************************************************/
34typedef 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 *****************************************************************************/
54typedef 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 *****************************************************************************/
78typedef 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 *****************************************************************************/
89typedef 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 *****************************************************************************/
155typedef 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 *****************************************************************************/
185typedef 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