18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/* Copyright (c) 2019 HiSilicon Limited. */
38c2ecf20Sopenharmony_ci#ifndef HISI_ZIP_H
48c2ecf20Sopenharmony_ci#define HISI_ZIP_H
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#undef pr_fmt
78c2ecf20Sopenharmony_ci#define pr_fmt(fmt)	"hisi_zip: " fmt
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/list.h>
108c2ecf20Sopenharmony_ci#include "../qm.h"
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cienum hisi_zip_error_type {
138c2ecf20Sopenharmony_ci	/* negative compression */
148c2ecf20Sopenharmony_ci	HZIP_NC_ERR = 0x0d,
158c2ecf20Sopenharmony_ci};
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cistruct hisi_zip_dfx {
188c2ecf20Sopenharmony_ci	atomic64_t send_cnt;
198c2ecf20Sopenharmony_ci	atomic64_t recv_cnt;
208c2ecf20Sopenharmony_ci	atomic64_t send_busy_cnt;
218c2ecf20Sopenharmony_ci	atomic64_t err_bd_cnt;
228c2ecf20Sopenharmony_ci};
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_cistruct hisi_zip_ctrl;
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cistruct hisi_zip {
278c2ecf20Sopenharmony_ci	struct hisi_qm qm;
288c2ecf20Sopenharmony_ci	struct hisi_zip_ctrl *ctrl;
298c2ecf20Sopenharmony_ci	struct hisi_zip_dfx dfx;
308c2ecf20Sopenharmony_ci};
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_cistruct hisi_zip_sqe {
338c2ecf20Sopenharmony_ci	u32 consumed;
348c2ecf20Sopenharmony_ci	u32 produced;
358c2ecf20Sopenharmony_ci	u32 comp_data_length;
368c2ecf20Sopenharmony_ci	u32 dw3;
378c2ecf20Sopenharmony_ci	u32 input_data_length;
388c2ecf20Sopenharmony_ci	u32 lba_l;
398c2ecf20Sopenharmony_ci	u32 lba_h;
408c2ecf20Sopenharmony_ci	u32 dw7;
418c2ecf20Sopenharmony_ci	u32 dw8;
428c2ecf20Sopenharmony_ci	u32 dw9;
438c2ecf20Sopenharmony_ci	u32 dw10;
448c2ecf20Sopenharmony_ci	u32 priv_info;
458c2ecf20Sopenharmony_ci	u32 dw12;
468c2ecf20Sopenharmony_ci	u32 tag;
478c2ecf20Sopenharmony_ci	u32 dest_avail_out;
488c2ecf20Sopenharmony_ci	u32 rsvd0;
498c2ecf20Sopenharmony_ci	u32 comp_head_addr_l;
508c2ecf20Sopenharmony_ci	u32 comp_head_addr_h;
518c2ecf20Sopenharmony_ci	u32 source_addr_l;
528c2ecf20Sopenharmony_ci	u32 source_addr_h;
538c2ecf20Sopenharmony_ci	u32 dest_addr_l;
548c2ecf20Sopenharmony_ci	u32 dest_addr_h;
558c2ecf20Sopenharmony_ci	u32 stream_ctx_addr_l;
568c2ecf20Sopenharmony_ci	u32 stream_ctx_addr_h;
578c2ecf20Sopenharmony_ci	u32 cipher_key1_addr_l;
588c2ecf20Sopenharmony_ci	u32 cipher_key1_addr_h;
598c2ecf20Sopenharmony_ci	u32 cipher_key2_addr_l;
608c2ecf20Sopenharmony_ci	u32 cipher_key2_addr_h;
618c2ecf20Sopenharmony_ci	u32 rsvd1[4];
628c2ecf20Sopenharmony_ci};
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ciint zip_create_qps(struct hisi_qp **qps, int ctx_num, int node);
658c2ecf20Sopenharmony_ciint hisi_zip_register_to_crypto(void);
668c2ecf20Sopenharmony_civoid hisi_zip_unregister_from_crypto(void);
678c2ecf20Sopenharmony_ci#endif
68