1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2021 Marvell.
5 #ifndef _CNXK_CRYPTODEV_OPS_H_
6 #define _CNXK_CRYPTODEV_OPS_H_
8 #include <rte_cryptodev.h>
12 #define CNXK_CPT_MIN_HEADROOM_REQ 24
14 /* Default command timeout in seconds */
15 #define DEFAULT_COMMAND_TIMEOUT 4
17 #define MOD_INC(i, l) ((i) == (l - 1) ? (i) = 0 : (i)++)
19 struct cpt_qp_meta_info {
20 struct rte_mempool *pool;
28 CNXK_CPT_CIPHER_ENC_AUTH_GEN,
29 CNXK_CPT_AUTH_VRFY_CIPHER_DEC,
30 CNXK_CPT_AUTH_GEN_CIPHER_ENC,
31 CNXK_CPT_CIPHER_DEC_AUTH_VRFY
34 #define CPT_OP_FLAGS_METABUF (1 << 1)
35 #define CPT_OP_FLAGS_AUTH_VERIFY (1 << 0)
36 #define CPT_OP_FLAGS_IPSEC_DIR_INBOUND (1 << 2)
38 struct cpt_inflight_req {
40 struct rte_crypto_op *cop;
45 struct pending_queue {
46 /** Pending requests count */
47 uint64_t pending_count;
48 /** Array of pending requests */
49 struct cpt_inflight_req *req_queue;
50 /** Tail of queue to be used for enqueue */
52 /** Head of queue to be used for dequeue */
54 /** Timeout to track h/w being unresponsive */
58 struct crypto_adpter_info {
60 /**< Set if queue pair is added to crypto adapter */
61 struct rte_mempool *req_mp;
62 /**< CPT inflight request mempool */
68 struct pending_queue pend_q;
70 struct rte_mempool *sess_mp;
71 /**< Session mempool */
72 struct rte_mempool *sess_mp_priv;
73 /**< Session private data mempool */
74 struct cpt_qp_meta_info meta_info;
75 /**< Metabuf info required to support operations on the queue pair */
76 struct roc_cpt_lmtline lmtline;
77 /**< Lmtline information */
78 struct crypto_adpter_info ca;
79 /**< Crypto adapter related info */
82 int cnxk_cpt_dev_config(struct rte_cryptodev *dev,
83 struct rte_cryptodev_config *conf);
85 int cnxk_cpt_dev_start(struct rte_cryptodev *dev);
87 void cnxk_cpt_dev_stop(struct rte_cryptodev *dev);
89 int cnxk_cpt_dev_close(struct rte_cryptodev *dev);
91 void cnxk_cpt_dev_info_get(struct rte_cryptodev *dev,
92 struct rte_cryptodev_info *info);
94 int cnxk_cpt_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id,
95 const struct rte_cryptodev_qp_conf *conf,
96 int socket_id __rte_unused);
98 int cnxk_cpt_queue_pair_release(struct rte_cryptodev *dev, uint16_t qp_id);
100 unsigned int cnxk_cpt_sym_session_get_size(struct rte_cryptodev *dev);
102 int cnxk_cpt_sym_session_configure(struct rte_cryptodev *dev,
103 struct rte_crypto_sym_xform *xform,
104 struct rte_cryptodev_sym_session *sess,
105 struct rte_mempool *pool);
107 int sym_session_configure(struct roc_cpt *roc_cpt, int driver_id,
108 struct rte_crypto_sym_xform *xform,
109 struct rte_cryptodev_sym_session *sess,
110 struct rte_mempool *pool);
112 void cnxk_cpt_sym_session_clear(struct rte_cryptodev *dev,
113 struct rte_cryptodev_sym_session *sess);
115 void sym_session_clear(int driver_id, struct rte_cryptodev_sym_session *sess);
117 unsigned int cnxk_ae_session_size_get(struct rte_cryptodev *dev __rte_unused);
119 void cnxk_ae_session_clear(struct rte_cryptodev *dev,
120 struct rte_cryptodev_asym_session *sess);
121 int cnxk_ae_session_cfg(struct rte_cryptodev *dev,
122 struct rte_crypto_asym_xform *xform,
123 struct rte_cryptodev_asym_session *sess,
124 struct rte_mempool *pool);
125 #endif /* _CNXK_CRYPTODEV_OPS_H_ */