The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/qat/qat_api/firmware/include/icp_qat_fw_la.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* SPDX-License-Identifier: BSD-3-Clause */
    2 /* Copyright(c) 2007-2022 Intel Corporation */
    3 /* $FreeBSD$ */
    4 /**
    5  *****************************************************************************
    6  * @file icp_qat_fw_la.h
    7  * @defgroup icp_qat_fw_la ICP QAT FW Lookaside Service Interface Definitions
    8  * @ingroup icp_qat_fw
    9  * @description
   10  *      This file documents structs used to provided the interface to the
   11  *      LookAside (LA) QAT FW service
   12  *
   13  *****************************************************************************/
   14 
   15 #ifndef _ICP_QAT_FW_LA_H_
   16 #define _ICP_QAT_FW_LA_H_
   17 
   18 /*
   19 ******************************************************************************
   20 * Include local header files
   21 ******************************************************************************
   22 */
   23 #include "icp_qat_fw.h"
   24 
   25 /* ========================================================================= */
   26 /*                           QAT FW REQUEST STRUCTURES                       */
   27 /* ========================================================================= */
   28 
   29 /**
   30  *****************************************************************************
   31  * @ingroup icp_qat_fw_la
   32  *        Definition of the LookAside (LA) command types
   33  * @description
   34  *        Enumeration which is used to indicate the ids of functions
   35  *        that are exposed by the LA QAT FW service
   36  *
   37  *****************************************************************************/
   38 
   39 typedef enum {
   40         ICP_QAT_FW_LA_CMD_CIPHER = 0,
   41         /*!< Cipher Request */
   42 
   43         ICP_QAT_FW_LA_CMD_AUTH = 1,
   44         /*!< Auth Request */
   45 
   46         ICP_QAT_FW_LA_CMD_CIPHER_HASH = 2,
   47         /*!< Cipher-Hash Request */
   48 
   49         ICP_QAT_FW_LA_CMD_HASH_CIPHER = 3,
   50         /*!< Hash-Cipher Request */
   51 
   52         ICP_QAT_FW_LA_CMD_TRNG_GET_RANDOM = 4,
   53         /*!< TRNG Get Random Request */
   54 
   55         ICP_QAT_FW_LA_CMD_TRNG_TEST = 5,
   56         /*!< TRNG Test Request */
   57 
   58         ICP_QAT_FW_LA_CMD_SSL3_KEY_DERIVE = 6,
   59         /*!< SSL3 Key Derivation Request */
   60 
   61         ICP_QAT_FW_LA_CMD_TLS_V1_1_KEY_DERIVE = 7,
   62         /*!< TLS Key Derivation Request */
   63 
   64         ICP_QAT_FW_LA_CMD_TLS_V1_2_KEY_DERIVE = 8,
   65         /*!< TLS Key Derivation Request */
   66 
   67         ICP_QAT_FW_LA_CMD_MGF1 = 9,
   68         /*!< MGF1 Request */
   69 
   70         ICP_QAT_FW_LA_CMD_AUTH_PRE_COMP = 10,
   71         /*!< Auth Pre-Compute Request */
   72 
   73         ICP_QAT_FW_LA_CMD_CIPHER_PRE_COMP = 11,
   74         /*!< Auth Pre-Compute Request */
   75 
   76         ICP_QAT_FW_LA_CMD_HKDF_EXTRACT = 12,
   77         /*!< HKDF Extract Request */
   78 
   79         ICP_QAT_FW_LA_CMD_HKDF_EXPAND = 13,
   80         /*!< HKDF Expand Request */
   81 
   82         ICP_QAT_FW_LA_CMD_HKDF_EXTRACT_AND_EXPAND = 14,
   83         /*!< HKDF Extract and Expand Request */
   84 
   85         ICP_QAT_FW_LA_CMD_HKDF_EXPAND_LABEL = 15,
   86         /*!< HKDF Expand Label Request */
   87 
   88         ICP_QAT_FW_LA_CMD_HKDF_EXTRACT_AND_EXPAND_LABEL = 16,
   89         /*!< HKDF Extract and Expand Label Request */
   90 
   91         ICP_QAT_FW_LA_CMD_DELIMITER = 17
   92         /**< Delimiter type */
   93 } icp_qat_fw_la_cmd_id_t;
   94 
   95 typedef struct icp_qat_fw_la_cipher_20_req_params_s {
   96         /**< LW 14 */
   97         uint32_t cipher_offset;
   98         /**< Cipher offset long word. */
   99 
  100         /**< LW 15 */
  101         uint32_t cipher_length;
  102         /**< Cipher length long word. */
  103 
  104         /**< LWs 16-19 */
  105         union {
  106                 uint32_t cipher_IV_array[ICP_QAT_FW_NUM_LONGWORDS_4];
  107                 /**< Cipher IV array  */
  108 
  109                 struct {
  110                         uint64_t cipher_IV_ptr;
  111                         /**< Cipher IV pointer or Partial State Pointer */
  112 
  113                         uint64_t resrvd1;
  114                         /**< reserved */
  115 
  116                 } s;
  117 
  118         } u;
  119         /**< LW 20 */
  120         uint32_t spc_aad_offset;
  121         /**< LW 21 */
  122         uint32_t spc_aad_sz;
  123         /**< LW 22 - 23 */
  124         uint64_t spc_aad_addr;
  125         /**< LW 24 - 25 */
  126         uint64_t spc_auth_res_addr;
  127         /**< LW 26 */
  128         uint8_t reserved[3];
  129         uint8_t spc_auth_res_sz;
  130 
  131 } icp_qat_fw_la_cipher_20_req_params_t;
  132 
  133 /*  For the definitions of the bits in the status field of the common
  134  *  response, refer to icp_qat_fw.h.
  135  *  The return values specific to Lookaside service are given below.
  136  */
  137 #define ICP_QAT_FW_LA_ICV_VER_STATUS_PASS ICP_QAT_FW_COMN_STATUS_FLAG_OK
  138 /**< @ingroup icp_qat_fw_la
  139  * Status flag indicating that the ICV verification passed */
  140 
  141 #define ICP_QAT_FW_LA_ICV_VER_STATUS_FAIL ICP_QAT_FW_COMN_STATUS_FLAG_ERROR
  142 /**< @ingroup icp_qat_fw_la
  143  * Status flag indicating that the ICV verification failed */
  144 
  145 #define ICP_QAT_FW_LA_TRNG_STATUS_PASS ICP_QAT_FW_COMN_STATUS_FLAG_OK
  146 /**< @ingroup icp_qat_fw_la
  147  * Status flag indicating that the TRNG returned valid entropy data */
  148 
  149 #define ICP_QAT_FW_LA_TRNG_STATUS_FAIL ICP_QAT_FW_COMN_STATUS_FLAG_ERROR
  150 /**< @ingroup icp_qat_fw_la
  151  * Status flag indicating that the TRNG Command Failed. */
  152 
  153 /**
  154  *****************************************************************************
  155  * @ingroup icp_qat_fw_la
  156  *        Definition of the common LA QAT FW bulk request
  157  * @description
  158  *        Definition of the full bulk processing request structure.
  159  *        Used for hash, cipher, hash-cipher and authentication-encryption
  160  *        requests etc.
  161  *
  162  *****************************************************************************/
  163 typedef struct icp_qat_fw_la_bulk_req_s {
  164         /**< LWs 0-1 */
  165         icp_qat_fw_comn_req_hdr_t comn_hdr;
  166         /**< Common request header - for Service Command Id,
  167          * use service-specific Crypto Command Id.
  168          * Service Specific Flags - use Symmetric Crypto Command Flags
  169          * (all of cipher, auth, SSL3, TLS and MGF,
  170          * excluding TRNG - field unused) */
  171 
  172         /**< LWs 2-5 */
  173         icp_qat_fw_comn_req_hdr_cd_pars_t cd_pars;
  174         /**< Common Request content descriptor field which points either to a
  175          * content descriptor
  176          * parameter block or contains the service-specific data itself. */
  177 
  178         /**< LWs 6-13 */
  179         icp_qat_fw_comn_req_mid_t comn_mid;
  180         /**< Common request middle section */
  181 
  182         /**< LWs 14-26 */
  183         icp_qat_fw_comn_req_rqpars_t serv_specif_rqpars;
  184         /**< Common request service-specific parameter field */
  185 
  186         /**< LWs 27-31 */
  187         icp_qat_fw_comn_req_cd_ctrl_t cd_ctrl;
  188         /**< Common request content descriptor control block -
  189          * this field is service-specific */
  190 
  191 } icp_qat_fw_la_bulk_req_t;
  192 
  193 /*
  194  *  LA BULK (SYMMETRIC CRYPTO) COMMAND FLAGS
  195  *
  196  *  + ===== + ---------- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- +
  197  *  |  Bit  |   [15:13]  |  12   |  11   |  10   |  7-9  |   6   |   5   |   4   |  3    |   2   |  1-0  |
  198  *  + ===== + ---------- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ------+ ----- +
  199  *  | Flags | Resvd Bits | ZUC   | GcmIV |Digest | Prot  | Cmp   | Rtn   | Upd   | Ciph/ | CiphIV| Part- |
  200  *  |       |     =0     | Prot  | Len   | In Buf| flgs  | Auth  | Auth  | State | Auth  | Field |  ial  |
  201  *  + ===== + ---------- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ----- + ------+ ----- +
  202  */
  203 
  204 /* Private defines */
  205 
  206 /* bits 15:14  */
  207 #define ICP_QAT_FW_LA_USE_WIRELESS_SLICE_TYPE 2
  208 /**< @ingroup icp_qat_fw_la
  209  * FW Selects Wireless Cipher Slice
  210  *   Cipher Algorithms: AES-{F8}, Snow3G, ZUC
  211  *   Auth Algorithms  : Snow3G, ZUC */
  212 
  213 #define ICP_QAT_FW_LA_USE_UCS_SLICE_TYPE 1
  214 /**< @ingroup icp_qat_fw_la
  215  * FW Selects UCS Cipher Slice
  216  *   Cipher Algorithms: AES-{CTR/XTS}, Single Pass AES-GCM
  217  *   Auth Algorithms  : SHA1/ SHA{2/3}-{224/256/384/512} */
  218 
  219 #define ICP_QAT_FW_LA_USE_LEGACY_SLICE_TYPE 0
  220 /**< @ingroup icp_qat_fw_la
  221  * FW Selects Legacy Cipher/Auth Slice
  222  *   Cipher Algorithms: AES-{CBC/ECB}, SM4, Single Pass AES-CCM
  223  *   Auth Algorithms  : SHA1/ SHA{2/3}-{224/256/384/512} */
  224 
  225 #define QAT_LA_SLICE_TYPE_BITPOS 14
  226 /**< @ingroup icp_qat_fw_la
  227  * Starting bit position for the slice type selection.
  228  * Refer to HAS for Slice type assignment details on QAT2.0 */
  229 
  230 #define QAT_LA_SLICE_TYPE_MASK 0x3
  231 /**< @ingroup icp_qat_fw_la
  232  * Two bit mask used to determine the Slice type  */
  233 
  234 /* bit 11 */
  235 #define ICP_QAT_FW_LA_GCM_IV_LEN_12_OCTETS 1
  236 /**< @ingroup icp_qat_fw_la
  237  * Indicates the IV Length for GCM protocol is 96 Bits (12 Octets)
  238  * If set FW does the padding to compute CTR0 */
  239 
  240 #define ICP_QAT_FW_LA_GCM_IV_LEN_NOT_12_OCTETS 0
  241 /**< @ingroup icp_qat_fw_la
  242  * Indicates the IV Length for GCM protocol is not 96 Bits (12 Octets)
  243  * If IA computes CTR0 */
  244 
  245 #define QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS 12
  246 /**< @ingroup icp_cpm_fw_la
  247  * Bit position defining ZUC processing for a encrypt command */
  248 
  249 #define ICP_QAT_FW_LA_ZUC_3G_PROTO 1
  250 /**< @ingroup icp_cpm_fw_la
  251  * Value indicating ZUC processing for a encrypt command */
  252 
  253 #define QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK 0x1
  254 /**< @ingroup icp_qat_fw_la
  255  * One bit mask used to determine the ZUC 3G protocol bit.
  256  * Must be set for Cipher-only, Cipher + Auth and Auth-only  */
  257 
  258 #define QAT_FW_LA_SINGLE_PASS_PROTO_FLAG_BITPOS 13
  259 /**< @ingroup icp_cpm_fw_la
  260  * Bit position defining SINGLE PASS processing for a encrypt command */
  261 
  262 #define ICP_QAT_FW_LA_SINGLE_PASS_PROTO 1
  263 /**< @ingroup icp_cpm_fw_la
  264  * Value indicating SINGLE PASS processing for a encrypt command */
  265 
  266 #define QAT_FW_LA_SINGLE_PASS_PROTO_FLAG_MASK 0x1
  267 /**< @ingroup icp_qat_fw_la
  268  * One bit mask used to determine the SINGLE PASS protocol bit.
  269  * Must be set for Cipher-only */
  270 
  271 #define QAT_LA_GCM_IV_LEN_FLAG_BITPOS 11
  272 /**< @ingroup icp_qat_fw_la
  273  * Starting bit position for GCM IV Length indication. If set
  274  * the IV Length is 96 Bits, clear for other IV lengths  */
  275 
  276 #define QAT_LA_GCM_IV_LEN_FLAG_MASK 0x1
  277 /**< @ingroup icp_qat_fw_la
  278  * One bit mask used to determine the GCM IV Length indication bit.
  279  * If set the IV Length is 96 Bits, clear for other IV lengths  */
  280 
  281 /* bit 10 */
  282 #define ICP_QAT_FW_LA_DIGEST_IN_BUFFER 1
  283 /**< @ingroup icp_qat_fw_la
  284  * Flag representing that authentication digest is stored or is extracted
  285  * from the source buffer. Auth Result Pointer will be ignored in this case. */
  286 
  287 #define ICP_QAT_FW_LA_NO_DIGEST_IN_BUFFER 0
  288 /**< @ingroup icp_qat_fw_la
  289  * Flag representing that authentication digest is NOT stored or is NOT
  290  * extracted from the source buffer. Auth result will get stored or extracted
  291  * from the Auth Result Pointer. Please not that in this case digest CANNOT be
  292  * encrypted. */
  293 
  294 #define QAT_LA_DIGEST_IN_BUFFER_BITPOS 10
  295 /**< @ingroup icp_qat_fw_la
  296  * Starting bit position for Digest in Buffer flag */
  297 
  298 #define QAT_LA_DIGEST_IN_BUFFER_MASK 0x1
  299 /**< @ingroup icp_qat_fw_la
  300  * One bit mask used to determine the Digest in Buffer flag */
  301 
  302 /* bits 7-9 */
  303 #define ICP_QAT_FW_LA_SNOW_3G_PROTO 4
  304 /**< @ingroup icp_cpm_fw_la
  305  * Indicates SNOW_3G processing for a encrypt command */
  306 
  307 #define ICP_QAT_FW_LA_GCM_PROTO 2
  308 /**< @ingroup icp_qat_fw_la
  309  * Indicates GCM processing for a auth_encrypt command */
  310 
  311 #define ICP_QAT_FW_LA_CCM_PROTO 1
  312 /**< @ingroup icp_qat_fw_la
  313  * Indicates CCM processing for a auth_encrypt command */
  314 
  315 #define ICP_QAT_FW_LA_NO_PROTO 0
  316 /**< @ingroup icp_qat_fw_la
  317  * Indicates no specific protocol processing for the command */
  318 
  319 #define QAT_LA_PROTO_BITPOS 7
  320 /**< @ingroup icp_qat_fw_la
  321  * Starting bit position for the Lookaside Protocols */
  322 
  323 #define QAT_LA_PROTO_MASK 0x7
  324 /**< @ingroup icp_qat_fw_la
  325  * Three bit mask used to determine the Lookaside Protocol  */
  326 
  327 /* bit 6 */
  328 #define ICP_QAT_FW_LA_CMP_AUTH_RES 1
  329 /**< @ingroup icp_qat_fw_la
  330  * Flag representing the need to compare the auth result data to the expected
  331  * value in DRAM at the auth_address. */
  332 
  333 #define ICP_QAT_FW_LA_NO_CMP_AUTH_RES 0
  334 /**< @ingroup icp_qat_fw_la
  335  * Flag representing that there is no need to do a compare of the auth data
  336  * to the expected value */
  337 
  338 #define QAT_LA_CMP_AUTH_RES_BITPOS 6
  339 /**< @ingroup icp_qat_fw_la
  340  * Starting bit position for Auth compare digest result */
  341 
  342 #define QAT_LA_CMP_AUTH_RES_MASK 0x1
  343 /**< @ingroup icp_qat_fw_la
  344  * One bit mask used to determine the Auth compare digest result */
  345 
  346 /* bit 5 */
  347 #define ICP_QAT_FW_LA_RET_AUTH_RES 1
  348 /**< @ingroup icp_qat_fw_la
  349  * Flag representing the need to return the auth result data to dram after the
  350  * request processing is complete */
  351 
  352 #define ICP_QAT_FW_LA_NO_RET_AUTH_RES 0
  353 /**< @ingroup icp_qat_fw_la
  354  * Flag representing that there is no need to return the auth result data */
  355 
  356 #define QAT_LA_RET_AUTH_RES_BITPOS 5
  357 /**< @ingroup icp_qat_fw_la
  358  * Starting bit position for Auth return digest result */
  359 
  360 #define QAT_LA_RET_AUTH_RES_MASK 0x1
  361 /**< @ingroup icp_qat_fw_la
  362  * One bit mask used to determine the Auth return digest result */
  363 
  364 /* bit 4 */
  365 #define ICP_QAT_FW_LA_UPDATE_STATE 1
  366 /**< @ingroup icp_qat_fw_la
  367  * Flag representing the need to update the state data in dram after the
  368  * request processing is complete */
  369 
  370 #define ICP_QAT_FW_LA_NO_UPDATE_STATE 0
  371 /**< @ingroup icp_qat_fw_la
  372  * Flag representing that there is no need to update the state data */
  373 
  374 #define QAT_LA_UPDATE_STATE_BITPOS 4
  375 /**< @ingroup icp_qat_fw_la
  376  * Starting bit position for Update State. */
  377 
  378 #define QAT_LA_UPDATE_STATE_MASK 0x1
  379 /**< @ingroup icp_qat_fw_la
  380  * One bit mask used to determine the Update State */
  381 
  382 /* bit 3 */
  383 #define ICP_QAT_FW_CIPH_AUTH_CFG_OFFSET_IN_CD_SETUP 0
  384 /**< @ingroup icp_qat_fw_la
  385  * Flag representing Cipher/Auth Config Offset Type, where the offset
  386  * is contained in CD Setup. When the SHRAM constants page
  387  * is not used for cipher/auth configuration, then the Content Descriptor
  388  * pointer field must be a pointer (as opposed to a 16-byte key), since
  389  * the block pointed to must contain both the slice config and the key */
  390 
  391 #define ICP_QAT_FW_CIPH_AUTH_CFG_OFFSET_IN_SHRAM_CP 1
  392 /**< @ingroup icp_qat_fw_la
  393  * Flag representing Cipher/Auth Config Offset Type, where the offset
  394  * is contained in SHRAM constants page. */
  395 
  396 #define QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS 3
  397 /**< @ingroup icp_qat_fw_la
  398  * Starting bit position indicating Cipher/Auth Config
  399  * offset type */
  400 
  401 #define QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK 0x1
  402 /**< @ingroup icp_qat_fw_la
  403  * One bit mask used to determine Cipher/Auth Config
  404  * offset type */
  405 
  406 /* bit 2 */
  407 #define ICP_QAT_FW_CIPH_IV_64BIT_PTR 0
  408 /**< @ingroup icp_qat_fw_la
  409  * Flag representing Cipher IV field contents via 64-bit pointer */
  410 
  411 #define ICP_QAT_FW_CIPH_IV_16BYTE_DATA 1
  412 /**< @ingroup icp_qat_fw_la
  413  * Flag representing Cipher IV field contents as 16-byte data array */
  414 
  415 #define QAT_LA_CIPH_IV_FLD_BITPOS 2
  416 /**< @ingroup icp_qat_fw_la
  417  * Starting bit position indicating Cipher IV field
  418  * contents */
  419 
  420 #define QAT_LA_CIPH_IV_FLD_MASK 0x1
  421 /**< @ingroup icp_qat_fw_la
  422  * One bit mask used to determine the Cipher IV field
  423  * contents */
  424 
  425 /* bits 0-1 */
  426 #define ICP_QAT_FW_LA_PARTIAL_NONE 0
  427 /**< @ingroup icp_qat_fw_la
  428  * Flag representing no need for partial processing condition i.e.
  429  * entire packet processed in the current command */
  430 
  431 #define ICP_QAT_FW_LA_PARTIAL_START 1
  432 /**< @ingroup icp_qat_fw_la
  433  * Flag representing the first chunk of the partial packet */
  434 
  435 #define ICP_QAT_FW_LA_PARTIAL_MID 3
  436 /**< @ingroup icp_qat_fw_la
  437  * Flag representing a middle chunk of the partial packet */
  438 
  439 #define ICP_QAT_FW_LA_PARTIAL_END 2
  440 /**< @ingroup icp_qat_fw_la
  441  * Flag representing the final/end chunk of the partial packet */
  442 
  443 #define QAT_LA_PARTIAL_BITPOS 0
  444 /**< @ingroup icp_qat_fw_la
  445  * Starting bit position indicating partial state */
  446 
  447 #define QAT_LA_PARTIAL_MASK 0x3
  448 /**< @ingroup icp_qat_fw_la
  449  * Two bit mask used to determine the partial state */
  450 
  451 /* The table below defines the meaning of the prefix_addr & hash_state_sz in
  452  * the case of partial processing. See the HLD for further details
  453  *
  454  *  + ====== + ------------------------- + ----------------------- +
  455  *  | Parial |       Prefix Addr         |       Hash State Sz     |
  456  *  | State  |                           |                         |
  457  *  + ====== + ------------------------- + ----------------------- +
  458  *  |  FULL  | Points to the prefix data | Prefix size as below.   |
  459  *  |        |                           | No update of state      |
  460  *  + ====== + ------------------------- + ----------------------- +
  461  *  |  SOP   | Points to the prefix      | = inner prefix rounded  |
  462  *  |        | data. State is updated    | to qwrds + outer prefix |
  463  *  |        | at prefix_addr - state_sz | rounded to qwrds. The   |
  464  *  |        | - 8 (counter size)        | writeback state sz      |
  465  *  |        |                           | comes from the CD       |
  466  *  + ====== + ------------------------- + ----------------------- +
  467  *  |  MOP   | Points to the state data  | State size rounded to   |
  468  *  |        | Updated state written to  | num qwrds + 8 (for the  |
  469  *  |        | same location             | counter) + inner prefix |
  470  *  |        |                           | rounded to qwrds +      |
  471  *  |        |                           | outer prefix rounded to |
  472  *  |        |                           | qwrds.                  |
  473  *  + ====== + ------------------------- + ----------------------- +
  474  *  |  EOP   | Points to the state data  | State size rounded to   |
  475  *  |        |                           | num qwrds + 8 (for the  |
  476  *  |        |                           | counter) + inner prefix |
  477  *  |        |                           | rounded to qwrds +      |
  478  *  |        |                           | outer prefix rounded to |
  479  *  |        |                           | qwrds.                  |
  480  *  + ====== + ------------------------- + ----------------------- +
  481  *
  482  *  Notes:
  483  *
  484  *  - If the EOP is set it is assumed that no state update is to be performed.
  485  *    However it is the clients responsibility to set the update_state flag
  486  *    correctly i.e. not set for EOP or Full packet cases. Only set for SOP and
  487  *    MOP with no EOP flag
  488  *  - The SOP take precedence over the MOP and EOP i.e. in the calculation of
  489  *    the address to writeback the state.
  490  *  - The prefix address must be on at least the 8 byte boundary
  491  */
  492 
  493 /**
  494  ******************************************************************************
  495  * @ingroup icp_qat_fw_la
  496  *
  497  * @description
  498  * Macro used for the generation of the Lookaside flags for a request. This
  499  * should always be used for the generation of the flags field. No direct sets
  500  * or masks should be performed on the flags data
  501  *
  502  * @param gcm_iv_len       GCM IV Length indication bit
  503  * @param auth_rslt        Authentication result - Digest is stored/extracted
  504  *                         in/from the source buffer
  505  *                         straight after the authenticated region
  506  * @param proto            Protocol handled by a command
  507  * @param cmp_auth         Compare auth result with the expected value
  508  * @param ret_auth         Return auth result to the client via DRAM
  509  * @param update_state     Indicate update of the crypto state information
  510  *                         is required
  511  * @param ciphIV           Cipher IV field contents
  512  * @param ciphcfg          Cipher/Auth Config offset type
  513  * @param partial          Inidicate if the packet is a partial part
  514  *
  515  *****************************************************************************/
  516 #define ICP_QAT_FW_LA_FLAGS_BUILD(zuc_proto,                                   \
  517                                   gcm_iv_len,                                  \
  518                                   auth_rslt,                                   \
  519                                   proto,                                       \
  520                                   cmp_auth,                                    \
  521                                   ret_auth,                                    \
  522                                   update_state,                                \
  523                                   ciphIV,                                      \
  524                                   ciphcfg,                                     \
  525                                   partial)                                     \
  526         (((zuc_proto & QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK)                       \
  527           << QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS) |                             \
  528          ((gcm_iv_len & QAT_LA_GCM_IV_LEN_FLAG_MASK)                           \
  529           << QAT_LA_GCM_IV_LEN_FLAG_BITPOS) |                                  \
  530          ((auth_rslt & QAT_LA_DIGEST_IN_BUFFER_MASK)                           \
  531           << QAT_LA_DIGEST_IN_BUFFER_BITPOS) |                                 \
  532          ((proto & QAT_LA_PROTO_MASK) << QAT_LA_PROTO_BITPOS) |                \
  533          ((cmp_auth & QAT_LA_CMP_AUTH_RES_MASK)                                \
  534           << QAT_LA_CMP_AUTH_RES_BITPOS) |                                     \
  535          ((ret_auth & QAT_LA_RET_AUTH_RES_MASK)                                \
  536           << QAT_LA_RET_AUTH_RES_BITPOS) |                                     \
  537          ((update_state & QAT_LA_UPDATE_STATE_MASK)                            \
  538           << QAT_LA_UPDATE_STATE_BITPOS) |                                     \
  539          ((ciphIV & QAT_LA_CIPH_IV_FLD_MASK) << QAT_LA_CIPH_IV_FLD_BITPOS) |   \
  540          ((ciphcfg & QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK)                         \
  541           << QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS) |                             \
  542          ((partial & QAT_LA_PARTIAL_MASK) << QAT_LA_PARTIAL_BITPOS))
  543 
  544 /* Macros for extracting field bits */
  545 /**
  546  ******************************************************************************
  547  * @ingroup icp_qat_fw_la
  548  *
  549  * @description
  550  *        Macro for extraction of the Cipher IV field contents (bit 2)
  551  *
  552  * @param flags        Flags to extract the Cipher IV field contents
  553  *
  554  *****************************************************************************/
  555 #define ICP_QAT_FW_LA_CIPH_IV_FLD_FLAG_GET(flags)                              \
  556         QAT_FIELD_GET(flags, QAT_LA_CIPH_IV_FLD_BITPOS, QAT_LA_CIPH_IV_FLD_MASK)
  557 
  558 /**
  559  ******************************************************************************
  560  * @ingroup icp_qat_fw_la
  561  *
  562  * @description
  563  *        Macro for extraction of the Cipher/Auth Config
  564  *        offset type (bit 3)
  565  *
  566  * @param flags        Flags to extract the Cipher/Auth Config
  567  *                     offset type
  568  *
  569  *****************************************************************************/
  570 #define ICP_QAT_FW_LA_CIPH_AUTH_CFG_OFFSET_FLAG_GET(flags)                     \
  571         QAT_FIELD_GET(flags,                                                   \
  572                       QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS,                      \
  573                       QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK)
  574 
  575 /**
  576  ******************************************************************************
  577  * @ingroup icp_qat_fw_la
  578  *
  579  * @description
  580  *        Macro for extraction of the ZUC protocol bit
  581  *        information (bit 11)
  582  *
  583  * @param flags        Flags to extract the ZUC protocol bit
  584  *
  585  *****************************************************************************/
  586 #define ICP_QAT_FW_LA_ZUC_3G_PROTO_FLAG_GET(flags)                             \
  587         QAT_FIELD_GET(flags,                                                   \
  588                       QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS,                      \
  589                       QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK)
  590 
  591 /**
  592  ******************************************************************************
  593  * @ingroup icp_qat_fw_la
  594  *
  595  * @description
  596  *        Macro for extraction of the GCM IV Len is 12 Octets / 96 Bits
  597  *        information (bit 11)
  598  *
  599  * @param flags        Flags to extract the GCM IV length
  600  *
  601  *****************************************************************************/
  602 #define ICP_QAT_FW_LA_GCM_IV_LEN_FLAG_GET(flags)                               \
  603         QAT_FIELD_GET(flags,                                                   \
  604                       QAT_LA_GCM_IV_LEN_FLAG_BITPOS,                           \
  605                       QAT_LA_GCM_IV_LEN_FLAG_MASK)
  606 
  607 /**
  608  ******************************************************************************
  609  * @ingroup icp_qat_fw_la
  610  *
  611  * @description
  612  *        Macro for extraction of the LA protocol state (bits 9-7)
  613  *
  614  * @param flags        Flags to extract the protocol state
  615  *
  616  *****************************************************************************/
  617 #define ICP_QAT_FW_LA_PROTO_GET(flags)                                         \
  618         QAT_FIELD_GET(flags, QAT_LA_PROTO_BITPOS, QAT_LA_PROTO_MASK)
  619 
  620 /**
  621  ******************************************************************************
  622  * @ingroup icp_qat_fw_la
  623  *
  624  * @description
  625  *        Macro for extraction of the "compare auth" state (bit 6)
  626  *
  627  * @param flags        Flags to extract the compare auth result state
  628  *
  629  *****************************************************************************/
  630 #define ICP_QAT_FW_LA_CMP_AUTH_GET(flags)                                      \
  631         QAT_FIELD_GET(flags,                                                   \
  632                       QAT_LA_CMP_AUTH_RES_BITPOS,                              \
  633                       QAT_LA_CMP_AUTH_RES_MASK)
  634 
  635 /**
  636  ******************************************************************************
  637  * @ingroup icp_qat_fw_la
  638  *
  639  * @description
  640  *        Macro for extraction of the "return auth" state (bit 5)
  641  *
  642  * @param flags        Flags to extract the return auth result state
  643  *
  644  *****************************************************************************/
  645 #define ICP_QAT_FW_LA_RET_AUTH_GET(flags)                                      \
  646         QAT_FIELD_GET(flags,                                                   \
  647                       QAT_LA_RET_AUTH_RES_BITPOS,                              \
  648                       QAT_LA_RET_AUTH_RES_MASK)
  649 
  650 /**
  651  ******************************************************************************
  652  * @ingroup icp_qat_fw_la
  653  *
  654  * @description
  655  *      Macro for extraction of the "digest in buffer" state (bit 10)
  656  *
  657  * @param flags     Flags to extract the digest in buffer state
  658  *
  659  *****************************************************************************/
  660 #define ICP_QAT_FW_LA_DIGEST_IN_BUFFER_GET(flags)                              \
  661         QAT_FIELD_GET(flags,                                                   \
  662                       QAT_LA_DIGEST_IN_BUFFER_BITPOS,                          \
  663                       QAT_LA_DIGEST_IN_BUFFER_MASK)
  664 
  665 /**
  666  ******************************************************************************
  667  * @ingroup icp_qat_fw_la
  668  *
  669  * @description
  670  *        Macro for extraction of the update content state value. (bit 4)
  671  *
  672  * @param flags        Flags to extract the update content state bit
  673  *
  674  *****************************************************************************/
  675 #define ICP_QAT_FW_LA_UPDATE_STATE_GET(flags)                                  \
  676         QAT_FIELD_GET(flags,                                                   \
  677                       QAT_LA_UPDATE_STATE_BITPOS,                              \
  678                       QAT_LA_UPDATE_STATE_MASK)
  679 
  680 /**
  681  ******************************************************************************
  682  * @ingroup icp_qat_fw_la
  683  *
  684  * @description
  685  *        Macro for extraction of the "partial" packet state (bits 1-0)
  686  *
  687  * @param flags        Flags to extract the partial state
  688  *
  689  *****************************************************************************/
  690 #define ICP_QAT_FW_LA_PARTIAL_GET(flags)                                       \
  691         QAT_FIELD_GET(flags, QAT_LA_PARTIAL_BITPOS, QAT_LA_PARTIAL_MASK)
  692 
  693 /**
  694  ******************************************************************************
  695  * @ingroup icp_qat_fw_la
  696  *
  697  * @description
  698  *        Macro for extraction of the "Use Extended Protocol Flags" flag value
  699  *
  700  * @param flags      Extended Command Flags
  701  * @param val        Value of the flag
  702  *
  703  *****************************************************************************/
  704 #define ICP_QAT_FW_USE_EXTENDED_PROTOCOL_FLAGS_GET(flags)                      \
  705         QAT_FIELD_GET(flags,                                                   \
  706                       QAT_LA_USE_EXTENDED_PROTOCOL_FLAGS_BITPOS,               \
  707                       QAT_LA_USE_EXTENDED_PROTOCOL_FLAGS_MASK)
  708 
  709 /**
  710  ******************************************************************************
  711  * @ingroup icp_qat_fw_la
  712  *
  713  * @description
  714  *        Macro for extraction of the slice type information from the flags.
  715  *
  716  * @param flags        Flags to extract the protocol state
  717  *
  718  *****************************************************************************/
  719 #define ICP_QAT_FW_LA_SLICE_TYPE_GET(flags)                                    \
  720         QAT_FIELD_GET(flags, QAT_LA_SLICE_TYPE_BITPOS, QAT_LA_SLICE_TYPE_MASK)
  721 
  722 /* Macros for setting field bits */
  723 /**
  724  ******************************************************************************
  725  * @ingroup icp_qat_fw_la
  726  *
  727  * @description
  728  *        Macro for setting the Cipher IV field contents
  729  *
  730  * @param flags        Flags to set with the Cipher IV field contents
  731  * @param val          Field contents indicator value
  732  *
  733  *****************************************************************************/
  734 #define ICP_QAT_FW_LA_CIPH_IV_FLD_FLAG_SET(flags, val)                         \
  735         QAT_FIELD_SET(flags,                                                   \
  736                       val,                                                     \
  737                       QAT_LA_CIPH_IV_FLD_BITPOS,                               \
  738                       QAT_LA_CIPH_IV_FLD_MASK)
  739 
  740 /**
  741  ******************************************************************************
  742  * @ingroup icp_qat_fw_la
  743  *
  744  * @description
  745  *        Macro for setting the Cipher/Auth Config
  746  *        offset type
  747  *
  748  * @param flags        Flags to set the Cipher/Auth Config offset type
  749  * @param val          Offset type value
  750  *
  751  *****************************************************************************/
  752 #define ICP_QAT_FW_LA_CIPH_AUTH_CFG_OFFSET_FLAG_SET(flags, val)                \
  753         QAT_FIELD_SET(flags,                                                   \
  754                       val,                                                     \
  755                       QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS,                      \
  756                       QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK)
  757 
  758 /**
  759  ******************************************************************************
  760  * @ingroup icp_qat_fw_la
  761  *
  762  * @description
  763  *        Macro for setting the ZUC protocol flag
  764  *
  765  * @param flags      Flags to set the ZUC protocol flag
  766  * @param val        Protocol value
  767  *
  768  *****************************************************************************/
  769 #define ICP_QAT_FW_LA_ZUC_3G_PROTO_FLAG_SET(flags, val)                        \
  770         QAT_FIELD_SET(flags,                                                   \
  771                       val,                                                     \
  772                       QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS,                      \
  773                       QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK)
  774 
  775 /**
  776  ******************************************************************************
  777  * @ingroup icp_qat_fw_la
  778  *
  779  * @description
  780  *        Macro for setting the SINGLE PASSprotocol flag
  781  *
  782  * @param flags      Flags to set the SINGLE PASS protocol flag
  783  * @param val        Protocol value
  784  *
  785  *****************************************************************************/
  786 #define ICP_QAT_FW_LA_SINGLE_PASS_PROTO_FLAG_SET(flags, val)                   \
  787         QAT_FIELD_SET(flags,                                                   \
  788                       val,                                                     \
  789                       QAT_FW_LA_SINGLE_PASS_PROTO_FLAG_BITPOS,                 \
  790                       QAT_FW_LA_SINGLE_PASS_PROTO_FLAG_MASK)
  791 
  792 /**
  793  ******************************************************************************
  794  * @ingroup icp_qat_fw_la
  795  *
  796  * @description
  797  *        Macro for setting the GCM IV length flag state
  798  *
  799  * @param flags      Flags to set the GCM IV length flag state
  800  * @param val        Protocol value
  801  *
  802  *****************************************************************************/
  803 #define ICP_QAT_FW_LA_GCM_IV_LEN_FLAG_SET(flags, val)                          \
  804         QAT_FIELD_SET(flags,                                                   \
  805                       val,                                                     \
  806                       QAT_LA_GCM_IV_LEN_FLAG_BITPOS,                           \
  807                       QAT_LA_GCM_IV_LEN_FLAG_MASK)
  808 
  809 /**
  810  ******************************************************************************
  811  * @ingroup icp_qat_fw_la
  812  *
  813  * @description
  814  *        Macro for setting the LA protocol flag state
  815  *
  816  * @param flags        Flags to set the protocol state
  817  * @param val          Protocol value
  818  *
  819  *****************************************************************************/
  820 #define ICP_QAT_FW_LA_PROTO_SET(flags, val)                                    \
  821         QAT_FIELD_SET(flags, val, QAT_LA_PROTO_BITPOS, QAT_LA_PROTO_MASK)
  822 
  823 /**
  824  ******************************************************************************
  825  * @ingroup icp_qat_fw_la
  826  *
  827  * @description
  828  *        Macro for setting the "compare auth" flag state
  829  *
  830  * @param flags      Flags to set the compare auth result state
  831  * @param val        Compare Auth value
  832  *
  833  *****************************************************************************/
  834 #define ICP_QAT_FW_LA_CMP_AUTH_SET(flags, val)                                 \
  835         QAT_FIELD_SET(flags,                                                   \
  836                       val,                                                     \
  837                       QAT_LA_CMP_AUTH_RES_BITPOS,                              \
  838                       QAT_LA_CMP_AUTH_RES_MASK)
  839 
  840 /**
  841  ******************************************************************************
  842  * @ingroup icp_qat_fw_la
  843  *
  844  * @description
  845  *        Macro for setting the "return auth" flag state
  846  *
  847  * @param flags      Flags to set the return auth result state
  848  * @param val        Return Auth value
  849  *
  850  *****************************************************************************/
  851 #define ICP_QAT_FW_LA_RET_AUTH_SET(flags, val)                                 \
  852         QAT_FIELD_SET(flags,                                                   \
  853                       val,                                                     \
  854                       QAT_LA_RET_AUTH_RES_BITPOS,                              \
  855                       QAT_LA_RET_AUTH_RES_MASK)
  856 
  857 /**
  858  ******************************************************************************
  859  * @ingroup icp_qat_fw_la
  860  *
  861  * @description
  862  *      Macro for setting the "digest in buffer" flag state
  863  *
  864  * @param flags     Flags to set the digest in buffer state
  865  * @param val       Digest in buffer value
  866  *
  867  *****************************************************************************/
  868 #define ICP_QAT_FW_LA_DIGEST_IN_BUFFER_SET(flags, val)                         \
  869         QAT_FIELD_SET(flags,                                                   \
  870                       val,                                                     \
  871                       QAT_LA_DIGEST_IN_BUFFER_BITPOS,                          \
  872                       QAT_LA_DIGEST_IN_BUFFER_MASK)
  873 
  874 /**
  875  ******************************************************************************
  876  * @ingroup icp_qat_fw_la
  877  *
  878  * @description
  879  *        Macro for setting the "update state" flag value
  880  *
  881  * @param flags      Flags to set the update content state
  882  * @param val        Update Content State flag value
  883  *
  884  *****************************************************************************/
  885 #define ICP_QAT_FW_LA_UPDATE_STATE_SET(flags, val)                             \
  886         QAT_FIELD_SET(flags,                                                   \
  887                       val,                                                     \
  888                       QAT_LA_UPDATE_STATE_BITPOS,                              \
  889                       QAT_LA_UPDATE_STATE_MASK)
  890 
  891 /**
  892  ******************************************************************************
  893  * @ingroup icp_qat_fw_la
  894  *
  895  * @description
  896  *        Macro for setting the "partial" packet flag state
  897  *
  898  * @param flags      Flags to set the partial state
  899  * @param val        Partial state value
  900  *
  901  *****************************************************************************/
  902 #define ICP_QAT_FW_LA_PARTIAL_SET(flags, val)                                  \
  903         QAT_FIELD_SET(flags, val, QAT_LA_PARTIAL_BITPOS, QAT_LA_PARTIAL_MASK)
  904 
  905 /**
  906  ******************************************************************************
  907  * @ingroup icp_qat_fw_la
  908  *
  909  * @description
  910  *        Macro for setting the "Use Extended Protocol Flags" flag value
  911  *
  912  * @param flags      Extended Command Flags
  913  * @param val        Value of the flag
  914  *
  915  *****************************************************************************/
  916 #define ICP_QAT_FW_USE_EXTENDED_PROTOCOL_FLAGS_SET(flags, val)                 \
  917         QAT_FIELD_SET(flags,                                                   \
  918                       val,                                                     \
  919                       QAT_LA_USE_EXTENDED_PROTOCOL_FLAGS_BITPOS,               \
  920                       QAT_LA_USE_EXTENDED_PROTOCOL_FLAGS_MASK)
  921 
  922 /**
  923 ******************************************************************************
  924 * @ingroup icp_qat_fw_la
  925 *
  926 * @description
  927 *        Macro for setting the "slice type" field in la flags
  928 *
  929 * @param flags      Flags to set the slice type
  930 * @param val        Value of the slice type to be set.
  931 *
  932 *****************************************************************************/
  933 #define ICP_QAT_FW_LA_SLICE_TYPE_SET(flags, val)                               \
  934         QAT_FIELD_SET(flags,                                                   \
  935                       val,                                                     \
  936                       QAT_LA_SLICE_TYPE_BITPOS,                                \
  937                       QAT_LA_SLICE_TYPE_MASK)
  938 
  939 /**
  940  *****************************************************************************
  941  * @ingroup icp_qat_fw_la
  942  *        Definition of the Cipher header Content Descriptor pars block
  943  * @description
  944  *      Definition of the cipher processing header cd pars block.
  945  *      The structure is a service-specific implementation of the common
  946  *      'icp_qat_fw_comn_req_hdr_cd_pars_s' structure.
  947  *****************************************************************************/
  948 typedef union icp_qat_fw_cipher_req_hdr_cd_pars_s {
  949         /**< LWs 2-5 */
  950         struct {
  951                 uint64_t content_desc_addr;
  952                 /**< Address of the content descriptor */
  953 
  954                 uint16_t content_desc_resrvd1;
  955                 /**< Content descriptor reserved field */
  956 
  957                 uint8_t content_desc_params_sz;
  958                 /**< Size of the content descriptor parameters in quad words.
  959                  * These parameters describe the session setup configuration
  960                  * info for the slices that this request relies upon i.e. the
  961                  * configuration word and cipher key needed by the cipher slice
  962                  * if there is a request for cipher processing. */
  963 
  964                 uint8_t content_desc_hdr_resrvd2;
  965                 /**< Content descriptor reserved field */
  966 
  967                 uint32_t content_desc_resrvd3;
  968                 /**< Content descriptor reserved field */
  969         } s;
  970 
  971         struct {
  972                 uint32_t cipher_key_array[ICP_QAT_FW_NUM_LONGWORDS_4];
  973                 /* Cipher Key Array */
  974 
  975         } s1;
  976 
  977 } icp_qat_fw_cipher_req_hdr_cd_pars_t;
  978 
  979 /**
  980  *****************************************************************************
  981  * @ingroup icp_qat_fw_la
  982  *        Definition of the Authentication header Content Descriptor pars block
  983  * @description
  984  *      Definition of the authentication processing header cd pars block.
  985  *****************************************************************************/
  986 /* Note: Authentication uses the common 'icp_qat_fw_comn_req_hdr_cd_pars_s'
  987  * structure - similarly, it is also used by SSL3, TLS and MGF. Only cipher
  988  * and cipher + authentication require service-specific implementations of
  989  * the structure */
  990 
  991 /**
  992  *****************************************************************************
  993  * @ingroup icp_qat_fw_la
  994  *        Definition of the Cipher + Auth header Content Descriptor pars block
  995  * @description
  996  *      Definition of the cipher + auth processing header cd pars block.
  997  *      The structure is a service-specific implementation of the common
  998  *      'icp_qat_fw_comn_req_hdr_cd_pars_s' structure.
  999  *****************************************************************************/
 1000 typedef union icp_qat_fw_cipher_auth_req_hdr_cd_pars_s {
 1001         /**< LWs 2-5 */
 1002         struct {
 1003                 uint64_t content_desc_addr;
 1004                 /**< Address of the content descriptor */
 1005 
 1006                 uint16_t content_desc_resrvd1;
 1007                 /**< Content descriptor reserved field */
 1008 
 1009                 uint8_t content_desc_params_sz;
 1010                 /**< Size of the content descriptor parameters in quad words.
 1011                  * These parameters describe the session setup configuration
 1012                  * info for the slices that this request relies upon i.e. the
 1013                  * configuration word and cipher key needed by the cipher slice
 1014                  * if there is a request for cipher processing. */
 1015 
 1016                 uint8_t content_desc_hdr_resrvd2;
 1017                 /**< Content descriptor reserved field */
 1018 
 1019                 uint32_t content_desc_resrvd3;
 1020                 /**< Content descriptor reserved field */
 1021         } s;
 1022 
 1023         struct {
 1024                 uint32_t cipher_key_array[ICP_QAT_FW_NUM_LONGWORDS_4];
 1025                 /* Cipher Key Array */
 1026 
 1027         } sl;
 1028 
 1029 } icp_qat_fw_cipher_auth_req_hdr_cd_pars_t;
 1030 
 1031 /**
 1032  *****************************************************************************
 1033  * @ingroup icp_qat_fw_la
 1034  *      Cipher content descriptor control block (header)
 1035  * @description
 1036  *      Definition of the service-specific cipher control block header
 1037  *      structure. This header forms part of the content descriptor
 1038  *      block incorporating LWs 27-31, as defined by the common base
 1039  *      parameters structure.
 1040  *
 1041  *****************************************************************************/
 1042 typedef struct icp_qat_fw_cipher_cd_ctrl_hdr_s {
 1043         /**< LW 27 */
 1044         uint8_t cipher_state_sz;
 1045         /**< State size in quad words of the cipher algorithm used in this
 1046          * session. Set to zero if the algorithm doesnt provide any state */
 1047 
 1048         uint8_t cipher_key_sz;
 1049         /**< Key size in quad words of the cipher algorithm used in this session
 1050          */
 1051 
 1052         uint8_t cipher_cfg_offset;
 1053         /**< Quad word offset from the content descriptor parameters address
 1054          * i.e. (content_address + (cd_hdr_sz << 3)) to the parameters for the
 1055          * cipher processing */
 1056 
 1057         uint8_t next_curr_id;
 1058         /**< This field combines the next and current id (each four bits) -
 1059          * the next id is the most significant nibble.
 1060          * Next Id:  Set to the next slice to pass the ciphered data through.
 1061          * Set to ICP_QAT_FW_SLICE_DRAM_WR if the data is not to go through
 1062          * any more slices after cipher.
 1063          * Current Id: Initialised with the cipher  slice type */
 1064 
 1065         /**< LW 28 */
 1066         uint8_t cipher_padding_sz;
 1067         /**< State padding size in quad words. Set to 0 if no padding is
 1068          * required.
 1069          */
 1070 
 1071         uint8_t resrvd1;
 1072         uint16_t resrvd2;
 1073         /**< Reserved bytes to bring the struct to the word boundary, used by
 1074          * authentication. MUST be set to 0 */
 1075 
 1076         /**< LWs 29-31 */
 1077         uint32_t resrvd3[ICP_QAT_FW_NUM_LONGWORDS_3];
 1078         /**< Reserved bytes used by authentication. MUST be set to 0 */
 1079 
 1080 } icp_qat_fw_cipher_cd_ctrl_hdr_t;
 1081 
 1082 /**
 1083  *****************************************************************************
 1084  * @ingroup icp_qat_fw_la
 1085  *      Authentication content descriptor control block (header)
 1086  * @description
 1087  *      Definition of the service-specific authentication control block
 1088  *      header structure. This header forms part of the content descriptor
 1089  *      block incorporating LWs 27-31, as defined by the common base
 1090  *      parameters structure, the first portion of which is reserved for
 1091  *      cipher.
 1092  *
 1093  *****************************************************************************/
 1094 typedef struct icp_qat_fw_auth_cd_ctrl_hdr_s {
 1095         /**< LW 27 */
 1096         uint32_t resrvd1;
 1097         /**< Reserved bytes, used by cipher only. MUST be set to 0 */
 1098 
 1099         /**< LW 28 */
 1100         uint8_t resrvd2;
 1101         /**< Reserved byte, used by cipher only. MUST be set to 0 */
 1102 
 1103         uint8_t hash_flags;
 1104         /**< General flags defining the processing to perform. 0 is normal
 1105          * processing
 1106          * and 1 means there is a nested hash processing loop to go through */
 1107 
 1108         uint8_t hash_cfg_offset;
 1109         /**< Quad word offset from the content descriptor parameters address to
 1110          * the parameters for the auth processing */
 1111 
 1112         uint8_t next_curr_id;
 1113         /**< This field combines the next and current id (each four bits) -
 1114          * the next id is the most significant nibble.
 1115          * Next Id:  Set to the next slice to pass the authentication data
 1116          * through. Set to ICP_QAT_FW_SLICE_DRAM_WR if the data is not to go
 1117          * through any more slices after authentication.
 1118          * Current Id: Initialised with the authentication slice type */
 1119 
 1120         /**< LW 29 */
 1121         uint8_t resrvd3;
 1122         /**< Now a reserved field. MUST be set to 0 */
 1123 
 1124         uint8_t outer_prefix_sz;
 1125         /**< Size in bytes of outer prefix data */
 1126 
 1127         uint8_t final_sz;
 1128         /**< Size in bytes of digest to be returned to the client if requested
 1129          */
 1130 
 1131         uint8_t inner_res_sz;
 1132         /**< Size in bytes of the digest from the inner hash algorithm */
 1133 
 1134         /**< LW 30 */
 1135         uint8_t resrvd4;
 1136         /**< Now a reserved field. MUST be set to zero. */
 1137 
 1138         uint8_t inner_state1_sz;
 1139         /**< Size in bytes of inner hash state1 data. Must be a qword multiple
 1140          */
 1141 
 1142         uint8_t inner_state2_offset;
 1143         /**< Quad word offset from the content descriptor parameters pointer to
 1144          * the inner state2 value */
 1145 
 1146         uint8_t inner_state2_sz;
 1147         /**< Size in bytes of inner hash state2 data. Must be a qword multiple
 1148          */
 1149 
 1150         /**< LW 31 */
 1151         uint8_t outer_config_offset;
 1152         /**< Quad word offset from the content descriptor parameters pointer to
 1153          * the outer configuration information */
 1154 
 1155         uint8_t outer_state1_sz;
 1156         /**< Size in bytes of the outer state1 value */
 1157 
 1158         uint8_t outer_res_sz;
 1159         /**< Size in bytes of digest from the outer auth algorithm */
 1160 
 1161         uint8_t outer_prefix_offset;
 1162         /**< Quad word offset from the start of the inner prefix data to the
 1163          * outer prefix information. Should equal the rounded inner prefix size,
 1164          * converted to qwords  */
 1165 
 1166 } icp_qat_fw_auth_cd_ctrl_hdr_t;
 1167 
 1168 /**
 1169  *****************************************************************************
 1170  * @ingroup icp_qat_fw_la
 1171  *      Cipher + Authentication content descriptor control block header
 1172  * @description
 1173  *      Definition of both service-specific cipher + authentication control
 1174  *      block header structures. This header forms part of the content
 1175  *      descriptor block incorporating LWs 27-31, as defined by the common
 1176  *      base  parameters structure.
 1177  *
 1178  *****************************************************************************/
 1179 typedef struct icp_qat_fw_cipher_auth_cd_ctrl_hdr_s {
 1180         /**< LW 27 */
 1181         uint8_t cipher_state_sz;
 1182         /**< State size in quad words of the cipher algorithm used in this
 1183          * session. Set to zero if the algorithm doesnt provide any state */
 1184 
 1185         uint8_t cipher_key_sz;
 1186         /**< Key size in quad words of the cipher algorithm used in this session
 1187          */
 1188 
 1189         uint8_t cipher_cfg_offset;
 1190         /**< Quad word offset from the content descriptor parameters address
 1191          * i.e. (content_address + (cd_hdr_sz << 3)) to the parameters for the
 1192          * cipher processing */
 1193 
 1194         uint8_t next_curr_id_cipher;
 1195         /**< This field combines the next and current id (each four bits) -
 1196          * the next id is the most significant nibble.
 1197          * Next Id:  Set to the next slice to pass the ciphered data through.
 1198          * Set to ICP_QAT_FW_SLICE_DRAM_WR if the data is not to go through
 1199          * any more slices after cipher.
 1200          * Current Id: Initialised with the cipher  slice type */
 1201 
 1202         /**< LW 28 */
 1203         uint8_t cipher_padding_sz;
 1204         /**< State padding size in quad words. Set to 0 if no padding is
 1205          * required.
 1206          */
 1207 
 1208         uint8_t hash_flags;
 1209         /**< General flags defining the processing to perform. 0 is normal
 1210          * processing
 1211          * and 1 means there is a nested hash processing loop to go through */
 1212 
 1213         uint8_t hash_cfg_offset;
 1214         /**< Quad word offset from the content descriptor parameters address to
 1215          * the parameters for the auth processing */
 1216 
 1217         uint8_t next_curr_id_auth;
 1218         /**< This field combines the next and current id (each four bits) -
 1219          * the next id is the most significant nibble.
 1220          * Next Id:  Set to the next slice to pass the authentication data
 1221          * through. Set to ICP_QAT_FW_SLICE_DRAM_WR if the data is not to go
 1222          * through any more slices after authentication.
 1223          * Current Id: Initialised with the authentication slice type */
 1224 
 1225         /**< LW 29 */
 1226         uint8_t resrvd1;
 1227         /**< Reserved field. MUST be set to 0 */
 1228 
 1229         uint8_t outer_prefix_sz;
 1230         /**< Size in bytes of outer prefix data */
 1231 
 1232         uint8_t final_sz;
 1233         /**< Size in bytes of digest to be returned to the client if requested
 1234          */
 1235 
 1236         uint8_t inner_res_sz;
 1237         /**< Size in bytes of the digest from the inner hash algorithm */
 1238 
 1239         /**< LW 30 */
 1240         uint8_t resrvd2;
 1241         /**< Now a reserved field. MUST be set to zero. */
 1242 
 1243         uint8_t inner_state1_sz;
 1244         /**< Size in bytes of inner hash state1 data. Must be a qword multiple
 1245          */
 1246 
 1247         uint8_t inner_state2_offset;
 1248         /**< Quad word offset from the content descriptor parameters pointer to
 1249          * the inner state2 value */
 1250 
 1251         uint8_t inner_state2_sz;
 1252         /**< Size in bytes of inner hash state2 data. Must be a qword multiple
 1253          */
 1254 
 1255         /**< LW 31 */
 1256         uint8_t outer_config_offset;
 1257         /**< Quad word offset from the content descriptor parameters pointer to
 1258          * the outer configuration information */
 1259 
 1260         uint8_t outer_state1_sz;
 1261         /**< Size in bytes of the outer state1 value */
 1262 
 1263         uint8_t outer_res_sz;
 1264         /**< Size in bytes of digest from the outer auth algorithm */
 1265 
 1266         uint8_t outer_prefix_offset;
 1267         /**< Quad word offset from the start of the inner prefix data to the
 1268          * outer prefix information. Should equal the rounded inner prefix size,
 1269          * converted to qwords  */
 1270 
 1271 } icp_qat_fw_cipher_auth_cd_ctrl_hdr_t;
 1272 
 1273 /*
 1274  *  HASH FLAGS
 1275  *
 1276  *  + ===== + --- + --- + --- + --- + --- + --- + --- + ---- +
 1277  *  | Bit   |  7  |  6  | 5   |  4  |  3  |  2  |  1  |   0  |
 1278  *  + ===== + --- + --- + --- + --- + --- + --- + --- + ---- +
 1279  *  | Flags | Rsv | Rsv | Rsv | ZUC |SNOW |SKIP |SKIP |NESTED|
 1280  *  |       |     |     |     |EIA3 | 3G  |LOAD |LOAD |      |
 1281  *  |       |     |     |     |     |UIA2 |OUTER|INNER|      |
 1282  *  + ===== + --- + --- + --- + --- + --- + --- + --- + ---- +
 1283  */
 1284 
 1285 /* Bit 0 */
 1286 
 1287 #define QAT_FW_LA_AUTH_HDR_NESTED_BITPOS 0
 1288 /**< @ingroup icp_qat_fw_comn
 1289  * Bit position of the hash_flags bit to indicate the request
 1290  * requires nested hashing
 1291  */
 1292 #define ICP_QAT_FW_AUTH_HDR_FLAG_DO_NESTED 1
 1293 /**< @ingroup icp_qat_fw_comn
 1294  * Definition of the hash_flags bit to indicate the request
 1295  * requires nested hashing */
 1296 
 1297 #define ICP_QAT_FW_AUTH_HDR_FLAG_NO_NESTED 0
 1298 /**< @ingroup icp_qat_fw_comn
 1299  * Definition of the hash_flags bit for no nested hashing
 1300  * required */
 1301 
 1302 #define QAT_FW_LA_AUTH_HDR_NESTED_MASK 0x1
 1303 /**< @ingroup icp_qat_fw_comn
 1304  * Bit mask of the hash_flags bit to indicate the request
 1305  * requires nested hashing
 1306  */
 1307 
 1308 /* Bit 1 */
 1309 
 1310 #define QAT_FW_LA_SKIP_INNER_STATE1_LOAD_BITPOS 1
 1311 /**< @ingroup icp_qat_fw_comn
 1312  * Bit position of the Skipping Inner State1 Load bit */
 1313 
 1314 #define QAT_FW_LA_SKIP_INNER_STATE1_LOAD 1
 1315 /**< @ingroup icp_qat_fw_comn
 1316  * Value indicating the skipping of inner hash state load */
 1317 
 1318 #define QAT_FW_LA_NO_SKIP_INNER_STATE1_LOAD 0
 1319 /**< @ingroup icp_qat_fw_comn
 1320  * Value indicating the no skipping of inner hash state load */
 1321 
 1322 #define QAT_FW_LA_SKIP_INNER_STATE1_LOAD_MASK 0x1
 1323 /**< @ingroup icp_qat_fw_comn
 1324  * Bit mask of Skipping Inner State1 Load bit */
 1325 
 1326 /* Bit 2 */
 1327 
 1328 #define QAT_FW_LA_SKIP_OUTER_STATE1_LOAD_BITPOS 2
 1329 /**< @ingroup icp_qat_fw_comn
 1330  * Bit position of the Skipping Outer State1 Load bit */
 1331 
 1332 #define QAT_FW_LA_SKIP_OUTER_STATE1_LOAD 1
 1333 /**< @ingroup icp_qat_fw_comn
 1334  * Value indicating the skipping of outer hash state load */
 1335 
 1336 #define QAT_FW_LA_NO_SKIP_OUTER_STATE1_LOAD 0
 1337 /**< @ingroup icp_qat_fw_comn
 1338  * Value indicating the no skipping of outer hash state load */
 1339 
 1340 #define QAT_FW_LA_SKIP_OUTER_STATE1_LOAD_MASK 0x1
 1341 /**< @ingroup icp_qat_fw_comn
 1342  * Bit mask of Skipping Outer State1 Load bit */
 1343 
 1344 /* Bit 3 */
 1345 
 1346 #define QAT_FW_LA_SNOW3G_UIA2_BITPOS 3
 1347 /**< @ingroup icp_cpm_fw_la
 1348  * Bit position defining hash algorithm Snow3g-UIA2 */
 1349 
 1350 #define QAT_FW_LA_SNOW3G_UIA2 1
 1351 /**< @ingroup icp_cpm_fw_la
 1352  * Value indicating the use of hash algorithm Snow3g-UIA2 */
 1353 
 1354 #define QAT_FW_LA_SNOW3G_UIA2_MASK 0x1
 1355 /**< @ingroup icp_qat_fw_la
 1356  * One bit mask used to determine the use of hash algorithm Snow3g-UIA2 */
 1357 
 1358 /* Bit 4 */
 1359 
 1360 #define QAT_FW_LA_ZUC_EIA3_BITPOS 4
 1361 /**< @ingroup icp_cpm_fw_la
 1362  * Bit position defining hash algorithm ZUC-EIA3 */
 1363 
 1364 #define QAT_FW_LA_ZUC_EIA3 1
 1365 /**< @ingroup icp_cpm_fw_la
 1366  * Value indicating the use of hash algorithm ZUC-EIA3 */
 1367 
 1368 #define QAT_FW_LA_ZUC_EIA3_MASK 0x1
 1369 /**< @ingroup icp_qat_fw_la
 1370  * One bit mask used to determine the use of hash algorithm ZUC-EIA3 */
 1371 
 1372 /* Bit 5 */
 1373 
 1374 #define QAT_FW_LA_MODE2_BITPOS 5
 1375 /**< @ingroup icp_qat_fw_comn
 1376  * Bit position of the Mode 2 bit */
 1377 
 1378 #define QAT_FW_LA_MODE2 1
 1379 /**< @ingroup icp_qat_fw_comn
 1380  * Value indicating the Mode 2*/
 1381 
 1382 #define QAT_FW_LA_NO_MODE2 0
 1383 /**< @ingroup icp_qat_fw_comn
 1384  * Value indicating the no Mode 2*/
 1385 
 1386 #define QAT_FW_LA_MODE2_MASK 0x1
 1387 /**< @ingroup icp_qat_fw_comn
 1388  * Bit mask of Mode 2 */
 1389 
 1390 /* Macros for extracting hash flags */
 1391 
 1392 /**
 1393  ******************************************************************************
 1394  * @ingroup icp_qat_fw_la
 1395  *
 1396  * @description
 1397  *        Macro for extraction of the "Nested" hash flag
 1398  *
 1399  * @param flags      Hash Flags
 1400  * @param val        Value of the flag
 1401  *
 1402  *****************************************************************************/
 1403 #define ICP_QAT_FW_HASH_FLAG_AUTH_HDR_NESTED_GET(flags)                        \
 1404         QAT_FIELD_GET(flags,                                                   \
 1405                       QAT_FW_LA_AUTH_HDR_NESTED_BITPOS,                        \
 1406                       QAT_FW_LA_AUTH_HDR_NESTED_MASK)
 1407 
 1408 /**
 1409  ******************************************************************************
 1410  * @ingroup icp_qat_fw_la
 1411  *
 1412  * @description
 1413  *      Macro for extraction of the "Skipping Inner State1 Load state" hash flag
 1414  *
 1415  * @param flags     Hash Flags
 1416  *
 1417  *****************************************************************************/
 1418 #define ICP_QAT_FW_HASH_FLAG_SKIP_INNER_STATE1_LOAD_GET(flags)                 \
 1419         QAT_FIELD_GET(flags,                                                   \
 1420                       QAT_FW_LA_SKIP_INNER_STATE1_LOAD_BITPOS,                 \
 1421                       QAT_FW_LA_INNER_STATE1_LOAD_MASK)
 1422 
 1423 /**
 1424  ******************************************************************************
 1425  *        Macro for setting the "Skipping Inner State1 Load" hash flag
 1426  *
 1427  * @param flags      Hash Flags
 1428  * @param val        Value of the flag
 1429  *
 1430  *****************************************************************************/
 1431 #define ICP_QAT_FW_HASH_FLAG_SKIP_INNER_STATE1_LOAD_SET(flags, val)            \
 1432         QAT_FIELD_SET(flags,                                                   \
 1433                       val,                                                     \
 1434                       QAT_FW_LA_SKIP_INNER_STATE1_LOAD_BITPOS,                 \
 1435                       QAT_FW_LA_SKIP_INNER_STATE1_LOAD_MASK)
 1436 
 1437 /**
 1438  ******************************************************************************
 1439  * @ingroup icp_qat_fw_la
 1440  *
 1441  * @description
 1442  *      Macro for extraction of the "Skipping Outer State1 Load state" hash flag
 1443  *
 1444  * @param flags     Hash Flags
 1445  *
 1446  *****************************************************************************/
 1447 #define ICP_QAT_FW_HASH_FLAG_SKIP_OUTER_STATE1_LOAD_GET(flags)                 \
 1448         QAT_FIELD_GET(flags,                                                   \
 1449                       QAT_FW_LA_SKIP_OUTER_STATE1_LOAD_BITPOS,                 \
 1450                       QAT_FW_LA_SKIP_OUTER_STATE1_LOAD_MASK)
 1451 
 1452 /**
 1453  ******************************************************************************
 1454  * @ingroup icp_qat_fw_la
 1455  *
 1456  * @description
 1457  *        Macro for setting the "Skipping Outer State1 Load" hash flag
 1458  *
 1459  * @param flags      Hash Flags
 1460  * @param val        Value of the flag
 1461  *
 1462  *****************************************************************************/
 1463 #define ICP_QAT_FW_HASH_FLAG_SKIP_OUTER_STATE1_LOAD_SET(flags, val)            \
 1464         QAT_FIELD_SET(flags,                                                   \
 1465                       val,                                                     \
 1466                       QAT_FW_LA_SKIP_OUTER_STATE1_LOAD_BITPOS,                 \
 1467                       QAT_FW_LA_SKIP_OUTER_STATE1_LOAD_MASK)
 1468 
 1469 /**
 1470  ******************************************************************************
 1471  * @ingroup icp_qat_fw_la
 1472  *
 1473  * @description
 1474  *        Macro for extraction of the "Snow3g-UIA2" hash flag
 1475  *
 1476  * @param flags      Hash Flags
 1477  * @param val        Value of the flag
 1478  *
 1479  *****************************************************************************/
 1480 #define ICP_QAT_FW_HASH_FLAG_SNOW3G_UIA2_GET(flags)                            \
 1481         QAT_FIELD_GET(flags,                                                   \
 1482                       QAT_FW_LA_SNOW3G_UIA2_BITPOS,                            \
 1483                       QAT_FW_LA_SNOW3G_UIA2_MASK)
 1484 
 1485 /**
 1486  ******************************************************************************
 1487  * @ingroup icp_qat_fw_la
 1488  *
 1489  * @description
 1490  *        Macro for extraction of the "ZUC-EIA3" hash flag
 1491  *
 1492  * @param flags      Hash Flags
 1493  * @param val        Value of the flag
 1494  *
 1495  *****************************************************************************/
 1496 #define ICP_QAT_FW_HASH_FLAG_ZUC_EIA3_GET(flags)                               \
 1497         QAT_FIELD_GET(flags, QAT_FW_LA_ZUC_EIA3_BITPOS, QAT_FW_LA_ZUC_EIA3_MASK)
 1498 
 1499 /* Macros for setting hash flags */
 1500 
 1501 /**
 1502  ******************************************************************************
 1503  * @ingroup icp_qat_fw_la
 1504  *
 1505  * @description
 1506  *        Macro for setting the "Nested" hash flag
 1507  *
 1508  * @param flags      Hash Flags
 1509  * @param val        Value of the flag
 1510  *
 1511  *****************************************************************************/
 1512 #define ICP_QAT_FW_HASH_FLAG_AUTH_HDR_NESTED_SET(flags, val)                   \
 1513         QAT_FIELD_SET(flags,                                                   \
 1514                       val,                                                     \
 1515                       QAT_FW_LA_AUTH_HDR_NESTED_BITPOS,                        \
 1516                       QAT_FW_LA_AUTH_HDR_NESTED_MASK)
 1517 
 1518 /**
 1519  ******************************************************************************
 1520  * @ingroup icp_qat_fw_la
 1521  *
 1522  * @description
 1523  *        Macro for setting the "Skipping Inner State1 Load" hash flag
 1524  *
 1525  * @param flags      Hash Flags
 1526  * @param val        Value of the flag
 1527  *
 1528  *****************************************************************************/
 1529 #define ICP_QAT_FW_HASH_FLAG_SKIP_INNER_STATE1_LOAD_SET(flags, val)            \
 1530         QAT_FIELD_SET(flags,                                                   \
 1531                       val,                                                     \
 1532                       QAT_FW_LA_SKIP_INNER_STATE1_LOAD_BITPOS,                 \
 1533                       QAT_FW_LA_SKIP_INNER_STATE1_LOAD_MASK)
 1534 
 1535 /**
 1536  ******************************************************************************
 1537  * @ingroup icp_qat_fw_la
 1538  *
 1539  * @description
 1540  *        Macro for setting the "Skipping Outer State1 Load" hash flag
 1541  *
 1542  * @param flags      Hash Flags
 1543  * @param val        Value of the flag
 1544  *
 1545  *****************************************************************************/
 1546 #define ICP_QAT_FW_HASH_FLAG_SKIP_OUTER_STATE1_LOAD_SET(flags, val)            \
 1547         QAT_FIELD_SET(flags,                                                   \
 1548                       val,                                                     \
 1549                       QAT_FW_LA_SKIP_OUTER_STATE1_LOAD_BITPOS,                 \
 1550                       QAT_FW_LA_SKIP_OUTER_STATE1_LOAD_MASK)
 1551 
 1552 /**
 1553  ******************************************************************************
 1554  * @ingroup icp_qat_fw_la
 1555  *
 1556  * @description
 1557  *        Macro for setting the "Snow3g-UIA2" hash flag
 1558  *
 1559  * @param flags      Hash Flags
 1560  * @param val        Value of the flag
 1561  *
 1562  *****************************************************************************/
 1563 #define ICP_QAT_FW_HASH_FLAG_SNOW3G_UIA2_SET(flags, val)                       \
 1564         QAT_FIELD_SET(flags,                                                   \
 1565                       val,                                                     \
 1566                       QAT_FW_LA_SNOW3G_UIA2_BITPOS,                            \
 1567                       QAT_FW_LA_SNOW3G_UIA2_MASK)
 1568 
 1569 /**
 1570  ******************************************************************************
 1571  * @ingroup icp_qat_fw_la
 1572  *
 1573  * @description
 1574  *        Macro for setting the "ZUC-EIA3" hash flag
 1575  *
 1576  * @param flags      Hash Flags
 1577  * @param val        Value of the flag
 1578  *
 1579  *****************************************************************************/
 1580 #define ICP_QAT_FW_HASH_FLAG_ZUC_EIA3_SET(flags, val)                          \
 1581         QAT_FIELD_SET(flags,                                                   \
 1582                       val,                                                     \
 1583                       QAT_FW_LA_ZUC_EIA3_BITPOS,                               \
 1584                       QAT_FW_LA_ZUC_EIA3_MASK)
 1585 
 1586 /**
 1587  ******************************************************************************
 1588  * @ingroup icp_qat_fw_la
 1589  *
 1590  * @description
 1591  *        Macro for setting the "Mode 2" hash flag
 1592  *
 1593  * @param flags      Hash Flags
 1594  * @param val        Value of the flag
 1595  *
 1596  *****************************************************************************/
 1597 #define ICP_QAT_FW_HASH_FLAG_MODE2_SET(flags, val)                             \
 1598         QAT_FIELD_SET(flags, val, QAT_FW_LA_MODE2_BITPOS, QAT_FW_LA_MODE2_MASK)
 1599 
 1600 #define ICP_QAT_FW_CCM_GCM_AAD_SZ_MAX 240
 1601 #define ICP_QAT_FW_SPC_AAD_SZ_MAX 0x3FFF
 1602 
 1603 /**< @ingroup icp_qat_fw_comn
 1604  * Maximum size of AAD data allowed for CCM or GCM processing. AAD data size90 -
 1605  * is stored in 8-bit field and must be multiple of hash block size. 240 is
 1606  * largest value which satisfy both requirements.AAD_SZ_MAX is in byte units */
 1607 
 1608 /*
 1609  * request parameter #defines
 1610  */
 1611 #define ICP_QAT_FW_HASH_REQUEST_PARAMETERS_OFFSET (24)
 1612 
 1613 /**< @ingroup icp_qat_fw_comn
 1614  * Offset in bytes from the start of the request parameters block to the hash
 1615  * (auth) request parameters */
 1616 
 1617 #define ICP_QAT_FW_CIPHER_REQUEST_PARAMETERS_OFFSET (0)
 1618 /**< @ingroup icp_qat_fw_comn
 1619  * Offset in bytes from the start of the request parameters block to the cipher
 1620  * request parameters */
 1621 
 1622 /**
 1623  *****************************************************************************
 1624  * @ingroup icp_qat_fw_la
 1625  *      Definition of the cipher request parameters block
 1626  *
 1627  * @description
 1628  *      Definition of the cipher processing request parameters block
 1629  *      structure, which forms part of the block incorporating LWs 14-26,
 1630  *      as defined by the common base parameters structure.
 1631  *      Unused fields must be set to 0.
 1632  *
 1633  *****************************************************************************/
 1634 /**< Pack compiler directive added to prevent the
 1635  * compiler from padding this structure to a 64-bit boundary */
 1636 #pragma pack(push, 1)
 1637 typedef struct icp_qat_fw_la_cipher_req_params_s {
 1638         /**< LW 14 */
 1639         uint32_t cipher_offset;
 1640         /**< Cipher offset long word. */
 1641 
 1642         /**< LW 15 */
 1643         uint32_t cipher_length;
 1644         /**< Cipher length long word. */
 1645 
 1646         /**< LWs 16-19 */
 1647         union {
 1648                 uint32_t cipher_IV_array[ICP_QAT_FW_NUM_LONGWORDS_4];
 1649                 /**< Cipher IV array  */
 1650 
 1651                 struct {
 1652                         uint64_t cipher_IV_ptr;
 1653                         /**< Cipher IV pointer or Partial State Pointer */
 1654 
 1655                         uint64_t resrvd1;
 1656                         /**< reserved */
 1657 
 1658                 } s;
 1659 
 1660         } u;
 1661 
 1662         /* LW 20 - 21 */
 1663         uint64_t spc_aad_addr;
 1664         /**< Address of the AAD info in DRAM */
 1665 
 1666         /* LW 22 - 23 */
 1667         uint64_t spc_auth_res_addr;
 1668         /**< Address of the authentication result information to validate or
 1669          * the location to which the digest information can be written back to
 1670          */
 1671 
 1672         /* LW 24    */
 1673         uint16_t spc_aad_sz;
 1674         /**< Size in bytes of AAD data to prefix to the packet
 1675          * for ChaChaPoly or GCM processing */
 1676         uint8_t reserved;
 1677         /**< reserved */
 1678         uint8_t spc_auth_res_sz;
 1679         /**< Size in bytes of the authentication result */
 1680 } icp_qat_fw_la_cipher_req_params_t;
 1681 #pragma pack(pop)
 1682 /**
 1683  *****************************************************************************
 1684  * @ingroup icp_qat_fw_la
 1685  *      Definition of the auth request parameters block
 1686  * @description
 1687  *      Definition of the authentication processing request parameters block
 1688  *      structure, which forms part of the block incorporating LWs 14-26,
 1689  *      as defined by the common base parameters structure. Note:
 1690  *      This structure is used by TLS only.
 1691  *
 1692  *****************************************************************************/
 1693 /**< Pack compiler directive added to prevent the
 1694  * compiler from padding this structure to a 64-bit boundary */
 1695 #pragma pack(push, 1)
 1696 
 1697 typedef struct icp_qat_fw_la_auth_req_params_s {
 1698 
 1699         /**< LW 20 */
 1700         uint32_t auth_off;
 1701         /**< Byte offset from the start of packet to the auth data region */
 1702 
 1703         /**< LW 21 */
 1704         uint32_t auth_len;
 1705         /**< Byte length of the auth data region */
 1706 
 1707         /**< LWs 22-23 */
 1708         union {
 1709                 uint64_t auth_partial_st_prefix;
 1710                 /**< Address of the authentication partial state prefix
 1711                  * information */
 1712 
 1713                 uint64_t aad_adr;
 1714                 /**< Address of the AAD info in DRAM. Used for the CCM and GCM
 1715                  * protocols */
 1716 
 1717         } u1;
 1718 
 1719         /**< LWs 24-25 */
 1720         uint64_t auth_res_addr;
 1721         /**< Address of the authentication result information to validate or
 1722          * the location to which the digest information can be written back to
 1723          */
 1724 
 1725         /**< LW 26 */
 1726         union {
 1727                 uint8_t inner_prefix_sz;
 1728                 /**< Size in bytes of the inner prefix data */
 1729 
 1730                 uint8_t aad_sz;
 1731                 /**< Size in bytes of padded AAD data to prefix to the packet
 1732                  * for CCM or GCM processing */
 1733         } u2;
 1734 
 1735         uint8_t resrvd1;
 1736         /**< reserved */
 1737 
 1738         uint8_t hash_state_sz;
 1739         /**< Number of quad words of inner and outer hash prefix data to process
 1740          * Maximum size is 240 */
 1741 
 1742         uint8_t auth_res_sz;
 1743         /**< Size in bytes of the authentication result */
 1744 
 1745 } icp_qat_fw_la_auth_req_params_t;
 1746 
 1747 #pragma pack(pop)
 1748 
 1749 /**
 1750  *****************************************************************************
 1751  * @ingroup icp_qat_fw_la
 1752  *      Definition of the auth request parameters block
 1753  * @description
 1754  *      Definition of the authentication processing request parameters block
 1755  *      structure, which forms part of the block incorporating LWs 14-26,
 1756  *      as defined by the common base parameters structure. Note:
 1757  *      This structure is used by SSL3 and MGF1 only. All fields other than
 1758  *      inner prefix/ AAD size are unused and therefore reserved.
 1759  *
 1760  *****************************************************************************/
 1761 typedef struct icp_qat_fw_la_auth_req_params_resrvd_flds_s {
 1762         /**< LWs 20-25 */
 1763         uint32_t resrvd[ICP_QAT_FW_NUM_LONGWORDS_6];
 1764 
 1765         /**< LW 26 */
 1766         union {
 1767                 uint8_t inner_prefix_sz;
 1768                 /**< Size in bytes of the inner prefix data */
 1769 
 1770                 uint8_t aad_sz;
 1771                 /**< Size in bytes of padded AAD data to prefix to the packet
 1772                  * for CCM or GCM processing */
 1773         } u2;
 1774 
 1775         uint8_t resrvd1;
 1776         /**< reserved */
 1777 
 1778         uint16_t resrvd2;
 1779         /**< reserved */
 1780 
 1781 } icp_qat_fw_la_auth_req_params_resrvd_flds_t;
 1782 
 1783 /**
 1784  *****************************************************************************
 1785  * @ingroup icp_qat_fw_la
 1786  *        Definition of the shared fields within the parameter block
 1787  *        containing SSL, TLS or MGF information.
 1788  * @description
 1789  *        This structure defines the shared fields for SSL, TLS or MGF
 1790  *        within the parameter block incorporating LWs 14-26, as defined
 1791  *        by the common base parameters structure.
 1792  *        Unused fields must be set to 0.
 1793  *
 1794  *****************************************************************************/
 1795 typedef struct icp_qat_fw_la_key_gen_common_s {
 1796         /**< LW 14 */
 1797         union {
 1798                 /**< SSL3 */
 1799                 uint16_t secret_lgth_ssl;
 1800                 /**< Length of Secret information for SSL. In the case of TLS
 1801                  * the secret is supplied in the content descriptor */
 1802 
 1803                 /**< MGF */
 1804                 uint16_t mask_length;
 1805                 /**< Size in bytes of the desired output mask for MGF1*/
 1806 
 1807                 /**< TLS */
 1808                 uint16_t secret_lgth_tls;
 1809                 /**< TLS Secret length */
 1810 
 1811         } u;
 1812 
 1813         union {
 1814                 /**< SSL3 */
 1815                 struct {
 1816                         uint8_t output_lgth_ssl;
 1817                         /**< Output length */
 1818 
 1819                         uint8_t label_lgth_ssl;
 1820                         /**< Label length */
 1821 
 1822                 } s1;
 1823 
 1824                 /**< MGF */
 1825                 struct {
 1826                         uint8_t hash_length;
 1827                         /**< Hash length */
 1828 
 1829                         uint8_t seed_length;
 1830                         /**< Seed length */
 1831 
 1832                 } s2;
 1833 
 1834                 /**< TLS */
 1835                 struct {
 1836                         uint8_t output_lgth_tls;
 1837                         /**< Output length */
 1838 
 1839                         uint8_t label_lgth_tls;
 1840                         /**< Label length */
 1841 
 1842                 } s3;
 1843 
 1844                 /**< HKDF */
 1845                 struct {
 1846                         uint8_t rsrvd1;
 1847                         /**< Unused */
 1848 
 1849                         uint8_t info_length;
 1850                         /**< Info length. This is plain data, not wrapped in an
 1851                          * icp_qat_fw_hkdf_label structure.
 1852                          */
 1853 
 1854                 } hkdf;
 1855 
 1856                 /**< HKDF Expand Label */
 1857                 struct {
 1858                         uint8_t rsrvd1;
 1859                         /**< Unused */
 1860 
 1861                         uint8_t num_labels;
 1862                         /**< Number of labels */
 1863                 } hkdf_label;
 1864 
 1865         } u1;
 1866 
 1867         /**< LW 15 */
 1868         union {
 1869                 /**< SSL3 */
 1870                 uint8_t iter_count;
 1871                 /**< Iteration count used by the SSL key gen request */
 1872 
 1873                 /**< TLS */
 1874                 uint8_t tls_seed_length;
 1875                 /**< TLS Seed length */
 1876 
 1877                 /**< HKDF */
 1878                 uint8_t hkdf_ikm_length;
 1879                 /**< Input keying material (IKM) length */
 1880 
 1881                 uint8_t resrvd1;
 1882                 /**< Reserved field set to 0 for MGF1 */
 1883 
 1884         } u2;
 1885 
 1886         union {
 1887                 /**< HKDF */
 1888                 uint8_t hkdf_num_sublabels;
 1889                 /**< Number of subLabels in subLabel buffer, 0-4 */
 1890 
 1891                 uint8_t resrvd2;
 1892                 /**< Reserved space - unused */
 1893         } u3;
 1894 
 1895         uint16_t resrvd3;
 1896         /**< Reserved space - unused */
 1897 
 1898 } icp_qat_fw_la_key_gen_common_t;
 1899 
 1900 /**
 1901  *****************************************************************************
 1902  * @ingroup icp_qat_fw_la
 1903  *        Definition of the SSL3 request parameters block
 1904  * @description
 1905  *        This structure contains the SSL3 processing request parameters
 1906  *        incorporating LWs 14-26, as defined by the common base
 1907  *        parameters structure. Unused fields must be set to 0.
 1908  *
 1909  *****************************************************************************/
 1910 typedef struct icp_qat_fw_la_ssl3_req_params_s {
 1911         /**< LWs 14-15 */
 1912         icp_qat_fw_la_key_gen_common_t keygen_comn;
 1913         /**< For other key gen processing these field holds ssl, tls or mgf
 1914          *   parameters */
 1915 
 1916         /**< LW 16-25 */
 1917         uint32_t resrvd[ICP_QAT_FW_NUM_LONGWORDS_10];
 1918         /**< Reserved */
 1919 
 1920         /**< LW 26 */
 1921         union {
 1922                 uint8_t inner_prefix_sz;
 1923                 /**< Size in bytes of the inner prefix data */
 1924 
 1925                 uint8_t aad_sz;
 1926                 /**< Size in bytes of padded AAD data to prefix to the packet
 1927                  * for CCM or GCM processing */
 1928         } u2;
 1929 
 1930         uint8_t resrvd1;
 1931         /**< reserved */
 1932 
 1933         uint16_t resrvd2;
 1934         /**< reserved */
 1935 
 1936 } icp_qat_fw_la_ssl3_req_params_t;
 1937 
 1938 /**
 1939  *****************************************************************************
 1940  * @ingroup icp_qat_fw_la
 1941  *        Definition of the MGF request parameters block
 1942  * @description
 1943  *        This structure contains the MGF processing request parameters
 1944  *        incorporating LWs 14-26, as defined by the common base parameters
 1945  *        structure. Unused fields must be set to 0.
 1946  *
 1947  *****************************************************************************/
 1948 typedef struct icp_qat_fw_la_mgf_req_params_s {
 1949         /**< LWs 14-15 */
 1950         icp_qat_fw_la_key_gen_common_t keygen_comn;
 1951         /**< For other key gen processing these field holds ssl or mgf
 1952          *   parameters */
 1953 
 1954         /**< LW 16-25 */
 1955         uint32_t resrvd[ICP_QAT_FW_NUM_LONGWORDS_10];
 1956         /**< Reserved */
 1957 
 1958         /**< LW 26 */
 1959         union {
 1960                 uint8_t inner_prefix_sz;
 1961                 /**< Size in bytes of the inner prefix data */
 1962 
 1963                 uint8_t aad_sz;
 1964                 /**< Size in bytes of padded AAD data to prefix to the packet
 1965                  * for CCM or GCM processing */
 1966         } u2;
 1967 
 1968         uint8_t resrvd1;
 1969         /**< reserved */
 1970 
 1971         uint16_t resrvd2;
 1972         /**< reserved */
 1973 
 1974 } icp_qat_fw_la_mgf_req_params_t;
 1975 
 1976 /**
 1977  *****************************************************************************
 1978  * @ingroup icp_qat_fw_la
 1979  *        Definition of the TLS request parameters block
 1980  * @description
 1981  *        This structure contains the TLS processing request parameters
 1982  *        incorporating LWs 14-26, as defined by the common base parameters
 1983  *        structure. Unused fields must be set to 0.
 1984  *
 1985  *****************************************************************************/
 1986 typedef struct icp_qat_fw_la_tls_req_params_s {
 1987         /**< LWs 14-15 */
 1988         icp_qat_fw_la_key_gen_common_t keygen_comn;
 1989         /**< For other key gen processing these field holds ssl, tls or mgf
 1990          *   parameters */
 1991 
 1992         /**< LW 16-19 */
 1993         uint32_t resrvd[ICP_QAT_FW_NUM_LONGWORDS_4];
 1994         /**< Reserved */
 1995 
 1996 } icp_qat_fw_la_tls_req_params_t;
 1997 
 1998 /**
 1999  *****************************************************************************
 2000  * @ingroup icp_qat_fw_la
 2001  *      Definition of the common QAT FW request middle block for TRNG.
 2002  * @description
 2003  *      Common section of the request used across all of the services exposed
 2004  *      by the QAT FW. Each of the services inherit these common fields. TRNG
 2005  *      requires a specific implementation.
 2006  *
 2007  *****************************************************************************/
 2008 typedef struct icp_qat_fw_la_trng_req_mid_s {
 2009         /**< LWs 6-13 */
 2010         uint64_t opaque_data;
 2011         /**< Opaque data passed unmodified from the request to response messages
 2012          * by firmware (fw) */
 2013 
 2014         uint64_t resrvd1;
 2015         /**< Reserved, unused for TRNG */
 2016 
 2017         uint64_t dest_data_addr;
 2018         /**< Generic definition of the destination data supplied to the QAT AE.
 2019          * The common flags are used to further describe the attributes of this
 2020          * field */
 2021 
 2022         uint32_t resrvd2;
 2023         /** < Reserved, unused for TRNG */
 2024 
 2025         uint32_t entropy_length;
 2026         /**< Size of the data in bytes to process. Used by the get_random
 2027          * command. Set to 0 for commands that dont need a length parameter */
 2028 
 2029 } icp_qat_fw_la_trng_req_mid_t;
 2030 
 2031 /**
 2032  *****************************************************************************
 2033  * @ingroup icp_qat_fw_la
 2034  *        Definition of the common LA QAT FW TRNG request
 2035  * @description
 2036  *        Definition of the TRNG processing request type
 2037  *
 2038  *****************************************************************************/
 2039 typedef struct icp_qat_fw_la_trng_req_s {
 2040         /**< LWs 0-1 */
 2041         icp_qat_fw_comn_req_hdr_t comn_hdr;
 2042         /**< Common request header */
 2043 
 2044         /**< LWs 2-5 */
 2045         icp_qat_fw_comn_req_hdr_cd_pars_t cd_pars;
 2046         /**< Common Request content descriptor field which points either to a
 2047          * content descriptor
 2048          * parameter block or contains the service-specific data itself. */
 2049 
 2050         /**< LWs 6-13 */
 2051         icp_qat_fw_la_trng_req_mid_t comn_mid;
 2052         /**< TRNG request middle section - differs from the common mid-section
 2053          */
 2054 
 2055         /**< LWs 14-26 */
 2056         uint32_t resrvd1[ICP_QAT_FW_NUM_LONGWORDS_13];
 2057 
 2058         /**< LWs 27-31 */
 2059         uint32_t resrvd2[ICP_QAT_FW_NUM_LONGWORDS_5];
 2060 
 2061 } icp_qat_fw_la_trng_req_t;
 2062 
 2063 /**
 2064  *****************************************************************************
 2065  * @ingroup icp_qat_fw_la
 2066  *        Definition of the Lookaside Eagle Tail Response
 2067  * @description
 2068  *        This is the response delivered to the ET rings by the Lookaside
 2069  *              QAT FW service for all commands
 2070  *
 2071  *****************************************************************************/
 2072 typedef struct icp_qat_fw_la_resp_s {
 2073         /**< LWs 0-1 */
 2074         icp_qat_fw_comn_resp_hdr_t comn_resp;
 2075         /**< Common interface response format see icp_qat_fw.h */
 2076 
 2077         /**< LWs 2-3 */
 2078         uint64_t opaque_data;
 2079         /**< Opaque data passed from the request to the response message */
 2080 
 2081         /**< LWs 4-7 */
 2082         uint32_t resrvd[ICP_QAT_FW_NUM_LONGWORDS_4];
 2083         /**< Reserved */
 2084 
 2085 } icp_qat_fw_la_resp_t;
 2086 
 2087 /**
 2088  *****************************************************************************
 2089  * @ingroup icp_qat_fw_la
 2090  *        Definition of the Lookaside TRNG Test Status Structure
 2091  * @description
 2092  *        As an addition to ICP_QAT_FW_LA_TRNG_STATUS Pass or Fail information
 2093  *        in common response fields, as a response to TRNG_TEST request, Test
 2094  *        status, Counter for failed tests and 4 entropy counter values are
 2095  *        sent
 2096  *        Status of test status and the fail counts.
 2097  *
 2098  *
 2099  *****************************************************************************/
 2100 typedef struct icp_qat_fw_la_trng_test_result_s {
 2101         uint32_t test_status_info;
 2102         /**< TRNG comparator health test status& Validity information
 2103         see Test Status Bit Fields below. */
 2104 
 2105         uint32_t test_status_fail_count;
 2106         /**< TRNG comparator health test status, 32bit fail counter */
 2107 
 2108         uint64_t r_ent_ones_cnt;
 2109         /**< Raw Entropy ones counter */
 2110 
 2111         uint64_t r_ent_zeros_cnt;
 2112         /**< Raw Entropy zeros counter */
 2113 
 2114         uint64_t c_ent_ones_cnt;
 2115         /**< Conditioned Entropy ones counter */
 2116 
 2117         uint64_t c_ent_zeros_cnt;
 2118         /**< Conditioned Entropy zeros counter */
 2119 
 2120         uint64_t resrvd;
 2121         /**< Reserved field must be set to zero */
 2122 
 2123 } icp_qat_fw_la_trng_test_result_t;
 2124 
 2125 /**
 2126  *****************************************************************************
 2127  * @ingroup icp_qat_fw_la
 2128  *      Definition of the Lookaside SSL Key Material Input
 2129  * @description
 2130  *      This struct defines the layout of input parameters for the
 2131  *      SSL3 key generation (source flat buffer format)
 2132  *
 2133  *****************************************************************************/
 2134 typedef struct icp_qat_fw_la_ssl_key_material_input_s {
 2135         uint64_t seed_addr;
 2136         /**< Pointer to seed */
 2137 
 2138         uint64_t label_addr;
 2139         /**< Pointer to label(s) */
 2140 
 2141         uint64_t secret_addr;
 2142         /**< Pointer to secret */
 2143 
 2144 } icp_qat_fw_la_ssl_key_material_input_t;
 2145 
 2146 /**
 2147  *****************************************************************************
 2148  * @ingroup icp_qat_fw_la
 2149  *      Definition of the Lookaside TLS Key Material Input
 2150  * @description
 2151  *      This struct defines the layout of input parameters for the
 2152  *      TLS key generation (source flat buffer format)
 2153  * @note
 2154  *      Secret state value (S split into S1 and S2 parts) is supplied via
 2155  *      Content Descriptor. S1 is placed in an outer prefix buffer, and S2
 2156  *      inside the inner prefix buffer.
 2157  *
 2158  *****************************************************************************/
 2159 typedef struct icp_qat_fw_la_tls_key_material_input_s {
 2160         uint64_t seed_addr;
 2161         /**< Pointer to seed */
 2162 
 2163         uint64_t label_addr;
 2164         /**< Pointer to label(s) */
 2165 
 2166 } icp_qat_fw_la_tls_key_material_input_t;
 2167 
 2168 /**
 2169  *****************************************************************************
 2170  * @ingroup icp_qat_fw_la
 2171  *      Definition of the Lookaside HKDF (TLS 1.3) Key Material Input
 2172  * @description
 2173  *      This structure defines the source buffer for HKDF operations, which
 2174  *      must be provided in flat buffer format.
 2175  *
 2176  *      The result will be returned in the destination buffer (flat format).
 2177  *      All generated key materials will be returned in a packed layout. Where
 2178  *      sublabel flags are specified, the result of the child expands will
 2179  *      immediately follow their parent.
 2180  *
 2181  * @note
 2182  *      TLS 1.3 / HKDF operations require only one key (either the Extract Salt
 2183  *      or the Expand PSK) which is placed in the inner prefix buffer.
 2184  *
 2185  *****************************************************************************/
 2186 typedef struct icp_qat_fw_la_hkdf_key_material_input_s {
 2187         uint64_t ikm_addr;
 2188         /**< Pointer to IKM (input keying material) */
 2189 
 2190         uint64_t labels_addr;
 2191         /**< Pointer to labels buffer.
 2192          * For HKDF Expand (without Label) this buffer contains the Info.
 2193          *
 2194          * For TLS 1.3 / HKDF Expand-Label this buffer contains up to 4
 2195          * icp_qat_fw_hkdf_label structures, which will result in a
 2196          * corresponding number of first level Expand-Label operations.
 2197          *
 2198          * For each of these operations, the result may become an input to child
 2199          * Expand-Label operations as specified by the sublabel flags, where bit
 2200          * 0 indicates a child Expand using label 0 from the sublabels buffer,
 2201          * bit 1 indicates sublabel 1, and so on. In this way, up to 20
 2202          * Expand-Label operations may be performed in one request.
 2203          */
 2204 
 2205         uint64_t sublabels_addr;
 2206         /**< Pointer to 0-4 sublabels for TLS 1.3, following the format
 2207          * described for label_addr above. The buffer will typically contain
 2208          * all 4 of the supported sublabels.
 2209          * The sublabel flags defined for this context are as follows:
 2210          *  - QAT_FW_HKDF_INNER_SUBLABEL_12_BYTE_OKM_BITPOS
 2211          *  - QAT_FW_HKDF_INNER_SUBLABEL_16_BYTE_OKM_BITPOS
 2212          *  - QAT_FW_HKDF_INNER_SUBLABEL_32_BYTE_OKM_BITPOS
 2213          */
 2214 } icp_qat_fw_la_hkdf_key_material_input_t;
 2215 
 2216 /**
 2217  ******************************************************************************
 2218  * @ingroup icp_qat_fw_la
 2219  *
 2220  * @description
 2221  *      Macros using the bit position and mask to set/extract the next
 2222  *      and current id nibbles within the next_curr_id field of the
 2223  *      content descriptor header block, ONLY FOR CIPHER + AUTH COMBINED.
 2224  *      Note that for cipher only or authentication only, the common macros
 2225  *      need to be used. These are defined in the 'icp_qat_fw.h' common header
 2226  *      file, as they are used by compression, cipher and authentication.
 2227  *
 2228  * @param cd_ctrl_hdr_t      Content descriptor control block header.
 2229  * @param val                Value of the field being set.
 2230  *
 2231  *****************************************************************************/
 2232 /** Cipher fields within Cipher + Authentication structure */
 2233 #define ICP_QAT_FW_CIPHER_NEXT_ID_GET(cd_ctrl_hdr_t)                           \
 2234         ((((cd_ctrl_hdr_t)->next_curr_id_cipher) &                             \
 2235           ICP_QAT_FW_COMN_NEXT_ID_MASK) >>                                     \
 2236          (ICP_QAT_FW_COMN_NEXT_ID_BITPOS))
 2237 
 2238 #define ICP_QAT_FW_CIPHER_NEXT_ID_SET(cd_ctrl_hdr_t, val)                      \
 2239         (cd_ctrl_hdr_t)->next_curr_id_cipher =                                 \
 2240             ((((cd_ctrl_hdr_t)->next_curr_id_cipher) &                         \
 2241               ICP_QAT_FW_COMN_CURR_ID_MASK) |                                  \
 2242              ((val << ICP_QAT_FW_COMN_NEXT_ID_BITPOS) &                        \
 2243               ICP_QAT_FW_COMN_NEXT_ID_MASK))
 2244 
 2245 #define ICP_QAT_FW_CIPHER_CURR_ID_GET(cd_ctrl_hdr_t)                           \
 2246         (((cd_ctrl_hdr_t)->next_curr_id_cipher) & ICP_QAT_FW_COMN_CURR_ID_MASK)
 2247 
 2248 #define ICP_QAT_FW_CIPHER_CURR_ID_SET(cd_ctrl_hdr_t, val)                      \
 2249         (cd_ctrl_hdr_t)->next_curr_id_cipher =                                 \
 2250             ((((cd_ctrl_hdr_t)->next_curr_id_cipher) &                         \
 2251               ICP_QAT_FW_COMN_NEXT_ID_MASK) |                                  \
 2252              ((val)&ICP_QAT_FW_COMN_CURR_ID_MASK))
 2253 
 2254 /** Authentication fields within Cipher + Authentication structure */
 2255 #define ICP_QAT_FW_AUTH_NEXT_ID_GET(cd_ctrl_hdr_t)                             \
 2256         ((((cd_ctrl_hdr_t)->next_curr_id_auth) &                               \
 2257           ICP_QAT_FW_COMN_NEXT_ID_MASK) >>                                     \
 2258          (ICP_QAT_FW_COMN_NEXT_ID_BITPOS))
 2259 
 2260 #define ICP_QAT_FW_AUTH_NEXT_ID_SET(cd_ctrl_hdr_t, val)                        \
 2261         (cd_ctrl_hdr_t)->next_curr_id_auth =                                   \
 2262             ((((cd_ctrl_hdr_t)->next_curr_id_auth) &                           \
 2263               ICP_QAT_FW_COMN_CURR_ID_MASK) |                                  \
 2264              ((val << ICP_QAT_FW_COMN_NEXT_ID_BITPOS) &                        \
 2265               ICP_QAT_FW_COMN_NEXT_ID_MASK))
 2266 
 2267 #define ICP_QAT_FW_AUTH_CURR_ID_GET(cd_ctrl_hdr_t)                             \
 2268         (((cd_ctrl_hdr_t)->next_curr_id_auth) & ICP_QAT_FW_COMN_CURR_ID_MASK)
 2269 
 2270 #define ICP_QAT_FW_AUTH_CURR_ID_SET(cd_ctrl_hdr_t, val)                        \
 2271         (cd_ctrl_hdr_t)->next_curr_id_auth =                                   \
 2272             ((((cd_ctrl_hdr_t)->next_curr_id_auth) &                           \
 2273               ICP_QAT_FW_COMN_NEXT_ID_MASK) |                                  \
 2274              ((val)&ICP_QAT_FW_COMN_CURR_ID_MASK))
 2275 
 2276 /*  Definitions of the bits in the test_status_info of the TRNG_TEST response.
 2277  *  The values returned by the Lookaside service are given below
 2278  *  The Test result and Test Fail Count values are only valid if the Test
 2279  *  Results Valid (Tv) is set.
 2280  *
 2281  *  TRNG Test Status Info
 2282  *  + ===== + ------------------------------------------------ + --- + --- +
 2283  *  |  Bit  |                   31 - 2                         |  1  |  0  |
 2284  *  + ===== + ------------------------------------------------ + --- + --- +
 2285  *  | Flags |                 RESERVED = 0                     | Tv  | Ts  |
 2286  *  + ===== + ------------------------------------------------------------ +
 2287  */
 2288 /******************************************************************************
 2289  * @ingroup icp_qat_fw_la
 2290  *        Definition of the Lookaside TRNG Test Status Information received as
 2291  *        a part of icp_qat_fw_la_trng_test_result_t
 2292  *
 2293  *****************************************************************************/
 2294 #define QAT_FW_LA_TRNG_TEST_STATUS_TS_BITPOS 0
 2295 /**< @ingroup icp_qat_fw_la
 2296  * TRNG Test Result t_status field bit pos definition.*/
 2297 
 2298 #define QAT_FW_LA_TRNG_TEST_STATUS_TS_MASK 0x1
 2299 /**< @ingroup icp_qat_fw_la
 2300  * TRNG Test Result t_status field mask definition.*/
 2301 
 2302 #define QAT_FW_LA_TRNG_TEST_STATUS_TV_BITPOS 1
 2303 /**< @ingroup icp_qat_fw_la
 2304  * TRNG Test Result test results valid field bit pos definition.*/
 2305 
 2306 #define QAT_FW_LA_TRNG_TEST_STATUS_TV_MASK 0x1
 2307 /**< @ingroup icp_qat_fw_la
 2308  * TRNG Test Result test results valid field mask definition.*/
 2309 
 2310 /******************************************************************************
 2311  * @ingroup icp_qat_fw_la
 2312  *        Definition of the Lookaside TRNG test_status values.
 2313  *
 2314  *
 2315  *****************************************************************************/
 2316 #define QAT_FW_LA_TRNG_TEST_STATUS_TV_VALID 1
 2317 /**< @ingroup icp_qat_fw_la
 2318  * TRNG TEST Response Test Results Valid Value.*/
 2319 
 2320 #define QAT_FW_LA_TRNG_TEST_STATUS_TV_NOT_VALID 0
 2321 /**< @ingroup icp_qat_fw_la
 2322  * TRNG TEST Response Test Results are NOT Valid Value.*/
 2323 
 2324 #define QAT_FW_LA_TRNG_TEST_STATUS_TS_NO_FAILS 1
 2325 /**< @ingroup icp_qat_fw_la
 2326  * Value for TRNG Test status tests have NO FAILs Value.*/
 2327 
 2328 #define QAT_FW_LA_TRNG_TEST_STATUS_TS_HAS_FAILS 0
 2329 /**< @ingroup icp_qat_fw_la
 2330  * Value for TRNG Test status tests have one or more FAILS Value.*/
 2331 
 2332 /**
 2333  ******************************************************************************
 2334  * @ingroup icp_qat_fw_la
 2335  *
 2336  * @description
 2337  *       Macro for extraction of the Test Status Field returned in the response
 2338  *       to TRNG TEST command.
 2339  *
 2340  * @param test_status        8 bit test_status value to extract the status bit
 2341  *
 2342  *****************************************************************************/
 2343 #define ICP_QAT_FW_LA_TRNG_TEST_STATUS_TS_FLD_GET(test_status)                 \
 2344         QAT_FIELD_GET(test_status,                                             \
 2345                       QAT_FW_LA_TRNG_TEST_STATUS_TS_BITPOS,                    \
 2346                       QAT_FW_LA_TRNG_TEST_STATUS_TS_MASK)
 2347 /**
 2348  ******************************************************************************
 2349  * @ingroup icp_qat_fw_la
 2350  *
 2351  * @description
 2352  *       Macro for extraction of the Test Results Valid Field returned in the
 2353  *       response to TRNG TEST command.
 2354  *
 2355  * @param test_status        8 bit test_status value to extract the Tests
 2356  *                           Results valid bit
 2357  *
 2358  *****************************************************************************/
 2359 #define ICP_QAT_FW_LA_TRNG_TEST_STATUS_TV_FLD_GET(test_status)                 \
 2360         QAT_FIELD_GET(test_status,                                             \
 2361                       QAT_FW_LA_TRNG_TEST_STATUS_TV_BITPOS,                    \
 2362                       QAT_FW_LA_TRNG_TEST_STATUS_TV_MASK)
 2363 
 2364 /*
 2365  ******************************************************************************
 2366  * MGF Max supported input parameters
 2367  ******************************************************************************
 2368  */
 2369 #define ICP_QAT_FW_LA_MGF_SEED_LEN_MAX 255
 2370 /**< @ingroup icp_qat_fw_la
 2371  * Maximum seed length for MGF1 request in bytes
 2372  * Typical values may be 48, 64, 128 bytes (or any).*/
 2373 
 2374 #define ICP_QAT_FW_LA_MGF_MASK_LEN_MAX 65528
 2375 /**< @ingroup icp_qat_fw_la
 2376  * Maximum mask length for MGF1 request in bytes
 2377  * Typical values may be 8 (64-bit), 16 (128-bit). MUST be quad word multiple */
 2378 
 2379 /*
 2380  ******************************************************************************
 2381  * SSL Max supported input parameters
 2382  ******************************************************************************
 2383  */
 2384 #define ICP_QAT_FW_LA_SSL_SECRET_LEN_MAX 512
 2385 /**< @ingroup icp_qat_fw_la
 2386  * Maximum secret length for SSL3 Key Gen request (bytes) */
 2387 
 2388 #define ICP_QAT_FW_LA_SSL_ITERATES_LEN_MAX 16
 2389 /**< @ingroup icp_qat_fw_la
 2390  * Maximum iterations for SSL3 Key Gen request (integer) */
 2391 
 2392 #define ICP_QAT_FW_LA_SSL_LABEL_LEN_MAX 136
 2393 /**< @ingroup icp_qat_fw_la
 2394  * Maximum label length for SSL3 Key Gen request (bytes) */
 2395 
 2396 #define ICP_QAT_FW_LA_SSL_SEED_LEN_MAX 64
 2397 /**< @ingroup icp_qat_fw_la
 2398  * Maximum seed length for SSL3 Key Gen request (bytes) */
 2399 
 2400 #define ICP_QAT_FW_LA_SSL_OUTPUT_LEN_MAX 248
 2401 /**< @ingroup icp_qat_fw_la
 2402  * Maximum output length for SSL3 Key Gen request (bytes) */
 2403 
 2404 /*
 2405  ******************************************************************************
 2406  * TLS Max supported input parameters
 2407  ******************************************************************************
 2408  */
 2409 #define ICP_QAT_FW_LA_TLS_SECRET_LEN_MAX 128
 2410 /**< @ingroup icp_qat_fw_la
 2411  * Maximum secret length for TLS Key Gen request (bytes) */
 2412 
 2413 #define ICP_QAT_FW_LA_TLS_V1_1_SECRET_LEN_MAX 128
 2414 /**< @ingroup icp_qat_fw_la
 2415  * Maximum secret length for TLS Key Gen request (bytes) */
 2416 
 2417 #define ICP_QAT_FW_LA_TLS_V1_2_SECRET_LEN_MAX 64
 2418 /**< @ingroup icp_qat_fw_la
 2419  * Maximum secret length for TLS Key Gen request (bytes) */
 2420 
 2421 #define ICP_QAT_FW_LA_TLS_LABEL_LEN_MAX 255
 2422 /**< @ingroup icp_qat_fw_la
 2423  * Maximum label length for TLS Key Gen request (bytes) */
 2424 
 2425 #define ICP_QAT_FW_LA_TLS_SEED_LEN_MAX 64
 2426 /**< @ingroup icp_qat_fw_la
 2427  * Maximum seed length for TLS Key Gen request (bytes) */
 2428 
 2429 #define ICP_QAT_FW_LA_TLS_OUTPUT_LEN_MAX 248
 2430 /**< @ingroup icp_qat_fw_la
 2431  * Maximum output length for TLS Key Gen request (bytes) */
 2432 
 2433 /*
 2434  ******************************************************************************
 2435  * HKDF input parameters
 2436  ******************************************************************************
 2437  */
 2438 
 2439 #define QAT_FW_HKDF_LABEL_BUFFER_SZ 78
 2440 #define QAT_FW_HKDF_LABEL_LEN_SZ 1
 2441 #define QAT_FW_HKDF_LABEL_FLAGS_SZ 1
 2442 
 2443 #define QAT_FW_HKDF_LABEL_STRUCT_SZ                                            \
 2444         (QAT_FW_HKDF_LABEL_BUFFER_SZ + QAT_FW_HKDF_LABEL_LEN_SZ +              \
 2445          QAT_FW_HKDF_LABEL_FLAGS_SZ)
 2446 
 2447 /**
 2448  *****************************************************************************
 2449  * @ingroup icp_qat_fw_la
 2450  *
 2451  * @description
 2452  *      Wraps an RFC 8446 HkdfLabel with metadata for use in HKDF Expand-Label
 2453  *      operations.
 2454  *
 2455  *****************************************************************************/
 2456 struct icp_qat_fw_hkdf_label {
 2457         uint8_t label[QAT_FW_HKDF_LABEL_BUFFER_SZ];
 2458         /**< Buffer containing an HkdfLabel as specified in RFC 8446 */
 2459 
 2460         uint8_t label_length;
 2461         /**< The size of the HkdfLabel */
 2462 
 2463         union {
 2464                 uint8_t label_flags;
 2465                 /**< For first-level labels: each bit in [0..3] will trigger a
 2466                  * child Expand-Label operation on the corresponding sublabel.
 2467                  * Bits [4..7] are reserved.
 2468                  */
 2469 
 2470                 uint8_t sublabel_flags;
 2471                 /**< For sublabels the following flags are defined:
 2472                  *  - QAT_FW_HKDF_INNER_SUBLABEL_12_BYTE_OKM_BITPOS
 2473                  *  - QAT_FW_HKDF_INNER_SUBLABEL_16_BYTE_OKM_BITPOS
 2474                  *  - QAT_FW_HKDF_INNER_SUBLABEL_32_BYTE_OKM_BITPOS
 2475                  */
 2476         } u;
 2477 };
 2478 
 2479 #define ICP_QAT_FW_LA_HKDF_SECRET_LEN_MAX 64
 2480 /**< Maximum secret length for HKDF request (bytes) */
 2481 
 2482 #define ICP_QAT_FW_LA_HKDF_IKM_LEN_MAX 64
 2483 /**< Maximum IKM length for HKDF request (bytes) */
 2484 
 2485 #define QAT_FW_HKDF_MAX_LABELS 4
 2486 /**< Maximum number of label structures allowed in the labels buffer */
 2487 
 2488 #define QAT_FW_HKDF_MAX_SUBLABELS 4
 2489 /**< Maximum number of label structures allowed in the sublabels buffer */
 2490 
 2491 /*
 2492  ******************************************************************************
 2493  * HKDF inner sublabel flags
 2494  ******************************************************************************
 2495  */
 2496 
 2497 #define QAT_FW_HKDF_INNER_SUBLABEL_12_BYTE_OKM_BITPOS 0
 2498 /**< Limit sublabel expand output to 12 bytes -- used with the "iv" sublabel */
 2499 
 2500 #define QAT_FW_HKDF_INNER_SUBLABEL_16_BYTE_OKM_BITPOS 1
 2501 /**< Limit sublabel expand output to 16 bytes -- used with SHA-256 "key" */
 2502 
 2503 #define QAT_FW_HKDF_INNER_SUBLABEL_32_BYTE_OKM_BITPOS 2
 2504 /**< Limit sublabel expand output to 32 bytes -- used with SHA-384 "key" */
 2505 
 2506 #endif /* _ICP_QAT_FW_LA_H_ */

Cache object: 8f0c0c957a91620052071e89bc0ad251


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.