xref: /freebsd-src/sys/dev/qat/include/icp_qat_fw_init_admin.h (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
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