18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
28c2ecf20Sopenharmony_ci/* Copyright(c) 2014 - 2020 Intel Corporation */
38c2ecf20Sopenharmony_ci#ifndef _QAT_CRYPTO_INSTANCE_H_
48c2ecf20Sopenharmony_ci#define _QAT_CRYPTO_INSTANCE_H_
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#include <linux/list.h>
78c2ecf20Sopenharmony_ci#include <linux/slab.h>
88c2ecf20Sopenharmony_ci#include "adf_accel_devices.h"
98c2ecf20Sopenharmony_ci#include "icp_qat_fw_la.h"
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_cistruct qat_crypto_instance {
128c2ecf20Sopenharmony_ci	struct adf_etr_ring_data *sym_tx;
138c2ecf20Sopenharmony_ci	struct adf_etr_ring_data *sym_rx;
148c2ecf20Sopenharmony_ci	struct adf_etr_ring_data *pke_tx;
158c2ecf20Sopenharmony_ci	struct adf_etr_ring_data *pke_rx;
168c2ecf20Sopenharmony_ci	struct adf_accel_dev *accel_dev;
178c2ecf20Sopenharmony_ci	struct list_head list;
188c2ecf20Sopenharmony_ci	unsigned long state;
198c2ecf20Sopenharmony_ci	int id;
208c2ecf20Sopenharmony_ci	atomic_t refctr;
218c2ecf20Sopenharmony_ci};
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci#define QAT_MAX_BUFF_DESC	4
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_cistruct qat_alg_buf {
268c2ecf20Sopenharmony_ci	u32 len;
278c2ecf20Sopenharmony_ci	u32 resrvd;
288c2ecf20Sopenharmony_ci	u64 addr;
298c2ecf20Sopenharmony_ci} __packed;
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_cistruct qat_alg_buf_list {
328c2ecf20Sopenharmony_ci	u64 resrvd;
338c2ecf20Sopenharmony_ci	u32 num_bufs;
348c2ecf20Sopenharmony_ci	u32 num_mapped_bufs;
358c2ecf20Sopenharmony_ci	struct qat_alg_buf bufers[];
368c2ecf20Sopenharmony_ci} __packed;
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_cistruct qat_alg_fixed_buf_list {
398c2ecf20Sopenharmony_ci	struct qat_alg_buf_list sgl_hdr;
408c2ecf20Sopenharmony_ci	struct qat_alg_buf descriptors[QAT_MAX_BUFF_DESC];
418c2ecf20Sopenharmony_ci} __packed __aligned(64);
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_cistruct qat_crypto_request_buffs {
448c2ecf20Sopenharmony_ci	struct qat_alg_buf_list *bl;
458c2ecf20Sopenharmony_ci	dma_addr_t blp;
468c2ecf20Sopenharmony_ci	struct qat_alg_buf_list *blout;
478c2ecf20Sopenharmony_ci	dma_addr_t bloutp;
488c2ecf20Sopenharmony_ci	size_t sz;
498c2ecf20Sopenharmony_ci	size_t sz_out;
508c2ecf20Sopenharmony_ci	bool sgl_src_valid;
518c2ecf20Sopenharmony_ci	bool sgl_dst_valid;
528c2ecf20Sopenharmony_ci	struct qat_alg_fixed_buf_list sgl_src;
538c2ecf20Sopenharmony_ci	struct qat_alg_fixed_buf_list sgl_dst;
548c2ecf20Sopenharmony_ci};
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_cistruct qat_crypto_request;
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_cistruct qat_crypto_request {
598c2ecf20Sopenharmony_ci	struct icp_qat_fw_la_bulk_req req;
608c2ecf20Sopenharmony_ci	union {
618c2ecf20Sopenharmony_ci		struct qat_alg_aead_ctx *aead_ctx;
628c2ecf20Sopenharmony_ci		struct qat_alg_skcipher_ctx *skcipher_ctx;
638c2ecf20Sopenharmony_ci	};
648c2ecf20Sopenharmony_ci	union {
658c2ecf20Sopenharmony_ci		struct aead_request *aead_req;
668c2ecf20Sopenharmony_ci		struct skcipher_request *skcipher_req;
678c2ecf20Sopenharmony_ci	};
688c2ecf20Sopenharmony_ci	struct qat_crypto_request_buffs buf;
698c2ecf20Sopenharmony_ci	void (*cb)(struct icp_qat_fw_la_resp *resp,
708c2ecf20Sopenharmony_ci		   struct qat_crypto_request *req);
718c2ecf20Sopenharmony_ci	void *iv;
728c2ecf20Sopenharmony_ci	dma_addr_t iv_paddr;
738c2ecf20Sopenharmony_ci};
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_ci#endif
76