Merge tag 'char-misc-4.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[linux-2.6-block.git] / drivers / crypto / qat / qat_common / icp_qat_uclo.h
CommitLineData
b4b7e67c
TS
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
b0272276
PY
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
b4b7e67c
TS
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
b4b7e67c
TS
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
b4b7e67c
TS
65#define ICP_QAT_UOF_OBJS "UOF_OBJS"
66#define ICP_QAT_UOF_STRT "UOF_STRT"
b4b7e67c
TS
67#define ICP_QAT_UOF_IMAG "UOF_IMAG"
68#define ICP_QAT_UOF_IMEM "UOF_IMEM"
b4b7e67c
TS
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
b0272276
PY
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
b4b7e67c
TS
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
108enum 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
114enum icp_qat_uof_regtype {
84a0ced0
PY
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,
b4b7e67c
TS
136};
137
b0272276
PY
138enum icp_qat_css_fwtype {
139 CSS_AE_FIRMWARE = 0,
140 CSS_MMP_FIRMWARE = 1
141};
142
b4b7e67c
TS
143struct 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
149struct icp_qat_uclo_region {
150 struct icp_qat_uclo_page *loaded;
151 struct icp_qat_uclo_page *page;
152};
153
154struct icp_qat_uclo_aeslice {
8c1f8e3b 155 struct icp_qat_uclo_region *region;
b4b7e67c
TS
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
163struct 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
169struct 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
176struct icp_qat_uclo_encap_uwblock {
177 unsigned int start_addr;
178 unsigned int words_num;
179 uint64_t micro_words;
180};
181
182struct 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
192struct 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
204struct icp_qat_uclo_init_mem_table {
205 unsigned int entry_num;
206 struct icp_qat_uof_initmem *init_mem;
207};
208
209struct icp_qat_uclo_objhdr {
210 char *file_buff;
211 unsigned int checksum;
212 unsigned int size;
213};
214
215struct icp_qat_uof_strtable {
216 unsigned int table_len;
217 unsigned int reserved;
218 uint64_t strings;
219};
220
221struct 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
241struct 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
248struct 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
258struct 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
265struct icp_qat_uof_objhdr {
b0272276 266 unsigned int ac_dev_type;
b4b7e67c
TS
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
275struct icp_qat_uof_chunkhdr {
276 char chunk_id[ICP_QAT_UOF_OBJID_LEN];
277 unsigned int offset;
278 unsigned int size;
279};
280
281struct icp_qat_uof_memvar_attr {
282 unsigned int offset_in_byte;
283 unsigned int value;
284};
285
286struct 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
296struct 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
306struct 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
321struct 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
328struct 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
338struct 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
353struct icp_qat_uof_image {
354 unsigned int img_name;
355 unsigned int ae_assigned;
356 unsigned int ctx_assigned;
b0272276 357 unsigned int ac_dev_type;
b4b7e67c
TS
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
376struct icp_qat_uof_objtable {
377 unsigned int entry_num;
378};
379
380struct 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
393struct icp_qat_uof_code_area {
394 unsigned int micro_words_num;
395 unsigned int uword_block_tab;
396};
397
398struct 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};
b0272276
PY
405
406struct 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
421struct icp_qat_suof_img_tbl {
422 unsigned int num_simgs;
423 struct icp_qat_suof_img_hdr *simg_hdr;
424};
425
426struct 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
439struct 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
458struct 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
464struct 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
479struct 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
502struct 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
513struct icp_qat_suof_chunk_hdr {
514 char chunk_id[ICP_QAT_SUOF_OBJ_ID_LEN];
515 u64 offset;
516 u64 size;
517};
518
519struct icp_qat_suof_strtable {
520 unsigned int tab_length;
521 unsigned int strings;
522};
523
524struct icp_qat_suof_objhdr {
525 unsigned int img_length;
526 unsigned int reserved;
527};
b4b7e67c 528#endif