xref: /dpdk/lib/cryptodev/rte_cryptodev_core.h (revision beb4c305)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4 
5 #ifndef _RTE_CRYPTODEV_CORE_H_
6 #define _RTE_CRYPTODEV_CORE_H_
7 
8 /**
9  * @file
10  *
11  * RTE Crypto Device internal header.
12  *
13  * This header contains internal data types. But they are still part of the
14  * public API because they are used by inline functions in the published API.
15  *
16  * Applications should not use these directly.
17  *
18  */
19 
20 typedef uint16_t (*dequeue_pkt_burst_t)(void *qp,
21 		struct rte_crypto_op **ops,	uint16_t nb_ops);
22 /**< Dequeue processed packets from queue pair of a device. */
23 
24 typedef uint16_t (*enqueue_pkt_burst_t)(void *qp,
25 		struct rte_crypto_op **ops,	uint16_t nb_ops);
26 /**< Enqueue packets for processing on queue pair of a device. */
27 
28 /**
29  * @internal
30  * Structure used to hold opaque pointers to internal ethdev Rx/Tx
31  * queues data.
32  * The main purpose to expose these pointers at all - allow compiler
33  * to fetch this data for fast-path cryptodev inline functions in advance.
34  */
35 struct rte_cryptodev_qpdata {
36 	/** points to array of internal queue pair data pointers. */
37 	void **data;
38 	/** points to array of enqueue callback data pointers */
39 	struct rte_cryptodev_cb_rcu *enq_cb;
40 	/** points to array of dequeue callback data pointers */
41 	struct rte_cryptodev_cb_rcu *deq_cb;
42 };
43 
44 struct rte_crypto_fp_ops {
45 	/** PMD enqueue burst function. */
46 	enqueue_pkt_burst_t enqueue_burst;
47 	/** PMD dequeue burst function. */
48 	dequeue_pkt_burst_t dequeue_burst;
49 	/** Internal queue pair data pointers. */
50 	struct rte_cryptodev_qpdata qp;
51 	/** Reserved for future ops. */
52 	uintptr_t reserved[3];
53 } __rte_cache_aligned;
54 
55 extern struct rte_crypto_fp_ops rte_crypto_fp_ops[RTE_CRYPTO_MAX_DEVS];
56 
57 /**
58  * @internal
59  * The data part, with no function pointers, associated with each device.
60  *
61  * This structure is safe to place in shared memory to be common among
62  * different processes in a multi-process configuration.
63  */
64 struct rte_cryptodev_data {
65 	uint8_t dev_id;
66 	/**< Device ID for this instance */
67 	uint8_t socket_id;
68 	/**< Socket ID where memory is allocated */
69 	char name[RTE_CRYPTODEV_NAME_MAX_LEN];
70 	/**< Unique identifier name */
71 
72 	__extension__
73 	uint8_t dev_started : 1;
74 	/**< Device state: STARTED(1)/STOPPED(0) */
75 
76 	struct rte_mempool *session_pool;
77 	/**< Session memory pool */
78 	void **queue_pairs;
79 	/**< Array of pointers to queue pairs. */
80 	uint16_t nb_queue_pairs;
81 	/**< Number of device queue pairs. */
82 
83 	void *dev_private;
84 	/**< PMD-specific private data */
85 } __rte_cache_aligned;
86 
87 
88 /** @internal The data structure associated with each crypto device. */
89 struct rte_cryptodev {
90 	dequeue_pkt_burst_t dequeue_burst;
91 	/**< Pointer to PMD receive function. */
92 	enqueue_pkt_burst_t enqueue_burst;
93 	/**< Pointer to PMD transmit function. */
94 
95 	struct rte_cryptodev_data *data;
96 	/**< Pointer to device data */
97 	struct rte_cryptodev_ops *dev_ops;
98 	/**< Functions exported by PMD */
99 	uint64_t feature_flags;
100 	/**< Feature flags exposes HW/SW features for the given device */
101 	struct rte_device *device;
102 	/**< Backing device */
103 
104 	uint8_t driver_id;
105 	/**< Crypto driver identifier*/
106 
107 	struct rte_cryptodev_cb_list link_intr_cbs;
108 	/**< User application callback for interrupts if present */
109 
110 	void *security_ctx;
111 	/**< Context for security ops */
112 
113 	__extension__
114 	uint8_t attached : 1;
115 	/**< Flag indicating the device is attached */
116 
117 	struct rte_cryptodev_cb_rcu *enq_cbs;
118 	/**< User application callback for pre enqueue processing */
119 
120 	struct rte_cryptodev_cb_rcu *deq_cbs;
121 	/**< User application callback for post dequeue processing */
122 } __rte_cache_aligned;
123 
124 /**
125  * The pool of rte_cryptodev structures.
126  */
127 extern struct rte_cryptodev *rte_cryptodevs;
128 
129 #endif /* _RTE_CRYPTODEV_CORE_H_ */
130