xref: /linux/drivers/crypto/hisilicon/zip/zip.h (revision d85ddd1318e66c0c2665dbfcbc21a8b66c9152aa)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2019 HiSilicon Limited. */
3 #ifndef HISI_ZIP_H
4 #define HISI_ZIP_H
5 
6 #undef pr_fmt
7 #define pr_fmt(fmt)	"hisi_zip: " fmt
8 
9 #include <linux/list.h>
10 #include "../qm.h"
11 
12 /* hisi_zip_sqe dw3 */
13 #define HZIP_BD_STATUS_M			GENMASK(7, 0)
14 /* hisi_zip_sqe dw7 */
15 #define HZIP_IN_SGE_DATA_OFFSET_M		GENMASK(23, 0)
16 /* hisi_zip_sqe dw8 */
17 #define HZIP_OUT_SGE_DATA_OFFSET_M		GENMASK(23, 0)
18 /* hisi_zip_sqe dw9 */
19 #define HZIP_REQ_TYPE_M				GENMASK(7, 0)
20 #define HZIP_ALG_TYPE_ZLIB			0x02
21 #define HZIP_ALG_TYPE_GZIP			0x03
22 #define HZIP_BUF_TYPE_M				GENMASK(11, 8)
23 #define HZIP_PBUFFER				0x0
24 #define HZIP_SGL				0x1
25 
26 enum hisi_zip_error_type {
27 	/* negative compression */
28 	HZIP_NC_ERR = 0x0d,
29 };
30 
31 struct hisi_zip_dfx {
32 	atomic64_t send_cnt;
33 	atomic64_t recv_cnt;
34 	atomic64_t send_busy_cnt;
35 	atomic64_t err_bd_cnt;
36 };
37 
38 struct hisi_zip_ctrl;
39 
40 struct hisi_zip {
41 	struct hisi_qm qm;
42 	struct list_head list;
43 	struct hisi_zip_ctrl *ctrl;
44 	struct hisi_zip_dfx dfx;
45 };
46 
47 struct hisi_zip_sqe {
48 	u32 consumed;
49 	u32 produced;
50 	u32 comp_data_length;
51 	u32 dw3;
52 	u32 input_data_length;
53 	u32 lba_l;
54 	u32 lba_h;
55 	u32 dw7;
56 	u32 dw8;
57 	u32 dw9;
58 	u32 dw10;
59 	u32 priv_info;
60 	u32 dw12;
61 	u32 tag;
62 	u32 dest_avail_out;
63 	u32 rsvd0;
64 	u32 comp_head_addr_l;
65 	u32 comp_head_addr_h;
66 	u32 source_addr_l;
67 	u32 source_addr_h;
68 	u32 dest_addr_l;
69 	u32 dest_addr_h;
70 	u32 stream_ctx_addr_l;
71 	u32 stream_ctx_addr_h;
72 	u32 cipher_key1_addr_l;
73 	u32 cipher_key1_addr_h;
74 	u32 cipher_key2_addr_l;
75 	u32 cipher_key2_addr_h;
76 	u32 rsvd1[4];
77 };
78 
79 int zip_create_qps(struct hisi_qp **qps, int ctx_num, int node);
80 int hisi_zip_register_to_crypto(void);
81 void hisi_zip_unregister_from_crypto(void);
82 #endif
83