Linux-libre 4.9.86-gnu
[librecmc/linux-libre.git] / drivers / crypto / qat / qat_common / icp_qat_uclo.h
1 /*
2   This file is provided under a dual BSD/GPLv2 license.  When using or
3   redistributing this file, you may do so under either license.
4
5   GPL LICENSE SUMMARY
6   Copyright(c) 2014 Intel Corporation.
7   This program is free software; you can redistribute it and/or modify
8   it under the terms of version 2 of the GNU General Public License as
9   published by the Free Software Foundation.
10
11   This program is distributed in the hope that it will be useful, but
12   WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   General Public License for more details.
15
16   Contact Information:
17   qat-linux@intel.com
18
19   BSD LICENSE
20   Copyright(c) 2014 Intel Corporation.
21   Redistribution and use in source and binary forms, with or without
22   modification, are permitted provided that the following conditions
23   are met:
24
25     * Redistributions of source code must retain the above copyright
26       notice, this list of conditions and the following disclaimer.
27     * Redistributions in binary form must reproduce the above copyright
28       notice, this list of conditions and the following disclaimer in
29       the documentation and/or other materials provided with the
30       distribution.
31     * Neither the name of Intel Corporation nor the names of its
32       contributors may be used to endorse or promote products derived
33       from this software without specific prior written permission.
34
35   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
38   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
39   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
42   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
43   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
44   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
45   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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