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_ */ 1620