net/hns3: move speed auto-negotiation warning
[dpdk.git] / drivers / crypto / mlx5 / mlx5_crypto.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2021 NVIDIA Corporation & Affiliates
3  */
4
5 #ifndef MLX5_CRYPTO_H_
6 #define MLX5_CRYPTO_H_
7
8 #include <stdbool.h>
9
10 #include <rte_cryptodev.h>
11 #include <rte_cryptodev_pmd.h>
12
13 #include <mlx5_common_utils.h>
14 #include <mlx5_common_devx.h>
15 #include <mlx5_common_mr.h>
16
17 #define MLX5_CRYPTO_DEK_HTABLE_SZ (1 << 11)
18 #define MLX5_CRYPTO_KEY_LENGTH 80
19
20 struct mlx5_crypto_priv {
21         TAILQ_ENTRY(mlx5_crypto_priv) next;
22         struct ibv_context *ctx; /* Device context. */
23         struct rte_cryptodev *crypto_dev;
24         void *uar; /* User Access Region. */
25         volatile uint64_t *uar_addr;
26         uint32_t pdn; /* Protection Domain number. */
27         uint32_t max_segs_num; /* Maximum supported data segs. */
28         struct ibv_pd *pd;
29         struct mlx5_hlist *dek_hlist; /* Dek hash list. */
30         struct rte_cryptodev_config dev_config;
31         struct mlx5_mr_share_cache mr_scache; /* Global shared MR cache. */
32         struct mlx5_devx_obj *login_obj;
33         uint64_t keytag;
34         uint16_t wqe_set_size;
35         uint16_t umr_wqe_size;
36         uint16_t umr_wqe_stride;
37         uint16_t max_rdmar_ds;
38 #ifndef RTE_ARCH_64
39         rte_spinlock_t uar32_sl;
40 #endif /* RTE_ARCH_64 */
41 };
42
43 struct mlx5_crypto_qp {
44         struct mlx5_crypto_priv *priv;
45         struct mlx5_devx_cq cq_obj;
46         struct mlx5_devx_obj *qp_obj;
47         struct rte_cryptodev_stats stats;
48         struct mlx5dv_devx_umem *umem_obj;
49         void *umem_buf;
50         volatile uint32_t *db_rec;
51         struct rte_crypto_op **ops;
52         struct mlx5_devx_obj **mkey; /* WQE's indirect mekys. */
53         struct mlx5_mr_ctrl mr_ctrl;
54         uint8_t *wqe;
55         uint16_t entries_n;
56         uint16_t pi;
57         uint16_t ci;
58         uint16_t db_pi;
59 };
60
61 struct mlx5_crypto_dek {
62         struct mlx5_list_entry entry; /* Pointer to DEK hash list entry. */
63         struct mlx5_devx_obj *obj; /* Pointer to DEK DevX object. */
64         uint8_t data[MLX5_CRYPTO_KEY_LENGTH]; /* DEK key data. */
65         bool size_is_48; /* Whether the key\data size is 48 bytes or not. */
66 } __rte_cache_aligned;
67
68 struct mlx5_crypto_devarg_params {
69         bool login_devarg;
70         struct mlx5_devx_crypto_login_attr login_attr;
71         uint64_t keytag;
72         uint32_t max_segs_num;
73 };
74
75 int
76 mlx5_crypto_dek_destroy(struct mlx5_crypto_priv *priv,
77                         struct mlx5_crypto_dek *dek);
78
79 struct mlx5_crypto_dek *
80 mlx5_crypto_dek_prepare(struct mlx5_crypto_priv *priv,
81                         struct rte_crypto_cipher_xform *cipher);
82
83 int
84 mlx5_crypto_dek_setup(struct mlx5_crypto_priv *priv);
85
86 void
87 mlx5_crypto_dek_unset(struct mlx5_crypto_priv *priv);
88
89 #endif /* MLX5_CRYPTO_H_ */