/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */ /* Copyright(c) 2014 - 2020 Intel Corporation */ #ifndef _ICP_QAT_FW_LA_H_ #define _ICP_QAT_FW_LA_H_ #include "icp_qat_fw.h" enum icp_qat_fw_la_cmd_id { ICP_QAT_FW_LA_CMD_CIPHER = 0, ICP_QAT_FW_LA_CMD_AUTH = 1, ICP_QAT_FW_LA_CMD_CIPHER_HASH = 2, ICP_QAT_FW_LA_CMD_HASH_CIPHER = 3, ICP_QAT_FW_LA_CMD_TRNG_GET_RANDOM = 4, ICP_QAT_FW_LA_CMD_TRNG_TEST = 5, ICP_QAT_FW_LA_CMD_SSL3_KEY_DERIVE = 6, ICP_QAT_FW_LA_CMD_TLS_V1_1_KEY_DERIVE = 7, ICP_QAT_FW_LA_CMD_TLS_V1_2_KEY_DERIVE = 8, ICP_QAT_FW_LA_CMD_MGF1 = 9, ICP_QAT_FW_LA_CMD_AUTH_PRE_COMP = 10, ICP_QAT_FW_LA_CMD_CIPHER_PRE_COMP = 11, ICP_QAT_FW_LA_CMD_DELIMITER = 12 }; #define ICP_QAT_FW_LA_ICV_VER_STATUS_PASS ICP_QAT_FW_COMN_STATUS_FLAG_OK #define ICP_QAT_FW_LA_ICV_VER_STATUS_FAIL ICP_QAT_FW_COMN_STATUS_FLAG_ERROR #define ICP_QAT_FW_LA_TRNG_STATUS_PASS ICP_QAT_FW_COMN_STATUS_FLAG_OK #define ICP_QAT_FW_LA_TRNG_STATUS_FAIL ICP_QAT_FW_COMN_STATUS_FLAG_ERROR struct icp_qat_fw_la_bulk_req { struct icp_qat_fw_comn_req_hdr comn_hdr; struct icp_qat_fw_comn_req_hdr_cd_pars cd_pars; struct icp_qat_fw_comn_req_mid comn_mid; struct icp_qat_fw_comn_req_rqpars serv_specif_rqpars; struct icp_qat_fw_comn_req_cd_ctrl cd_ctrl; }; #define ICP_QAT_FW_LA_USE_UCS_SLICE_TYPE 1 #define QAT_LA_SLICE_TYPE_BITPOS 14 #define QAT_LA_SLICE_TYPE_MASK 0x3 #define ICP_QAT_FW_LA_GCM_IV_LEN_12_OCTETS 1 #define ICP_QAT_FW_LA_GCM_IV_LEN_NOT_12_OCTETS 0 #define QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS 12 #define ICP_QAT_FW_LA_ZUC_3G_PROTO 1 #define QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK 0x1 #define QAT_LA_GCM_IV_LEN_FLAG_BITPOS 11 #define QAT_LA_GCM_IV_LEN_FLAG_MASK 0x1 #define ICP_QAT_FW_LA_DIGEST_IN_BUFFER 1 #define ICP_QAT_FW_LA_NO_DIGEST_IN_BUFFER 0 #define QAT_LA_DIGEST_IN_BUFFER_BITPOS 10 #define QAT_LA_DIGEST_IN_BUFFER_MASK 0x1 #define ICP_QAT_FW_LA_SNOW_3G_PROTO 4 #define ICP_QAT_FW_LA_GCM_PROTO 2 #define ICP_QAT_FW_LA_CCM_PROTO 1 #define ICP_QAT_FW_LA_NO_PROTO 0 #define QAT_LA_PROTO_BITPOS 7 #define QAT_LA_PROTO_MASK 0x7 #define ICP_QAT_FW_LA_CMP_AUTH_RES 1 #define ICP_QAT_FW_LA_NO_CMP_AUTH_RES 0 #define QAT_LA_CMP_AUTH_RES_BITPOS 6 #define QAT_LA_CMP_AUTH_RES_MASK 0x1 #define ICP_QAT_FW_LA_RET_AUTH_RES 1 #define ICP_QAT_FW_LA_NO_RET_AUTH_RES 0 #define QAT_LA_RET_AUTH_RES_BITPOS 5 #define QAT_LA_RET_AUTH_RES_MASK 0x1 #define ICP_QAT_FW_LA_UPDATE_STATE 1 #define ICP_QAT_FW_LA_NO_UPDATE_STATE 0 #define QAT_LA_UPDATE_STATE_BITPOS 4 #define QAT_LA_UPDATE_STATE_MASK 0x1 #define ICP_QAT_FW_CIPH_AUTH_CFG_OFFSET_IN_CD_SETUP 0 #define ICP_QAT_FW_CIPH_AUTH_CFG_OFFSET_IN_SHRAM_CP 1 #define QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS 3 #define QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK 0x1 #define ICP_QAT_FW_CIPH_IV_64BIT_PTR 0 #define ICP_QAT_FW_CIPH_IV_16BYTE_DATA 1 #define QAT_LA_CIPH_IV_FLD_BITPOS 2 #define QAT_LA_CIPH_IV_FLD_MASK 0x1 #define ICP_QAT_FW_LA_PARTIAL_NONE 0 #define ICP_QAT_FW_LA_PARTIAL_START 1 #define ICP_QAT_FW_LA_PARTIAL_MID 3 #define ICP_QAT_FW_LA_PARTIAL_END 2 #define QAT_LA_PARTIAL_BITPOS 0 #define QAT_LA_PARTIAL_MASK 0x3 #define ICP_QAT_FW_LA_FLAGS_BUILD(zuc_proto, gcm_iv_len, auth_rslt, proto, \ cmp_auth, ret_auth, update_state, \ ciph_iv, ciphcfg, partial) \ (((zuc_proto & QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK) << \ QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS) | \ ((gcm_iv_len & QAT_LA_GCM_IV_LEN_FLAG_MASK) << \ QAT_LA_GCM_IV_LEN_FLAG_BITPOS) | \ ((auth_rslt & QAT_LA_DIGEST_IN_BUFFER_MASK) << \ QAT_LA_DIGEST_IN_BUFFER_BITPOS) | \ ((proto & QAT_LA_PROTO_MASK) << \ QAT_LA_PROTO_BITPOS) | \ ((cmp_auth & QAT_LA_CMP_AUTH_RES_MASK) << \ QAT_LA_CMP_AUTH_RES_BITPOS) | \ ((ret_auth & QAT_LA_RET_AUTH_RES_MASK) << \ QAT_LA_RET_AUTH_RES_BITPOS) | \ ((update_state & QAT_LA_UPDATE_STATE_MASK) << \ QAT_LA_UPDATE_STATE_BITPOS) | \ ((ciph_iv & QAT_LA_CIPH_IV_FLD_MASK) << \ QAT_LA_CIPH_IV_FLD_BITPOS) | \ ((ciphcfg & QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK) << \ QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS) | \ ((partial & QAT_LA_PARTIAL_MASK) << \ QAT_LA_PARTIAL_BITPOS)) #define ICP_QAT_FW_LA_CIPH_IV_FLD_FLAG_GET(flags) \ QAT_FIELD_GET(flags, QAT_LA_CIPH_IV_FLD_BITPOS, \ QAT_LA_CIPH_IV_FLD_MASK) #define ICP_QAT_FW_LA_CIPH_AUTH_CFG_OFFSET_FLAG_GET(flags) \ QAT_FIELD_GET(flags, QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS, \ QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK) #define ICP_QAT_FW_LA_ZUC_3G_PROTO_FLAG_GET(flags) \ QAT_FIELD_GET(flags, QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS, \ QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK) #define ICP_QAT_FW_LA_GCM_IV_LEN_FLAG_GET(flags) \ QAT_FIELD_GET(flags, QAT_LA_GCM_IV_LEN_FLAG_BITPOS, \ QAT_LA_GCM_IV_LEN_FLAG_MASK) #define ICP_QAT_FW_LA_PROTO_GET(flags) \ QAT_FIELD_GET(flags, QAT_LA_PROTO_BITPOS, QAT_LA_PROTO_MASK) #define ICP_QAT_FW_LA_CMP_AUTH_GET(flags) \ QAT_FIELD_GET(flags, QAT_LA_CMP_AUTH_RES_BITPOS, \ QAT_LA_CMP_AUTH_RES_MASK) #define ICP_QAT_FW_LA_RET_AUTH_GET(flags) \ QAT_FIELD_GET(flags, QAT_LA_RET_AUTH_RES_BITPOS, \ QAT_LA_RET_AUTH_RES_MASK) #define ICP_QAT_FW_LA_DIGEST_IN_BUFFER_GET(flags) \ QAT_FIELD_GET(flags, QAT_LA_DIGEST_IN_BUFFER_BITPOS, \ QAT_LA_DIGEST_IN_BUFFER_MASK) #define ICP_QAT_FW_LA_UPDATE_STATE_GET(flags) \ QAT_FIELD_GET(flags, QAT_LA_UPDATE_STATE_BITPOS, \ QAT_LA_UPDATE_STATE_MASK) #define ICP_QAT_FW_LA_PARTIAL_GET(flags) \ QAT_FIELD_GET(flags, QAT_LA_PARTIAL_BITPOS, \ QAT_LA_PARTIAL_MASK) #define ICP_QAT_FW_LA_CIPH_IV_FLD_FLAG_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_LA_CIPH_IV_FLD_BITPOS, \ QAT_LA_CIPH_IV_FLD_MASK) #define ICP_QAT_FW_LA_CIPH_AUTH_CFG_OFFSET_FLAG_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_LA_CIPH_AUTH_CFG_OFFSET_BITPOS, \ QAT_LA_CIPH_AUTH_CFG_OFFSET_MASK) #define ICP_QAT_FW_LA_ZUC_3G_PROTO_FLAG_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_FW_LA_ZUC_3G_PROTO_FLAG_BITPOS, \ QAT_FW_LA_ZUC_3G_PROTO_FLAG_MASK) #define ICP_QAT_FW_LA_GCM_IV_LEN_FLAG_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_LA_GCM_IV_LEN_FLAG_BITPOS, \ QAT_LA_GCM_IV_LEN_FLAG_MASK) #define ICP_QAT_FW_LA_PROTO_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_LA_PROTO_BITPOS, \ QAT_LA_PROTO_MASK) #define ICP_QAT_FW_LA_CMP_AUTH_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_LA_CMP_AUTH_RES_BITPOS, \ QAT_LA_CMP_AUTH_RES_MASK) #define ICP_QAT_FW_LA_RET_AUTH_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_LA_RET_AUTH_RES_BITPOS, \ QAT_LA_RET_AUTH_RES_MASK) #define ICP_QAT_FW_LA_DIGEST_IN_BUFFER_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_LA_DIGEST_IN_BUFFER_BITPOS, \ QAT_LA_DIGEST_IN_BUFFER_MASK) #define ICP_QAT_FW_LA_UPDATE_STATE_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_LA_UPDATE_STATE_BITPOS, \ QAT_LA_UPDATE_STATE_MASK) #define ICP_QAT_FW_LA_PARTIAL_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_LA_PARTIAL_BITPOS, \ QAT_LA_PARTIAL_MASK) #define ICP_QAT_FW_LA_SLICE_TYPE_SET(flags, val) \ QAT_FIELD_SET(flags, val, QAT_LA_SLICE_TYPE_BITPOS, \ QAT_LA_SLICE_TYPE_MASK) struct icp_qat_fw_cipher_req_hdr_cd_pars { union { struct { __u64 content_desc_addr; __u16 content_desc_resrvd1; __u8 content_desc_params_sz; __u8 content_desc_hdr_resrvd2; __u32 content_desc_resrvd3; } s; struct { __u32 cipher_key_array[ICP_QAT_FW_NUM_LONGWORDS_4]; } s1; } u; }; struct icp_qat_fw_cipher_auth_req_hdr_cd_pars { union { struct { __u64 content_desc_addr; __u16 content_desc_resrvd1; __u8 content_desc_params_sz; __u8 content_desc_hdr_resrvd2; __u32 content_desc_resrvd3; } s; struct { __u32 cipher_key_array[ICP_QAT_FW_NUM_LONGWORDS_4]; } sl; } u; }; struct icp_qat_fw_cipher_cd_ctrl_hdr { __u8 cipher_state_sz; __u8 cipher_key_sz; __u8 cipher_cfg_offset; __u8 next_curr_id; __u8 cipher_padding_sz; __u8 resrvd1; __u16 resrvd2; __u32 resrvd3[ICP_QAT_FW_NUM_LONGWORDS_3]; }; struct icp_qat_fw_auth_cd_ctrl_hdr { __u32 resrvd1; __u8 resrvd2; __u8 hash_flags; __u8 hash_cfg_offset; __u8 next_curr_id; __u8 resrvd3; __u8 outer_prefix_sz; __u8 final_sz; __u8 inner_res_sz; __u8 resrvd4; __u8 inner_state1_sz; __u8 inner_state2_offset; __u8 inner_state2_sz; __u8 outer_config_offset; __u8 outer_state1_sz; __u8 outer_res_sz; __u8 outer_prefix_offset; }; struct icp_qat_fw_cipher_auth_cd_ctrl_hdr { __u8 cipher_state_sz; __u8 cipher_key_sz; __u8 cipher_cfg_offset; __u8 next_curr_id_cipher; __u8 cipher_padding_sz; __u8 hash_flags; __u8 hash_cfg_offset; __u8 next_curr_id_auth; __u8 resrvd1; __u8 outer_prefix_sz; __u8 final_sz; __u8 inner_res_sz; __u8 resrvd2; __u8 inner_state1_sz; __u8 inner_state2_offset; __u8 inner_state2_sz; __u8 outer_config_offset; __u8 outer_state1_sz; __u8 outer_res_sz; __u8 outer_prefix_offset; }; #define ICP_QAT_FW_AUTH_HDR_FLAG_DO_NESTED 1 #define ICP_QAT_FW_AUTH_HDR_FLAG_NO_NESTED 0 #define ICP_QAT_FW_CCM_GCM_AAD_SZ_MAX 240 #define ICP_QAT_FW_HASH_REQUEST_PARAMETERS_OFFSET \ (sizeof(struct icp_qat_fw_la_cipher_req_params_t)) #define ICP_QAT_FW_CIPHER_REQUEST_PARAMETERS_OFFSET (0) struct icp_qat_fw_la_cipher_req_params { __u32 cipher_offset; __u32 cipher_length; union { __u32 cipher_IV_array[ICP_QAT_FW_NUM_LONGWORDS_4]; struct { __u64 cipher_IV_ptr; __u64 resrvd1; } s; } u; }; struct icp_qat_fw_la_auth_req_params { __u32 auth_off; __u32 auth_len; union { __u64 auth_partial_st_prefix; __u64 aad_adr; } u1; __u64 auth_res_addr; union { __u8 inner_prefix_sz; __u8 aad_sz; } u2; __u8 resrvd1; __u8 hash_state_sz; __u8 auth_res_sz; } __packed; struct icp_qat_fw_la_auth_req_params_resrvd_flds { __u32 resrvd[ICP_QAT_FW_NUM_LONGWORDS_6]; union { __u8 inner_prefix_sz; __u8 aad_sz; } u2; __u8 resrvd1; __u16 resrvd2; }; struct icp_qat_fw_la_resp { struct icp_qat_fw_comn_resp_hdr comn_resp; __u64 opaque_data; __u32 resrvd[ICP_QAT_FW_NUM_LONGWORDS_4]; }; #define ICP_QAT_FW_CIPHER_NEXT_ID_GET(cd_ctrl_hdr_t) \ ((((cd_ctrl_hdr_t)->next_curr_id_cipher) & \ ICP_QAT_FW_COMN_NEXT_ID_MASK) >> (ICP_QAT_FW_COMN_NEXT_ID_BITPOS)) #define ICP_QAT_FW_CIPHER_NEXT_ID_SET(cd_ctrl_hdr_t, val) \ { (cd_ctrl_hdr_t)->next_curr_id_cipher = \ ((((cd_ctrl_hdr_t)->next_curr_id_cipher) \ & ICP_QAT_FW_COMN_CURR_ID_MASK) | \ ((val << ICP_QAT_FW_COMN_NEXT_ID_BITPOS) \ & ICP_QAT_FW_COMN_NEXT_ID_MASK)) } #define ICP_QAT_FW_CIPHER_CURR_ID_GET(cd_ctrl_hdr_t) \ (((cd_ctrl_hdr_t)->next_curr_id_cipher) \ & ICP_QAT_FW_COMN_CURR_ID_MASK) #define ICP_QAT_FW_CIPHER_CURR_ID_SET(cd_ctrl_hdr_t, val) \ { (cd_ctrl_hdr_t)->next_curr_id_cipher = \ ((((cd_ctrl_hdr_t)->next_curr_id_cipher) \ & ICP_QAT_FW_COMN_NEXT_ID_MASK) | \ ((val) & ICP_QAT_FW_COMN_CURR_ID_MASK)) } #define ICP_QAT_FW_AUTH_NEXT_ID_GET(cd_ctrl_hdr_t) \ ((((cd_ctrl_hdr_t)->next_curr_id_auth) & ICP_QAT_FW_COMN_NEXT_ID_MASK) \ >> (ICP_QAT_FW_COMN_NEXT_ID_BITPOS)) #define ICP_QAT_FW_AUTH_NEXT_ID_SET(cd_ctrl_hdr_t, val) \ { (cd_ctrl_hdr_t)->next_curr_id_auth = \ ((((cd_ctrl_hdr_t)->next_curr_id_auth) \ & ICP_QAT_FW_COMN_CURR_ID_MASK) | \ ((val << ICP_QAT_FW_COMN_NEXT_ID_BITPOS) \ & ICP_QAT_FW_COMN_NEXT_ID_MASK)) } #define ICP_QAT_FW_AUTH_CURR_ID_GET(cd_ctrl_hdr_t) \ (((cd_ctrl_hdr_t)->next_curr_id_auth) \ & ICP_QAT_FW_COMN_CURR_ID_MASK) #define ICP_QAT_FW_AUTH_CURR_ID_SET(cd_ctrl_hdr_t, val) \ { (cd_ctrl_hdr_t)->next_curr_id_auth = \ ((((cd_ctrl_hdr_t)->next_curr_id_auth) \ & ICP_QAT_FW_COMN_NEXT_ID_MASK) | \ ((val) & ICP_QAT_FW_COMN_CURR_ID_MASK)) } #endif