1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /* $FreeBSD$ */
4 #ifndef __ICP_QAT_UCLO_H__
5 #define __ICP_QAT_UCLO_H__
6 
7 #define ICP_QAT_AC_895XCC_DEV_TYPE 0x00400000
8 #define ICP_QAT_AC_C62X_DEV_TYPE 0x01000000
9 #define ICP_QAT_AC_C3XXX_DEV_TYPE 0x02000000
10 #define ICP_QAT_AC_200XX_DEV_TYPE 0x02000000
11 #define ICP_QAT_AC_C4XXX_DEV_TYPE 0x04000000
12 #define ICP_QAT_UCLO_MAX_AE 32
13 #define ICP_QAT_UCLO_MAX_CTX 8
14 #define ICP_QAT_UCLO_MAX_CPPNUM 2
15 #define ICP_QAT_UCLO_MAX_UIMAGE (ICP_QAT_UCLO_MAX_AE * ICP_QAT_UCLO_MAX_CTX)
16 #define ICP_QAT_UCLO_MAX_USTORE 0x4000
17 #define ICP_QAT_UCLO_MAX_XFER_REG 128
18 #define ICP_QAT_UCLO_MAX_GPR_REG 128
19 #define ICP_QAT_UCLO_MAX_LMEM_REG 1024
20 #define ICP_QAT_UCLO_AE_ALL_CTX 0xff
21 #define ICP_QAT_UOF_OBJID_LEN 8
22 #define ICP_QAT_UOF_FID 0xc6c2
23 #define ICP_QAT_UOF_MAJVER 0x4
24 #define ICP_QAT_UOF_MINVER 0x11
25 #define ICP_QAT_UOF_OBJS "UOF_OBJS"
26 #define ICP_QAT_UOF_STRT "UOF_STRT"
27 #define ICP_QAT_UOF_IMAG "UOF_IMAG"
28 #define ICP_QAT_UOF_IMEM "UOF_IMEM"
29 #define ICP_QAT_UOF_LOCAL_SCOPE 1
30 #define ICP_QAT_UOF_INIT_EXPR 0
31 #define ICP_QAT_UOF_INIT_REG 1
32 #define ICP_QAT_UOF_INIT_REG_CTX 2
33 #define ICP_QAT_UOF_INIT_EXPR_ENDIAN_SWAP 3
34 #define ICP_QAT_SUOF_OBJ_ID_LEN 8
35 #define ICP_QAT_SUOF_FID 0x53554f46
36 #define ICP_QAT_SUOF_MAJVER 0x0
37 #define ICP_QAT_SUOF_MINVER 0x1
38 #define ICP_QAT_SUOF_OBJ_NAME_LEN 128
39 #define ICP_QAT_MOF_OBJ_ID_LEN 8
40 #define ICP_QAT_MOF_OBJ_CHUNKID_LEN 8
41 #define ICP_QAT_MOF_FID 0x00666f6d
42 #define ICP_QAT_MOF_MAJVER 0x0
43 #define ICP_QAT_MOF_MINVER 0x1
44 #define ICP_QAT_MOF_SYM_OBJS "SYM_OBJS"
45 #define ICP_QAT_SUOF_OBJS "SUF_OBJS"
46 #define ICP_QAT_SUOF_IMAG "SUF_IMAG"
47 #define ICP_QAT_SIMG_AE_INIT_SEQ_LEN (50 * sizeof(unsigned long long))
48 #define ICP_QAT_SIMG_AE_INSTS_LEN (0x4000 * sizeof(unsigned long long))
49 #define ICP_QAT_CSS_FWSK_MODULUS_LEN 256
50 #define ICP_QAT_CSS_FWSK_EXPONENT_LEN 4
51 #define ICP_QAT_CSS_FWSK_PAD_LEN 252
52 #define ICP_QAT_CSS_FWSK_PUB_LEN                                               \
53 	(ICP_QAT_CSS_FWSK_MODULUS_LEN + ICP_QAT_CSS_FWSK_EXPONENT_LEN +        \
54 	 ICP_QAT_CSS_FWSK_PAD_LEN)
55 #define ICP_QAT_CSS_SIGNATURE_LEN 256
56 #define ICP_QAT_CSS_AE_IMG_LEN                                                 \
57 	(sizeof(struct icp_qat_simg_ae_mode) + ICP_QAT_SIMG_AE_INIT_SEQ_LEN +  \
58 	 ICP_QAT_SIMG_AE_INSTS_LEN)
59 #define ICP_QAT_CSS_AE_SIMG_LEN                                                \
60 	(sizeof(struct icp_qat_css_hdr) + ICP_QAT_CSS_FWSK_PUB_LEN +           \
61 	 ICP_QAT_CSS_SIGNATURE_LEN + ICP_QAT_CSS_AE_IMG_LEN)
62 #define ICP_QAT_AE_IMG_OFFSET                                                  \
63 	(sizeof(struct icp_qat_css_hdr) + ICP_QAT_CSS_FWSK_MODULUS_LEN +       \
64 	 ICP_QAT_CSS_FWSK_EXPONENT_LEN + ICP_QAT_CSS_SIGNATURE_LEN)
65 #define ICP_QAT_CSS_MAX_IMAGE_LEN 0x40000
66 
67 #define ICP_QAT_CTX_MODE(ae_mode) ((ae_mode)&0xf)
68 #define ICP_QAT_NN_MODE(ae_mode) (((ae_mode) >> 0x4) & 0xf)
69 #define ICP_QAT_SHARED_USTORE_MODE(ae_mode) (((ae_mode) >> 0xb) & 0x1)
70 #define RELOADABLE_CTX_SHARED_MODE(ae_mode) (((ae_mode) >> 0xc) & 0x1)
71 
72 #define ICP_QAT_LOC_MEM0_MODE(ae_mode) (((ae_mode) >> 0x8) & 0x1)
73 #define ICP_QAT_LOC_MEM1_MODE(ae_mode) (((ae_mode) >> 0x9) & 0x1)
74 #define ICP_QAT_LOC_MEM2_MODE(ae_mode) (((ae_mode) >> 0x6) & 0x1)
75 #define ICP_QAT_LOC_MEM3_MODE(ae_mode) (((ae_mode) >> 0x7) & 0x1)
76 #define ICP_QAT_LOC_TINDEX_MODE(ae_mode) (((ae_mode) >> 0xe) & 0x1)
77 
78 enum icp_qat_uof_mem_region {
79 	ICP_QAT_UOF_SRAM_REGION = 0x0,
80 	ICP_QAT_UOF_LMEM_REGION = 0x3,
81 	ICP_QAT_UOF_UMEM_REGION = 0x5
82 };
83 
84 enum icp_qat_uof_regtype {
85 	ICP_NO_DEST = 0,
86 	ICP_GPA_REL = 1,
87 	ICP_GPA_ABS = 2,
88 	ICP_GPB_REL = 3,
89 	ICP_GPB_ABS = 4,
90 	ICP_SR_REL = 5,
91 	ICP_SR_RD_REL = 6,
92 	ICP_SR_WR_REL = 7,
93 	ICP_SR_ABS = 8,
94 	ICP_SR_RD_ABS = 9,
95 	ICP_SR_WR_ABS = 10,
96 	ICP_DR_REL = 19,
97 	ICP_DR_RD_REL = 20,
98 	ICP_DR_WR_REL = 21,
99 	ICP_DR_ABS = 22,
100 	ICP_DR_RD_ABS = 23,
101 	ICP_DR_WR_ABS = 24,
102 	ICP_LMEM = 26,
103 	ICP_LMEM0 = 27,
104 	ICP_LMEM1 = 28,
105 	ICP_NEIGH_REL = 31,
106 	ICP_LMEM2 = 61,
107 	ICP_LMEM3 = 62,
108 };
109 
110 enum icp_qat_css_fwtype { CSS_AE_FIRMWARE = 0, CSS_MMP_FIRMWARE = 1 };
111 
112 struct icp_qat_uclo_page {
113 	struct icp_qat_uclo_encap_page *encap_page;
114 	struct icp_qat_uclo_region *region;
115 	unsigned int flags;
116 };
117 
118 struct icp_qat_uclo_region {
119 	struct icp_qat_uclo_page *loaded;
120 	struct icp_qat_uclo_page *page;
121 };
122 
123 struct icp_qat_uclo_aeslice {
124 	struct icp_qat_uclo_region *region;
125 	struct icp_qat_uclo_page *page;
126 	struct icp_qat_uclo_page *cur_page[ICP_QAT_UCLO_MAX_CTX];
127 	struct icp_qat_uclo_encapme *encap_image;
128 	unsigned int ctx_mask_assigned;
129 	unsigned int new_uaddr[ICP_QAT_UCLO_MAX_CTX];
130 };
131 
132 struct icp_qat_uclo_aedata {
133 	unsigned int slice_num;
134 	unsigned int eff_ustore_size;
135 	struct icp_qat_uclo_aeslice ae_slices[ICP_QAT_UCLO_MAX_CTX];
136 	unsigned int shareable_ustore;
137 };
138 
139 struct icp_qat_uof_encap_obj {
140 	char *beg_uof;
141 	struct icp_qat_uof_objhdr *obj_hdr;
142 	struct icp_qat_uof_chunkhdr *chunk_hdr;
143 	struct icp_qat_uof_varmem_seg *var_mem_seg;
144 };
145 
146 struct icp_qat_uclo_encap_uwblock {
147 	unsigned int start_addr;
148 	unsigned int words_num;
149 	uint64_t micro_words;
150 };
151 
152 struct icp_qat_uclo_encap_page {
153 	unsigned int def_page;
154 	unsigned int page_region;
155 	unsigned int beg_addr_v;
156 	unsigned int beg_addr_p;
157 	unsigned int micro_words_num;
158 	unsigned int uwblock_num;
159 	struct icp_qat_uclo_encap_uwblock *uwblock;
160 };
161 
162 struct icp_qat_uclo_encapme {
163 	struct icp_qat_uof_image *img_ptr;
164 	struct icp_qat_uclo_encap_page *page;
165 	unsigned int ae_reg_num;
166 	struct icp_qat_uof_ae_reg *ae_reg;
167 	unsigned int init_regsym_num;
168 	struct icp_qat_uof_init_regsym *init_regsym;
169 	unsigned int sbreak_num;
170 	struct icp_qat_uof_sbreak *sbreak;
171 	unsigned int uwords_num;
172 };
173 
174 struct icp_qat_uclo_init_mem_table {
175 	unsigned int entry_num;
176 	struct icp_qat_uof_initmem *init_mem;
177 };
178 
179 struct icp_qat_uclo_objhdr {
180 	char *file_buff;
181 	unsigned int checksum;
182 	unsigned int size;
183 };
184 
185 struct icp_qat_uof_strtable {
186 	unsigned int table_len;
187 	unsigned int reserved;
188 	uint64_t strings;
189 };
190 
191 struct icp_qat_uclo_objhandle {
192 	unsigned int prod_type;
193 	unsigned int prod_rev;
194 	struct icp_qat_uclo_objhdr *obj_hdr;
195 	struct icp_qat_uof_encap_obj encap_uof_obj;
196 	struct icp_qat_uof_strtable str_table;
197 	struct icp_qat_uclo_encapme ae_uimage[ICP_QAT_UCLO_MAX_UIMAGE];
198 	struct icp_qat_uclo_aedata ae_data[ICP_QAT_UCLO_MAX_AE];
199 	struct icp_qat_uclo_init_mem_table init_mem_tab;
200 	struct icp_qat_uof_batch_init *lm_init_tab[ICP_QAT_UCLO_MAX_AE];
201 	struct icp_qat_uof_batch_init *umem_init_tab[ICP_QAT_UCLO_MAX_AE];
202 	int uimage_num;
203 	int uword_in_bytes;
204 	int global_inited;
205 	unsigned int ae_num;
206 	unsigned int ustore_phy_size;
207 	void *obj_buf;
208 	uint64_t *uword_buf;
209 };
210 
211 struct icp_qat_uof_uword_block {
212 	unsigned int start_addr;
213 	unsigned int words_num;
214 	unsigned int uword_offset;
215 	unsigned int reserved;
216 };
217 
218 struct icp_qat_uof_filehdr {
219 	unsigned short file_id;
220 	unsigned short reserved1;
221 	char min_ver;
222 	char maj_ver;
223 	unsigned short reserved2;
224 	unsigned short max_chunks;
225 	unsigned short num_chunks;
226 };
227 
228 struct icp_qat_uof_filechunkhdr {
229 	char chunk_id[ICP_QAT_UOF_OBJID_LEN];
230 	unsigned int checksum;
231 	unsigned int offset;
232 	unsigned int size;
233 };
234 
235 struct icp_qat_uof_objhdr {
236 	unsigned int ac_dev_type;
237 	unsigned short min_cpu_ver;
238 	unsigned short max_cpu_ver;
239 	short max_chunks;
240 	short num_chunks;
241 	unsigned int reserved1;
242 	unsigned int reserved2;
243 };
244 
245 struct icp_qat_uof_chunkhdr {
246 	char chunk_id[ICP_QAT_UOF_OBJID_LEN];
247 	unsigned int offset;
248 	unsigned int size;
249 };
250 
251 struct icp_qat_uof_memvar_attr {
252 	unsigned int offset_in_byte;
253 	unsigned int value;
254 };
255 
256 struct icp_qat_uof_initmem {
257 	unsigned int sym_name;
258 	char region;
259 	char scope;
260 	unsigned short reserved1;
261 	unsigned int addr;
262 	unsigned int num_in_bytes;
263 	unsigned int val_attr_num;
264 };
265 
266 struct icp_qat_uof_init_regsym {
267 	unsigned int sym_name;
268 	char init_type;
269 	char value_type;
270 	char reg_type;
271 	unsigned char ctx;
272 	unsigned int reg_addr;
273 	unsigned int value;
274 };
275 
276 struct icp_qat_uof_varmem_seg {
277 	unsigned int sram_base;
278 	unsigned int sram_size;
279 	unsigned int sram_alignment;
280 	unsigned int sdram_base;
281 	unsigned int sdram_size;
282 	unsigned int sdram_alignment;
283 	unsigned int sdram1_base;
284 	unsigned int sdram1_size;
285 	unsigned int sdram1_alignment;
286 	unsigned int scratch_base;
287 	unsigned int scratch_size;
288 	unsigned int scratch_alignment;
289 };
290 
291 struct icp_qat_uof_gtid {
292 	char tool_id[ICP_QAT_UOF_OBJID_LEN];
293 	int tool_ver;
294 	unsigned int reserved1;
295 	unsigned int reserved2;
296 };
297 
298 struct icp_qat_uof_sbreak {
299 	unsigned int page_num;
300 	unsigned int virt_uaddr;
301 	unsigned char sbreak_type;
302 	unsigned char reg_type;
303 	unsigned short reserved1;
304 	unsigned int addr_offset;
305 	unsigned int reg_addr;
306 };
307 
308 struct icp_qat_uof_code_page {
309 	unsigned int page_region;
310 	unsigned int page_num;
311 	unsigned char def_page;
312 	unsigned char reserved2;
313 	unsigned short reserved1;
314 	unsigned int beg_addr_v;
315 	unsigned int beg_addr_p;
316 	unsigned int neigh_reg_tab_offset;
317 	unsigned int uc_var_tab_offset;
318 	unsigned int imp_var_tab_offset;
319 	unsigned int imp_expr_tab_offset;
320 	unsigned int code_area_offset;
321 };
322 
323 struct icp_qat_uof_image {
324 	unsigned int img_name;
325 	unsigned int ae_assigned;
326 	unsigned int ctx_assigned;
327 	unsigned int ac_dev_type;
328 	unsigned int entry_address;
329 	unsigned int fill_pattern[2];
330 	unsigned int reloadable_size;
331 	unsigned char sensitivity;
332 	unsigned char reserved;
333 	unsigned short ae_mode;
334 	unsigned short max_ver;
335 	unsigned short min_ver;
336 	unsigned short image_attrib;
337 	unsigned short reserved2;
338 	unsigned short page_region_num;
339 	unsigned short numpages;
340 	unsigned int reg_tab_offset;
341 	unsigned int init_reg_sym_tab;
342 	unsigned int sbreak_tab;
343 	unsigned int app_metadata;
344 };
345 
346 struct icp_qat_uof_objtable {
347 	unsigned int entry_num;
348 };
349 
350 struct icp_qat_uof_ae_reg {
351 	unsigned int name;
352 	unsigned int vis_name;
353 	unsigned short type;
354 	unsigned short addr;
355 	unsigned short access_mode;
356 	unsigned char visible;
357 	unsigned char reserved1;
358 	unsigned short ref_count;
359 	unsigned short reserved2;
360 	unsigned int xo_id;
361 };
362 
363 struct icp_qat_uof_code_area {
364 	unsigned int micro_words_num;
365 	unsigned int uword_block_tab;
366 };
367 
368 struct icp_qat_uof_batch_init {
369 	unsigned int ae;
370 	unsigned int addr;
371 	unsigned int *value;
372 	unsigned int size;
373 	struct icp_qat_uof_batch_init *next;
374 };
375 
376 struct icp_qat_suof_img_hdr {
377 	const char *simg_buf;
378 	unsigned long simg_len;
379 	const char *css_header;
380 	const char *css_key;
381 	const char *css_signature;
382 	const char *css_simg;
383 	unsigned long simg_size;
384 	unsigned int ae_num;
385 	unsigned int ae_mask;
386 	unsigned int fw_type;
387 	unsigned long simg_name;
388 	unsigned long appmeta_data;
389 };
390 
391 struct icp_qat_suof_img_tbl {
392 	unsigned int num_simgs;
393 	struct icp_qat_suof_img_hdr *simg_hdr;
394 };
395 
396 struct icp_qat_suof_handle {
397 	unsigned int file_id;
398 	unsigned int check_sum;
399 	char min_ver;
400 	char maj_ver;
401 	char fw_type;
402 	const char *suof_buf;
403 	unsigned int suof_size;
404 	char *sym_str;
405 	unsigned int sym_size;
406 	struct icp_qat_suof_img_tbl img_table;
407 };
408 
409 struct icp_qat_fw_auth_desc {
410 	unsigned int img_len;
411 	unsigned int ae_mask;
412 	unsigned int css_hdr_high;
413 	unsigned int css_hdr_low;
414 	unsigned int img_high;
415 	unsigned int img_low;
416 	unsigned int signature_high;
417 	unsigned int signature_low;
418 	unsigned int fwsk_pub_high;
419 	unsigned int fwsk_pub_low;
420 	unsigned int img_ae_mode_data_high;
421 	unsigned int img_ae_mode_data_low;
422 	unsigned int img_ae_init_data_high;
423 	unsigned int img_ae_init_data_low;
424 	unsigned int img_ae_insts_high;
425 	unsigned int img_ae_insts_low;
426 };
427 
428 struct icp_qat_auth_chunk {
429 	struct icp_qat_fw_auth_desc fw_auth_desc;
430 	u64 chunk_size;
431 	u64 chunk_bus_addr;
432 };
433 
434 struct icp_qat_css_hdr {
435 	unsigned int module_type;
436 	unsigned int header_len;
437 	unsigned int header_ver;
438 	unsigned int module_id;
439 	unsigned int module_vendor;
440 	unsigned int date;
441 	unsigned int size;
442 	unsigned int key_size;
443 	unsigned int module_size;
444 	unsigned int exponent_size;
445 	unsigned int fw_type;
446 	unsigned int reserved[21];
447 };
448 
449 struct icp_qat_simg_ae_mode {
450 	unsigned int file_id;
451 	unsigned short maj_ver;
452 	unsigned short min_ver;
453 	unsigned int dev_type;
454 	unsigned short devmax_ver;
455 	unsigned short devmin_ver;
456 	unsigned int ae_mask;
457 	unsigned int ctx_enables;
458 	char fw_type;
459 	char ctx_mode;
460 	char nn_mode;
461 	char lm0_mode;
462 	char lm1_mode;
463 	char scs_mode;
464 	char lm2_mode;
465 	char lm3_mode;
466 	char tindex_mode;
467 	unsigned char reserved[7];
468 	char simg_name[256];
469 	char appmeta_data[256];
470 };
471 
472 struct icp_qat_suof_filehdr {
473 	unsigned int file_id;
474 	unsigned int check_sum;
475 	char min_ver;
476 	char maj_ver;
477 	char fw_type;
478 	char reserved;
479 	unsigned short max_chunks;
480 	unsigned short num_chunks;
481 };
482 
483 struct icp_qat_suof_chunk_hdr {
484 	char chunk_id[ICP_QAT_SUOF_OBJ_ID_LEN];
485 	u64 offset;
486 	u64 size;
487 };
488 
489 struct icp_qat_suof_strtable {
490 	unsigned int tab_length;
491 	unsigned int strings;
492 };
493 
494 struct icp_qat_suof_objhdr {
495 	unsigned int img_length;
496 	unsigned int reserved;
497 };
498 
499 struct icp_qat_mof_file_hdr {
500 	unsigned int file_id;
501 	unsigned int checksum;
502 	char min_ver;
503 	char maj_ver;
504 	unsigned short reserved;
505 	unsigned short max_chunks;
506 	unsigned short num_chunks;
507 };
508 
509 struct icp_qat_mof_chunkhdr {
510 	char chunk_id[ICP_QAT_MOF_OBJ_ID_LEN];
511 	u64 offset;
512 	u64 size;
513 };
514 
515 struct icp_qat_mof_str_table {
516 	unsigned int tab_len;
517 	unsigned int strings;
518 };
519 
520 struct icp_qat_mof_obj_hdr {
521 	unsigned short max_chunks;
522 	unsigned short num_chunks;
523 	unsigned int reserved;
524 };
525 
526 struct icp_qat_mof_obj_chunkhdr {
527 	char chunk_id[ICP_QAT_MOF_OBJ_CHUNKID_LEN];
528 	u64 offset;
529 	u64 size;
530 	unsigned int name;
531 	unsigned int reserved;
532 };
533 
534 struct icp_qat_mof_objhdr {
535 	char *obj_name;
536 	const char *obj_buf;
537 	unsigned int obj_size;
538 };
539 
540 struct icp_qat_mof_table {
541 	unsigned int num_objs;
542 	struct icp_qat_mof_objhdr *obj_hdr;
543 };
544 
545 struct icp_qat_mof_handle {
546 	unsigned int file_id;
547 	unsigned int checksum;
548 	char min_ver;
549 	char maj_ver;
550 	const char *mof_buf;
551 	u32 mof_size;
552 	char *sym_str;
553 	unsigned int sym_size;
554 	const char *uobjs_hdr;
555 	const char *sobjs_hdr;
556 	struct icp_qat_mof_table obj_table;
557 };
558 #endif
559