Merge branch 'md-next' of https://git.kernel.org/pub/scm/linux/kernel/git/song/md...
[linux-2.6-block.git] / drivers / crypto / hisilicon / zip / zip.h
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