xref: /dpdk/drivers/crypto/qat/qat_crypto.h (revision 85fec6fd)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2022 Intel Corporation
3  */
4 
5  #ifndef _QAT_CRYPTO_H_
6  #define _QAT_CRYPTO_H_
7 
8 #include <rte_cryptodev.h>
9 
10 #include "qat_device.h"
11 
12 extern uint8_t qat_sym_driver_id;
13 extern uint8_t qat_asym_driver_id;
14 
15 /**
16  * helper macro to set cryptodev capability range
17  * <n: name> <l: min > <r: max> <i: increment> <v: value>
18  **/
19 #define CAP_RNG(n, l, r, i) .n = {.min = l, .max = r, .increment = i}
20 
21 #define CAP_RNG_ZERO(n) .n = {.min = 0, .max = 0, .increment = 0}
22 /** helper macro to set cryptodev capability value **/
23 #define CAP_SET(n, v) .n = v
24 
25 /** private data structure for a QAT device.
26  * there can be one of these on each qat_pci_device (VF).
27  */
28 struct qat_cryptodev_private {
29 	struct qat_pci_device *qat_dev;
30 	/**< The qat pci device hosting the service */
31 	uint8_t dev_id;
32 	/**< Device instance for this rte_cryptodev */
33 	const struct rte_cryptodev_capabilities *qat_dev_capabilities;
34 	/* QAT device symmetric crypto capabilities */
35 	const struct rte_memzone *capa_mz;
36 	/* Shared memzone for storing capabilities */
37 	uint16_t min_enq_burst_threshold;
38 	uint32_t internal_capabilities; /* see flags QAT_SYM_CAP_xxx */
39 	enum qat_service_type service_type;
40 };
41 
42 struct qat_capabilities_info {
43 	struct rte_cryptodev_capabilities *data;
44 	uint64_t size;
45 };
46 
47 typedef struct qat_capabilities_info (*get_capabilities_info_t)
48 			(struct qat_pci_device *qat_dev);
49 
50 typedef uint64_t (*get_feature_flags_t)(struct qat_pci_device *qat_dev);
51 
52 typedef void * (*create_security_ctx_t)(void *cryptodev);
53 
54 typedef int (*set_session_t)(void *cryptodev, void *session);
55 
56 typedef int (*set_raw_dp_ctx_t)(void *raw_dp_ctx, void *ctx);
57 
58 struct qat_crypto_gen_dev_ops {
59 	get_feature_flags_t get_feature_flags;
60 	get_capabilities_info_t get_capabilities;
61 	struct rte_cryptodev_ops *cryptodev_ops;
62 	set_session_t set_session;
63 	set_raw_dp_ctx_t set_raw_dp_ctx;
64 #ifdef RTE_LIB_SECURITY
65 	create_security_ctx_t create_security_ctx;
66 #endif
67 };
68 
69 extern struct qat_crypto_gen_dev_ops qat_sym_gen_dev_ops[];
70 extern struct qat_crypto_gen_dev_ops qat_asym_gen_dev_ops[];
71 
72 int
73 qat_cryptodev_config(struct rte_cryptodev *dev,
74 		struct rte_cryptodev_config *config);
75 
76 int
77 qat_cryptodev_start(struct rte_cryptodev *dev);
78 
79 void
80 qat_cryptodev_stop(struct rte_cryptodev *dev);
81 
82 int
83 qat_cryptodev_close(struct rte_cryptodev *dev);
84 
85 void
86 qat_cryptodev_info_get(struct rte_cryptodev *dev,
87 		struct rte_cryptodev_info *info);
88 
89 void
90 qat_cryptodev_stats_get(struct rte_cryptodev *dev,
91 		struct rte_cryptodev_stats *stats);
92 
93 void
94 qat_cryptodev_stats_reset(struct rte_cryptodev *dev);
95 
96 int
97 qat_cryptodev_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
98 	const struct rte_cryptodev_qp_conf *qp_conf, int socket_id);
99 
100 int
101 qat_cryptodev_qp_release(struct rte_cryptodev *dev, uint16_t queue_pair_id);
102 
103 #endif
104