1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /**
4  *****************************************************************************
5  * @file icp_qat_hw.h
6  * @defgroup icp_qat_hw_defs ICP QAT HW definitions
7  * @ingroup icp_qat_hw
8  * @description
9  *      This file documents definitions for the QAT HW
10  *
11  *****************************************************************************/
12 
13 #ifndef _ICP_QAT_HW_H_
14 #define _ICP_QAT_HW_H_
15 
16 /*
17 ******************************************************************************
18 * Include public/global header files
19 ******************************************************************************
20 */
21 
22 /* ========================================================================= */
23 /*                                                  AccelerationEngine       */
24 /* ========================================================================= */
25 
26 typedef enum {
27 	ICP_QAT_HW_AE_0 = 0,	     /*!< ID of AE0 */
28 	ICP_QAT_HW_AE_1 = 1,	     /*!< ID of AE1 */
29 	ICP_QAT_HW_AE_2 = 2,	     /*!< ID of AE2 */
30 	ICP_QAT_HW_AE_3 = 3,	     /*!< ID of AE3 */
31 	ICP_QAT_HW_AE_4 = 4,	     /*!< ID of AE4 */
32 	ICP_QAT_HW_AE_5 = 5,	     /*!< ID of AE5 */
33 	ICP_QAT_HW_AE_6 = 6,	     /*!< ID of AE6 */
34 	ICP_QAT_HW_AE_7 = 7,	     /*!< ID of AE7 */
35 	ICP_QAT_HW_AE_8 = 8,	     /*!< ID of AE8 */
36 	ICP_QAT_HW_AE_9 = 9,	     /*!< ID of AE9 */
37 	ICP_QAT_HW_AE_10 = 10,	     /*!< ID of AE10 */
38 	ICP_QAT_HW_AE_11 = 11,	     /*!< ID of AE11 */
39 	ICP_QAT_HW_AE_12 = 12,	     /*!< ID of AE12 */
40 	ICP_QAT_HW_AE_13 = 13,	     /*!< ID of AE13 */
41 	ICP_QAT_HW_AE_14 = 14,	     /*!< ID of AE14 */
42 	ICP_QAT_HW_AE_15 = 15,	     /*!< ID of AE15 */
43 	ICP_QAT_HW_AE_DELIMITER = 16 /**< Delimiter type */
44 } icp_qat_hw_ae_id_t;
45 
46 /* ========================================================================= */
47 /*                                                                 QAT       */
48 /* ========================================================================= */
49 
50 typedef enum {
51 	ICP_QAT_HW_QAT_0 = 0,	     /*!< ID of QAT0 */
52 	ICP_QAT_HW_QAT_1 = 1,	     /*!< ID of QAT1 */
53 	ICP_QAT_HW_QAT_2 = 2,	     /*!< ID of QAT2 */
54 	ICP_QAT_HW_QAT_3 = 3,	     /*!< ID of QAT3 */
55 	ICP_QAT_HW_QAT_4 = 4,	     /*!< ID of QAT4 */
56 	ICP_QAT_HW_QAT_5 = 5,	     /*!< ID of QAT5 */
57 	ICP_QAT_HW_QAT_DELIMITER = 6 /**< Delimiter type */
58 } icp_qat_hw_qat_id_t;
59 
60 /* ========================================================================= */
61 /*                                                  AUTH SLICE               */
62 /* ========================================================================= */
63 
64 /**
65  *****************************************************************************
66  * @ingroup icp_qat_hw_defs
67  *      Supported Authentication Algorithm types
68  * @description
69  *      Enumeration which is used to define the authenticate algorithms
70  *
71  *****************************************************************************/
72 
73 typedef enum {
74 	ICP_QAT_HW_AUTH_ALGO_NULL = 0,		/*!< Null hashing */
75 	ICP_QAT_HW_AUTH_ALGO_SHA1 = 1,		/*!< SHA1 hashing */
76 	ICP_QAT_HW_AUTH_ALGO_MD5 = 2,		/*!< MD5 hashing */
77 	ICP_QAT_HW_AUTH_ALGO_SHA224 = 3,	/*!< SHA-224 hashing */
78 	ICP_QAT_HW_AUTH_ALGO_SHA256 = 4,	/*!< SHA-256 hashing */
79 	ICP_QAT_HW_AUTH_ALGO_SHA384 = 5,	/*!< SHA-384 hashing */
80 	ICP_QAT_HW_AUTH_ALGO_SHA512 = 6,	/*!< SHA-512 hashing */
81 	ICP_QAT_HW_AUTH_ALGO_AES_XCBC_MAC = 7,	/*!< AES-XCBC-MAC hashing */
82 	ICP_QAT_HW_AUTH_ALGO_AES_CBC_MAC = 8,	/*!< AES-CBC-MAC hashing */
83 	ICP_QAT_HW_AUTH_ALGO_AES_F9 = 9,	/*!< AES F9 hashing */
84 	ICP_QAT_HW_AUTH_ALGO_GALOIS_128 = 10,	/*!< Galois 128 bit hashing */
85 	ICP_QAT_HW_AUTH_ALGO_GALOIS_64 = 11,	/*!< Galois 64 hashing */
86 	ICP_QAT_HW_AUTH_ALGO_KASUMI_F9 = 12,	/*!< Kasumi F9 hashing */
87 	ICP_QAT_HW_AUTH_ALGO_SNOW_3G_UIA2 = 13, /*!< UIA2/SNOW_3G F9 hashing */
88 	ICP_QAT_HW_AUTH_ALGO_ZUC_3G_128_EIA3 =
89 	    14,				    /*!< 128_EIA3/ZUC_3G hashing */
90 	ICP_QAT_HW_AUTH_ALGO_SM3 = 15,	    /*!< SM3 hashing */
91 	ICP_QAT_HW_AUTH_ALGO_SHA3_224 = 16, /*!< SHA3-224 hashing */
92 	ICP_QAT_HW_AUTH_ALGO_SHA3_256 = 17, /*!< SHA3-256 hashing */
93 	ICP_QAT_HW_AUTH_ALGO_SHA3_384 = 18, /*!< SHA3-384 hashing */
94 	ICP_QAT_HW_AUTH_ALGO_SHA3_512 = 19, /*!< SHA3-512 hashing */
95 	ICP_QAT_HW_AUTH_RESERVED_4 = 20,    /*!< Reserved */
96 	ICP_QAT_HW_AUTH_RESERVED_5 = 21,    /*!< Reserved */
97 	ICP_QAT_HW_AUTH_ALGO_POLY = 22,	    /*!< POLY hashing */
98 	ICP_QAT_HW_AUTH_ALGO_DELIMITER = 23 /**< Delimiter type */
99 } icp_qat_hw_auth_algo_t;
100 
101 /**
102  *****************************************************************************
103  * @ingroup icp_qat_hw_defs
104  *      Definition of the supported Authentication modes
105  * @description
106  *      Enumeration which is used to define the authentication slice modes.
107  *      The concept of modes is very specific to the QAT implementation. Its
108  *      main use is differentiate how the algorithms are used i.e. mode0 SHA1
109  *      will configure the QAT Auth Slice to do plain SHA1 hashing while mode1
110  *      configures it to do SHA1 HMAC with precomputes and mode2 sets up the
111  *      slice to do SHA1 HMAC with no precomputes (uses key directly)
112  *
113  * @Note
114  *      Only some algorithms are valid in some of the modes. If you dont know
115  *      what you are doing then refer back to the HW documentation
116  *
117  *****************************************************************************/
118 
119 typedef enum {
120 	ICP_QAT_HW_AUTH_MODE0 = 0,	   /*!< QAT Auth Mode0 configuration */
121 	ICP_QAT_HW_AUTH_MODE1 = 1,	   /*!< QAT Auth Mode1 configuration */
122 	ICP_QAT_HW_AUTH_MODE2 = 2,	   /*!< QAT AuthMode2 configuration */
123 	ICP_QAT_HW_AUTH_MODE_DELIMITER = 3 /**< Delimiter type */
124 } icp_qat_hw_auth_mode_t;
125 
126 /**
127  *****************************************************************************
128  * @ingroup icp_qat_hw_defs
129  *      Auth configuration structure
130  *
131  * @description
132  *      Definition of the format of the authentication slice configuration
133  *
134  *****************************************************************************/
135 typedef struct icp_qat_hw_auth_config_s {
136 	uint32_t config;
137 	/**< Configuration used for setting up the slice */
138 
139 	uint32_t reserved;
140 	/**< Reserved */
141 } icp_qat_hw_auth_config_t;
142 
143 /* Private defines */
144 
145 /* Note: Bit positions have been defined for little endian ordering */
146 /*
147 *  AUTH CONFIG WORD BITMAP
148 *  + ===== + ------ + ------ + ------- + ------ + ------ + ----- + ----- + ------ + ------ + ---- + ----- + ----- + ----- +
149 *  |  Bit  | 63:56  | 55:52  |  51:48  | 47:32  | 31:24  | 23:22 | 21:18 |   17   |   16   |  15  | 14:8  |  7:4  |  3:0  |
150 *  + ===== + ------ + ------ + ------- + ------ + ------ + ----- + ----- + ------ + ------ + ---- + ----- + ------+ ----- +
151 *  | Usage |  Prog  | Resvd  |  Prog   | Resvd  | Resvd  | Algo  | Rsvrd |  SHA3  |  SHA3  |Rsvrd |  Cmp  | Mode  | Algo  |
152 *  |       |padding | Bits=0 | padding | Bits=0 | Bits=0 | SHA3  |       |Padding |Padding |      |       |       |       |
153 *  |       |  SHA3  |        |  SHA3   |        |        |       |       |Override|Disable |      |       |       |       |
154 *  |       |(prefix)|        |(postfix)|        |        |       |       |        |        |      |       |       |       |
155 *  + ===== + ------ + ------ + ------- + ------ + ------ + ----- + ----- + ------ + ------ + ---- + ----- + ----- + ------+
156 */
157 
158 /**< Flag mask & bit position */
159 
160 #define QAT_AUTH_MODE_BITPOS 4
161 /**< @ingroup icp_qat_hw_defs
162  * Starting bit position indicating the Auth mode */
163 
164 #define QAT_AUTH_MODE_MASK 0xF
165 /**< @ingroup icp_qat_hw_defs
166  * Four bit mask used for determing the Auth mode */
167 
168 #define QAT_AUTH_ALGO_BITPOS 0
169 /**< @ingroup icp_qat_hw_defs
170  * Starting bit position indicating the Auth Algo  */
171 
172 #define QAT_AUTH_ALGO_MASK 0xF
173 /**< @ingroup icp_qat_hw_defs
174  * Four bit mask used for determining the Auth algo */
175 
176 #define QAT_AUTH_CMP_BITPOS 8
177 /**< @ingroup icp_qat_hw_defs
178  * Starting bit position indicating the Auth Compare */
179 
180 #define QAT_AUTH_CMP_MASK 0x7F
181 /**< @ingroup icp_qat_hw_defs
182  * Seven bit mask used to determine the Auth Compare */
183 
184 #define QAT_AUTH_SHA3_PADDING_DISABLE_BITPOS 16
185 /**< @ingroup icp_qat_hw_defs
186  * Starting bit position indicating the Auth h/w
187  * padding disable for SHA3.
188  * Flag set to 0 => h/w is required to pad (default)
189  * Flag set to 1 => No padding in h/w
190  */
191 
192 #define QAT_AUTH_SHA3_PADDING_DISABLE_MASK 0x1
193 /**< @ingroup icp_qat_hw_defs
194  * Single bit mask used to determine the Auth h/w
195  * padding disable for SHA3.
196  */
197 
198 #define QAT_AUTH_SHA3_PADDING_OVERRIDE_BITPOS 17
199 /**< @ingroup icp_qat_hw_defs
200  * Starting bit position indicating the Auth h/w
201  * padding override for SHA3.
202  * Flag set to 0 => default padding behaviour
203  * implemented in SHA3-256 slice will take effect
204  * (default hardware setting upon h/w reset)
205  * Flag set to 1 => SHA3-core will not use the padding
206  * sequence built into the SHA3 core. Instead, the
207  * padding sequence specified in bits 48-51 and 56-63
208  * of the 64-bit auth config word will apply
209  * (corresponds with EAS bits 32-43).
210  */
211 
212 #define QAT_AUTH_SHA3_PADDING_OVERRIDE_MASK 0x1
213 /**< @ingroup icp_qat_hw_defs
214  * Single bit mask used to determine the Auth h/w
215  * padding override for SHA3.
216  */
217 
218 #define QAT_AUTH_ALGO_SHA3_BITPOS 22
219 /**< @ingroup icp_qat_hw_defs
220  * Starting bit position for indicating the
221  * SHA3 Auth Algo
222  */
223 
224 #define QAT_AUTH_ALGO_SHA3_MASK 0x3
225 /**< @ingroup icp_qat_hw_defs
226  * Two bit mask used for determining the
227  * SHA3 Auth algo
228  */
229 
230 /**< Flag mask & bit position */
231 
232 #define QAT_AUTH_SHA3_PROG_PADDING_POSTFIX_BITPOS 16
233 /**< @ingroup icp_qat_hw_defs
234  * Starting bit position indicating the SHA3
235  * flexible programmable padding postfix.
236  * Note that these bits are set using macro
237  * ICP_QAT_HW_AUTH_CONFIG_BUILD_UPPER and are
238  * defined relative to the 32-bit value that
239  * this macro returns. In effect, therefore, this
240  * defines starting bit position 48 within the
241  * 64-bit auth config word.
242  */
243 
244 #define QAT_AUTH_SHA3_PROG_PADDING_POSTFIX_MASK 0xF
245 /**< @ingroup icp_qat_hw_defs
246  * Four-bit mask used to determine the SHA3
247  * flexible programmable padding postfix
248  */
249 
250 #define QAT_AUTH_SHA3_PROG_PADDING_PREFIX_BITPOS 24
251 /**< @ingroup icp_qat_hw_defs
252  * Starting bit position indicating the SHA3
253  * flexible programmable padding prefix
254  * Note that these bits are set using macro
255  * ICP_QAT_HW_AUTH_CONFIG_BUILD_UPPER and are
256  * defined relative to the 32-bit value that
257  * this macro returns. In effect, therefore, this
258  * defines starting bit position 56 within the
259  * 64-bit auth config word.
260  */
261 
262 #define QAT_AUTH_SHA3_PROG_PADDING_PREFIX_MASK 0xFF
263 /**< @ingroup icp_qat_hw_defs
264  * Eight-bit mask used to determine the SHA3
265  * flexible programmable padding prefix
266  */
267 
268 /**< Flag usage - see additional notes @description for
269  * ICP_QAT_HW_AUTH_CONFIG_BUILD and
270  * ICP_QAT_HW_AUTH_CONFIG_BUILD_UPPER macros.
271  */
272 
273 #define QAT_AUTH_SHA3_HW_PADDING_ENABLE 0
274 /**< @ingroup icp_qat_hw_defs
275  * This setting enables h/w padding for SHA3.
276  */
277 
278 #define QAT_AUTH_SHA3_HW_PADDING_DISABLE 1
279 /**< @ingroup icp_qat_hw_defs
280  * This setting disables h/w padding for SHA3.
281  */
282 
283 #define QAT_AUTH_SHA3_PADDING_DISABLE_USE_DEFAULT 0
284 /**< @ingroup icp_qat_hw_defs
285  * Default value for the Auth h/w padding disable.
286  * If set to 0 for SHA3-256, h/w padding is enabled.
287  * Padding_Disable is undefined for all non-SHA3-256
288  * algos and is consequently set to the default of 0.
289  */
290 
291 #define QAT_AUTH_SHA3_PADDING_OVERRIDE_USE_DEFAULT 0
292 /**< @ingroup icp_qat_hw_defs
293  * Value for the Auth h/w padding override for SHA3.
294  * Flag set to 0 => default padding behaviour
295  * implemented in SHA3-256 slice will take effect
296  * (default hardware setting upon h/w reset)
297  * For this setting of the override flag, all the
298  * bits of the padding sequence specified
299  * in bits 48-51 and 56-63 of the 64-bit
300  * auth config word are set to 0 (reserved).
301  */
302 
303 #define QAT_AUTH_SHA3_PADDING_OVERRIDE_PROGRAMMABLE 1
304 /**< @ingroup icp_qat_hw_defs
305  * Value for the Auth h/w padding override for SHA3.
306  * Flag set to 1 => SHA3-core will not use the padding
307  * sequence built into the SHA3 core. Instead, the
308  * padding sequence specified in bits 48-51 and 56-63
309  * of the 64-bit auth config word will apply
310  * (corresponds with EAS bits 32-43).
311  */
312 
313 #define QAT_AUTH_SHA3_PROG_PADDING_POSTFIX_RESERVED 0
314 /**< @ingroup icp_qat_hw_defs
315  * All the bits of the padding sequence specified in
316  * bits 48-51 of the 64-bit auth config word are set
317  * to 0 (reserved) if the padding override bit is set
318  * to 0, indicating default padding.
319  */
320 
321 #define QAT_AUTH_SHA3_PROG_PADDING_PREFIX_RESERVED 0
322 /**< @ingroup icp_qat_hw_defs
323  * All the bits of the padding sequence specified in
324  * bits 56-63 of the 64-bit auth config word are set
325  * to 0 (reserved) if the padding override bit is set
326  * to 0, indicating default padding.
327  */
328 
329 /**
330  ***************************************************************************************
331  * @ingroup icp_qat_hw_defs
332  *
333  * @description
334  *      The derived configuration word for the auth slice is based on the inputs
335  *      of mode, algorithm type and compare length. The total size of the auth
336  *      config word in the setup block is 64 bits however the size of the value
337  *      returned by this macro is assumed to be only 32 bits (for now) and sets
338  *      the lower 32 bits of the auth config word. Unfortunately, changing the
339  *      size of the returned value to 64 bits will also require changes to the
340  *      shared RAM constants table so the macro size will remain at 32 bits.
341  *      This means that the padding sequence bits specified in bits 48-51 and
342  *      56-63 of the 64-bit auth config word are NOT included in the
343  *      ICP_QAT_HW_AUTH_CONFIG_BUILD macro and are defined in a
344  *      separate macro, namely, ICP_QAT_HW_AUTH_CONFIG_BUILD_UPPER.
345  *
346  *      For the digest generation case the compare length is a don't care value.
347  *      Furthermore, if the client will be doing the digest validation, the
348  *      compare_length will not be used.
349  *      The padding and padding override bits for SHA3 are set internally
350  *      by the macro.
351  *      Padding_Disable is set it to 0 for SHA3-256 algo only i.e. we want to
352  *      enable this to provide the ability to test with h/w padding enabled.
353  *      Padding_Disable has no meaning for all non-SHA3-256 algos and is
354  *      consequently set the default of 0.
355  *      Padding Override is set to 0, implying that the padding behaviour
356  *      implemented in the SHA3-256 slice will take effect (default hardware
357  *      setting upon h/w reset).
358  *      This flag has no meaning for other algos, so is also set to the default
359  *      for non-SHA3-256 algos.
360  *
361  * @param mode      Authentication mode to use
362  * @param algo      Auth Algorithm to use
363  * @param cmp_len   The length of the digest if the QAT is to the check
364  *
365  ****************************************************************************************/
366 #define ICP_QAT_HW_AUTH_CONFIG_BUILD(mode, algo, cmp_len)                                    \
367 	((((mode)&QAT_AUTH_MODE_MASK) << QAT_AUTH_MODE_BITPOS) |                             \
368 	 (((algo)&QAT_AUTH_ALGO_MASK) << QAT_AUTH_ALGO_BITPOS) |                             \
369 	 (((algo >> 4) & QAT_AUTH_ALGO_SHA3_MASK)                                            \
370 	  << QAT_AUTH_ALGO_SHA3_BITPOS) |                                                    \
371 	 (((QAT_AUTH_SHA3_PADDING_DISABLE_USE_DEFAULT)&QAT_AUTH_SHA3_PADDING_DISABLE_MASK)   \
372 	  << QAT_AUTH_SHA3_PADDING_DISABLE_BITPOS) |                                         \
373 	 (((QAT_AUTH_SHA3_PADDING_OVERRIDE_USE_DEFAULT)&QAT_AUTH_SHA3_PADDING_OVERRIDE_MASK) \
374 	  << QAT_AUTH_SHA3_PADDING_OVERRIDE_BITPOS) |                                        \
375 	 (((cmp_len)&QAT_AUTH_CMP_MASK) << QAT_AUTH_CMP_BITPOS))
376 
377 /**
378  ***************************************************************************************
379  * @ingroup icp_qat_hw_defs
380  *
381  * @description
382  *      This macro sets the upper 32 bits of the 64-bit auth config word.
383  *      The sequence bits specified in bits 48-51 and 56-63 of the 64-bit auth
384  *      config word are included in this macro, which is therefore assumed to
385  *      return a 32-bit value.
386  *      Note that the Padding Override bit is set in macro
387  *      ICP_QAT_HW_AUTH_CONFIG_BUILD.
388  *      Since the Padding Override is set to 0 regardless, for now, all the bits
389  *      of the padding sequence specified in bits 48-51 and 56-63 of the 64-bit
390  *      auth config word are set to 0 (reserved). Note that the bit positions of
391  *      the padding sequence bits are defined relative to the 32-bit value that
392  *      this macro returns.
393  *
394  ****************************************************************************************/
395 #define ICP_QAT_HW_AUTH_CONFIG_BUILD_UPPER                                                        \
396 	((((QAT_AUTH_SHA3_PROG_PADDING_POSTFIX_RESERVED)&QAT_AUTH_SHA3_PROG_PADDING_POSTFIX_MASK) \
397 	  << QAT_AUTH_SHA3_PROG_PADDING_POSTFIX_BITPOS) |                                         \
398 	 (((QAT_AUTH_SHA3_PROG_PADDING_PREFIX_RESERVED)&QAT_AUTH_SHA3_PROG_PADDING_PREFIX_MASK)   \
399 	  << QAT_AUTH_SHA3_PROG_PADDING_PREFIX_BITPOS))
400 
401 /**
402  *****************************************************************************
403  * @ingroup icp_qat_hw_defs
404  *      Auth Counter structure
405  *
406  * @description
407  *      32 bit counter that tracks the number of data bytes passed through
408  *      the slice. This is used by the padding logic for some algorithms. Note
409  *      only the upper 32 bits are set.
410  *
411  *****************************************************************************/
412 typedef struct icp_qat_hw_auth_counter_s {
413 	uint32_t counter;
414 	/**< Counter value */
415 	uint32_t reserved;
416 	/**< Reserved */
417 } icp_qat_hw_auth_counter_t;
418 
419 /* Private defines */
420 #define QAT_AUTH_COUNT_MASK 0xFFFFFFFF
421 /**< @ingroup icp_qat_hw_defs
422  * Thirty two bit mask used for determining the Auth count */
423 
424 #define QAT_AUTH_COUNT_BITPOS 0
425 /**< @ingroup icp_qat_hw_defs
426  * Starting bit position indicating the Auth count.  */
427 
428 /**
429  ******************************************************************************
430  * @ingroup icp_qat_hw_defs
431  *
432  * @description
433  *      Macro to build the auth counter quad word
434  *
435  * @param val      Counter value to set
436  *
437  *****************************************************************************/
438 #define ICP_QAT_HW_AUTH_COUNT_BUILD(val)                                       \
439 	(((val)&QAT_AUTH_COUNT_MASK) << QAT_AUTH_COUNT_BITPOS)
440 
441 /**
442  *****************************************************************************
443  * @ingroup icp_qat_hw_defs
444  *      Definition of the common auth parameters
445  * @description
446  *      This part of the configuration is constant for each service
447  *
448  *****************************************************************************/
449 typedef struct icp_qat_hw_auth_setup_s {
450 	icp_qat_hw_auth_config_t auth_config;
451 	/**< Configuration word for the auth slice */
452 	icp_qat_hw_auth_counter_t auth_counter;
453 	/**< Auth counter value for this request */
454 } icp_qat_hw_auth_setup_t;
455 
456 /* ************************************************************************* */
457 /* ************************************************************************* */
458 
459 #define QAT_HW_DEFAULT_ALIGNMENT 8
460 #define QAT_HW_ROUND_UP(val, n) (((val) + ((n)-1)) & (~(n - 1)))
461 
462 /* State1 */
463 #define ICP_QAT_HW_NULL_STATE1_SZ 32
464 /**< @ingroup icp_qat_hw_defs
465  * State1 block size for NULL hashing */
466 #define ICP_QAT_HW_MD5_STATE1_SZ 16
467 /**< @ingroup icp_qat_hw_defs
468  * State1 block size for MD5 */
469 #define ICP_QAT_HW_SHA1_STATE1_SZ 20
470 /**< @ingroup icp_qat_hw_defs
471  * Define the state1 block size for SHA1 - Note that for the QAT HW the state
472  * is rounded to the nearest 8 byte multiple */
473 #define ICP_QAT_HW_SHA224_STATE1_SZ 32
474 /**< @ingroup icp_qat_hw_defs
475  * State1 block size for SHA24 */
476 #define ICP_QAT_HW_SHA3_224_STATE1_SZ 28
477 /**< @ingroup icp_qat_hw_defs
478  * State1 block size for SHA3_224 */
479 #define ICP_QAT_HW_SHA256_STATE1_SZ 32
480 /**< @ingroup icp_qat_hw_defs
481  * State1 block size for SHA256 */
482 #define ICP_QAT_HW_SHA3_256_STATE1_SZ 32
483 /**< @ingroup icp_qat_hw_defs
484  * State1 block size for SHA3_256 */
485 #define ICP_QAT_HW_SHA384_STATE1_SZ 64
486 /**< @ingroup icp_qat_hw_defs
487  * State1 block size for SHA384 */
488 #define ICP_QAT_HW_SHA3_384_STATE1_SZ 48
489 /**< @ingroup icp_qat_hw_defs
490  * State1 block size for SHA3_384 */
491 #define ICP_QAT_HW_SHA512_STATE1_SZ 64
492 /**< @ingroup icp_qat_hw_defs
493  * State1 block size for SHA512 */
494 #define ICP_QAT_HW_SHA3_512_STATE1_SZ 64
495 /**< @ingroup icp_qat_hw_defs
496  * State1 block size for SHA3_512 */
497 #define ICP_QAT_HW_AES_XCBC_MAC_STATE1_SZ 16
498 /**< @ingroup icp_qat_hw_defs
499  * State1 block size for XCBC */
500 #define ICP_QAT_HW_AES_CBC_MAC_STATE1_SZ 16
501 /**< @ingroup icp_qat_hw_defs
502  * State1 block size for CBC */
503 #define ICP_QAT_HW_AES_F9_STATE1_SZ 32
504 /**< @ingroup icp_qat_hw_defs
505  * State1 block size for AES F9 */
506 #define ICP_QAT_HW_KASUMI_F9_STATE1_SZ 16
507 /**< @ingroup icp_qat_hw_defs
508  * State1 block size for Kasumi F9 */
509 #define ICP_QAT_HW_GALOIS_128_STATE1_SZ 16
510 /**< @ingroup icp_qat_hw_defs
511  * State1 block size for Galois128 */
512 #define ICP_QAT_HW_SNOW_3G_UIA2_STATE1_SZ 8
513 /**< @ingroup icp_cpm_hw_defs
514  * State1 block size for UIA2 */
515 #define ICP_QAT_HW_ZUC_3G_EIA3_STATE1_SZ 8
516 /**< @ingroup icp_cpm_hw_defs
517  * State1 block size for EIA3 */
518 #define ICP_QAT_HW_SM3_STATE1_SZ 32
519 /**< @ingroup icp_qat_hw_defs
520  * State1 block size for SM3 */
521 #define ICP_QAT_HW_SHA3_STATEFUL_STATE1_SZ 200
522 /** <@ingroup icp_cpm_hw_defs
523  * State1 block size for stateful SHA3 processing*/
524 
525 /* State2 */
526 #define ICP_QAT_HW_NULL_STATE2_SZ 32
527 /**< @ingroup icp_qat_hw_defs
528  * State2 block size for NULL hashing */
529 #define ICP_QAT_HW_MD5_STATE2_SZ 16
530 /**< @ingroup icp_qat_hw_defs
531  * State2 block size for MD5 */
532 #define ICP_QAT_HW_SHA1_STATE2_SZ 20
533 /**< @ingroup icp_qat_hw_defs
534  * State2 block size for SHA1 - Note that for the QAT HW the state  is rounded
535  * to the nearest 8 byte multiple */
536 #define ICP_QAT_HW_SHA224_STATE2_SZ 32
537 /**< @ingroup icp_qat_hw_defs
538  * State2 block size for SHA224 */
539 #define ICP_QAT_HW_SHA3_224_STATE2_SZ 0
540 /**< @ingroup icp_qat_hw_defs
541  * State2 block size for SHA3_224 */
542 #define ICP_QAT_HW_SHA256_STATE2_SZ 32
543 /**< @ingroup icp_qat_hw_defs
544  * State2 block size for SHA256 */
545 #define ICP_QAT_HW_SHA3_256_STATE2_SZ 0
546 /**< @ingroup icp_qat_hw_defs
547  * State2 block size for SHA3_256 */
548 #define ICP_QAT_HW_SHA384_STATE2_SZ 64
549 /**< @ingroup icp_qat_hw_defs
550  * State2 block size for SHA384 */
551 #define ICP_QAT_HW_SHA3_384_STATE2_SZ 0
552 /**< @ingroup icp_qat_hw_defs
553  * State2 block size for SHA3_384 */
554 #define ICP_QAT_HW_SHA512_STATE2_SZ 64
555 /**< @ingroup icp_qat_hw_defs
556  * State2 block size for SHA512 */
557 #define ICP_QAT_HW_SHA3_512_STATE2_SZ 0
558 /**< @ingroup icp_qat_hw_defs
559  * State2 block size for SHA3_512 */
560 #define ICP_QAT_HW_AES_XCBC_MAC_KEY_SZ 16
561 /**< @ingroup icp_qat_hw_defs
562  * State2 block size for XCBC */
563 #define ICP_QAT_HW_AES_CBC_MAC_KEY_SZ 16
564 /**< @ingroup icp_qat_hw_defs
565  * State2 block size for CBC */
566 #define ICP_QAT_HW_AES_CCM_CBC_E_CTR0_SZ 16
567 /**< @ingroup icp_qat_hw_defs
568  * State2 block size for AES Encrypted Counter 0 */
569 #define ICP_QAT_HW_F9_IK_SZ 16
570 /**< @ingroup icp_qat_hw_defs
571  * State2 block size for F9 IK */
572 #define ICP_QAT_HW_F9_FK_SZ 16
573 /**< @ingroup icp_qat_hw_defs
574  * State2 block size for F9 FK */
575 #define ICP_QAT_HW_KASUMI_F9_STATE2_SZ                                         \
576 	(ICP_QAT_HW_F9_IK_SZ + ICP_QAT_HW_F9_FK_SZ)
577 /**< @ingroup icp_qat_hw_defs
578  * State2 complete size for Kasumi F9 */
579 #define ICP_QAT_HW_AES_F9_STATE2_SZ ICP_QAT_HW_KASUMI_F9_STATE2_SZ
580 /**< @ingroup icp_qat_hw_defs
581  * State2 complete size for AES F9 */
582 #define ICP_QAT_HW_SNOW_3G_UIA2_STATE2_SZ 24
583 /**< @ingroup icp_cpm_hw_defs
584  * State2 block size for UIA2 */
585 #define ICP_QAT_HW_ZUC_3G_EIA3_STATE2_SZ 32
586 /**< @ingroup icp_cpm_hw_defs
587  * State2 block size for EIA3 */
588 #define ICP_QAT_HW_GALOIS_H_SZ 16
589 /**< @ingroup icp_qat_hw_defs
590  * State2 block size for Galois Multiplier H */
591 #define ICP_QAT_HW_GALOIS_LEN_A_SZ 8
592 /**< @ingroup icp_qat_hw_defs
593  * State2 block size for Galois AAD length */
594 #define ICP_QAT_HW_GALOIS_E_CTR0_SZ 16
595 /**< @ingroup icp_qat_hw_defs
596  * State2 block size for Galois Encrypted Counter 0 */
597 #define ICP_QAT_HW_SM3_STATE2_SZ 32
598 /**< @ingroup icp_qat_hw_defs
599  * State2 block size for SM3 */
600 #define ICP_QAT_HW_SHA3_STATEFUL_STATE2_SZ 208
601 /** <@ingroup icp_cpm_hw_defs
602  * State2 block size for stateful SHA3 processing*/
603 
604 /* ************************************************************************* */
605 /* ************************************************************************* */
606 
607 /**
608  *****************************************************************************
609  * @ingroup icp_qat_hw_defs
610  *      Definition of SHA512 auth algorithm processing struct
611  * @description
612  *      This structs described the parameters to pass to the slice for
613  *      configuring it for SHA512 processing. This is the largest possible
614  *      setup block for authentication
615  *
616  *****************************************************************************/
617 typedef struct icp_qat_hw_auth_sha512_s {
618 	icp_qat_hw_auth_setup_t inner_setup;
619 	/**< Inner loop configuration word for the slice */
620 
621 	uint8_t state1[ICP_QAT_HW_SHA512_STATE1_SZ];
622 	/**< Slice state1 variable */
623 
624 	icp_qat_hw_auth_setup_t outer_setup;
625 	/**< Outer configuration word for the slice */
626 
627 	uint8_t state2[ICP_QAT_HW_SHA512_STATE2_SZ];
628 	/**< Slice state2 variable */
629 
630 } icp_qat_hw_auth_sha512_t;
631 
632 /**
633  *****************************************************************************
634  * @ingroup icp_qat_hw_defs
635  *      Definition of SHA3_512 auth algorithm processing struct
636  * @description
637  *      This structs described the parameters to pass to the slice for
638  *      configuring it for SHA3_512 processing. This is the largest possible
639  *      setup block for authentication
640  *
641  *****************************************************************************/
642 typedef struct icp_qat_hw_auth_sha3_512_s {
643 	icp_qat_hw_auth_setup_t inner_setup;
644 	/**< Inner loop configuration word for the slice */
645 
646 	uint8_t state1[ICP_QAT_HW_SHA3_512_STATE1_SZ];
647 	/**< Slice state1 variable */
648 
649 	icp_qat_hw_auth_setup_t outer_setup;
650 	/**< Outer configuration word for the slice */
651 
652 } icp_qat_hw_auth_sha3_512_t;
653 
654 /**
655  *****************************************************************************
656  * @ingroup icp_qat_hw_defs
657  *      Definition of stateful SHA3 auth algorithm processing struct
658  * @description
659  *      This structs described the parameters to pass to the slice for
660  *      configuring it for stateful SHA3 processing. This is the largest
661  *      possible setup block for authentication
662  *
663  *****************************************************************************/
664 typedef struct icp_qat_hw_auth_sha3_stateful_s {
665 	icp_qat_hw_auth_setup_t inner_setup;
666 	/**< Inner loop configuration word for the slice */
667 
668 	uint8_t inner_state1[ICP_QAT_HW_SHA3_STATEFUL_STATE1_SZ];
669 	/**< Inner hash block */
670 
671 	icp_qat_hw_auth_setup_t outer_setup;
672 	/**< Outer configuration word for the slice */
673 
674 	uint8_t outer_state1[ICP_QAT_HW_SHA3_STATEFUL_STATE1_SZ];
675 	/**< Outer hash block */
676 
677 } icp_qat_hw_auth_sha3_stateful_t;
678 
679 /**
680  *****************************************************************************
681  * @ingroup icp_qat_hw_defs
682  *      Supported hardware authentication algorithms
683  * @description
684  *      Common grouping of the auth algorithm types supported by the QAT
685  *
686  *****************************************************************************/
687 typedef union icp_qat_hw_auth_algo_blk_u {
688 	icp_qat_hw_auth_sha512_t sha512;
689 	/**< SHA512 Hashing */
690 	icp_qat_hw_auth_sha3_stateful_t sha3_stateful;
691 	/**< Stateful SHA3 Hashing */
692 
693 } icp_qat_hw_auth_algo_blk_t;
694 
695 #define ICP_QAT_HW_GALOIS_LEN_A_BITPOS 0
696 /**< @ingroup icp_qat_hw_defs
697  * Bit position of the 32 bit A value in the 64 bit A configuration sent to
698  * the QAT */
699 
700 #define ICP_QAT_HW_GALOIS_LEN_A_MASK 0xFFFFFFFF
701 /**< @ingroup icp_qat_hw_defs
702  * Mask value for A value */
703 
704 /* ========================================================================= */
705 /*                                                CIPHER SLICE */
706 /* ========================================================================= */
707 
708 /**
709  *****************************************************************************
710  * @ingroup icp_qat_hw_defs
711  *      Definition of the supported Cipher Algorithm types
712  * @description
713  *      Enumeration used to define the cipher algorithms
714  *
715  *****************************************************************************/
716 
717 typedef enum {
718 	ICP_QAT_HW_CIPHER_ALGO_NULL = 0,	    /*!< Null ciphering */
719 	ICP_QAT_HW_CIPHER_ALGO_DES = 1,		    /*!< DES ciphering */
720 	ICP_QAT_HW_CIPHER_ALGO_3DES = 2,	    /*!< 3DES ciphering */
721 	ICP_QAT_HW_CIPHER_ALGO_AES128 = 3,	    /*!< AES-128 ciphering */
722 	ICP_QAT_HW_CIPHER_ALGO_AES192 = 4,	    /*!< AES-192 ciphering */
723 	ICP_QAT_HW_CIPHER_ALGO_AES256 = 5,	    /*!< AES-256 ciphering */
724 	ICP_QAT_HW_CIPHER_ALGO_ARC4 = 6,	    /*!< ARC4 ciphering */
725 	ICP_QAT_HW_CIPHER_ALGO_KASUMI = 7,	    /*!< Kasumi */
726 	ICP_QAT_HW_CIPHER_ALGO_SNOW_3G_UEA2 = 8,    /*!< Snow_3G */
727 	ICP_QAT_HW_CIPHER_ALGO_ZUC_3G_128_EEA3 = 9, /*!< ZUC_3G */
728 	ICP_QAT_HW_CIPHER_ALGO_SM4 = 10,	    /*!< SM4 ciphering */
729 	ICP_QAT_HW_CIPHER_ALGO_CHACHA20_POLY1305 =
730 	    11,				 /*!< CHACHA POLY SPC AEAD */
731 	ICP_QAT_HW_CIPHER_DELIMITER = 12 /**< Delimiter type */
732 } icp_qat_hw_cipher_algo_t;
733 
734 /**
735  *****************************************************************************
736  * @ingroup icp_qat_hw_defs
737  *      Definition of the supported cipher modes of operation
738  * @description
739  *      Enumeration used to define the cipher slice modes.
740  *
741  * @Note
742  *      Only some algorithms are valid in some of the modes. If you dont know
743  *      what you are doing then refer back to the EAS
744  *
745  *****************************************************************************/
746 
747 typedef enum {
748 	ICP_QAT_HW_CIPHER_ECB_MODE = 0,      /*!< ECB mode */
749 	ICP_QAT_HW_CIPHER_CBC_MODE = 1,      /*!< CBC more */
750 	ICP_QAT_HW_CIPHER_CTR_MODE = 2,      /*!< CTR mode */
751 	ICP_QAT_HW_CIPHER_F8_MODE = 3,       /*!< F8 mode */
752 	ICP_QAT_HW_CIPHER_AEAD_MODE = 4,     /*!< AES-GCM SPC AEAD mode */
753 	ICP_QAT_HW_CIPHER_CCM_MODE = 5,      /*!< AES-CCM SPC AEAD mode */
754 	ICP_QAT_HW_CIPHER_XTS_MODE = 6,      /*!< XTS mode */
755 	ICP_QAT_HW_CIPHER_MODE_DELIMITER = 7 /**< Delimiter type */
756 } icp_qat_hw_cipher_mode_t;
757 
758 /**
759  *****************************************************************************
760  * @ingroup icp_qat_hw_defs
761  *      Cipher Configuration Struct
762  *
763  * @description
764  *      Configuration data used for setting up the QAT Cipher Slice
765  *
766  *****************************************************************************/
767 
768 typedef struct icp_qat_hw_cipher_config_s {
769 	uint32_t val;
770 	/**< Cipher slice configuration */
771 
772 	uint32_t reserved;
773 	/**< Reserved */
774 } icp_qat_hw_cipher_config_t;
775 
776 /**
777  *****************************************************************************
778  * @ingroup icp_qat_hw_defs
779  *      Cipher Configuration Struct
780  *
781  * @description
782  *      Configuration data used for setting up the QAT UCS Cipher Slice
783  *
784  *****************************************************************************/
785 typedef struct icp_qat_hw_ucs_cipher_config_s {
786 	uint32_t val;
787 	/**< Cipher slice configuration */
788 
789 	uint32_t reserved[3];
790 	/**< Reserved */
791 } icp_qat_hw_ucs_cipher_config_t;
792 
793 /**
794  *****************************************************************************
795  * @ingroup icp_qat_hw_defs
796  *      Definition of the cipher direction
797  * @description
798  *      Enumeration which is used to define the cipher direction to apply
799  *
800  *****************************************************************************/
801 
802 typedef enum {
803 	/*!< Flag to indicate that encryption is required */
804 	ICP_QAT_HW_CIPHER_ENCRYPT = 0,
805 	/*!< Flag to indicate that decryption is required */
806 	ICP_QAT_HW_CIPHER_DECRYPT = 1,
807 
808 } icp_qat_hw_cipher_dir_t;
809 
810 /**
811  *****************************************************************************
812  * @ingroup icp_qat_hw_defs
813  *      Definition of the cipher key conversion modes
814  * @description
815  *      Enumeration which is used to define if cipher key conversion is needed
816  *
817  *****************************************************************************/
818 
819 typedef enum {
820 	/*!< Flag to indicate that no key convert is required */
821 	ICP_QAT_HW_CIPHER_NO_CONVERT = 0,
822 	/*!< Flag to indicate that key conversion is required */
823 	ICP_QAT_HW_CIPHER_KEY_CONVERT = 1,
824 } icp_qat_hw_cipher_convert_t;
825 
826 /* Private defines */
827 
828 /* Note: Bit positions have been arranged for little endian ordering */
829 
830 #define QAT_CIPHER_MODE_BITPOS 4
831 /**< @ingroup icp_qat_hw_defs
832  * Define for the cipher mode bit position */
833 
834 #define QAT_CIPHER_MODE_MASK 0xF
835 /**< @ingroup icp_qat_hw_defs
836  * Define for the cipher mode mask (four bits) */
837 
838 #define QAT_CIPHER_ALGO_BITPOS 0
839 /**< @ingroup icp_qat_hw_defs
840  * Define for the cipher algo bit position */
841 
842 #define QAT_CIPHER_ALGO_MASK 0xF
843 /**< @ingroup icp_qat_hw_defs
844  * Define for the cipher algo mask (four bits) */
845 
846 #define QAT_CIPHER_CONVERT_BITPOS 9
847 /**< @ingroup icp_qat_hw_defs
848  * Define the cipher convert key bit position */
849 
850 #define QAT_CIPHER_CONVERT_MASK 0x1
851 /**< @ingroup icp_qat_hw_defs
852  * Define for the cipher convert key mask (one bit)*/
853 
854 #define QAT_CIPHER_DIR_BITPOS 8
855 /**< @ingroup icp_qat_hw_defs
856  * Define for the cipher direction bit position */
857 
858 #define QAT_CIPHER_DIR_MASK 0x1
859 /**< @ingroup icp_qat_hw_defs
860  * Define for the cipher direction mask (one bit) */
861 
862 #define QAT_CIPHER_AEAD_HASH_CMP_LEN_MASK 0x1F
863 /**< @ingroup icp_qat_hw_defs
864  * Define for the cipher AEAD Hash compare length  mask (5 bits)*/
865 
866 #define QAT_CIPHER_AEAD_HASH_CMP_LEN_BITPOS 10
867 /**< @ingroup icp_qat_hw_defs
868  * Define for the cipher AEAD Hash compare length  (5 bits)*/
869 
870 #define QAT_CIPHER_AEAD_AAD_SIZE_LOWER_MASK 0xFF
871 /**< @ingroup icp_qat_hw_defs
872  * Define for the cipher AEAD AAD size lower byte mask */
873 
874 #define QAT_CIPHER_AEAD_AAD_SIZE_UPPER_MASK 0x3F
875 /**< @ingroup icp_qat_hw_defs
876  * Define for the cipher AEAD AAD size upper 6 bits mask */
877 
878 #define QAT_CIPHER_AEAD_AAD_UPPER_SHIFT 8
879 /**< @ingroup icp_qat_hw_defs
880  * Define for the cipher AEAD AAD size Upper byte shift */
881 
882 #define QAT_CIPHER_AEAD_AAD_LOWER_SHIFT 24
883 /**< @ingroup icp_qat_hw_defs
884  * Define for the cipher AEAD AAD size Lower byte shift */
885 
886 #define QAT_CIPHER_AEAD_AAD_SIZE_BITPOS 16
887 /**< @ingroup icp_qat_hw_defs
888  * Define for the cipher AEAD AAD size  (14 bits)*/
889 
890 #define QAT_CIPHER_MODE_F8_KEY_SZ_MULT 2
891 /**< @ingroup icp_qat_hw_defs
892  * Define for the cipher mode F8 key size */
893 
894 #define QAT_CIPHER_MODE_XTS_KEY_SZ_MULT 2
895 /**< @ingroup icp_qat_hw_defs
896  * Define for the cipher XTS mode key size */
897 
898 #define QAT_CIPHER_MODE_UCS_XTS_KEY_SZ_MULT 1
899 /**< @ingroup icp_qat_hw_defs
900  * Define for the UCS cipher XTS mode key size */
901 
902 /**
903  ******************************************************************************
904  * @ingroup icp_qat_hw_defs
905  *
906  * @description
907  *      Build the cipher configuration field
908  *
909  * @param mode      Cipher Mode to use
910  * @param algo      Cipher Algorithm to use
911  * @param convert   Specify if the key is to be converted
912  * @param dir       Specify the cipher direction either encrypt or decrypt
913  *
914  *****************************************************************************/
915 #define ICP_QAT_HW_CIPHER_CONFIG_BUILD(                                        \
916     mode, algo, convert, dir, aead_hash_cmp_len)                               \
917 	((((mode)&QAT_CIPHER_MODE_MASK) << QAT_CIPHER_MODE_BITPOS) |           \
918 	 (((algo)&QAT_CIPHER_ALGO_MASK) << QAT_CIPHER_ALGO_BITPOS) |           \
919 	 (((convert)&QAT_CIPHER_CONVERT_MASK) << QAT_CIPHER_CONVERT_BITPOS) |  \
920 	 (((dir)&QAT_CIPHER_DIR_MASK) << QAT_CIPHER_DIR_BITPOS) |              \
921 	 (((aead_hash_cmp_len)&QAT_CIPHER_AEAD_HASH_CMP_LEN_MASK)              \
922 	  << QAT_CIPHER_AEAD_HASH_CMP_LEN_BITPOS))
923 
924 /**
925  ******************************************************************************
926  * @ingroup icp_qat_hw_defs
927  *
928  * @description
929  *      Build the second QW of cipher slice config
930  *
931  * @param aad_size  Specify the size of associated authentication data
932  *                  for AEAD processing
933  *
934  ******************************************************************************/
935 #define ICP_QAT_HW_CIPHER_CONFIG_BUILD_UPPER(aad_size)                         \
936 	(((((aad_size) >> QAT_CIPHER_AEAD_AAD_UPPER_SHIFT) &                   \
937 	   QAT_CIPHER_AEAD_AAD_SIZE_UPPER_MASK)                                \
938 	  << QAT_CIPHER_AEAD_AAD_SIZE_BITPOS) |                                \
939 	 (((aad_size)&QAT_CIPHER_AEAD_AAD_SIZE_LOWER_MASK)                     \
940 	  << QAT_CIPHER_AEAD_AAD_LOWER_SHIFT))
941 
942 #define ICP_QAT_HW_DES_BLK_SZ 8
943 /**< @ingroup icp_qat_hw_defs
944  * Define the block size for DES.
945  * This used as either the size of the IV or CTR input value */
946 #define ICP_QAT_HW_3DES_BLK_SZ 8
947 /**< @ingroup icp_qat_hw_defs
948  * Define the processing block size for 3DES */
949 #define ICP_QAT_HW_NULL_BLK_SZ 8
950 /**< @ingroup icp_qat_hw_defs
951  * Define the processing block size for NULL */
952 #define ICP_QAT_HW_AES_BLK_SZ 16
953 /**< @ingroup icp_qat_hw_defs
954  * Define the processing block size for AES 128, 192 and 256 */
955 #define ICP_QAT_HW_KASUMI_BLK_SZ 8
956 /**< @ingroup icp_qat_hw_defs
957  * Define the processing block size for KASUMI */
958 #define ICP_QAT_HW_SNOW_3G_BLK_SZ 8
959 /**< @ingroup icp_qat_hw_defs
960  * Define the processing block size for SNOW_3G */
961 #define ICP_QAT_HW_ZUC_3G_BLK_SZ 8
962 /**< @ingroup icp_qat_hw_defs
963  * Define the processing block size for ZUC_3G */
964 #define ICP_QAT_HW_NULL_KEY_SZ 256
965 /**< @ingroup icp_qat_hw_defs
966  * Define the key size for NULL */
967 #define ICP_QAT_HW_DES_KEY_SZ 8
968 /**< @ingroup icp_qat_hw_defs
969  * Define the key size for DES */
970 #define ICP_QAT_HW_3DES_KEY_SZ 24
971 /**< @ingroup icp_qat_hw_defs
972  * Define the key size for 3DES */
973 #define ICP_QAT_HW_AES_128_KEY_SZ 16
974 /**< @ingroup icp_qat_hw_defs
975  * Define the key size for AES128 */
976 #define ICP_QAT_HW_AES_192_KEY_SZ 24
977 /**< @ingroup icp_qat_hw_defs
978  * Define the key size for AES192 */
979 #define ICP_QAT_HW_AES_256_KEY_SZ 32
980 /**< @ingroup icp_qat_hw_defs
981  * Define the key size for AES256 */
982 /* AES UCS */
983 #define ICP_QAT_HW_UCS_AES_128_KEY_SZ ICP_QAT_HW_AES_128_KEY_SZ
984 /**< @ingroup icp_qat_hw_defs
985  * Define the key size for AES128 for UCS slice*/
986 #define ICP_QAT_HW_UCS_AES_192_KEY_SZ 32
987 /**< @ingroup icp_qat_hw_defs
988  * Define the key size for AES192 for UCS slice*/
989 #define ICP_QAT_HW_UCS_AES_256_KEY_SZ ICP_QAT_HW_AES_256_KEY_SZ
990 /**< @ingroup icp_qat_hw_defs
991  * Define the key size for AES256 for UCS slice*/
992 #define ICP_QAT_HW_AES_128_F8_KEY_SZ                                           \
993 	(ICP_QAT_HW_AES_128_KEY_SZ * QAT_CIPHER_MODE_F8_KEY_SZ_MULT)
994 /**< @ingroup icp_qat_hw_defs
995  * Define the key size for AES128 F8 */
996 #define ICP_QAT_HW_AES_192_F8_KEY_SZ                                           \
997 	(ICP_QAT_HW_AES_192_KEY_SZ * QAT_CIPHER_MODE_F8_KEY_SZ_MULT)
998 /**< @ingroup icp_qat_hw_defs
999  * Define the key size for AES192 F8 */
1000 #define ICP_QAT_HW_AES_256_F8_KEY_SZ                                           \
1001 	(ICP_QAT_HW_AES_256_KEY_SZ * QAT_CIPHER_MODE_F8_KEY_SZ_MULT)
1002 /**< @ingroup icp_qat_hw_defs
1003  * Define the key size for AES256 F8 */
1004 #define ICP_QAT_HW_AES_128_XTS_KEY_SZ                                          \
1005 	(ICP_QAT_HW_AES_128_KEY_SZ * QAT_CIPHER_MODE_XTS_KEY_SZ_MULT)
1006 /**< @ingroup icp_qat_hw_defs
1007  * Define the key size for AES128 XTS */
1008 #define ICP_QAT_HW_AES_256_XTS_KEY_SZ                                          \
1009 	(ICP_QAT_HW_AES_256_KEY_SZ * QAT_CIPHER_MODE_XTS_KEY_SZ_MULT)
1010 /**< @ingroup icp_qat_hw_defs
1011  * Define the key size for AES256 XTS */
1012 #define ICP_QAT_HW_UCS_AES_128_XTS_KEY_SZ                                      \
1013 	(ICP_QAT_HW_UCS_AES_128_KEY_SZ * QAT_CIPHER_MODE_UCS_XTS_KEY_SZ_MULT)
1014 /**< @ingroup icp_qat_hw_defs
1015  * Define the key size for AES128 XTS for the UCS Slice*/
1016 #define ICP_QAT_HW_UCS_AES_256_XTS_KEY_SZ                                      \
1017 	(ICP_QAT_HW_UCS_AES_256_KEY_SZ * QAT_CIPHER_MODE_UCS_XTS_KEY_SZ_MULT)
1018 /**< @ingroup icp_qat_hw_defs
1019  * Define the key size for AES256 XTS for the UCS Slice*/
1020 #define ICP_QAT_HW_KASUMI_KEY_SZ 16
1021 /**< @ingroup icp_qat_hw_defs
1022  * Define the key size for Kasumi */
1023 #define ICP_QAT_HW_KASUMI_F8_KEY_SZ                                            \
1024 	(ICP_QAT_HW_KASUMI_KEY_SZ * QAT_CIPHER_MODE_F8_KEY_SZ_MULT)
1025 /**< @ingroup icp_qat_hw_defs
1026  * Define the key size for Kasumi F8 */
1027 #define ICP_QAT_HW_AES_128_XTS_KEY_SZ                                          \
1028 	(ICP_QAT_HW_AES_128_KEY_SZ * QAT_CIPHER_MODE_XTS_KEY_SZ_MULT)
1029 /**< @ingroup icp_qat_hw_defs
1030  * Define the key size for AES128 XTS */
1031 #define ICP_QAT_HW_AES_256_XTS_KEY_SZ                                          \
1032 	(ICP_QAT_HW_AES_256_KEY_SZ * QAT_CIPHER_MODE_XTS_KEY_SZ_MULT)
1033 /**< @ingroup icp_qat_hw_defs
1034  * Define the key size for AES256 XTS */
1035 #define ICP_QAT_HW_ARC4_KEY_SZ 256
1036 /**< @ingroup icp_qat_hw_defs
1037  * Define the key size for ARC4 */
1038 #define ICP_QAT_HW_SNOW_3G_UEA2_KEY_SZ 16
1039 /**< @ingroup icp_cpm_hw_defs
1040  * Define the key size for SNOW_3G_UEA2 */
1041 #define ICP_QAT_HW_SNOW_3G_UEA2_IV_SZ 16
1042 /**< @ingroup icp_cpm_hw_defs
1043  * Define the iv size for SNOW_3G_UEA2 */
1044 #define ICP_QAT_HW_ZUC_3G_EEA3_KEY_SZ 16
1045 /**< @ingroup icp_cpm_hw_defs
1046  * Define the key size for ZUC_3G_EEA3 */
1047 #define ICP_QAT_HW_ZUC_3G_EEA3_IV_SZ 16
1048 /**< @ingroup icp_cpm_hw_defs
1049  * Define the iv size for ZUC_3G_EEA3 */
1050 #define ICP_QAT_HW_MODE_F8_NUM_REG_TO_CLEAR 2
1051 /**< @ingroup icp_cpm_hw_defs
1052  * Number of the HW register to clear in F8 mode */
1053 /**< @ingroup icp_qat_hw_defs
1054  * Define the State/ Initialization Vector size for CHACHAPOLY */
1055 #define ICP_QAT_HW_CHACHAPOLY_KEY_SZ 32
1056 /**< @ingroup icp_qat_hw_defs
1057  * Define the key size for CHACHA20-Poly1305*/
1058 #define ICP_QAT_HW_CHACHAPOLY_IV_SZ 12
1059 /**< @ingroup icp_qat_hw_defs
1060  * Define the block size for CHACHA20-Poly1305*/
1061 #define ICP_QAT_HW_CHACHAPOLY_BLK_SZ 64
1062 /**< @ingroup icp_qat_hw_defs
1063  * Define the State/ Initialization Vector size for CHACHA20-Poly1305 */
1064 #define ICP_QAT_HW_CHACHAPOLY_CTR_SZ 16
1065 /**< @ingroup icp_qat_hw_defs
1066  * Define the key size for CHACHA20-Poly1305*/
1067 #define ICP_QAT_HW_SPC_CTR_SZ 16
1068 /**< @ingroup icp_qat_hw_defs
1069  * Define the Single Pass tag size*/
1070 #define ICP_QAT_HW_CHACHAPOLY_ICV__SZ 16
1071 /**< @ingroup icp_qat_hw_defs
1072  * Define the key size for CHACHA20-Poly1305*/
1073 #define ICP_QAT_HW_CHACHAPOLY_AAD_MAX_LOG 14
1074 /**< @ingroup icp_qat_hw_defs
1075  * Define the key size for CHACHA20-Poly1305*/
1076 #define ICP_QAT_HW_SM4_BLK_SZ 16
1077 /**< @ingroup icp_qat_hw_defs
1078  * Define the processing block size for SM4 */
1079 #define ICP_QAT_HW_SM4_KEY_SZ 16
1080 /**< @ingroup icp_qat_hw_defs
1081  * Number of the HW register to clear in F8 mode */
1082 #define ICP_QAT_HW_SM4_IV_SZ 16
1083 /**< @ingroup icp_qat_hw_defs
1084  * Define the key size for SM4 */
1085 
1086 /*
1087  * SHRAM constants definitions
1088  */
1089 #define INIT_SHRAM_CONSTANTS_TABLE_SZ (1024)
1090 #define SHRAM_CONSTANTS_TABLE_SIZE_QWS (INIT_SHRAM_CONSTANTS_TABLE_SZ / 4 / 2)
1091 
1092 /**
1093  *****************************************************************************
1094  * @ingroup icp_qat_hw_defs
1095  *      Definition of AES-256 F8 cipher algorithm processing struct
1096  * @description
1097  *      This structs described the parameters to pass to the slice for
1098  *      configuring it for AES-256 F8 processing
1099  *
1100  *****************************************************************************/
1101 typedef struct icp_qat_hw_cipher_aes256_f8_s {
1102 	icp_qat_hw_cipher_config_t cipher_config;
1103 	/**< Cipher configuration word for the slice set to
1104 	 * AES-256 and the F8 mode */
1105 
1106 	uint8_t key[ICP_QAT_HW_AES_256_F8_KEY_SZ];
1107 	/**< Cipher key */
1108 
1109 } icp_qat_hw_cipher_aes256_f8_t;
1110 
1111 /**
1112  *****************************************************************************
1113  * @ingroup icp_qat_hw_defs
1114  *      Supported hardware cipher algorithms
1115  * @description
1116  *      Common grouping of the cipher algorithm types supported by the QAT.
1117  *      This is the largest possible cipher setup block size
1118  *
1119  *****************************************************************************/
1120 typedef union icp_qat_hw_cipher_algo_blk_u {
1121 
1122 	icp_qat_hw_cipher_aes256_f8_t aes256_f8;
1123 	/**< AES-256 F8 Cipher */
1124 
1125 } icp_qat_hw_cipher_algo_blk_t;
1126 
1127 /* ========================================================================= */
1128 /*                                                  TRNG SLICE */
1129 /* ========================================================================= */
1130 
1131 /**
1132  *****************************************************************************
1133  * @ingroup icp_qat_hw_defs
1134  *      Definition of the supported TRNG configuration modes
1135  * @description
1136  *      Enumeration used to define the TRNG modes. Used by clients when
1137  *      configuring the TRNG for use
1138  *
1139  *****************************************************************************/
1140 
1141 typedef enum {
1142 	ICP_QAT_HW_TRNG_DBL = 0,      /*!< TRNG Disabled mode */
1143 	ICP_QAT_HW_TRNG_NHT = 1,      /*!< TRNG Normal Health Test mode */
1144 	ICP_QAT_HW_TRNG_KAT = 4,      /*!< TRNG Known Answer Test mode */
1145 	ICP_QAT_HW_TRNG_DELIMITER = 8 /**< Delimiter type */
1146 } icp_qat_hw_trng_cfg_mode_t;
1147 
1148 /**
1149  *****************************************************************************
1150  * @ingroup icp_qat_hw_defs
1151  *      Definition of the supported TRNG KAT (known answer test) modes
1152  * @description
1153  *      Enumeration which is used to define the TRNG KAT modes. Used by clients
1154  *      when configuring the TRNG for testing
1155  *
1156  *****************************************************************************/
1157 
1158 typedef enum {
1159 	ICP_QAT_HW_TRNG_NEG_0 = 0,	  /*!< TRNG Neg Zero Test */
1160 	ICP_QAT_HW_TRNG_NEG_1 = 1,	  /*!< TRNG Neg One Test */
1161 	ICP_QAT_HW_TRNG_POS = 2,	  /*!< TRNG POS Test */
1162 	ICP_QAT_HW_TRNG_POS_VNC = 3,	  /*!< TRNG POS VNC Test */
1163 	ICP_QAT_HW_TRNG_KAT_DELIMITER = 4 /**< Delimiter type */
1164 } icp_qat_hw_trng_kat_mode_t;
1165 
1166 /**
1167  *****************************************************************************
1168  * @ingroup icp_qat_hw_defs
1169  *      TRNG mode configuration structure.
1170  *
1171  * @description
1172  *      Definition of the format of the TRNG slice configuration. Used
1173  *      internally by the QAT FW for configuration of the KAT unit or the
1174  *      TRNG depending on the slice command i.e. either a set_slice_config or
1175  *      slice_wr_KAT_type
1176  *
1177  *****************************************************************************/
1178 
1179 typedef struct icp_qat_hw_trng_config_s {
1180 	uint32_t val;
1181 	/**< Configuration used for setting up the TRNG slice */
1182 
1183 	uint32_t reserved;
1184 	/**< Reserved */
1185 } icp_qat_hw_trng_config_t;
1186 
1187 /* Private Defines */
1188 
1189 /* Note: Bit positions have been arranged for little endian ordering */
1190 
1191 #define QAT_TRNG_CONFIG_MODE_MASK 0x7
1192 /**< @ingroup icp_qat_hw_defs
1193  * Mask for the TRNG configuration mode. (Three bits) */
1194 
1195 #define QAT_TRNG_CONFIG_MODE_BITPOS 5
1196 /**< @ingroup icp_qat_hw_defs
1197  * TRNG configuration mode bit positions start */
1198 
1199 #define QAT_TRNG_KAT_MODE_MASK 0x3
1200 /**< @ingroup icp_qat_hw_defs
1201  * Mask of two bits for the TRNG known answer test mode */
1202 
1203 #define QAT_TRNG_KAT_MODE_BITPOS 6
1204 /**< @ingroup icp_qat_hw_defs
1205  * TRNG known answer test mode bit positions start */
1206 
1207 /**
1208  ******************************************************************************
1209  * @ingroup icp_qat_hw_defs
1210  *
1211  * @description
1212  *      Build the configuration byte for the TRNG slice based on the mode
1213  *
1214  * @param mode   Configuration mode parameter
1215  *
1216  *****************************************************************************/
1217 #define ICP_QAT_HW_TRNG_CONFIG_MODE_BUILD(mode)                                \
1218 	(((mode)&QAT_TRNG_CONFIG_MODE_MASK) << QAT_TRNG_CONFIG_MODE_BITPOS)
1219 
1220 /**
1221  ******************************************************************************
1222  * @ingroup icp_qat_hw_defs
1223  *
1224  * @description
1225  *      Build the configuration byte for the TRNG KAT based on the mode
1226  *
1227  * @param mode   Configuration mode parameter
1228  *
1229  *****************************************************************************/
1230 #define ICP_QAT_HW_TRNG_KAT_MODE_BUILD(mode)                                   \
1231 	((((mode)&QAT_TRNG_KAT_MODE_MASK) << QAT_TRNG_KAT_MODE_BITPOS))
1232 
1233 /**
1234  *****************************************************************************
1235  * @ingroup icp_qat_hw_defs
1236  *      TRNG test status structure.
1237  *
1238  * @description
1239  *      Definition of the format of the TRNG slice test status structure. Used
1240  *      internally by the QAT FW.
1241  *
1242  *****************************************************************************/
1243 
1244 typedef struct icp_qat_hw_trng_test_status_s {
1245 
1246 	uint32_t status;
1247 	/**< Status used for setting up the TRNG slice */
1248 
1249 	uint32_t fail_count;
1250 	/**< Comparator fail count */
1251 } icp_qat_hw_trng_test_status_t;
1252 
1253 #define ICP_QAT_HW_TRNG_TEST_NO_FAILURES 1
1254 /**< @ingroup icp_qat_hw_defs
1255  * Flag to indicate that there were no Test Failures */
1256 
1257 #define ICP_QAT_HW_TRNG_TEST_FAILURES_FOUND 0
1258 /**< @ingroup icp_qat_hw_defs
1259  * Flag to indicate that there were Test Failures */
1260 
1261 #define ICP_QAT_HW_TRNG_TEST_STATUS_VALID 1
1262 /**< @ingroup icp_qat_hw_defs
1263  * Flag to indicate that there is no valid Test output */
1264 
1265 #define ICP_QAT_HW_TRNG_TEST_STATUS_INVALID 0
1266 /**< @ingroup icp_qat_hw_defs
1267  * Flag to indicate that the Test output is still invalid */
1268 
1269 /* Private defines */
1270 #define QAT_TRNG_TEST_FAILURE_FLAG_MASK 0x1
1271 /**< @ingroup icp_qat_hw_defs
1272  * Mask of one bit used to determine the TRNG Test pass/fail */
1273 
1274 #define QAT_TRNG_TEST_FAILURE_FLAG_BITPOS 4
1275 /**< @ingroup icp_qat_hw_defs
1276  * Flag position to indicate that the TRNG Test status is pass of fail */
1277 
1278 #define QAT_TRNG_TEST_STATUS_MASK 0x1
1279 /**< @ingroup icp_qat_hw_defs
1280  * Mask of one bit used to determine the TRNG Test staus */
1281 
1282 #define QAT_TRNG_TEST_STATUS_BITPOS 1
1283 /**< @ingroup icp_qat_hw_defs
1284  * Flag position to indicate the TRNG Test status */
1285 
1286 /**
1287  ******************************************************************************
1288  * @ingroup icp_qat_hw_defs
1289  *
1290  * @description
1291  *      Extract the fail bit for the TRNG slice
1292  *
1293  * @param status   TRNG status value
1294  *
1295  *****************************************************************************/
1296 
1297 #define ICP_QAT_HW_TRNG_FAIL_FLAG_GET(status)                                  \
1298 	(((status) >> QAT_TRNG_TEST_FAILURE_FLAG_BITPOS) &                     \
1299 	 QAT_TRNG_TEST_FAILURE_FLAG_MASK)
1300 
1301 /**
1302  ******************************************************************************
1303  * @ingroup icp_qat_hw_defs
1304  *
1305  * @description
1306  *      Extract the status valid bit for the TRNG slice
1307  *
1308  * @param status   TRNG status value
1309  *
1310  *****************************************************************************/
1311 #define ICP_QAT_HW_TRNG_STATUS_VALID_GET(status)                               \
1312 	(((status) >> QAT_TRNG_TEST_STATUS_BITPOS) & QAT_TRNG_TEST_STATUS_MASK)
1313 
1314 /**
1315  *****************************************************************************
1316  * @ingroup icp_qat_hw_defs
1317  *      TRNG entropy counters
1318  *
1319  * @description
1320  *      Definition of the format of the TRNG entropy counters. Used internally
1321  *      by the QAT FW.
1322  *
1323  *****************************************************************************/
1324 
1325 typedef struct icp_qat_hw_trng_entropy_counts_s {
1326 	uint64_t raw_ones_count;
1327 	/**< Count of raw ones of entropy */
1328 
1329 	uint64_t raw_zeros_count;
1330 	/**< Count of raw zeros of entropy */
1331 
1332 	uint64_t cond_ones_count;
1333 	/**< Count of conditioned ones entropy */
1334 
1335 	uint64_t cond_zeros_count;
1336 	/**< Count of conditioned zeros entropy */
1337 } icp_qat_hw_trng_entropy_counts_t;
1338 
1339 /* Private defines */
1340 #define QAT_HW_TRNG_ENTROPY_STS_RSVD_SZ 4
1341 /**< @ingroup icp_qat_hw_defs
1342  * TRNG entropy status reserved size in bytes */
1343 
1344 /**
1345  *****************************************************************************
1346  * @ingroup icp_qat_hw_defs
1347  *      TRNG entropy available status.
1348  *
1349  * @description
1350  *      Definition of the format of the TRNG slice entropy status available.
1351  *      struct. Used internally by the QAT FW.
1352  *
1353  *****************************************************************************/
1354 typedef struct icp_qat_hw_trng_entropy_status_s {
1355 	uint32_t status;
1356 	/**< Entropy status in the TRNG */
1357 
1358 	uint8_t reserved[QAT_HW_TRNG_ENTROPY_STS_RSVD_SZ];
1359 	/**< Reserved */
1360 } icp_qat_hw_trng_entropy_status_t;
1361 
1362 #define ICP_QAT_HW_TRNG_ENTROPY_AVAIL 1
1363 /**< @ingroup icp_qat_hw_defs
1364  * Flag indicating that entropy data is available in the QAT TRNG slice */
1365 
1366 #define ICP_QAT_HW_TRNG_ENTROPY_NOT_AVAIL 0
1367 /**< @ingroup icp_qat_hw_defs
1368  * Flag indicating that no entropy data is available in the QAT TRNG slice */
1369 
1370 /* Private defines */
1371 #define QAT_TRNG_ENTROPY_STATUS_MASK 1
1372 /**< @ingroup icp_qat_hw_defs
1373  * Mask of one bit used to determine the TRNG Entropy status */
1374 
1375 #define QAT_TRNG_ENTROPY_STATUS_BITPOS 0
1376 /**< @ingroup icp_qat_hw_defs
1377  * Starting bit position for TRNG Entropy status. */
1378 
1379 /**
1380  ******************************************************************************
1381  * @ingroup icp_qat_hw_defs
1382  *
1383  * @description
1384  *      Extract the entropy available status bit
1385  *
1386  * @param status   TRNG status value
1387  *
1388  *****************************************************************************/
1389 #define ICP_QAT_HW_TRNG_ENTROPY_STATUS_GET(status)                             \
1390 	(((status) >> QAT_TRNG_ENTROPY_STATUS_BITPOS) &                        \
1391 	 QAT_TRNG_ENTROPY_STATUS_MASK)
1392 
1393 /**
1394  *****************************************************************************
1395  * @ingroup icp_qat_hw_defs
1396  *      Entropy seed data
1397  *
1398  * @description
1399  *      This type is used for the definition of the entropy generated by a read
1400  *      of the TRNG slice
1401  *
1402  *****************************************************************************/
1403 typedef uint64_t icp_qat_hw_trng_entropy;
1404 
1405 /* ========================================================================= */
1406 /*                                            COMPRESSION SLICE */
1407 /* ========================================================================= */
1408 
1409 /**
1410  *****************************************************************************
1411  * @ingroup icp_qat_hw_defs
1412  *      Definition of the supported compression directions
1413  * @description
1414  *      Enumeration used to define the compression directions
1415  *
1416  *****************************************************************************/
1417 
1418 typedef enum {
1419 	ICP_QAT_HW_COMPRESSION_DIR_COMPRESS = 0,   /*!< Compression */
1420 	ICP_QAT_HW_COMPRESSION_DIR_DECOMPRESS = 1, /*!< Decompression */
1421 	ICP_QAT_HW_COMPRESSION_DIR_DELIMITER = 2   /**< Delimiter type */
1422 } icp_qat_hw_compression_direction_t;
1423 
1424 /**
1425  *****************************************************************************
1426  * @ingroup icp_qat_hw_defs
1427  *      Definition of the supported delayed match modes
1428  * @description
1429  *      Enumeration used to define whether delayed match is enabled
1430  *
1431  *****************************************************************************/
1432 
1433 typedef enum {
1434 	ICP_QAT_HW_COMPRESSION_DELAYED_MATCH_DISABLED = 0,
1435 	/*!< Delayed match disabled */
1436 
1437 	ICP_QAT_HW_COMPRESSION_DELAYED_MATCH_ENABLED = 1,
1438 	/*!< Delayed match enabled
1439 	     Note: This is the only valid mode - refer to CPM1.6 SAS */
1440 
1441 	ICP_QAT_HW_COMPRESSION_DELAYED_MATCH_DELIMITER = 2
1442 	/**< Delimiter type */
1443 
1444 } icp_qat_hw_compression_delayed_match_t;
1445 
1446 /**
1447  *****************************************************************************
1448  * @ingroup icp_qat_hw_defs
1449  *      Definition of the supported compression algorithms
1450  * @description
1451  *      Enumeration used to define the compression algorithms
1452  *
1453  *****************************************************************************/
1454 
1455 typedef enum {
1456 	ICP_QAT_HW_COMPRESSION_ALGO_DEFLATE = 0,  /*!< Deflate compression */
1457 	ICP_QAT_HW_COMPRESSION_DEPRECATED = 1,	  /*!< Deprecated */
1458 	ICP_QAT_HW_COMPRESSION_ALGO_DELIMITER = 2 /**< Delimiter type */
1459 } icp_qat_hw_compression_algo_t;
1460 
1461 /**
1462  *****************************************************************************
1463  * @ingroup icp_qat_hw_defs
1464  *      Definition of the supported compression depths
1465  * @description
1466  *      Enumeration used to define the compression slice depths.
1467  *
1468  *****************************************************************************/
1469 
1470 typedef enum {
1471 	ICP_QAT_HW_COMPRESSION_DEPTH_1 = 0,
1472 	/*!< Search depth 1 (Fastest least exhaustive) */
1473 
1474 	ICP_QAT_HW_COMPRESSION_DEPTH_4 = 1,
1475 	/*!< Search depth 4 */
1476 
1477 	ICP_QAT_HW_COMPRESSION_DEPTH_8 = 2,
1478 	/*!< Search depth 8 */
1479 
1480 	ICP_QAT_HW_COMPRESSION_DEPTH_16 = 3,
1481 	/*!< Search depth 16 */
1482 
1483 	ICP_QAT_HW_COMPRESSION_DEPTH_128 = 4,
1484 	/*!< Search depth 128 (Slowest, most exhaustive) */
1485 
1486 	ICP_QAT_HW_COMPRESSION_DEPTH_DELIMITER = 5
1487 	/**< Delimiter type */
1488 
1489 } icp_qat_hw_compression_depth_t;
1490 
1491 /**
1492  *****************************************************************************
1493  * @ingroup icp_qat_hw_defs
1494  *      Definition of the supported file types
1495  * @description
1496  *      Enumeration used to define the compression file types.
1497  *
1498  *****************************************************************************/
1499 
1500 typedef enum {
1501 	ICP_QAT_HW_COMPRESSION_FILE_TYPE_0 = 0,
1502 	/*!< Use Static Trees */
1503 
1504 	ICP_QAT_HW_COMPRESSION_FILE_TYPE_1 = 1,
1505 	/*!< Use Semi-Dynamic Trees at offset 0 */
1506 
1507 	ICP_QAT_HW_COMPRESSION_FILE_TYPE_2 = 2,
1508 	/*!< Use Semi-Dynamic Trees at offset 320 */
1509 
1510 	ICP_QAT_HW_COMPRESSION_FILE_TYPE_3 = 3,
1511 	/*!< Use Semi-Dynamic Trees at offset 640 */
1512 
1513 	ICP_QAT_HW_COMPRESSION_FILE_TYPE_4 = 4,
1514 	/*!< Use Semi-Dynamic Trees at offset 960 */
1515 
1516 	ICP_QAT_HW_COMPRESSION_FILE_TYPE_DELIMITER = 5
1517 	/**< Delimiter type */
1518 
1519 } icp_qat_hw_compression_file_type_t;
1520 
1521 typedef enum {
1522 	BNP_SKIP_MODE_DISABLED = 0,
1523 	BNP_SKIP_MODE_AT_START = 1,
1524 	BNP_SKIP_MODE_AT_END = 2,
1525 	BNP_SKIP_MODE_STRIDE = 3
1526 } icp_qat_bnp_skip_mode_t;
1527 
1528 /**
1529  *****************************************************************************
1530  * @ingroup icp_qat_hw_defs
1531  *      Compression Configuration Struct
1532  *
1533  * @description
1534  *      Configuration data used for setting up the QAT Compression Slice
1535  *
1536  *****************************************************************************/
1537 
1538 typedef struct icp_qat_hw_compression_config_s {
1539 	uint32_t lower_val;
1540 	/**< Compression slice configuration lower LW */
1541 
1542 	uint32_t upper_val;
1543 	/**< Compression slice configuration upper LW */
1544 } icp_qat_hw_compression_config_t;
1545 
1546 /* Private defines */
1547 #define QAT_COMPRESSION_DIR_BITPOS 4
1548 /**< @ingroup icp_qat_hw_defs
1549  * Define for the compression direction bit position */
1550 
1551 #define QAT_COMPRESSION_DIR_MASK 0x7
1552 /**< @ingroup icp_qat_hw_defs
1553  * Define for the compression direction mask (three bits) */
1554 
1555 #define QAT_COMPRESSION_DELAYED_MATCH_BITPOS 16
1556 /**< @ingroup icp_qat_hw_defs
1557  * Define for the compression delayed match bit position */
1558 
1559 #define QAT_COMPRESSION_DELAYED_MATCH_MASK 0x1
1560 /**< @ingroup icp_qat_hw_defs
1561  * Define for the delayed match mask (one bit) */
1562 
1563 #define QAT_COMPRESSION_ALGO_BITPOS 31
1564 /**< @ingroup icp_qat_hw_defs
1565  * Define for the compression algorithm bit position */
1566 
1567 #define QAT_COMPRESSION_ALGO_MASK 0x1
1568 /**< @ingroup icp_qat_hw_defs
1569  * Define for the compression algorithm mask (one bit) */
1570 
1571 #define QAT_COMPRESSION_DEPTH_BITPOS 28
1572 /**< @ingroup icp_qat_hw_defs
1573  * Define for the compression depth bit position */
1574 
1575 #define QAT_COMPRESSION_DEPTH_MASK 0x7
1576 /**< @ingroup icp_qat_hw_defs
1577  * Define for the compression depth mask (three bits) */
1578 
1579 #define QAT_COMPRESSION_FILE_TYPE_BITPOS 24
1580 /**< @ingroup icp_qat_hw_defs
1581  * Define for the compression file type bit position */
1582 
1583 #define QAT_COMPRESSION_FILE_TYPE_MASK 0xF
1584 /**< @ingroup icp_qat_hw_defs
1585  * Define for the compression file type mask (four bits) */
1586 
1587 /**
1588  ******************************************************************************
1589  * @ingroup icp_qat_hw_defs
1590  *
1591  * @description
1592  *      Build the compression slice configuration field
1593  *
1594  * @param dir      Compression Direction to use, compress or decompress
1595  * @param delayed  Specify if delayed match should be enabled
1596  * @param algo     Compression algorithm to use
1597  * @param depth    Compression search depth to use
1598  * @param filetype Compression file type to use, static or semi dynamic trees
1599  *
1600  *****************************************************************************/
1601 #define ICP_QAT_HW_COMPRESSION_CONFIG_BUILD(                                   \
1602     dir, delayed, algo, depth, filetype)                                       \
1603 	((((dir)&QAT_COMPRESSION_DIR_MASK) << QAT_COMPRESSION_DIR_BITPOS) |    \
1604 	 (((delayed)&QAT_COMPRESSION_DELAYED_MATCH_MASK)                       \
1605 	  << QAT_COMPRESSION_DELAYED_MATCH_BITPOS) |                           \
1606 	 (((algo)&QAT_COMPRESSION_ALGO_MASK) << QAT_COMPRESSION_ALGO_BITPOS) | \
1607 	 (((depth)&QAT_COMPRESSION_DEPTH_MASK)                                 \
1608 	  << QAT_COMPRESSION_DEPTH_BITPOS) |                                   \
1609 	 (((filetype)&QAT_COMPRESSION_FILE_TYPE_MASK)                          \
1610 	  << QAT_COMPRESSION_FILE_TYPE_BITPOS))
1611 
1612 /* ========================================================================= */
1613 /*                                            TRANSLATOR SLICE */
1614 /* ========================================================================= */
1615 
1616 /**< Translator slice configuration is set internally by the firmware */
1617 
1618 #endif /* _ICP_QAT_HW_H_ */
1619