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