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); 80 int hisi_zip_register_to_crypto(void); 81 void hisi_zip_unregister_from_crypto(void); 82 #endif 83