crypto/cnxk: add session operations framework
[dpdk.git] / drivers / crypto / cnxk / cnxk_cryptodev_ops.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #ifndef _CNXK_CRYPTODEV_OPS_H_
6 #define _CNXK_CRYPTODEV_OPS_H_
7
8 #include <rte_cryptodev.h>
9
10 #include "roc_api.h"
11
12 #define CNXK_CPT_MIN_HEADROOM_REQ 24
13
14 struct cpt_qp_meta_info {
15         struct rte_mempool *pool;
16         int mlen;
17 };
18
19 enum sym_xform_type {
20         CNXK_CPT_CIPHER = 1,
21         CNXK_CPT_AUTH,
22         CNXK_CPT_AEAD,
23         CNXK_CPT_CIPHER_ENC_AUTH_GEN,
24         CNXK_CPT_AUTH_VRFY_CIPHER_DEC,
25         CNXK_CPT_AUTH_GEN_CIPHER_ENC,
26         CNXK_CPT_CIPHER_DEC_AUTH_VRFY
27 };
28
29 struct cpt_inflight_req {
30         union cpt_res_s res;
31         struct rte_crypto_op *cop;
32         void *mdata;
33         uint8_t op_flags;
34 } __rte_aligned(16);
35
36 struct pending_queue {
37         /** Pending requests count */
38         uint64_t pending_count;
39         /** Array of pending requests */
40         struct cpt_inflight_req *req_queue;
41         /** Tail of queue to be used for enqueue */
42         uint16_t enq_tail;
43         /** Head of queue to be used for dequeue */
44         uint16_t deq_head;
45         /** Timeout to track h/w being unresponsive */
46         uint64_t time_out;
47 };
48
49 struct cnxk_cpt_qp {
50         struct roc_cpt_lf lf;
51         /**< Crypto LF */
52         struct pending_queue pend_q;
53         /**< Pending queue */
54         struct rte_mempool *sess_mp;
55         /**< Session mempool */
56         struct rte_mempool *sess_mp_priv;
57         /**< Session private data mempool */
58         struct cpt_qp_meta_info meta_info;
59         /**< Metabuf info required to support operations on the queue pair */
60         struct roc_cpt_lmtline lmtline;
61         /**< Lmtline information */
62 };
63
64 int cnxk_cpt_dev_config(struct rte_cryptodev *dev,
65                         struct rte_cryptodev_config *conf);
66
67 int cnxk_cpt_dev_start(struct rte_cryptodev *dev);
68
69 void cnxk_cpt_dev_stop(struct rte_cryptodev *dev);
70
71 int cnxk_cpt_dev_close(struct rte_cryptodev *dev);
72
73 void cnxk_cpt_dev_info_get(struct rte_cryptodev *dev,
74                            struct rte_cryptodev_info *info);
75
76 int cnxk_cpt_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id,
77                               const struct rte_cryptodev_qp_conf *conf,
78                               int socket_id __rte_unused);
79
80 int cnxk_cpt_queue_pair_release(struct rte_cryptodev *dev, uint16_t qp_id);
81
82 unsigned int cnxk_cpt_sym_session_get_size(struct rte_cryptodev *dev);
83
84 int cnxk_cpt_sym_session_configure(struct rte_cryptodev *dev,
85                                    struct rte_crypto_sym_xform *xform,
86                                    struct rte_cryptodev_sym_session *sess,
87                                    struct rte_mempool *pool);
88
89 int sym_session_configure(struct roc_cpt *roc_cpt, int driver_id,
90                           struct rte_crypto_sym_xform *xform,
91                           struct rte_cryptodev_sym_session *sess,
92                           struct rte_mempool *pool);
93
94 void cnxk_cpt_sym_session_clear(struct rte_cryptodev *dev,
95                                 struct rte_cryptodev_sym_session *sess);
96
97 void sym_session_clear(int driver_id, struct rte_cryptodev_sym_session *sess);
98
99 #endif /* _CNXK_CRYPTODEV_OPS_H_ */