162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright (c) 2019 HiSilicon Limited. */
362306a36Sopenharmony_ci#ifndef HISI_ZIP_H
462306a36Sopenharmony_ci#define HISI_ZIP_H
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#undef pr_fmt
762306a36Sopenharmony_ci#define pr_fmt(fmt)	"hisi_zip: " fmt
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/list.h>
1062306a36Sopenharmony_ci#include <linux/hisi_acc_qm.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cienum hisi_zip_error_type {
1362306a36Sopenharmony_ci	/* negative compression */
1462306a36Sopenharmony_ci	HZIP_NC_ERR = 0x0d,
1562306a36Sopenharmony_ci};
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistruct hisi_zip_dfx {
1862306a36Sopenharmony_ci	atomic64_t send_cnt;
1962306a36Sopenharmony_ci	atomic64_t recv_cnt;
2062306a36Sopenharmony_ci	atomic64_t send_busy_cnt;
2162306a36Sopenharmony_ci	atomic64_t err_bd_cnt;
2262306a36Sopenharmony_ci};
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistruct hisi_zip_ctrl;
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistruct hisi_zip {
2762306a36Sopenharmony_ci	struct hisi_qm qm;
2862306a36Sopenharmony_ci	struct hisi_zip_ctrl *ctrl;
2962306a36Sopenharmony_ci	struct hisi_zip_dfx dfx;
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistruct hisi_zip_sqe {
3362306a36Sopenharmony_ci	u32 consumed;
3462306a36Sopenharmony_ci	u32 produced;
3562306a36Sopenharmony_ci	u32 comp_data_length;
3662306a36Sopenharmony_ci	/*
3762306a36Sopenharmony_ci	 * status: 0~7 bits
3862306a36Sopenharmony_ci	 * rsvd: 8~31 bits
3962306a36Sopenharmony_ci	 */
4062306a36Sopenharmony_ci	u32 dw3;
4162306a36Sopenharmony_ci	u32 input_data_length;
4262306a36Sopenharmony_ci	u32 dw5;
4362306a36Sopenharmony_ci	u32 dw6;
4462306a36Sopenharmony_ci	/*
4562306a36Sopenharmony_ci	 * in_sge_data_offset: 0~23 bits
4662306a36Sopenharmony_ci	 * rsvd: 24~27 bits
4762306a36Sopenharmony_ci	 * sqe_type: 29~31 bits
4862306a36Sopenharmony_ci	 */
4962306a36Sopenharmony_ci	u32 dw7;
5062306a36Sopenharmony_ci	/*
5162306a36Sopenharmony_ci	 * out_sge_data_offset: 0~23 bits
5262306a36Sopenharmony_ci	 * rsvd: 24~31 bits
5362306a36Sopenharmony_ci	 */
5462306a36Sopenharmony_ci	u32 dw8;
5562306a36Sopenharmony_ci	/*
5662306a36Sopenharmony_ci	 * request_type: 0~7 bits
5762306a36Sopenharmony_ci	 * buffer_type: 8~11 bits
5862306a36Sopenharmony_ci	 * rsvd: 13~31 bits
5962306a36Sopenharmony_ci	 */
6062306a36Sopenharmony_ci	u32 dw9;
6162306a36Sopenharmony_ci	u32 dw10;
6262306a36Sopenharmony_ci	u32 dw11;
6362306a36Sopenharmony_ci	u32 dw12;
6462306a36Sopenharmony_ci	/* tag: in sqe type 0 */
6562306a36Sopenharmony_ci	u32 dw13;
6662306a36Sopenharmony_ci	u32 dest_avail_out;
6762306a36Sopenharmony_ci	u32 dw15;
6862306a36Sopenharmony_ci	u32 dw16;
6962306a36Sopenharmony_ci	u32 dw17;
7062306a36Sopenharmony_ci	u32 source_addr_l;
7162306a36Sopenharmony_ci	u32 source_addr_h;
7262306a36Sopenharmony_ci	u32 dest_addr_l;
7362306a36Sopenharmony_ci	u32 dest_addr_h;
7462306a36Sopenharmony_ci	u32 dw22;
7562306a36Sopenharmony_ci	u32 dw23;
7662306a36Sopenharmony_ci	u32 dw24;
7762306a36Sopenharmony_ci	u32 dw25;
7862306a36Sopenharmony_ci	/* tag: in sqe type 3 */
7962306a36Sopenharmony_ci	u32 dw26;
8062306a36Sopenharmony_ci	u32 dw27;
8162306a36Sopenharmony_ci	u32 rsvd1[4];
8262306a36Sopenharmony_ci};
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ciint zip_create_qps(struct hisi_qp **qps, int qp_num, int node);
8562306a36Sopenharmony_ciint hisi_zip_register_to_crypto(struct hisi_qm *qm);
8662306a36Sopenharmony_civoid hisi_zip_unregister_from_crypto(struct hisi_qm *qm);
8762306a36Sopenharmony_cibool hisi_zip_alg_support(struct hisi_qm *qm, u32 alg);
8862306a36Sopenharmony_ci#endif
89