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