xref: /openbmc/linux/drivers/crypto/intel/qat/qat_common/qat_crypto.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1*a4b16dadSTom Zanussi /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
2*a4b16dadSTom Zanussi /* Copyright(c) 2014 - 2020 Intel Corporation */
3*a4b16dadSTom Zanussi #ifndef _QAT_CRYPTO_INSTANCE_H_
4*a4b16dadSTom Zanussi #define _QAT_CRYPTO_INSTANCE_H_
5*a4b16dadSTom Zanussi 
6*a4b16dadSTom Zanussi #include <crypto/aes.h>
7*a4b16dadSTom Zanussi #include <linux/list.h>
8*a4b16dadSTom Zanussi #include <linux/slab.h>
9*a4b16dadSTom Zanussi #include "adf_accel_devices.h"
10*a4b16dadSTom Zanussi #include "icp_qat_fw_la.h"
11*a4b16dadSTom Zanussi #include "qat_algs_send.h"
12*a4b16dadSTom Zanussi #include "qat_bl.h"
13*a4b16dadSTom Zanussi 
14*a4b16dadSTom Zanussi struct qat_crypto_instance {
15*a4b16dadSTom Zanussi 	struct adf_etr_ring_data *sym_tx;
16*a4b16dadSTom Zanussi 	struct adf_etr_ring_data *sym_rx;
17*a4b16dadSTom Zanussi 	struct adf_etr_ring_data *pke_tx;
18*a4b16dadSTom Zanussi 	struct adf_etr_ring_data *pke_rx;
19*a4b16dadSTom Zanussi 	struct adf_accel_dev *accel_dev;
20*a4b16dadSTom Zanussi 	struct list_head list;
21*a4b16dadSTom Zanussi 	unsigned long state;
22*a4b16dadSTom Zanussi 	int id;
23*a4b16dadSTom Zanussi 	atomic_t refctr;
24*a4b16dadSTom Zanussi 	struct qat_instance_backlog backlog;
25*a4b16dadSTom Zanussi };
26*a4b16dadSTom Zanussi 
27*a4b16dadSTom Zanussi struct qat_crypto_request;
28*a4b16dadSTom Zanussi 
29*a4b16dadSTom Zanussi struct qat_crypto_request {
30*a4b16dadSTom Zanussi 	struct icp_qat_fw_la_bulk_req req;
31*a4b16dadSTom Zanussi 	union {
32*a4b16dadSTom Zanussi 		struct qat_alg_aead_ctx *aead_ctx;
33*a4b16dadSTom Zanussi 		struct qat_alg_skcipher_ctx *skcipher_ctx;
34*a4b16dadSTom Zanussi 	};
35*a4b16dadSTom Zanussi 	union {
36*a4b16dadSTom Zanussi 		struct aead_request *aead_req;
37*a4b16dadSTom Zanussi 		struct skcipher_request *skcipher_req;
38*a4b16dadSTom Zanussi 	};
39*a4b16dadSTom Zanussi 	struct qat_request_buffs buf;
40*a4b16dadSTom Zanussi 	void (*cb)(struct icp_qat_fw_la_resp *resp,
41*a4b16dadSTom Zanussi 		   struct qat_crypto_request *req);
42*a4b16dadSTom Zanussi 	union {
43*a4b16dadSTom Zanussi 		struct {
44*a4b16dadSTom Zanussi 			__be64 iv_hi;
45*a4b16dadSTom Zanussi 			__be64 iv_lo;
46*a4b16dadSTom Zanussi 		};
47*a4b16dadSTom Zanussi 		u8 iv[AES_BLOCK_SIZE];
48*a4b16dadSTom Zanussi 	};
49*a4b16dadSTom Zanussi 	bool encryption;
50*a4b16dadSTom Zanussi 	struct qat_alg_req alg_req;
51*a4b16dadSTom Zanussi };
52*a4b16dadSTom Zanussi 
adf_hw_dev_has_crypto(struct adf_accel_dev * accel_dev)53*a4b16dadSTom Zanussi static inline bool adf_hw_dev_has_crypto(struct adf_accel_dev *accel_dev)
54*a4b16dadSTom Zanussi {
55*a4b16dadSTom Zanussi 	struct adf_hw_device_data *hw_device = accel_dev->hw_device;
56*a4b16dadSTom Zanussi 	u32 mask = ~hw_device->accel_capabilities_mask;
57*a4b16dadSTom Zanussi 
58*a4b16dadSTom Zanussi 	if (mask & ADF_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC)
59*a4b16dadSTom Zanussi 		return false;
60*a4b16dadSTom Zanussi 	if (mask & ADF_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC)
61*a4b16dadSTom Zanussi 		return false;
62*a4b16dadSTom Zanussi 	if (mask & ADF_ACCEL_CAPABILITIES_AUTHENTICATION)
63*a4b16dadSTom Zanussi 		return false;
64*a4b16dadSTom Zanussi 
65*a4b16dadSTom Zanussi 	return true;
66*a4b16dadSTom Zanussi }
67*a4b16dadSTom Zanussi 
68*a4b16dadSTom Zanussi #endif
69