178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */ 278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */ 378ee8d1cSJulian Grajkowski #ifndef _ICP_QAT_FW_INIT_ADMIN_H_ 478ee8d1cSJulian Grajkowski #define _ICP_QAT_FW_INIT_ADMIN_H_ 578ee8d1cSJulian Grajkowski 678ee8d1cSJulian Grajkowski #include "icp_qat_fw.h" 778ee8d1cSJulian Grajkowski 878ee8d1cSJulian Grajkowski enum icp_qat_fw_init_admin_cmd_id { 978ee8d1cSJulian Grajkowski ICP_QAT_FW_INIT_ME = 0, 1078ee8d1cSJulian Grajkowski ICP_QAT_FW_TRNG_ENABLE = 1, 1178ee8d1cSJulian Grajkowski ICP_QAT_FW_TRNG_DISABLE = 2, 1278ee8d1cSJulian Grajkowski ICP_QAT_FW_CONSTANTS_CFG = 3, 1378ee8d1cSJulian Grajkowski ICP_QAT_FW_STATUS_GET = 4, 1478ee8d1cSJulian Grajkowski ICP_QAT_FW_COUNTERS_GET = 5, 1578ee8d1cSJulian Grajkowski ICP_QAT_FW_LOOPBACK = 6, 1678ee8d1cSJulian Grajkowski ICP_QAT_FW_HEARTBEAT_SYNC = 7, 1778ee8d1cSJulian Grajkowski ICP_QAT_FW_HEARTBEAT_GET = 8, 1878ee8d1cSJulian Grajkowski ICP_QAT_FW_COMP_CAPABILITY_GET = 9, 1978ee8d1cSJulian Grajkowski ICP_QAT_FW_CRYPTO_CAPABILITY_GET = 10, 2078ee8d1cSJulian Grajkowski ICP_QAT_FW_HEARTBEAT_TIMER_SET = 13, 2178ee8d1cSJulian Grajkowski ICP_QAT_FW_RL_SLA_CONFIG = 14, 2278ee8d1cSJulian Grajkowski ICP_QAT_FW_RL_INIT = 15, 2378ee8d1cSJulian Grajkowski ICP_QAT_FW_RL_DU_START = 16, 2478ee8d1cSJulian Grajkowski ICP_QAT_FW_RL_DU_STOP = 17, 2578ee8d1cSJulian Grajkowski ICP_QAT_FW_TIMER_GET = 19, 2678ee8d1cSJulian Grajkowski ICP_QAT_FW_CNV_STATS_GET = 20, 2778ee8d1cSJulian Grajkowski ICP_QAT_FW_PKE_REPLAY_STATS_GET = 21 2878ee8d1cSJulian Grajkowski }; 2978ee8d1cSJulian Grajkowski 3078ee8d1cSJulian Grajkowski enum icp_qat_fw_init_admin_resp_status { 3178ee8d1cSJulian Grajkowski ICP_QAT_FW_INIT_RESP_STATUS_SUCCESS = 0, 3278ee8d1cSJulian Grajkowski ICP_QAT_FW_INIT_RESP_STATUS_FAIL = 1, 3378ee8d1cSJulian Grajkowski ICP_QAT_FW_INIT_RESP_STATUS_UNSUPPORTED = 4 3478ee8d1cSJulian Grajkowski }; 3578ee8d1cSJulian Grajkowski 3678ee8d1cSJulian Grajkowski enum icp_qat_fw_cnv_error_type { 3778ee8d1cSJulian Grajkowski CNV_ERR_TYPE_NO_ERROR = 0, 3878ee8d1cSJulian Grajkowski CNV_ERR_TYPE_CHECKSUM_ERROR, 3978ee8d1cSJulian Grajkowski CNV_ERR_TYPE_DECOMP_PRODUCED_LENGTH_ERROR, 4078ee8d1cSJulian Grajkowski CNV_ERR_TYPE_DECOMPRESSION_ERROR, 4178ee8d1cSJulian Grajkowski CNV_ERR_TYPE_TRANSLATION_ERROR, 4278ee8d1cSJulian Grajkowski CNV_ERR_TYPE_DECOMP_CONSUMED_LENGTH_ERROR, 4378ee8d1cSJulian Grajkowski CNV_ERR_TYPE_UNKNOWN_ERROR 4478ee8d1cSJulian Grajkowski }; 4578ee8d1cSJulian Grajkowski 4678ee8d1cSJulian Grajkowski #define CNV_ERROR_TYPE_GET(latest_error) \ 4778ee8d1cSJulian Grajkowski ({ \ 4878ee8d1cSJulian Grajkowski __typeof__(latest_error) _lerror = latest_error; \ 4978ee8d1cSJulian Grajkowski (_lerror >> 12) > CNV_ERR_TYPE_UNKNOWN_ERROR ? \ 5078ee8d1cSJulian Grajkowski CNV_ERR_TYPE_UNKNOWN_ERROR : \ 5178ee8d1cSJulian Grajkowski (enum icp_qat_fw_cnv_error_type)(_lerror >> 12); \ 5278ee8d1cSJulian Grajkowski }) 5378ee8d1cSJulian Grajkowski #define CNV_ERROR_LENGTH_DELTA_GET(latest_error) \ 5478ee8d1cSJulian Grajkowski ({ \ 5578ee8d1cSJulian Grajkowski __typeof__(latest_error) _lerror = latest_error; \ 5678ee8d1cSJulian Grajkowski ((s16)((_lerror & 0x0FFF) | (_lerror & 0x0800 ? 0xF000 : 0))); \ 5778ee8d1cSJulian Grajkowski }) 5878ee8d1cSJulian Grajkowski #define CNV_ERROR_DECOMP_STATUS_GET(latest_error) ((s8)(latest_error & 0xFF)) 5978ee8d1cSJulian Grajkowski 6078ee8d1cSJulian Grajkowski struct icp_qat_fw_init_admin_req { 6178ee8d1cSJulian Grajkowski u16 init_cfg_sz; 6278ee8d1cSJulian Grajkowski u8 resrvd1; 6378ee8d1cSJulian Grajkowski u8 cmd_id; 6478ee8d1cSJulian Grajkowski u32 max_req_duration; 6578ee8d1cSJulian Grajkowski u64 opaque_data; 6678ee8d1cSJulian Grajkowski 6778ee8d1cSJulian Grajkowski union { 6878ee8d1cSJulian Grajkowski /* ICP_QAT_FW_INIT_ME */ 6978ee8d1cSJulian Grajkowski struct { 7078ee8d1cSJulian Grajkowski u64 resrvd2; 7178ee8d1cSJulian Grajkowski u16 ibuf_size_in_kb; 7278ee8d1cSJulian Grajkowski u16 resrvd3; 7378ee8d1cSJulian Grajkowski u32 resrvd4; 7478ee8d1cSJulian Grajkowski }; 7578ee8d1cSJulian Grajkowski /* ICP_QAT_FW_CONSTANTS_CFG */ 7678ee8d1cSJulian Grajkowski struct { 7778ee8d1cSJulian Grajkowski u64 init_cfg_ptr; 7878ee8d1cSJulian Grajkowski u64 resrvd5; 7978ee8d1cSJulian Grajkowski }; 8078ee8d1cSJulian Grajkowski /* ICP_QAT_FW_HEARTBEAT_TIMER_SET */ 8178ee8d1cSJulian Grajkowski struct { 8278ee8d1cSJulian Grajkowski u64 hb_cfg_ptr; 8378ee8d1cSJulian Grajkowski u32 heartbeat_ticks; 8478ee8d1cSJulian Grajkowski u32 resrvd6; 8578ee8d1cSJulian Grajkowski }; 8678ee8d1cSJulian Grajkowski /* ICP_QAT_FW_RL_SLA_CONFIG */ 8778ee8d1cSJulian Grajkowski struct { 8878ee8d1cSJulian Grajkowski u32 credit_per_sla; 8978ee8d1cSJulian Grajkowski u8 service_id; 9078ee8d1cSJulian Grajkowski u8 vf_id; 9178ee8d1cSJulian Grajkowski u8 resrvd7; 9278ee8d1cSJulian Grajkowski u8 resrvd8; 9378ee8d1cSJulian Grajkowski u32 resrvd9; 9478ee8d1cSJulian Grajkowski u32 resrvd10; 9578ee8d1cSJulian Grajkowski }; 9678ee8d1cSJulian Grajkowski /* ICP_QAT_FW_RL_INIT */ 9778ee8d1cSJulian Grajkowski struct { 9878ee8d1cSJulian Grajkowski u32 rl_period; 9978ee8d1cSJulian Grajkowski u8 config; 10078ee8d1cSJulian Grajkowski u8 resrvd11; 10178ee8d1cSJulian Grajkowski u8 num_me; 10278ee8d1cSJulian Grajkowski u8 resrvd12; 10378ee8d1cSJulian Grajkowski u8 pke_svc_arb_map; 10478ee8d1cSJulian Grajkowski u8 bulk_crypto_svc_arb_map; 10578ee8d1cSJulian Grajkowski u8 compression_svc_arb_map; 10678ee8d1cSJulian Grajkowski u8 resrvd13; 10778ee8d1cSJulian Grajkowski u32 resrvd14; 10878ee8d1cSJulian Grajkowski }; 10978ee8d1cSJulian Grajkowski /* ICP_QAT_FW_RL_DU_STOP */ 11078ee8d1cSJulian Grajkowski struct { 11178ee8d1cSJulian Grajkowski u64 cfg_ptr; 11278ee8d1cSJulian Grajkowski u32 resrvd15; 11378ee8d1cSJulian Grajkowski u32 resrvd16; 11478ee8d1cSJulian Grajkowski }; 11578ee8d1cSJulian Grajkowski }; 11678ee8d1cSJulian Grajkowski } __packed; 11778ee8d1cSJulian Grajkowski 11878ee8d1cSJulian Grajkowski struct icp_qat_fw_init_admin_resp { 11978ee8d1cSJulian Grajkowski u8 flags; 12078ee8d1cSJulian Grajkowski u8 resrvd1; 12178ee8d1cSJulian Grajkowski u8 status; 12278ee8d1cSJulian Grajkowski u8 cmd_id; 12378ee8d1cSJulian Grajkowski union { 12478ee8d1cSJulian Grajkowski u32 resrvd2; 12578ee8d1cSJulian Grajkowski u32 ras_event_count; 12678ee8d1cSJulian Grajkowski /* ICP_QAT_FW_STATUS_GET */ 12778ee8d1cSJulian Grajkowski struct { 12878ee8d1cSJulian Grajkowski u16 version_minor_num; 12978ee8d1cSJulian Grajkowski u16 version_major_num; 13078ee8d1cSJulian Grajkowski }; 13178ee8d1cSJulian Grajkowski /* ICP_QAT_FW_COMP_CAPABILITY_GET */ 13278ee8d1cSJulian Grajkowski u32 extended_features; 13378ee8d1cSJulian Grajkowski /* ICP_QAT_FW_CNV_STATS_GET */ 13478ee8d1cSJulian Grajkowski struct { 13578ee8d1cSJulian Grajkowski u16 error_count; 13678ee8d1cSJulian Grajkowski u16 latest_error; 13778ee8d1cSJulian Grajkowski }; 13878ee8d1cSJulian Grajkowski }; 13978ee8d1cSJulian Grajkowski u64 opaque_data; 14078ee8d1cSJulian Grajkowski union { 14178ee8d1cSJulian Grajkowski u32 resrvd3[4]; 14278ee8d1cSJulian Grajkowski /* ICP_QAT_FW_STATUS_GET */ 14378ee8d1cSJulian Grajkowski struct { 14478ee8d1cSJulian Grajkowski u32 version_patch_num; 14578ee8d1cSJulian Grajkowski u8 context_id; 14678ee8d1cSJulian Grajkowski u8 ae_id; 14778ee8d1cSJulian Grajkowski u16 resrvd4; 14878ee8d1cSJulian Grajkowski u64 resrvd5; 14978ee8d1cSJulian Grajkowski }; 15078ee8d1cSJulian Grajkowski /* ICP_QAT_FW_COMP_CAPABILITY_GET */ 15178ee8d1cSJulian Grajkowski struct { 15278ee8d1cSJulian Grajkowski u16 compression_algos; 15378ee8d1cSJulian Grajkowski u16 checksum_algos; 15478ee8d1cSJulian Grajkowski u32 deflate_capabilities; 15578ee8d1cSJulian Grajkowski u32 resrvd6; 15678ee8d1cSJulian Grajkowski u32 deprecated; 15778ee8d1cSJulian Grajkowski }; 15878ee8d1cSJulian Grajkowski /* ICP_QAT_FW_CRYPTO_CAPABILITY_GET */ 15978ee8d1cSJulian Grajkowski struct { 16078ee8d1cSJulian Grajkowski u32 cipher_algos; 16178ee8d1cSJulian Grajkowski u32 hash_algos; 16278ee8d1cSJulian Grajkowski u16 keygen_algos; 16378ee8d1cSJulian Grajkowski u16 other; 16478ee8d1cSJulian Grajkowski u16 public_key_algos; 16578ee8d1cSJulian Grajkowski u16 prime_algos; 16678ee8d1cSJulian Grajkowski }; 16778ee8d1cSJulian Grajkowski /* ICP_QAT_FW_RL_DU_STOP */ 16878ee8d1cSJulian Grajkowski struct { 16978ee8d1cSJulian Grajkowski u32 resrvd7; 17078ee8d1cSJulian Grajkowski u8 granularity; 17178ee8d1cSJulian Grajkowski u8 resrvd8; 17278ee8d1cSJulian Grajkowski u16 resrvd9; 17378ee8d1cSJulian Grajkowski u32 total_du_time; 17478ee8d1cSJulian Grajkowski u32 resrvd10; 17578ee8d1cSJulian Grajkowski }; 17678ee8d1cSJulian Grajkowski /* ICP_QAT_FW_TIMER_GET */ 17778ee8d1cSJulian Grajkowski struct { 17878ee8d1cSJulian Grajkowski u64 timestamp; 17978ee8d1cSJulian Grajkowski u64 resrvd11; 18078ee8d1cSJulian Grajkowski }; 18178ee8d1cSJulian Grajkowski /* ICP_QAT_FW_COUNTERS_GET */ 18278ee8d1cSJulian Grajkowski struct { 18378ee8d1cSJulian Grajkowski u64 req_rec_count; 18478ee8d1cSJulian Grajkowski u64 resp_sent_count; 18578ee8d1cSJulian Grajkowski }; 18678ee8d1cSJulian Grajkowski /* ICP_QAT_FW_PKE_REPLAY_STATS_GET */ 18778ee8d1cSJulian Grajkowski struct { 18878ee8d1cSJulian Grajkowski u32 successful_count; 18978ee8d1cSJulian Grajkowski u32 unsuccessful_count; 19078ee8d1cSJulian Grajkowski u64 resrvd12; 19178ee8d1cSJulian Grajkowski }; 19278ee8d1cSJulian Grajkowski }; 19378ee8d1cSJulian Grajkowski } __packed; 19478ee8d1cSJulian Grajkowski 19578ee8d1cSJulian Grajkowski enum icp_qat_fw_init_admin_init_flag { ICP_QAT_FW_INIT_FLAG_PKE_DISABLED = 0 }; 19678ee8d1cSJulian Grajkowski 19778ee8d1cSJulian Grajkowski struct icp_qat_fw_init_admin_hb_cnt { 19878ee8d1cSJulian Grajkowski u16 resp_heartbeat_cnt; 19978ee8d1cSJulian Grajkowski u16 req_heartbeat_cnt; 20078ee8d1cSJulian Grajkowski }; 20178ee8d1cSJulian Grajkowski 20278ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_OK 0 20378ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_BLOCKED 1 20478ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_FLAG_BITPOS 0 20578ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_FLAG_MASK 0x1 20678ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_STATUS_RESRVD_FLD_MASK 0xFE 20778ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_HDR_FLAG_GET(hdr_t) \ 20878ee8d1cSJulian Grajkowski ICP_QAT_FW_COMN_HEARTBEAT_FLAG_GET(hdr_t.flags) 20978ee8d1cSJulian Grajkowski 21078ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_HDR_FLAG_SET(hdr_t, val) \ 21178ee8d1cSJulian Grajkowski ICP_QAT_FW_COMN_HEARTBEAT_FLAG_SET(hdr_t, val) 21278ee8d1cSJulian Grajkowski 21378ee8d1cSJulian Grajkowski #define ICP_QAT_FW_COMN_HEARTBEAT_FLAG_GET(flags) \ 21478ee8d1cSJulian Grajkowski QAT_FIELD_GET(flags, \ 21578ee8d1cSJulian Grajkowski ICP_QAT_FW_COMN_HEARTBEAT_FLAG_BITPOS, \ 21678ee8d1cSJulian Grajkowski ICP_QAT_FW_COMN_HEARTBEAT_FLAG_MASK) 21778ee8d1cSJulian Grajkowski #endif 218