1*78ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */ 2*78ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */ 3*78ee8d1cSJulian Grajkowski #ifndef _ICP_QAT_FW_INIT_ADMIN_H_ 4*78ee8d1cSJulian Grajkowski #define _ICP_QAT_FW_INIT_ADMIN_H_ 5*78ee8d1cSJulian Grajkowski 6*78ee8d1cSJulian Grajkowski #include "icp_qat_fw.h" 7*78ee8d1cSJulian Grajkowski 8*78ee8d1cSJulian Grajkowski enum icp_qat_fw_init_admin_cmd_id { 9*78ee8d1cSJulian Grajkowski ICP_QAT_FW_INIT_ME = 0, 10*78ee8d1cSJulian Grajkowski ICP_QAT_FW_TRNG_ENABLE = 1, 11*78ee8d1cSJulian Grajkowski ICP_QAT_FW_TRNG_DISABLE = 2, 12*78ee8d1cSJulian Grajkowski ICP_QAT_FW_CONSTANTS_CFG = 3, 13*78ee8d1cSJulian Grajkowski ICP_QAT_FW_STATUS_GET = 4, 14*78ee8d1cSJulian Grajkowski ICP_QAT_FW_COUNTERS_GET = 5, 15*78ee8d1cSJulian Grajkowski ICP_QAT_FW_LOOPBACK = 6, 16*78ee8d1cSJulian Grajkowski ICP_QAT_FW_HEARTBEAT_SYNC = 7, 17*78ee8d1cSJulian Grajkowski ICP_QAT_FW_HEARTBEAT_GET = 8, 18*78ee8d1cSJulian Grajkowski ICP_QAT_FW_COMP_CAPABILITY_GET = 9, 19*78ee8d1cSJulian Grajkowski ICP_QAT_FW_CRYPTO_CAPABILITY_GET = 10, 20*78ee8d1cSJulian Grajkowski ICP_QAT_FW_HEARTBEAT_TIMER_SET = 13, 21*78ee8d1cSJulian Grajkowski ICP_QAT_FW_RL_SLA_CONFIG = 14, 22*78ee8d1cSJulian Grajkowski ICP_QAT_FW_RL_INIT = 15, 23*78ee8d1cSJulian Grajkowski ICP_QAT_FW_RL_DU_START = 16, 24*78ee8d1cSJulian Grajkowski ICP_QAT_FW_RL_DU_STOP = 17, 25*78ee8d1cSJulian Grajkowski ICP_QAT_FW_TIMER_GET = 19, 26*78ee8d1cSJulian Grajkowski ICP_QAT_FW_CNV_STATS_GET = 20, 27*78ee8d1cSJulian Grajkowski ICP_QAT_FW_PKE_REPLAY_STATS_GET = 21 28*78ee8d1cSJulian Grajkowski }; 29*78ee8d1cSJulian Grajkowski 30*78ee8d1cSJulian Grajkowski enum icp_qat_fw_init_admin_resp_status { 31*78ee8d1cSJulian Grajkowski ICP_QAT_FW_INIT_RESP_STATUS_SUCCESS = 0, 32*78ee8d1cSJulian Grajkowski ICP_QAT_FW_INIT_RESP_STATUS_FAIL = 1, 33*78ee8d1cSJulian Grajkowski ICP_QAT_FW_INIT_RESP_STATUS_UNSUPPORTED = 4 34*78ee8d1cSJulian Grajkowski }; 35*78ee8d1cSJulian Grajkowski 36*78ee8d1cSJulian Grajkowski enum icp_qat_fw_cnv_error_type { 37*78ee8d1cSJulian Grajkowski CNV_ERR_TYPE_NO_ERROR = 0, 38*78ee8d1cSJulian Grajkowski CNV_ERR_TYPE_CHECKSUM_ERROR, 39*78ee8d1cSJulian Grajkowski CNV_ERR_TYPE_DECOMP_PRODUCED_LENGTH_ERROR, 40*78ee8d1cSJulian Grajkowski CNV_ERR_TYPE_DECOMPRESSION_ERROR, 41*78ee8d1cSJulian Grajkowski CNV_ERR_TYPE_TRANSLATION_ERROR, 42*78ee8d1cSJulian Grajkowski CNV_ERR_TYPE_DECOMP_CONSUMED_LENGTH_ERROR, 43*78ee8d1cSJulian Grajkowski CNV_ERR_TYPE_UNKNOWN_ERROR 44*78ee8d1cSJulian Grajkowski }; 45*78ee8d1cSJulian Grajkowski 46*78ee8d1cSJulian Grajkowski #define CNV_ERROR_TYPE_GET(latest_error) \ 47*78ee8d1cSJulian Grajkowski ({ \ 48*78ee8d1cSJulian Grajkowski __typeof__(latest_error) _lerror = latest_error; \ 49*78ee8d1cSJulian Grajkowski (_lerror >> 12) > CNV_ERR_TYPE_UNKNOWN_ERROR ? \ 50*78ee8d1cSJulian Grajkowski CNV_ERR_TYPE_UNKNOWN_ERROR : \ 51*78ee8d1cSJulian Grajkowski (enum icp_qat_fw_cnv_error_type)(_lerror >> 12); \ 52*78ee8d1cSJulian Grajkowski }) 53*78ee8d1cSJulian Grajkowski #define CNV_ERROR_LENGTH_DELTA_GET(latest_error) \ 54*78ee8d1cSJulian Grajkowski ({ \ 55*78ee8d1cSJulian Grajkowski __typeof__(latest_error) _lerror = latest_error; \ 56*78ee8d1cSJulian Grajkowski ((s16)((_lerror & 0x0FFF) | (_lerror & 0x0800 ? 0xF000 : 0))); \ 57*78ee8d1cSJulian Grajkowski }) 58*78ee8d1cSJulian Grajkowski #define CNV_ERROR_DECOMP_STATUS_GET(latest_error) ((s8)(latest_error & 0xFF)) 59*78ee8d1cSJulian Grajkowski 60*78ee8d1cSJulian Grajkowski struct icp_qat_fw_init_admin_req { 61*78ee8d1cSJulian Grajkowski u16 init_cfg_sz; 62*78ee8d1cSJulian Grajkowski u8 resrvd1; 63*78ee8d1cSJulian Grajkowski u8 cmd_id; 64*78ee8d1cSJulian Grajkowski u32 max_req_duration; 65*78ee8d1cSJulian Grajkowski u64 opaque_data; 66*78ee8d1cSJulian Grajkowski 67*78ee8d1cSJulian Grajkowski union { 68*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_INIT_ME */ 69*78ee8d1cSJulian Grajkowski struct { 70*78ee8d1cSJulian Grajkowski u64 resrvd2; 71*78ee8d1cSJulian Grajkowski u16 ibuf_size_in_kb; 72*78ee8d1cSJulian Grajkowski u16 resrvd3; 73*78ee8d1cSJulian Grajkowski u32 resrvd4; 74*78ee8d1cSJulian Grajkowski }; 75*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_CONSTANTS_CFG */ 76*78ee8d1cSJulian Grajkowski struct { 77*78ee8d1cSJulian Grajkowski u64 init_cfg_ptr; 78*78ee8d1cSJulian Grajkowski u64 resrvd5; 79*78ee8d1cSJulian Grajkowski }; 80*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_HEARTBEAT_TIMER_SET */ 81*78ee8d1cSJulian Grajkowski struct { 82*78ee8d1cSJulian Grajkowski u64 hb_cfg_ptr; 83*78ee8d1cSJulian Grajkowski u32 heartbeat_ticks; 84*78ee8d1cSJulian Grajkowski u32 resrvd6; 85*78ee8d1cSJulian Grajkowski }; 86*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_RL_SLA_CONFIG */ 87*78ee8d1cSJulian Grajkowski struct { 88*78ee8d1cSJulian Grajkowski u32 credit_per_sla; 89*78ee8d1cSJulian Grajkowski u8 service_id; 90*78ee8d1cSJulian Grajkowski u8 vf_id; 91*78ee8d1cSJulian Grajkowski u8 resrvd7; 92*78ee8d1cSJulian Grajkowski u8 resrvd8; 93*78ee8d1cSJulian Grajkowski u32 resrvd9; 94*78ee8d1cSJulian Grajkowski u32 resrvd10; 95*78ee8d1cSJulian Grajkowski }; 96*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_RL_INIT */ 97*78ee8d1cSJulian Grajkowski struct { 98*78ee8d1cSJulian Grajkowski u32 rl_period; 99*78ee8d1cSJulian Grajkowski u8 config; 100*78ee8d1cSJulian Grajkowski u8 resrvd11; 101*78ee8d1cSJulian Grajkowski u8 num_me; 102*78ee8d1cSJulian Grajkowski u8 resrvd12; 103*78ee8d1cSJulian Grajkowski u8 pke_svc_arb_map; 104*78ee8d1cSJulian Grajkowski u8 bulk_crypto_svc_arb_map; 105*78ee8d1cSJulian Grajkowski u8 compression_svc_arb_map; 106*78ee8d1cSJulian Grajkowski u8 resrvd13; 107*78ee8d1cSJulian Grajkowski u32 resrvd14; 108*78ee8d1cSJulian Grajkowski }; 109*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_RL_DU_STOP */ 110*78ee8d1cSJulian Grajkowski struct { 111*78ee8d1cSJulian Grajkowski u64 cfg_ptr; 112*78ee8d1cSJulian Grajkowski u32 resrvd15; 113*78ee8d1cSJulian Grajkowski u32 resrvd16; 114*78ee8d1cSJulian Grajkowski }; 115*78ee8d1cSJulian Grajkowski }; 116*78ee8d1cSJulian Grajkowski } __packed; 117*78ee8d1cSJulian Grajkowski 118*78ee8d1cSJulian Grajkowski struct icp_qat_fw_init_admin_resp { 119*78ee8d1cSJulian Grajkowski u8 flags; 120*78ee8d1cSJulian Grajkowski u8 resrvd1; 121*78ee8d1cSJulian Grajkowski u8 status; 122*78ee8d1cSJulian Grajkowski u8 cmd_id; 123*78ee8d1cSJulian Grajkowski union { 124*78ee8d1cSJulian Grajkowski u32 resrvd2; 125*78ee8d1cSJulian Grajkowski u32 ras_event_count; 126*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_STATUS_GET */ 127*78ee8d1cSJulian Grajkowski struct { 128*78ee8d1cSJulian Grajkowski u16 version_minor_num; 129*78ee8d1cSJulian Grajkowski u16 version_major_num; 130*78ee8d1cSJulian Grajkowski }; 131*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_COMP_CAPABILITY_GET */ 132*78ee8d1cSJulian Grajkowski u32 extended_features; 133*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_CNV_STATS_GET */ 134*78ee8d1cSJulian Grajkowski struct { 135*78ee8d1cSJulian Grajkowski u16 error_count; 136*78ee8d1cSJulian Grajkowski u16 latest_error; 137*78ee8d1cSJulian Grajkowski }; 138*78ee8d1cSJulian Grajkowski }; 139*78ee8d1cSJulian Grajkowski u64 opaque_data; 140*78ee8d1cSJulian Grajkowski union { 141*78ee8d1cSJulian Grajkowski u32 resrvd3[4]; 142*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_STATUS_GET */ 143*78ee8d1cSJulian Grajkowski struct { 144*78ee8d1cSJulian Grajkowski u32 version_patch_num; 145*78ee8d1cSJulian Grajkowski u8 context_id; 146*78ee8d1cSJulian Grajkowski u8 ae_id; 147*78ee8d1cSJulian Grajkowski u16 resrvd4; 148*78ee8d1cSJulian Grajkowski u64 resrvd5; 149*78ee8d1cSJulian Grajkowski }; 150*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_COMP_CAPABILITY_GET */ 151*78ee8d1cSJulian Grajkowski struct { 152*78ee8d1cSJulian Grajkowski u16 compression_algos; 153*78ee8d1cSJulian Grajkowski u16 checksum_algos; 154*78ee8d1cSJulian Grajkowski u32 deflate_capabilities; 155*78ee8d1cSJulian Grajkowski u32 resrvd6; 156*78ee8d1cSJulian Grajkowski u32 deprecated; 157*78ee8d1cSJulian Grajkowski }; 158*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_CRYPTO_CAPABILITY_GET */ 159*78ee8d1cSJulian Grajkowski struct { 160*78ee8d1cSJulian Grajkowski u32 cipher_algos; 161*78ee8d1cSJulian Grajkowski u32 hash_algos; 162*78ee8d1cSJulian Grajkowski u16 keygen_algos; 163*78ee8d1cSJulian Grajkowski u16 other; 164*78ee8d1cSJulian Grajkowski u16 public_key_algos; 165*78ee8d1cSJulian Grajkowski u16 prime_algos; 166*78ee8d1cSJulian Grajkowski }; 167*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_RL_DU_STOP */ 168*78ee8d1cSJulian Grajkowski struct { 169*78ee8d1cSJulian Grajkowski u32 resrvd7; 170*78ee8d1cSJulian Grajkowski u8 granularity; 171*78ee8d1cSJulian Grajkowski u8 resrvd8; 172*78ee8d1cSJulian Grajkowski u16 resrvd9; 173*78ee8d1cSJulian Grajkowski u32 total_du_time; 174*78ee8d1cSJulian Grajkowski u32 resrvd10; 175*78ee8d1cSJulian Grajkowski }; 176*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_TIMER_GET */ 177*78ee8d1cSJulian Grajkowski struct { 178*78ee8d1cSJulian Grajkowski u64 timestamp; 179*78ee8d1cSJulian Grajkowski u64 resrvd11; 180*78ee8d1cSJulian Grajkowski }; 181*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_COUNTERS_GET */ 182*78ee8d1cSJulian Grajkowski struct { 183*78ee8d1cSJulian Grajkowski u64 req_rec_count; 184*78ee8d1cSJulian Grajkowski u64 resp_sent_count; 185*78ee8d1cSJulian Grajkowski }; 186*78ee8d1cSJulian Grajkowski /* ICP_QAT_FW_PKE_REPLAY_STATS_GET */ 187*78ee8d1cSJulian Grajkowski struct { 188*78ee8d1cSJulian Grajkowski u32 successful_count; 189*78ee8d1cSJulian Grajkowski u32 unsuccessful_count; 190*78ee8d1cSJulian Grajkowski u64 resrvd12; 191*78ee8d1cSJulian Grajkowski }; 192*78ee8d1cSJulian Grajkowski }; 193*78ee8d1cSJulian Grajkowski } __packed; 194*78ee8d1cSJulian Grajkowski 195*78ee8d1cSJulian Grajkowski enum icp_qat_fw_init_admin_init_flag { ICP_QAT_FW_INIT_FLAG_PKE_DISABLED = 0 }; 196*78ee8d1cSJulian Grajkowski 197*78ee8d1cSJulian Grajkowski struct icp_qat_fw_init_admin_hb_cnt { 198*78ee8d1cSJulian Grajkowski u16 resp_heartbeat_cnt; 199*78ee8d1cSJulian Grajkowski u16 req_heartbeat_cnt; 200*78ee8d1cSJulian Grajkowski }; 201*78ee8d1cSJulian Grajkowski 202*78ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_OK 0 203*78ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_BLOCKED 1 204*78ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_FLAG_BITPOS 0 205*78ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_FLAG_MASK 0x1 206*78ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_STATUS_RESRVD_FLD_MASK 0xFE 207*78ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_HDR_FLAG_GET(hdr_t) \ 208*78ee8d1cSJulian Grajkowski ICP_QAT_FW_COMN_HEARTBEAT_FLAG_GET(hdr_t.flags) 209*78ee8d1cSJulian Grajkowski 210*78ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_HDR_FLAG_SET(hdr_t, val) \ 211*78ee8d1cSJulian Grajkowski ICP_QAT_FW_COMN_HEARTBEAT_FLAG_SET(hdr_t, val) 212*78ee8d1cSJulian Grajkowski 213*78ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_FLAG_GET(flags) \ 214*78ee8d1cSJulian Grajkowski QAT_FIELD_GET(flags, \ 215*78ee8d1cSJulian Grajkowski ICP_QAT_FW_COMN_HEARTBEAT_FLAG_BITPOS, \ 216*78ee8d1cSJulian Grajkowski ICP_QAT_FW_COMN_HEARTBEAT_FLAG_MASK) 217*78ee8d1cSJulian Grajkowski #endif 218