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