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