1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2021 Marvell.
5 #ifndef _RTE_CRYPTODEV_CORE_H_
6 #define _RTE_CRYPTODEV_CORE_H_
11 * RTE Crypto Device internal header.
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.
16 * Applications should not use these directly.
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. */
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. */
30 * Structure used to hold opaque pointers to internal ethdev Rx/Tx
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.
35 struct rte_cryptodev_qpdata {
36 /** points to array of internal queue pair data pointers. */
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;
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;
55 extern struct rte_crypto_fp_ops rte_crypto_fp_ops[RTE_CRYPTO_MAX_DEVS];
59 * The data part, with no function pointers, associated with each device.
61 * This structure is safe to place in shared memory to be common among
62 * different processes in a multi-process configuration.
64 struct rte_cryptodev_data {
66 /**< Device ID for this instance */
68 /**< Socket ID where memory is allocated */
69 char name[RTE_CRYPTODEV_NAME_MAX_LEN];
70 /**< Unique identifier name */
73 uint8_t dev_started : 1;
74 /**< Device state: STARTED(1)/STOPPED(0) */
76 struct rte_mempool *session_pool;
77 /**< Session memory pool */
79 /**< Array of pointers to queue pairs. */
80 uint16_t nb_queue_pairs;
81 /**< Number of device queue pairs. */
84 /**< PMD-specific private data */
85 } __rte_cache_aligned;
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. */
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 */
105 /**< Crypto driver identifier*/
107 struct rte_cryptodev_cb_list link_intr_cbs;
108 /**< User application callback for interrupts if present */
111 /**< Context for security ops */
114 uint8_t attached : 1;
115 /**< Flag indicating the device is attached */
117 struct rte_cryptodev_cb_rcu *enq_cbs;
118 /**< User application callback for pre enqueue processing */
120 struct rte_cryptodev_cb_rcu *deq_cbs;
121 /**< User application callback for post dequeue processing */
122 } __rte_cache_aligned;
125 * The pool of rte_cryptodev structures.
127 extern struct rte_cryptodev *rte_cryptodevs;
129 #endif /* _RTE_CRYPTODEV_CORE_H_ */