1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34#ifdef CONFIG_MLX5_FPGA_IPSEC
35
36#include <linux/mlx5/device.h>
37
38#include "accel/ipsec.h"
39#include "mlx5_core.h"
40#include "fpga/ipsec.h"
41
42u32 mlx5_accel_ipsec_device_caps(struct mlx5_core_dev *mdev)
43{
44 return mlx5_fpga_ipsec_device_caps(mdev);
45}
46EXPORT_SYMBOL_GPL(mlx5_accel_ipsec_device_caps);
47
48unsigned int mlx5_accel_ipsec_counters_count(struct mlx5_core_dev *mdev)
49{
50 return mlx5_fpga_ipsec_counters_count(mdev);
51}
52
53int mlx5_accel_ipsec_counters_read(struct mlx5_core_dev *mdev, u64 *counters,
54 unsigned int count)
55{
56 return mlx5_fpga_ipsec_counters_read(mdev, counters, count);
57}
58
59void *mlx5_accel_esp_create_hw_context(struct mlx5_core_dev *mdev,
60 struct mlx5_accel_esp_xfrm *xfrm,
61 u32 *sa_handle)
62{
63 __be32 saddr[4] = {}, daddr[4] = {};
64
65 if (!xfrm->attrs.is_ipv6) {
66 saddr[3] = xfrm->attrs.saddr.a4;
67 daddr[3] = xfrm->attrs.daddr.a4;
68 } else {
69 memcpy(saddr, xfrm->attrs.saddr.a6, sizeof(saddr));
70 memcpy(daddr, xfrm->attrs.daddr.a6, sizeof(daddr));
71 }
72
73 return mlx5_fpga_ipsec_create_sa_ctx(mdev, xfrm, saddr,
74 daddr, xfrm->attrs.spi,
75 xfrm->attrs.is_ipv6, sa_handle);
76}
77
78void mlx5_accel_esp_free_hw_context(void *context)
79{
80 mlx5_fpga_ipsec_delete_sa_ctx(context);
81}
82
83int mlx5_accel_ipsec_init(struct mlx5_core_dev *mdev)
84{
85 return mlx5_fpga_ipsec_init(mdev);
86}
87
88void mlx5_accel_ipsec_build_fs_cmds(void)
89{
90 mlx5_fpga_ipsec_build_fs_cmds();
91}
92
93void mlx5_accel_ipsec_cleanup(struct mlx5_core_dev *mdev)
94{
95 mlx5_fpga_ipsec_cleanup(mdev);
96}
97
98struct mlx5_accel_esp_xfrm *
99mlx5_accel_esp_create_xfrm(struct mlx5_core_dev *mdev,
100 const struct mlx5_accel_esp_xfrm_attrs *attrs,
101 u32 flags)
102{
103 struct mlx5_accel_esp_xfrm *xfrm;
104
105 xfrm = mlx5_fpga_esp_create_xfrm(mdev, attrs, flags);
106 if (IS_ERR(xfrm))
107 return xfrm;
108
109 xfrm->mdev = mdev;
110 return xfrm;
111}
112EXPORT_SYMBOL_GPL(mlx5_accel_esp_create_xfrm);
113
114void mlx5_accel_esp_destroy_xfrm(struct mlx5_accel_esp_xfrm *xfrm)
115{
116 mlx5_fpga_esp_destroy_xfrm(xfrm);
117}
118EXPORT_SYMBOL_GPL(mlx5_accel_esp_destroy_xfrm);
119
120int mlx5_accel_esp_modify_xfrm(struct mlx5_accel_esp_xfrm *xfrm,
121 const struct mlx5_accel_esp_xfrm_attrs *attrs)
122{
123 return mlx5_fpga_esp_modify_xfrm(xfrm, attrs);
124}
125EXPORT_SYMBOL_GPL(mlx5_accel_esp_modify_xfrm);
126
127#endif
128