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