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