1 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */ 2 /* Copyright(c) 2014 - 2020 Intel Corporation */ 3 #ifndef _ICP_QAT_FW_LA_H_ 4 #define _ICP_QAT_FW_LA_H_ 5 #include "icp_qat_fw.h" 6 7 enum icp_qat_fw_la_cmd_id { 8 ICP_QAT_FW_LA_CMD_CIPHER = 0, 9 ICP_QAT_FW_LA_CMD_AUTH = 1, 10 ICP_QAT_FW_LA_CMD_CIPHER_HASH = 2, 11 ICP_QAT_FW_LA_CMD_HASH_CIPHER = 3, 12 ICP_QAT_FW_LA_CMD_TRNG_GET_RANDOM = 4, 13 ICP_QAT_FW_LA_CMD_TRNG_TEST = 5, 14 ICP_QAT_FW_LA_CMD_SSL3_KEY_DERIVE = 6, 15 ICP_QAT_FW_LA_CMD_TLS_V1_1_KEY_DERIVE = 7, 16 ICP_QAT_FW_LA_CMD_TLS_V1_2_KEY_DERIVE = 8, 17 ICP_QAT_FW_LA_CMD_MGF1 = 9, 18 ICP_QAT_FW_LA_CMD_AUTH_PRE_COMP = 10, 19 ICP_QAT_FW_LA_CMD_CIPHER_PRE_COMP = 11, 20 ICP_QAT_FW_LA_CMD_DELIMITER = 12 21 }; 22 23 #define ICP_QAT_FW_LA_ICV_VER_STATUS_PASS ICP_QAT_FW_COMN_STATUS_FLAG_OK 24 #define ICP_QAT_FW_LA_ICV_VER_STATUS_FAIL ICP_QAT_FW_COMN_STATUS_FLAG_ERROR 25 #define ICP_QAT_FW_LA_TRNG_STATUS_PASS ICP_QAT_FW_COMN_STATUS_FLAG_OK 26 #define ICP_QAT_FW_LA_TRNG_STATUS_FAIL ICP_QAT_FW_COMN_STATUS_FLAG_ERROR 27 28 struct icp_qat_fw_la_bulk_req { 29 struct icp_qat_fw_comn_req_hdr comn_hdr; 30 struct icp_qat_fw_comn_req_hdr_cd_pars cd_pars; 31 struct icp_qat_fw_comn_req_mid comn_mid; 32 struct icp_qat_fw_comn_req_rqpars serv_specif_rqpars; 33 struct icp_qat_fw_comn_req_cd_ctrl cd_ctrl; 34 }; 35 36 #define ICP_QAT_FW_LA_USE_UCS_SLICE_TYPE 1 37 #define QAT_LA_SLICE_TYPE_BITPOS 14 38 #define QAT_LA_SLICE_TYPE_MASK 0x3 39 #define ICP_QAT_FW_LA_GCM_IV_LEN_12_OCTETS 1 40 #define ICP_QAT_FW_LA_GCM_IV_LEN_NOT_12_OCTETS 0 41 #define QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS 12 42 #define ICP_QAT_FW_LA_ZUC_3G_PROTO 1 43 #define QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK 0x1 44 #define QAT_LA_GCM_IV_LEN_FLAG_BITPOS 11 45 #define QAT_LA_GCM_IV_LEN_FLAG_MASK 0x1 46 #define ICP_QAT_FW_LA_DIGEST_IN_BUFFER 1 47 #define ICP_QAT_FW_LA_NO_DIGEST_IN_BUFFER 0 48 #define QAT_LA_DIGEST_IN_BUFFER_BITPOS 10 49 #define QAT_LA_DIGEST_IN_BUFFER_MASK 0x1 50 #define ICP_QAT_FW_LA_SNOW_3G_PROTO 4 51 #define ICP_QAT_FW_LA_GCM_PROTO 2 52 #define ICP_QAT_FW_LA_CCM_PROTO 1 53 #define ICP_QAT_FW_LA_NO_PROTO 0 54 #define QAT_LA_PROTO_BITPOS 7 55 #define QAT_LA_PROTO_MASK 0x7 56 #define ICP_QAT_FW_LA_CMP_AUTH_RES 1 57 #define ICP_QAT_FW_LA_NO_CMP_AUTH_RES 0 58 #define QAT_LA_CMP_AUTH_RES_BITPOS 6 59 #define QAT_LA_CMP_AUTH_RES_MASK 0x1 60 #define ICP_QAT_FW_LA_RET_AUTH_RES 1 61 #define ICP_QAT_FW_LA_NO_RET_AUTH_RES 0 62 #define QAT_LA_RET_AUTH_RES_BITPOS 5 63 #define QAT_LA_RET_AUTH_RES_MASK 0x1 64 #define ICP_QAT_FW_LA_UPDATE_STATE 1 65 #define ICP_QAT_FW_LA_NO_UPDATE_STATE 0 66 #define QAT_LA_UPDATE_STATE_BITPOS 4 67 #define QAT_LA_UPDATE_STATE_MASK 0x1 68 #define ICP_QAT_FW_CIPH_AUTH_CFG_OFFSET_IN_CD_SETUP 0 69 #define ICP_QAT_FW_CIPH_AUTH_CFG_OFFSET_IN_SHRAM_CP 1 70 #define QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS 3 71 #define QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK 0x1 72 #define ICP_QAT_FW_CIPH_IV_64BIT_PTR 0 73 #define ICP_QAT_FW_CIPH_IV_16BYTE_DATA 1 74 #define QAT_LA_CIPH_IV_FLD_BITPOS 2 75 #define QAT_LA_CIPH_IV_FLD_MASK 0x1 76 #define ICP_QAT_FW_LA_PARTIAL_NONE 0 77 #define ICP_QAT_FW_LA_PARTIAL_START 1 78 #define ICP_QAT_FW_LA_PARTIAL_MID 3 79 #define ICP_QAT_FW_LA_PARTIAL_END 2 80 #define QAT_LA_PARTIAL_BITPOS 0 81 #define QAT_LA_PARTIAL_MASK 0x3 82 #define ICP_QAT_FW_LA_FLAGS_BUILD(zuc_proto, gcm_iv_len, auth_rslt, proto, \ 83 cmp_auth, ret_auth, update_state, \ 84 ciph_iv, ciphcfg, partial) \ 85 (((zuc_proto & QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK) << \ 86 QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS) | \ 87 ((gcm_iv_len & QAT_LA_GCM_IV_LEN_FLAG_MASK) << \ 88 QAT_LA_GCM_IV_LEN_FLAG_BITPOS) | \ 89 ((auth_rslt & QAT_LA_DIGEST_IN_BUFFER_MASK) << \ 90 QAT_LA_DIGEST_IN_BUFFER_BITPOS) | \ 91 ((proto & QAT_LA_PROTO_MASK) << \ 92 QAT_LA_PROTO_BITPOS) | \ 93 ((cmp_auth & QAT_LA_CMP_AUTH_RES_MASK) << \ 94 QAT_LA_CMP_AUTH_RES_BITPOS) | \ 95 ((ret_auth & QAT_LA_RET_AUTH_RES_MASK) << \ 96 QAT_LA_RET_AUTH_RES_BITPOS) | \ 97 ((update_state & QAT_LA_UPDATE_STATE_MASK) << \ 98 QAT_LA_UPDATE_STATE_BITPOS) | \ 99 ((ciph_iv & QAT_LA_CIPH_IV_FLD_MASK) << \ 100 QAT_LA_CIPH_IV_FLD_BITPOS) | \ 101 ((ciphcfg & QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK) << \ 102 QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS) | \ 103 ((partial & QAT_LA_PARTIAL_MASK) << \ 104 QAT_LA_PARTIAL_BITPOS)) 105 106 #define ICP_QAT_FW_LA_CIPH_IV_FLD_FLAG_GET(flags) \ 107 QAT_FIELD_GET(flags, QAT_LA_CIPH_IV_FLD_BITPOS, \ 108 QAT_LA_CIPH_IV_FLD_MASK) 109 110 #define ICP_QAT_FW_LA_CIPH_AUTH_CFG_OFFSET_FLAG_GET(flags) \ 111 QAT_FIELD_GET(flags, QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS, \ 112 QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK) 113 114 #define ICP_QAT_FW_LA_ZUC_3G_PROTO_FLAG_GET(flags) \ 115 QAT_FIELD_GET(flags, QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS, \ 116 QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK) 117 118 #define ICP_QAT_FW_LA_GCM_IV_LEN_FLAG_GET(flags) \ 119 QAT_FIELD_GET(flags, QAT_LA_GCM_IV_LEN_FLAG_BITPOS, \ 120 QAT_LA_GCM_IV_LEN_FLAG_MASK) 121 122 #define ICP_QAT_FW_LA_PROTO_GET(flags) \ 123 QAT_FIELD_GET(flags, QAT_LA_PROTO_BITPOS, QAT_LA_PROTO_MASK) 124 125 #define ICP_QAT_FW_LA_CMP_AUTH_GET(flags) \ 126 QAT_FIELD_GET(flags, QAT_LA_CMP_AUTH_RES_BITPOS, \ 127 QAT_LA_CMP_AUTH_RES_MASK) 128 129 #define ICP_QAT_FW_LA_RET_AUTH_GET(flags) \ 130 QAT_FIELD_GET(flags, QAT_LA_RET_AUTH_RES_BITPOS, \ 131 QAT_LA_RET_AUTH_RES_MASK) 132 133 #define ICP_QAT_FW_LA_DIGEST_IN_BUFFER_GET(flags) \ 134 QAT_FIELD_GET(flags, QAT_LA_DIGEST_IN_BUFFER_BITPOS, \ 135 QAT_LA_DIGEST_IN_BUFFER_MASK) 136 137 #define ICP_QAT_FW_LA_UPDATE_STATE_GET(flags) \ 138 QAT_FIELD_GET(flags, QAT_LA_UPDATE_STATE_BITPOS, \ 139 QAT_LA_UPDATE_STATE_MASK) 140 141 #define ICP_QAT_FW_LA_PARTIAL_GET(flags) \ 142 QAT_FIELD_GET(flags, QAT_LA_PARTIAL_BITPOS, \ 143 QAT_LA_PARTIAL_MASK) 144 145 #define ICP_QAT_FW_LA_CIPH_IV_FLD_FLAG_SET(flags, val) \ 146 QAT_FIELD_SET(flags, val, QAT_LA_CIPH_IV_FLD_BITPOS, \ 147 QAT_LA_CIPH_IV_FLD_MASK) 148 149 #define ICP_QAT_FW_LA_CIPH_AUTH_CFG_OFFSET_FLAG_SET(flags, val) \ 150 QAT_FIELD_SET(flags, val, QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS, \ 151 QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK) 152 153 #define ICP_QAT_FW_LA_ZUC_3G_PROTO_FLAG_SET(flags, val) \ 154 QAT_FIELD_SET(flags, val, QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS, \ 155 QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK) 156 157 #define ICP_QAT_FW_LA_GCM_IV_LEN_FLAG_SET(flags, val) \ 158 QAT_FIELD_SET(flags, val, QAT_LA_GCM_IV_LEN_FLAG_BITPOS, \ 159 QAT_LA_GCM_IV_LEN_FLAG_MASK) 160 161 #define ICP_QAT_FW_LA_PROTO_SET(flags, val) \ 162 QAT_FIELD_SET(flags, val, QAT_LA_PROTO_BITPOS, \ 163 QAT_LA_PROTO_MASK) 164 165 #define ICP_QAT_FW_LA_CMP_AUTH_SET(flags, val) \ 166 QAT_FIELD_SET(flags, val, QAT_LA_CMP_AUTH_RES_BITPOS, \ 167 QAT_LA_CMP_AUTH_RES_MASK) 168 169 #define ICP_QAT_FW_LA_RET_AUTH_SET(flags, val) \ 170 QAT_FIELD_SET(flags, val, QAT_LA_RET_AUTH_RES_BITPOS, \ 171 QAT_LA_RET_AUTH_RES_MASK) 172 173 #define ICP_QAT_FW_LA_DIGEST_IN_BUFFER_SET(flags, val) \ 174 QAT_FIELD_SET(flags, val, QAT_LA_DIGEST_IN_BUFFER_BITPOS, \ 175 QAT_LA_DIGEST_IN_BUFFER_MASK) 176 177 #define ICP_QAT_FW_LA_UPDATE_STATE_SET(flags, val) \ 178 QAT_FIELD_SET(flags, val, QAT_LA_UPDATE_STATE_BITPOS, \ 179 QAT_LA_UPDATE_STATE_MASK) 180 181 #define ICP_QAT_FW_LA_PARTIAL_SET(flags, val) \ 182 QAT_FIELD_SET(flags, val, QAT_LA_PARTIAL_BITPOS, \ 183 QAT_LA_PARTIAL_MASK) 184 185 #define ICP_QAT_FW_LA_SLICE_TYPE_SET(flags, val) \ 186 QAT_FIELD_SET(flags, val, QAT_LA_SLICE_TYPE_BITPOS, \ 187 QAT_LA_SLICE_TYPE_MASK) 188 189 struct icp_qat_fw_cipher_req_hdr_cd_pars { 190 union { 191 struct { 192 __u64 content_desc_addr; 193 __u16 content_desc_resrvd1; 194 __u8 content_desc_params_sz; 195 __u8 content_desc_hdr_resrvd2; 196 __u32 content_desc_resrvd3; 197 } s; 198 struct { 199 __u32 cipher_key_array[ICP_QAT_FW_NUM_LONGWORDS_4]; 200 } s1; 201 } u; 202 }; 203 204 struct icp_qat_fw_cipher_auth_req_hdr_cd_pars { 205 union { 206 struct { 207 __u64 content_desc_addr; 208 __u16 content_desc_resrvd1; 209 __u8 content_desc_params_sz; 210 __u8 content_desc_hdr_resrvd2; 211 __u32 content_desc_resrvd3; 212 } s; 213 struct { 214 __u32 cipher_key_array[ICP_QAT_FW_NUM_LONGWORDS_4]; 215 } sl; 216 } u; 217 }; 218 219 struct icp_qat_fw_cipher_cd_ctrl_hdr { 220 __u8 cipher_state_sz; 221 __u8 cipher_key_sz; 222 __u8 cipher_cfg_offset; 223 __u8 next_curr_id; 224 __u8 cipher_padding_sz; 225 __u8 resrvd1; 226 __u16 resrvd2; 227 __u32 resrvd3[ICP_QAT_FW_NUM_LONGWORDS_3]; 228 }; 229 230 struct icp_qat_fw_auth_cd_ctrl_hdr { 231 __u32 resrvd1; 232 __u8 resrvd2; 233 __u8 hash_flags; 234 __u8 hash_cfg_offset; 235 __u8 next_curr_id; 236 __u8 resrvd3; 237 __u8 outer_prefix_sz; 238 __u8 final_sz; 239 __u8 inner_res_sz; 240 __u8 resrvd4; 241 __u8 inner_state1_sz; 242 __u8 inner_state2_offset; 243 __u8 inner_state2_sz; 244 __u8 outer_config_offset; 245 __u8 outer_state1_sz; 246 __u8 outer_res_sz; 247 __u8 outer_prefix_offset; 248 }; 249 250 struct icp_qat_fw_cipher_auth_cd_ctrl_hdr { 251 __u8 cipher_state_sz; 252 __u8 cipher_key_sz; 253 __u8 cipher_cfg_offset; 254 __u8 next_curr_id_cipher; 255 __u8 cipher_padding_sz; 256 __u8 hash_flags; 257 __u8 hash_cfg_offset; 258 __u8 next_curr_id_auth; 259 __u8 resrvd1; 260 __u8 outer_prefix_sz; 261 __u8 final_sz; 262 __u8 inner_res_sz; 263 __u8 resrvd2; 264 __u8 inner_state1_sz; 265 __u8 inner_state2_offset; 266 __u8 inner_state2_sz; 267 __u8 outer_config_offset; 268 __u8 outer_state1_sz; 269 __u8 outer_res_sz; 270 __u8 outer_prefix_offset; 271 }; 272 273 #define ICP_QAT_FW_AUTH_HDR_FLAG_DO_NESTED 1 274 #define ICP_QAT_FW_AUTH_HDR_FLAG_NO_NESTED 0 275 #define ICP_QAT_FW_CCM_GCM_AAD_SZ_MAX 240 276 #define ICP_QAT_FW_HASH_REQUEST_PARAMETERS_OFFSET \ 277 (sizeof(struct icp_qat_fw_la_cipher_req_params_t)) 278 #define ICP_QAT_FW_CIPHER_REQUEST_PARAMETERS_OFFSET (0) 279 280 struct icp_qat_fw_la_cipher_req_params { 281 __u32 cipher_offset; 282 __u32 cipher_length; 283 union { 284 __u32 cipher_IV_array[ICP_QAT_FW_NUM_LONGWORDS_4]; 285 struct { 286 __u64 cipher_IV_ptr; 287 __u64 resrvd1; 288 } s; 289 } u; 290 }; 291 292 struct icp_qat_fw_la_auth_req_params { 293 __u32 auth_off; 294 __u32 auth_len; 295 union { 296 __u64 auth_partial_st_prefix; 297 __u64 aad_adr; 298 } u1; 299 __u64 auth_res_addr; 300 union { 301 __u8 inner_prefix_sz; 302 __u8 aad_sz; 303 } u2; 304 __u8 resrvd1; 305 __u8 hash_state_sz; 306 __u8 auth_res_sz; 307 } __packed; 308 309 struct icp_qat_fw_la_auth_req_params_resrvd_flds { 310 __u32 resrvd[ICP_QAT_FW_NUM_LONGWORDS_6]; 311 union { 312 __u8 inner_prefix_sz; 313 __u8 aad_sz; 314 } u2; 315 __u8 resrvd1; 316 __u16 resrvd2; 317 }; 318 319 struct icp_qat_fw_la_resp { 320 struct icp_qat_fw_comn_resp_hdr comn_resp; 321 __u64 opaque_data; 322 __u32 resrvd[ICP_QAT_FW_NUM_LONGWORDS_4]; 323 }; 324 325 #define ICP_QAT_FW_CIPHER_NEXT_ID_GET(cd_ctrl_hdr_t) \ 326 ((((cd_ctrl_hdr_t)->next_curr_id_cipher) & \ 327 ICP_QAT_FW_COMN_NEXT_ID_MASK) >> (ICP_QAT_FW_COMN_NEXT_ID_BITPOS)) 328 329 #define ICP_QAT_FW_CIPHER_NEXT_ID_SET(cd_ctrl_hdr_t, val) \ 330 { (cd_ctrl_hdr_t)->next_curr_id_cipher = \ 331 ((((cd_ctrl_hdr_t)->next_curr_id_cipher) \ 332 & ICP_QAT_FW_COMN_CURR_ID_MASK) | \ 333 ((val << ICP_QAT_FW_COMN_NEXT_ID_BITPOS) \ 334 & ICP_QAT_FW_COMN_NEXT_ID_MASK)) } 335 336 #define ICP_QAT_FW_CIPHER_CURR_ID_GET(cd_ctrl_hdr_t) \ 337 (((cd_ctrl_hdr_t)->next_curr_id_cipher) \ 338 & ICP_QAT_FW_COMN_CURR_ID_MASK) 339 340 #define ICP_QAT_FW_CIPHER_CURR_ID_SET(cd_ctrl_hdr_t, val) \ 341 { (cd_ctrl_hdr_t)->next_curr_id_cipher = \ 342 ((((cd_ctrl_hdr_t)->next_curr_id_cipher) \ 343 & ICP_QAT_FW_COMN_NEXT_ID_MASK) | \ 344 ((val) & ICP_QAT_FW_COMN_CURR_ID_MASK)) } 345 346 #define ICP_QAT_FW_AUTH_NEXT_ID_GET(cd_ctrl_hdr_t) \ 347 ((((cd_ctrl_hdr_t)->next_curr_id_auth) & ICP_QAT_FW_COMN_NEXT_ID_MASK) \ 348 >> (ICP_QAT_FW_COMN_NEXT_ID_BITPOS)) 349 350 #define ICP_QAT_FW_AUTH_NEXT_ID_SET(cd_ctrl_hdr_t, val) \ 351 { (cd_ctrl_hdr_t)->next_curr_id_auth = \ 352 ((((cd_ctrl_hdr_t)->next_curr_id_auth) \ 353 & ICP_QAT_FW_COMN_CURR_ID_MASK) | \ 354 ((val << ICP_QAT_FW_COMN_NEXT_ID_BITPOS) \ 355 & ICP_QAT_FW_COMN_NEXT_ID_MASK)) } 356 357 #define ICP_QAT_FW_AUTH_CURR_ID_GET(cd_ctrl_hdr_t) \ 358 (((cd_ctrl_hdr_t)->next_curr_id_auth) \ 359 & ICP_QAT_FW_COMN_CURR_ID_MASK) 360 361 #define ICP_QAT_FW_AUTH_CURR_ID_SET(cd_ctrl_hdr_t, val) \ 362 { (cd_ctrl_hdr_t)->next_curr_id_auth = \ 363 ((((cd_ctrl_hdr_t)->next_curr_id_auth) \ 364 & ICP_QAT_FW_COMN_NEXT_ID_MASK) | \ 365 ((val) & ICP_QAT_FW_COMN_CURR_ID_MASK)) } 366 367 #endif 368