178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
378ee8d1cSJulian Grajkowski /* $FreeBSD$ */
478ee8d1cSJulian Grajkowski #ifndef __ICP_QAT_UCLO_H__
578ee8d1cSJulian Grajkowski #define __ICP_QAT_UCLO_H__
678ee8d1cSJulian Grajkowski 
778ee8d1cSJulian Grajkowski #define ICP_QAT_AC_895XCC_DEV_TYPE 0x00400000
878ee8d1cSJulian Grajkowski #define ICP_QAT_AC_C62X_DEV_TYPE 0x01000000
978ee8d1cSJulian Grajkowski #define ICP_QAT_AC_C3XXX_DEV_TYPE 0x02000000
1078ee8d1cSJulian Grajkowski #define ICP_QAT_AC_200XX_DEV_TYPE 0x02000000
1178ee8d1cSJulian Grajkowski #define ICP_QAT_AC_C4XXX_DEV_TYPE 0x04000000
12a977168cSMichal Gulbicki #define ICP_QAT_AC_4XXX_A_DEV_TYPE 0x08000000
1378ee8d1cSJulian Grajkowski #define ICP_QAT_UCLO_MAX_AE 32
1478ee8d1cSJulian Grajkowski #define ICP_QAT_UCLO_MAX_CTX 8
1578ee8d1cSJulian Grajkowski #define ICP_QAT_UCLO_MAX_CPPNUM 2
1678ee8d1cSJulian Grajkowski #define ICP_QAT_UCLO_MAX_UIMAGE (ICP_QAT_UCLO_MAX_AE * ICP_QAT_UCLO_MAX_CTX)
1778ee8d1cSJulian Grajkowski #define ICP_QAT_UCLO_MAX_USTORE 0x4000
1878ee8d1cSJulian Grajkowski #define ICP_QAT_UCLO_MAX_XFER_REG 128
1978ee8d1cSJulian Grajkowski #define ICP_QAT_UCLO_MAX_GPR_REG 128
2078ee8d1cSJulian Grajkowski #define ICP_QAT_UCLO_MAX_LMEM_REG 1024
21a977168cSMichal Gulbicki #define ICP_QAT_UCLO_MAX_LMEM_REG_2X 1280
2278ee8d1cSJulian Grajkowski #define ICP_QAT_UCLO_AE_ALL_CTX 0xff
2378ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_OBJID_LEN 8
2478ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_FID 0xc6c2
2578ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_MAJVER 0x4
2678ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_MINVER 0x11
2778ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_OBJS "UOF_OBJS"
2878ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_STRT "UOF_STRT"
2978ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_IMAG "UOF_IMAG"
3078ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_IMEM "UOF_IMEM"
3178ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_LOCAL_SCOPE 1
3278ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_INIT_EXPR 0
3378ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_INIT_REG 1
3478ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_INIT_REG_CTX 2
3578ee8d1cSJulian Grajkowski #define ICP_QAT_UOF_INIT_EXPR_ENDIAN_SWAP 3
3678ee8d1cSJulian Grajkowski #define ICP_QAT_SUOF_OBJ_ID_LEN 8
3778ee8d1cSJulian Grajkowski #define ICP_QAT_SUOF_FID 0x53554f46
3878ee8d1cSJulian Grajkowski #define ICP_QAT_SUOF_MAJVER 0x0
3978ee8d1cSJulian Grajkowski #define ICP_QAT_SUOF_MINVER 0x1
4078ee8d1cSJulian Grajkowski #define ICP_QAT_SUOF_OBJ_NAME_LEN 128
4178ee8d1cSJulian Grajkowski #define ICP_QAT_MOF_OBJ_ID_LEN 8
4278ee8d1cSJulian Grajkowski #define ICP_QAT_MOF_OBJ_CHUNKID_LEN 8
4378ee8d1cSJulian Grajkowski #define ICP_QAT_MOF_FID 0x00666f6d
4478ee8d1cSJulian Grajkowski #define ICP_QAT_MOF_MAJVER 0x0
4578ee8d1cSJulian Grajkowski #define ICP_QAT_MOF_MINVER 0x1
4678ee8d1cSJulian Grajkowski #define ICP_QAT_MOF_SYM_OBJS "SYM_OBJS"
4778ee8d1cSJulian Grajkowski #define ICP_QAT_SUOF_OBJS "SUF_OBJS"
4878ee8d1cSJulian Grajkowski #define ICP_QAT_SUOF_IMAG "SUF_IMAG"
4978ee8d1cSJulian Grajkowski #define ICP_QAT_SIMG_AE_INIT_SEQ_LEN (50 * sizeof(unsigned long long))
5078ee8d1cSJulian Grajkowski #define ICP_QAT_SIMG_AE_INSTS_LEN (0x4000 * sizeof(unsigned long long))
51a977168cSMichal Gulbicki 
52a977168cSMichal Gulbicki #define DSS_FWSK_MODULUS_LEN 384 // RSA3K
53a977168cSMichal Gulbicki #define DSS_FWSK_EXPONENT_LEN 4
54a977168cSMichal Gulbicki #define DSS_FWSK_PADDING_LEN 380
55a977168cSMichal Gulbicki #define DSS_SIGNATURE_LEN 384 // RSA3K
56a977168cSMichal Gulbicki 
57a977168cSMichal Gulbicki #define CSS_FWSK_MODULUS_LEN 256 // RSA2K
58a977168cSMichal Gulbicki #define CSS_FWSK_EXPONENT_LEN 4
59a977168cSMichal Gulbicki #define CSS_FWSK_PADDING_LEN 252
60a977168cSMichal Gulbicki #define CSS_SIGNATURE_LEN 256 // RSA2K
61a977168cSMichal Gulbicki 
62a977168cSMichal Gulbicki #define ICP_QAT_CSS_FWSK_MODULUS_LEN(ID)                                       \
63a977168cSMichal Gulbicki 	(IS_QAT_GEN4(ID) ? DSS_FWSK_MODULUS_LEN : CSS_FWSK_MODULUS_LEN)
64a977168cSMichal Gulbicki 
65a977168cSMichal Gulbicki #define ICP_QAT_CSS_FWSK_EXPONENT_LEN(ID)                                      \
66a977168cSMichal Gulbicki 	(IS_QAT_GEN4(ID) ? DSS_FWSK_EXPONENT_LEN : CSS_FWSK_EXPONENT_LEN)
67a977168cSMichal Gulbicki 
68a977168cSMichal Gulbicki #define ICP_QAT_CSS_FWSK_PAD_LEN(ID)                                           \
69a977168cSMichal Gulbicki 	(IS_QAT_GEN4(ID) ? DSS_FWSK_PADDING_LEN : CSS_FWSK_PADDING_LEN)
70a977168cSMichal Gulbicki 
71a977168cSMichal Gulbicki #define ICP_QAT_CSS_FWSK_PUB_LEN(ID)                                           \
72a977168cSMichal Gulbicki 	(ICP_QAT_CSS_FWSK_MODULUS_LEN(ID) +                                    \
73a977168cSMichal Gulbicki 	 ICP_QAT_CSS_FWSK_EXPONENT_LEN(ID) + ICP_QAT_CSS_FWSK_PAD_LEN(ID))
74a977168cSMichal Gulbicki 
75a977168cSMichal Gulbicki #define ICP_QAT_CSS_SIGNATURE_LEN(ID)                                          \
76a977168cSMichal Gulbicki 	(IS_QAT_GEN4(ID) ? DSS_SIGNATURE_LEN : CSS_SIGNATURE_LEN)
77a977168cSMichal Gulbicki 
7878ee8d1cSJulian Grajkowski #define ICP_QAT_CSS_AE_IMG_LEN                                                 \
7978ee8d1cSJulian Grajkowski 	(sizeof(struct icp_qat_simg_ae_mode) + ICP_QAT_SIMG_AE_INIT_SEQ_LEN +  \
8078ee8d1cSJulian Grajkowski 	 ICP_QAT_SIMG_AE_INSTS_LEN)
81a977168cSMichal Gulbicki #define ICP_QAT_CSS_AE_SIMG_LEN(ID)                                            \
82a977168cSMichal Gulbicki 	(sizeof(struct icp_qat_css_hdr) + ICP_QAT_CSS_FWSK_PUB_LEN(ID) +       \
83a977168cSMichal Gulbicki 	 ICP_QAT_CSS_SIGNATURE_LEN(ID) + ICP_QAT_CSS_AE_IMG_LEN)
84a977168cSMichal Gulbicki #define ICP_QAT_AE_IMG_OFFSET(ID)                                              \
85a977168cSMichal Gulbicki 	(sizeof(struct icp_qat_css_hdr) + ICP_QAT_CSS_FWSK_MODULUS_LEN(ID) +   \
86a977168cSMichal Gulbicki 	 ICP_QAT_CSS_FWSK_EXPONENT_LEN(ID) + ICP_QAT_CSS_SIGNATURE_LEN(ID))
8778ee8d1cSJulian Grajkowski #define ICP_QAT_CSS_MAX_IMAGE_LEN 0x40000
8878ee8d1cSJulian Grajkowski 
8978ee8d1cSJulian Grajkowski #define ICP_QAT_CTX_MODE(ae_mode) ((ae_mode)&0xf)
9078ee8d1cSJulian Grajkowski #define ICP_QAT_NN_MODE(ae_mode) (((ae_mode) >> 0x4) & 0xf)
9178ee8d1cSJulian Grajkowski #define ICP_QAT_SHARED_USTORE_MODE(ae_mode) (((ae_mode) >> 0xb) & 0x1)
9278ee8d1cSJulian Grajkowski #define RELOADABLE_CTX_SHARED_MODE(ae_mode) (((ae_mode) >> 0xc) & 0x1)
9378ee8d1cSJulian Grajkowski 
9478ee8d1cSJulian Grajkowski #define ICP_QAT_LOC_MEM0_MODE(ae_mode) (((ae_mode) >> 0x8) & 0x1)
9578ee8d1cSJulian Grajkowski #define ICP_QAT_LOC_MEM1_MODE(ae_mode) (((ae_mode) >> 0x9) & 0x1)
9678ee8d1cSJulian Grajkowski #define ICP_QAT_LOC_MEM2_MODE(ae_mode) (((ae_mode) >> 0x6) & 0x1)
9778ee8d1cSJulian Grajkowski #define ICP_QAT_LOC_MEM3_MODE(ae_mode) (((ae_mode) >> 0x7) & 0x1)
9878ee8d1cSJulian Grajkowski #define ICP_QAT_LOC_TINDEX_MODE(ae_mode) (((ae_mode) >> 0xe) & 0x1)
9978ee8d1cSJulian Grajkowski 
10078ee8d1cSJulian Grajkowski enum icp_qat_uof_mem_region {
10178ee8d1cSJulian Grajkowski 	ICP_QAT_UOF_SRAM_REGION = 0x0,
10278ee8d1cSJulian Grajkowski 	ICP_QAT_UOF_LMEM_REGION = 0x3,
10378ee8d1cSJulian Grajkowski 	ICP_QAT_UOF_UMEM_REGION = 0x5
10478ee8d1cSJulian Grajkowski };
10578ee8d1cSJulian Grajkowski 
10678ee8d1cSJulian Grajkowski enum icp_qat_uof_regtype {
10778ee8d1cSJulian Grajkowski 	ICP_NO_DEST = 0,
10878ee8d1cSJulian Grajkowski 	ICP_GPA_REL = 1,
10978ee8d1cSJulian Grajkowski 	ICP_GPA_ABS = 2,
11078ee8d1cSJulian Grajkowski 	ICP_GPB_REL = 3,
11178ee8d1cSJulian Grajkowski 	ICP_GPB_ABS = 4,
11278ee8d1cSJulian Grajkowski 	ICP_SR_REL = 5,
11378ee8d1cSJulian Grajkowski 	ICP_SR_RD_REL = 6,
11478ee8d1cSJulian Grajkowski 	ICP_SR_WR_REL = 7,
11578ee8d1cSJulian Grajkowski 	ICP_SR_ABS = 8,
11678ee8d1cSJulian Grajkowski 	ICP_SR_RD_ABS = 9,
11778ee8d1cSJulian Grajkowski 	ICP_SR_WR_ABS = 10,
11878ee8d1cSJulian Grajkowski 	ICP_DR_REL = 19,
11978ee8d1cSJulian Grajkowski 	ICP_DR_RD_REL = 20,
12078ee8d1cSJulian Grajkowski 	ICP_DR_WR_REL = 21,
12178ee8d1cSJulian Grajkowski 	ICP_DR_ABS = 22,
12278ee8d1cSJulian Grajkowski 	ICP_DR_RD_ABS = 23,
12378ee8d1cSJulian Grajkowski 	ICP_DR_WR_ABS = 24,
12478ee8d1cSJulian Grajkowski 	ICP_LMEM = 26,
12578ee8d1cSJulian Grajkowski 	ICP_LMEM0 = 27,
12678ee8d1cSJulian Grajkowski 	ICP_LMEM1 = 28,
12778ee8d1cSJulian Grajkowski 	ICP_NEIGH_REL = 31,
12878ee8d1cSJulian Grajkowski 	ICP_LMEM2 = 61,
12978ee8d1cSJulian Grajkowski 	ICP_LMEM3 = 62,
13078ee8d1cSJulian Grajkowski };
13178ee8d1cSJulian Grajkowski 
13278ee8d1cSJulian Grajkowski enum icp_qat_css_fwtype { CSS_AE_FIRMWARE = 0, CSS_MMP_FIRMWARE = 1 };
13378ee8d1cSJulian Grajkowski 
13478ee8d1cSJulian Grajkowski struct icp_qat_uclo_page {
13578ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_encap_page *encap_page;
13678ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_region *region;
13778ee8d1cSJulian Grajkowski 	unsigned int flags;
13878ee8d1cSJulian Grajkowski };
13978ee8d1cSJulian Grajkowski 
14078ee8d1cSJulian Grajkowski struct icp_qat_uclo_region {
14178ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_page *loaded;
14278ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_page *page;
14378ee8d1cSJulian Grajkowski };
14478ee8d1cSJulian Grajkowski 
14578ee8d1cSJulian Grajkowski struct icp_qat_uclo_aeslice {
14678ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_region *region;
14778ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_page *page;
14878ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_page *cur_page[ICP_QAT_UCLO_MAX_CTX];
14978ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_encapme *encap_image;
15078ee8d1cSJulian Grajkowski 	unsigned int ctx_mask_assigned;
15178ee8d1cSJulian Grajkowski 	unsigned int new_uaddr[ICP_QAT_UCLO_MAX_CTX];
15278ee8d1cSJulian Grajkowski };
15378ee8d1cSJulian Grajkowski 
15478ee8d1cSJulian Grajkowski struct icp_qat_uclo_aedata {
15578ee8d1cSJulian Grajkowski 	unsigned int slice_num;
15678ee8d1cSJulian Grajkowski 	unsigned int eff_ustore_size;
15778ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_aeslice ae_slices[ICP_QAT_UCLO_MAX_CTX];
15878ee8d1cSJulian Grajkowski 	unsigned int shareable_ustore;
15978ee8d1cSJulian Grajkowski };
16078ee8d1cSJulian Grajkowski 
16178ee8d1cSJulian Grajkowski struct icp_qat_uof_encap_obj {
16278ee8d1cSJulian Grajkowski 	char *beg_uof;
16378ee8d1cSJulian Grajkowski 	struct icp_qat_uof_objhdr *obj_hdr;
16478ee8d1cSJulian Grajkowski 	struct icp_qat_uof_chunkhdr *chunk_hdr;
16578ee8d1cSJulian Grajkowski 	struct icp_qat_uof_varmem_seg *var_mem_seg;
16678ee8d1cSJulian Grajkowski };
16778ee8d1cSJulian Grajkowski 
16878ee8d1cSJulian Grajkowski struct icp_qat_uclo_encap_uwblock {
16978ee8d1cSJulian Grajkowski 	unsigned int start_addr;
17078ee8d1cSJulian Grajkowski 	unsigned int words_num;
17178ee8d1cSJulian Grajkowski 	uint64_t micro_words;
17278ee8d1cSJulian Grajkowski };
17378ee8d1cSJulian Grajkowski 
17478ee8d1cSJulian Grajkowski struct icp_qat_uclo_encap_page {
17578ee8d1cSJulian Grajkowski 	unsigned int def_page;
17678ee8d1cSJulian Grajkowski 	unsigned int page_region;
17778ee8d1cSJulian Grajkowski 	unsigned int beg_addr_v;
17878ee8d1cSJulian Grajkowski 	unsigned int beg_addr_p;
17978ee8d1cSJulian Grajkowski 	unsigned int micro_words_num;
18078ee8d1cSJulian Grajkowski 	unsigned int uwblock_num;
18178ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_encap_uwblock *uwblock;
18278ee8d1cSJulian Grajkowski };
18378ee8d1cSJulian Grajkowski 
18478ee8d1cSJulian Grajkowski struct icp_qat_uclo_encapme {
18578ee8d1cSJulian Grajkowski 	struct icp_qat_uof_image *img_ptr;
18678ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_encap_page *page;
18778ee8d1cSJulian Grajkowski 	unsigned int ae_reg_num;
18878ee8d1cSJulian Grajkowski 	struct icp_qat_uof_ae_reg *ae_reg;
18978ee8d1cSJulian Grajkowski 	unsigned int init_regsym_num;
19078ee8d1cSJulian Grajkowski 	struct icp_qat_uof_init_regsym *init_regsym;
19178ee8d1cSJulian Grajkowski 	unsigned int sbreak_num;
19278ee8d1cSJulian Grajkowski 	struct icp_qat_uof_sbreak *sbreak;
19378ee8d1cSJulian Grajkowski 	unsigned int uwords_num;
19478ee8d1cSJulian Grajkowski };
19578ee8d1cSJulian Grajkowski 
19678ee8d1cSJulian Grajkowski struct icp_qat_uclo_init_mem_table {
19778ee8d1cSJulian Grajkowski 	unsigned int entry_num;
19878ee8d1cSJulian Grajkowski 	struct icp_qat_uof_initmem *init_mem;
19978ee8d1cSJulian Grajkowski };
20078ee8d1cSJulian Grajkowski 
20178ee8d1cSJulian Grajkowski struct icp_qat_uclo_objhdr {
20278ee8d1cSJulian Grajkowski 	char *file_buff;
20378ee8d1cSJulian Grajkowski 	unsigned int checksum;
20478ee8d1cSJulian Grajkowski 	unsigned int size;
20578ee8d1cSJulian Grajkowski };
20678ee8d1cSJulian Grajkowski 
20778ee8d1cSJulian Grajkowski struct icp_qat_uof_strtable {
20878ee8d1cSJulian Grajkowski 	unsigned int table_len;
20978ee8d1cSJulian Grajkowski 	unsigned int reserved;
21078ee8d1cSJulian Grajkowski 	uint64_t strings;
21178ee8d1cSJulian Grajkowski };
21278ee8d1cSJulian Grajkowski 
21378ee8d1cSJulian Grajkowski struct icp_qat_uclo_objhandle {
21478ee8d1cSJulian Grajkowski 	unsigned int prod_type;
21578ee8d1cSJulian Grajkowski 	unsigned int prod_rev;
21678ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_objhdr *obj_hdr;
21778ee8d1cSJulian Grajkowski 	struct icp_qat_uof_encap_obj encap_uof_obj;
21878ee8d1cSJulian Grajkowski 	struct icp_qat_uof_strtable str_table;
21978ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_encapme ae_uimage[ICP_QAT_UCLO_MAX_UIMAGE];
22078ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_aedata ae_data[ICP_QAT_UCLO_MAX_AE];
22178ee8d1cSJulian Grajkowski 	struct icp_qat_uclo_init_mem_table init_mem_tab;
22278ee8d1cSJulian Grajkowski 	struct icp_qat_uof_batch_init *lm_init_tab[ICP_QAT_UCLO_MAX_AE];
22378ee8d1cSJulian Grajkowski 	struct icp_qat_uof_batch_init *umem_init_tab[ICP_QAT_UCLO_MAX_AE];
22478ee8d1cSJulian Grajkowski 	int uimage_num;
22578ee8d1cSJulian Grajkowski 	int uword_in_bytes;
22678ee8d1cSJulian Grajkowski 	int global_inited;
22778ee8d1cSJulian Grajkowski 	unsigned int ae_num;
22878ee8d1cSJulian Grajkowski 	unsigned int ustore_phy_size;
22978ee8d1cSJulian Grajkowski 	void *obj_buf;
23078ee8d1cSJulian Grajkowski 	uint64_t *uword_buf;
23178ee8d1cSJulian Grajkowski };
23278ee8d1cSJulian Grajkowski 
23378ee8d1cSJulian Grajkowski struct icp_qat_uof_uword_block {
23478ee8d1cSJulian Grajkowski 	unsigned int start_addr;
23578ee8d1cSJulian Grajkowski 	unsigned int words_num;
23678ee8d1cSJulian Grajkowski 	unsigned int uword_offset;
23778ee8d1cSJulian Grajkowski 	unsigned int reserved;
23878ee8d1cSJulian Grajkowski };
23978ee8d1cSJulian Grajkowski 
24078ee8d1cSJulian Grajkowski struct icp_qat_uof_filehdr {
24178ee8d1cSJulian Grajkowski 	unsigned short file_id;
24278ee8d1cSJulian Grajkowski 	unsigned short reserved1;
24378ee8d1cSJulian Grajkowski 	char min_ver;
24478ee8d1cSJulian Grajkowski 	char maj_ver;
24578ee8d1cSJulian Grajkowski 	unsigned short reserved2;
24678ee8d1cSJulian Grajkowski 	unsigned short max_chunks;
24778ee8d1cSJulian Grajkowski 	unsigned short num_chunks;
24878ee8d1cSJulian Grajkowski };
24978ee8d1cSJulian Grajkowski 
25078ee8d1cSJulian Grajkowski struct icp_qat_uof_filechunkhdr {
25178ee8d1cSJulian Grajkowski 	char chunk_id[ICP_QAT_UOF_OBJID_LEN];
25278ee8d1cSJulian Grajkowski 	unsigned int checksum;
25378ee8d1cSJulian Grajkowski 	unsigned int offset;
25478ee8d1cSJulian Grajkowski 	unsigned int size;
25578ee8d1cSJulian Grajkowski };
25678ee8d1cSJulian Grajkowski 
25778ee8d1cSJulian Grajkowski struct icp_qat_uof_objhdr {
25878ee8d1cSJulian Grajkowski 	unsigned int ac_dev_type;
25978ee8d1cSJulian Grajkowski 	unsigned short min_cpu_ver;
26078ee8d1cSJulian Grajkowski 	unsigned short max_cpu_ver;
26178ee8d1cSJulian Grajkowski 	short max_chunks;
26278ee8d1cSJulian Grajkowski 	short num_chunks;
26378ee8d1cSJulian Grajkowski 	unsigned int reserved1;
26478ee8d1cSJulian Grajkowski 	unsigned int reserved2;
26578ee8d1cSJulian Grajkowski };
26678ee8d1cSJulian Grajkowski 
26778ee8d1cSJulian Grajkowski struct icp_qat_uof_chunkhdr {
26878ee8d1cSJulian Grajkowski 	char chunk_id[ICP_QAT_UOF_OBJID_LEN];
26978ee8d1cSJulian Grajkowski 	unsigned int offset;
27078ee8d1cSJulian Grajkowski 	unsigned int size;
27178ee8d1cSJulian Grajkowski };
27278ee8d1cSJulian Grajkowski 
27378ee8d1cSJulian Grajkowski struct icp_qat_uof_memvar_attr {
27478ee8d1cSJulian Grajkowski 	unsigned int offset_in_byte;
27578ee8d1cSJulian Grajkowski 	unsigned int value;
27678ee8d1cSJulian Grajkowski };
27778ee8d1cSJulian Grajkowski 
27878ee8d1cSJulian Grajkowski struct icp_qat_uof_initmem {
27978ee8d1cSJulian Grajkowski 	unsigned int sym_name;
28078ee8d1cSJulian Grajkowski 	char region;
28178ee8d1cSJulian Grajkowski 	char scope;
28278ee8d1cSJulian Grajkowski 	unsigned short reserved1;
28378ee8d1cSJulian Grajkowski 	unsigned int addr;
28478ee8d1cSJulian Grajkowski 	unsigned int num_in_bytes;
28578ee8d1cSJulian Grajkowski 	unsigned int val_attr_num;
28678ee8d1cSJulian Grajkowski };
28778ee8d1cSJulian Grajkowski 
28878ee8d1cSJulian Grajkowski struct icp_qat_uof_init_regsym {
28978ee8d1cSJulian Grajkowski 	unsigned int sym_name;
29078ee8d1cSJulian Grajkowski 	char init_type;
29178ee8d1cSJulian Grajkowski 	char value_type;
29278ee8d1cSJulian Grajkowski 	char reg_type;
29378ee8d1cSJulian Grajkowski 	unsigned char ctx;
29478ee8d1cSJulian Grajkowski 	unsigned int reg_addr;
29578ee8d1cSJulian Grajkowski 	unsigned int value;
29678ee8d1cSJulian Grajkowski };
29778ee8d1cSJulian Grajkowski 
29878ee8d1cSJulian Grajkowski struct icp_qat_uof_varmem_seg {
29978ee8d1cSJulian Grajkowski 	unsigned int sram_base;
30078ee8d1cSJulian Grajkowski 	unsigned int sram_size;
30178ee8d1cSJulian Grajkowski 	unsigned int sram_alignment;
30278ee8d1cSJulian Grajkowski 	unsigned int sdram_base;
30378ee8d1cSJulian Grajkowski 	unsigned int sdram_size;
30478ee8d1cSJulian Grajkowski 	unsigned int sdram_alignment;
30578ee8d1cSJulian Grajkowski 	unsigned int sdram1_base;
30678ee8d1cSJulian Grajkowski 	unsigned int sdram1_size;
30778ee8d1cSJulian Grajkowski 	unsigned int sdram1_alignment;
30878ee8d1cSJulian Grajkowski 	unsigned int scratch_base;
30978ee8d1cSJulian Grajkowski 	unsigned int scratch_size;
31078ee8d1cSJulian Grajkowski 	unsigned int scratch_alignment;
31178ee8d1cSJulian Grajkowski };
31278ee8d1cSJulian Grajkowski 
31378ee8d1cSJulian Grajkowski struct icp_qat_uof_gtid {
31478ee8d1cSJulian Grajkowski 	char tool_id[ICP_QAT_UOF_OBJID_LEN];
31578ee8d1cSJulian Grajkowski 	int tool_ver;
31678ee8d1cSJulian Grajkowski 	unsigned int reserved1;
31778ee8d1cSJulian Grajkowski 	unsigned int reserved2;
31878ee8d1cSJulian Grajkowski };
31978ee8d1cSJulian Grajkowski 
32078ee8d1cSJulian Grajkowski struct icp_qat_uof_sbreak {
32178ee8d1cSJulian Grajkowski 	unsigned int page_num;
32278ee8d1cSJulian Grajkowski 	unsigned int virt_uaddr;
32378ee8d1cSJulian Grajkowski 	unsigned char sbreak_type;
32478ee8d1cSJulian Grajkowski 	unsigned char reg_type;
32578ee8d1cSJulian Grajkowski 	unsigned short reserved1;
32678ee8d1cSJulian Grajkowski 	unsigned int addr_offset;
32778ee8d1cSJulian Grajkowski 	unsigned int reg_addr;
32878ee8d1cSJulian Grajkowski };
32978ee8d1cSJulian Grajkowski 
33078ee8d1cSJulian Grajkowski struct icp_qat_uof_code_page {
33178ee8d1cSJulian Grajkowski 	unsigned int page_region;
33278ee8d1cSJulian Grajkowski 	unsigned int page_num;
33378ee8d1cSJulian Grajkowski 	unsigned char def_page;
33478ee8d1cSJulian Grajkowski 	unsigned char reserved2;
33578ee8d1cSJulian Grajkowski 	unsigned short reserved1;
33678ee8d1cSJulian Grajkowski 	unsigned int beg_addr_v;
33778ee8d1cSJulian Grajkowski 	unsigned int beg_addr_p;
33878ee8d1cSJulian Grajkowski 	unsigned int neigh_reg_tab_offset;
33978ee8d1cSJulian Grajkowski 	unsigned int uc_var_tab_offset;
34078ee8d1cSJulian Grajkowski 	unsigned int imp_var_tab_offset;
34178ee8d1cSJulian Grajkowski 	unsigned int imp_expr_tab_offset;
34278ee8d1cSJulian Grajkowski 	unsigned int code_area_offset;
34378ee8d1cSJulian Grajkowski };
34478ee8d1cSJulian Grajkowski 
34578ee8d1cSJulian Grajkowski struct icp_qat_uof_image {
34678ee8d1cSJulian Grajkowski 	unsigned int img_name;
34778ee8d1cSJulian Grajkowski 	unsigned int ae_assigned;
34878ee8d1cSJulian Grajkowski 	unsigned int ctx_assigned;
34978ee8d1cSJulian Grajkowski 	unsigned int ac_dev_type;
35078ee8d1cSJulian Grajkowski 	unsigned int entry_address;
35178ee8d1cSJulian Grajkowski 	unsigned int fill_pattern[2];
35278ee8d1cSJulian Grajkowski 	unsigned int reloadable_size;
35378ee8d1cSJulian Grajkowski 	unsigned char sensitivity;
35478ee8d1cSJulian Grajkowski 	unsigned char reserved;
35578ee8d1cSJulian Grajkowski 	unsigned short ae_mode;
35678ee8d1cSJulian Grajkowski 	unsigned short max_ver;
35778ee8d1cSJulian Grajkowski 	unsigned short min_ver;
35878ee8d1cSJulian Grajkowski 	unsigned short image_attrib;
35978ee8d1cSJulian Grajkowski 	unsigned short reserved2;
36078ee8d1cSJulian Grajkowski 	unsigned short page_region_num;
36178ee8d1cSJulian Grajkowski 	unsigned short numpages;
36278ee8d1cSJulian Grajkowski 	unsigned int reg_tab_offset;
36378ee8d1cSJulian Grajkowski 	unsigned int init_reg_sym_tab;
36478ee8d1cSJulian Grajkowski 	unsigned int sbreak_tab;
36578ee8d1cSJulian Grajkowski 	unsigned int app_metadata;
36678ee8d1cSJulian Grajkowski };
36778ee8d1cSJulian Grajkowski 
36878ee8d1cSJulian Grajkowski struct icp_qat_uof_objtable {
36978ee8d1cSJulian Grajkowski 	unsigned int entry_num;
37078ee8d1cSJulian Grajkowski };
37178ee8d1cSJulian Grajkowski 
37278ee8d1cSJulian Grajkowski struct icp_qat_uof_ae_reg {
37378ee8d1cSJulian Grajkowski 	unsigned int name;
37478ee8d1cSJulian Grajkowski 	unsigned int vis_name;
37578ee8d1cSJulian Grajkowski 	unsigned short type;
37678ee8d1cSJulian Grajkowski 	unsigned short addr;
37778ee8d1cSJulian Grajkowski 	unsigned short access_mode;
37878ee8d1cSJulian Grajkowski 	unsigned char visible;
37978ee8d1cSJulian Grajkowski 	unsigned char reserved1;
38078ee8d1cSJulian Grajkowski 	unsigned short ref_count;
38178ee8d1cSJulian Grajkowski 	unsigned short reserved2;
38278ee8d1cSJulian Grajkowski 	unsigned int xo_id;
38378ee8d1cSJulian Grajkowski };
38478ee8d1cSJulian Grajkowski 
38578ee8d1cSJulian Grajkowski struct icp_qat_uof_code_area {
38678ee8d1cSJulian Grajkowski 	unsigned int micro_words_num;
38778ee8d1cSJulian Grajkowski 	unsigned int uword_block_tab;
38878ee8d1cSJulian Grajkowski };
38978ee8d1cSJulian Grajkowski 
39078ee8d1cSJulian Grajkowski struct icp_qat_uof_batch_init {
39178ee8d1cSJulian Grajkowski 	unsigned int ae;
39278ee8d1cSJulian Grajkowski 	unsigned int addr;
39378ee8d1cSJulian Grajkowski 	unsigned int *value;
39478ee8d1cSJulian Grajkowski 	unsigned int size;
39578ee8d1cSJulian Grajkowski 	struct icp_qat_uof_batch_init *next;
39678ee8d1cSJulian Grajkowski };
39778ee8d1cSJulian Grajkowski 
39878ee8d1cSJulian Grajkowski struct icp_qat_suof_img_hdr {
39978ee8d1cSJulian Grajkowski 	const char *simg_buf;
40078ee8d1cSJulian Grajkowski 	unsigned long simg_len;
40178ee8d1cSJulian Grajkowski 	const char *css_header;
40278ee8d1cSJulian Grajkowski 	const char *css_key;
40378ee8d1cSJulian Grajkowski 	const char *css_signature;
40478ee8d1cSJulian Grajkowski 	const char *css_simg;
40578ee8d1cSJulian Grajkowski 	unsigned long simg_size;
40678ee8d1cSJulian Grajkowski 	unsigned int ae_num;
40778ee8d1cSJulian Grajkowski 	unsigned int ae_mask;
40878ee8d1cSJulian Grajkowski 	unsigned int fw_type;
40978ee8d1cSJulian Grajkowski 	unsigned long simg_name;
41078ee8d1cSJulian Grajkowski 	unsigned long appmeta_data;
41178ee8d1cSJulian Grajkowski };
41278ee8d1cSJulian Grajkowski 
41378ee8d1cSJulian Grajkowski struct icp_qat_suof_img_tbl {
41478ee8d1cSJulian Grajkowski 	unsigned int num_simgs;
41578ee8d1cSJulian Grajkowski 	struct icp_qat_suof_img_hdr *simg_hdr;
41678ee8d1cSJulian Grajkowski };
41778ee8d1cSJulian Grajkowski 
41878ee8d1cSJulian Grajkowski struct icp_qat_suof_handle {
41978ee8d1cSJulian Grajkowski 	unsigned int file_id;
42078ee8d1cSJulian Grajkowski 	unsigned int check_sum;
42178ee8d1cSJulian Grajkowski 	char min_ver;
42278ee8d1cSJulian Grajkowski 	char maj_ver;
42378ee8d1cSJulian Grajkowski 	char fw_type;
42478ee8d1cSJulian Grajkowski 	const char *suof_buf;
42578ee8d1cSJulian Grajkowski 	unsigned int suof_size;
42678ee8d1cSJulian Grajkowski 	char *sym_str;
42778ee8d1cSJulian Grajkowski 	unsigned int sym_size;
42878ee8d1cSJulian Grajkowski 	struct icp_qat_suof_img_tbl img_table;
42978ee8d1cSJulian Grajkowski };
43078ee8d1cSJulian Grajkowski 
43178ee8d1cSJulian Grajkowski struct icp_qat_fw_auth_desc {
43278ee8d1cSJulian Grajkowski 	unsigned int img_len;
43378ee8d1cSJulian Grajkowski 	unsigned int ae_mask;
43478ee8d1cSJulian Grajkowski 	unsigned int css_hdr_high;
43578ee8d1cSJulian Grajkowski 	unsigned int css_hdr_low;
43678ee8d1cSJulian Grajkowski 	unsigned int img_high;
43778ee8d1cSJulian Grajkowski 	unsigned int img_low;
43878ee8d1cSJulian Grajkowski 	unsigned int signature_high;
43978ee8d1cSJulian Grajkowski 	unsigned int signature_low;
44078ee8d1cSJulian Grajkowski 	unsigned int fwsk_pub_high;
44178ee8d1cSJulian Grajkowski 	unsigned int fwsk_pub_low;
44278ee8d1cSJulian Grajkowski 	unsigned int img_ae_mode_data_high;
44378ee8d1cSJulian Grajkowski 	unsigned int img_ae_mode_data_low;
44478ee8d1cSJulian Grajkowski 	unsigned int img_ae_init_data_high;
44578ee8d1cSJulian Grajkowski 	unsigned int img_ae_init_data_low;
44678ee8d1cSJulian Grajkowski 	unsigned int img_ae_insts_high;
44778ee8d1cSJulian Grajkowski 	unsigned int img_ae_insts_low;
44878ee8d1cSJulian Grajkowski };
44978ee8d1cSJulian Grajkowski 
45078ee8d1cSJulian Grajkowski struct icp_qat_auth_chunk {
45178ee8d1cSJulian Grajkowski 	struct icp_qat_fw_auth_desc fw_auth_desc;
45278ee8d1cSJulian Grajkowski 	u64 chunk_size;
45378ee8d1cSJulian Grajkowski 	u64 chunk_bus_addr;
45478ee8d1cSJulian Grajkowski };
45578ee8d1cSJulian Grajkowski 
45678ee8d1cSJulian Grajkowski struct icp_qat_css_hdr {
45778ee8d1cSJulian Grajkowski 	unsigned int module_type;
45878ee8d1cSJulian Grajkowski 	unsigned int header_len;
45978ee8d1cSJulian Grajkowski 	unsigned int header_ver;
46078ee8d1cSJulian Grajkowski 	unsigned int module_id;
46178ee8d1cSJulian Grajkowski 	unsigned int module_vendor;
46278ee8d1cSJulian Grajkowski 	unsigned int date;
46378ee8d1cSJulian Grajkowski 	unsigned int size;
46478ee8d1cSJulian Grajkowski 	unsigned int key_size;
46578ee8d1cSJulian Grajkowski 	unsigned int module_size;
46678ee8d1cSJulian Grajkowski 	unsigned int exponent_size;
46778ee8d1cSJulian Grajkowski 	unsigned int fw_type;
46878ee8d1cSJulian Grajkowski 	unsigned int reserved[21];
46978ee8d1cSJulian Grajkowski };
47078ee8d1cSJulian Grajkowski 
47178ee8d1cSJulian Grajkowski struct icp_qat_simg_ae_mode {
47278ee8d1cSJulian Grajkowski 	unsigned int file_id;
47378ee8d1cSJulian Grajkowski 	unsigned short maj_ver;
47478ee8d1cSJulian Grajkowski 	unsigned short min_ver;
47578ee8d1cSJulian Grajkowski 	unsigned int dev_type;
47678ee8d1cSJulian Grajkowski 	unsigned short devmax_ver;
47778ee8d1cSJulian Grajkowski 	unsigned short devmin_ver;
47878ee8d1cSJulian Grajkowski 	unsigned int ae_mask;
47978ee8d1cSJulian Grajkowski 	unsigned int ctx_enables;
48078ee8d1cSJulian Grajkowski 	char fw_type;
48178ee8d1cSJulian Grajkowski 	char ctx_mode;
48278ee8d1cSJulian Grajkowski 	char nn_mode;
48378ee8d1cSJulian Grajkowski 	char lm0_mode;
48478ee8d1cSJulian Grajkowski 	char lm1_mode;
48578ee8d1cSJulian Grajkowski 	char scs_mode;
48678ee8d1cSJulian Grajkowski 	char lm2_mode;
48778ee8d1cSJulian Grajkowski 	char lm3_mode;
48878ee8d1cSJulian Grajkowski 	char tindex_mode;
48978ee8d1cSJulian Grajkowski 	unsigned char reserved[7];
49078ee8d1cSJulian Grajkowski 	char simg_name[256];
49178ee8d1cSJulian Grajkowski 	char appmeta_data[256];
49278ee8d1cSJulian Grajkowski };
49378ee8d1cSJulian Grajkowski 
49478ee8d1cSJulian Grajkowski struct icp_qat_suof_filehdr {
49578ee8d1cSJulian Grajkowski 	unsigned int file_id;
49678ee8d1cSJulian Grajkowski 	unsigned int check_sum;
49778ee8d1cSJulian Grajkowski 	char min_ver;
49878ee8d1cSJulian Grajkowski 	char maj_ver;
49978ee8d1cSJulian Grajkowski 	char fw_type;
50078ee8d1cSJulian Grajkowski 	char reserved;
50178ee8d1cSJulian Grajkowski 	unsigned short max_chunks;
50278ee8d1cSJulian Grajkowski 	unsigned short num_chunks;
50378ee8d1cSJulian Grajkowski };
50478ee8d1cSJulian Grajkowski 
50578ee8d1cSJulian Grajkowski struct icp_qat_suof_chunk_hdr {
50678ee8d1cSJulian Grajkowski 	char chunk_id[ICP_QAT_SUOF_OBJ_ID_LEN];
50778ee8d1cSJulian Grajkowski 	u64 offset;
50878ee8d1cSJulian Grajkowski 	u64 size;
50978ee8d1cSJulian Grajkowski };
51078ee8d1cSJulian Grajkowski 
51178ee8d1cSJulian Grajkowski struct icp_qat_suof_strtable {
51278ee8d1cSJulian Grajkowski 	unsigned int tab_length;
51378ee8d1cSJulian Grajkowski 	unsigned int strings;
51478ee8d1cSJulian Grajkowski };
51578ee8d1cSJulian Grajkowski 
51678ee8d1cSJulian Grajkowski struct icp_qat_suof_objhdr {
51778ee8d1cSJulian Grajkowski 	unsigned int img_length;
51878ee8d1cSJulian Grajkowski 	unsigned int reserved;
51978ee8d1cSJulian Grajkowski };
52078ee8d1cSJulian Grajkowski 
52178ee8d1cSJulian Grajkowski struct icp_qat_mof_file_hdr {
52278ee8d1cSJulian Grajkowski 	unsigned int file_id;
52378ee8d1cSJulian Grajkowski 	unsigned int checksum;
52478ee8d1cSJulian Grajkowski 	char min_ver;
52578ee8d1cSJulian Grajkowski 	char maj_ver;
52678ee8d1cSJulian Grajkowski 	unsigned short reserved;
52778ee8d1cSJulian Grajkowski 	unsigned short max_chunks;
52878ee8d1cSJulian Grajkowski 	unsigned short num_chunks;
52978ee8d1cSJulian Grajkowski };
53078ee8d1cSJulian Grajkowski 
53178ee8d1cSJulian Grajkowski struct icp_qat_mof_chunkhdr {
53278ee8d1cSJulian Grajkowski 	char chunk_id[ICP_QAT_MOF_OBJ_ID_LEN];
53378ee8d1cSJulian Grajkowski 	u64 offset;
53478ee8d1cSJulian Grajkowski 	u64 size;
53578ee8d1cSJulian Grajkowski };
53678ee8d1cSJulian Grajkowski 
53778ee8d1cSJulian Grajkowski struct icp_qat_mof_str_table {
53878ee8d1cSJulian Grajkowski 	unsigned int tab_len;
53978ee8d1cSJulian Grajkowski 	unsigned int strings;
54078ee8d1cSJulian Grajkowski };
54178ee8d1cSJulian Grajkowski 
54278ee8d1cSJulian Grajkowski struct icp_qat_mof_obj_hdr {
54378ee8d1cSJulian Grajkowski 	unsigned short max_chunks;
54478ee8d1cSJulian Grajkowski 	unsigned short num_chunks;
54578ee8d1cSJulian Grajkowski 	unsigned int reserved;
54678ee8d1cSJulian Grajkowski };
54778ee8d1cSJulian Grajkowski 
54878ee8d1cSJulian Grajkowski struct icp_qat_mof_obj_chunkhdr {
54978ee8d1cSJulian Grajkowski 	char chunk_id[ICP_QAT_MOF_OBJ_CHUNKID_LEN];
55078ee8d1cSJulian Grajkowski 	u64 offset;
55178ee8d1cSJulian Grajkowski 	u64 size;
55278ee8d1cSJulian Grajkowski 	unsigned int name;
55378ee8d1cSJulian Grajkowski 	unsigned int reserved;
55478ee8d1cSJulian Grajkowski };
55578ee8d1cSJulian Grajkowski 
55678ee8d1cSJulian Grajkowski struct icp_qat_mof_objhdr {
55778ee8d1cSJulian Grajkowski 	char *obj_name;
55878ee8d1cSJulian Grajkowski 	const char *obj_buf;
55978ee8d1cSJulian Grajkowski 	unsigned int obj_size;
56078ee8d1cSJulian Grajkowski };
56178ee8d1cSJulian Grajkowski 
56278ee8d1cSJulian Grajkowski struct icp_qat_mof_table {
56378ee8d1cSJulian Grajkowski 	unsigned int num_objs;
56478ee8d1cSJulian Grajkowski 	struct icp_qat_mof_objhdr *obj_hdr;
56578ee8d1cSJulian Grajkowski };
56678ee8d1cSJulian Grajkowski 
56778ee8d1cSJulian Grajkowski struct icp_qat_mof_handle {
56878ee8d1cSJulian Grajkowski 	unsigned int file_id;
56978ee8d1cSJulian Grajkowski 	unsigned int checksum;
57078ee8d1cSJulian Grajkowski 	char min_ver;
57178ee8d1cSJulian Grajkowski 	char maj_ver;
57278ee8d1cSJulian Grajkowski 	const char *mof_buf;
57378ee8d1cSJulian Grajkowski 	u32 mof_size;
57478ee8d1cSJulian Grajkowski 	char *sym_str;
57578ee8d1cSJulian Grajkowski 	unsigned int sym_size;
57678ee8d1cSJulian Grajkowski 	const char *uobjs_hdr;
57778ee8d1cSJulian Grajkowski 	const char *sobjs_hdr;
57878ee8d1cSJulian Grajkowski 	struct icp_qat_mof_table obj_table;
57978ee8d1cSJulian Grajkowski };
58078ee8d1cSJulian Grajkowski #endif
581