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#ifndef __MLX5_ACCEL_IPSEC_H__
35#define __MLX5_ACCEL_IPSEC_H__
36
37#include <linux/mlx5/driver.h>
38#include <linux/mlx5/accel.h>
39
40#ifdef CONFIG_MLX5_ACCEL
41
42#define MLX5_IPSEC_DEV(mdev) (mlx5_accel_ipsec_device_caps(mdev) & \
43 MLX5_ACCEL_IPSEC_CAP_DEVICE)
44
45unsigned int mlx5_accel_ipsec_counters_count(struct mlx5_core_dev *mdev);
46int mlx5_accel_ipsec_counters_read(struct mlx5_core_dev *mdev, u64 *counters,
47 unsigned int count);
48
49void *mlx5_accel_esp_create_hw_context(struct mlx5_core_dev *mdev,
50 struct mlx5_accel_esp_xfrm *xfrm,
51 u32 *sa_handle);
52void mlx5_accel_esp_free_hw_context(struct mlx5_core_dev *mdev, void *context);
53
54void mlx5_accel_ipsec_init(struct mlx5_core_dev *mdev);
55void mlx5_accel_ipsec_cleanup(struct mlx5_core_dev *mdev);
56
57struct mlx5_accel_ipsec_ops {
58 u32 (*device_caps)(struct mlx5_core_dev *mdev);
59 unsigned int (*counters_count)(struct mlx5_core_dev *mdev);
60 int (*counters_read)(struct mlx5_core_dev *mdev, u64 *counters, unsigned int count);
61 void* (*create_hw_context)(struct mlx5_core_dev *mdev,
62 struct mlx5_accel_esp_xfrm *xfrm,
63 const __be32 saddr[4], const __be32 daddr[4],
64 const __be32 spi, bool is_ipv6, u32 *sa_handle);
65 void (*free_hw_context)(void *context);
66 int (*init)(struct mlx5_core_dev *mdev);
67 void (*cleanup)(struct mlx5_core_dev *mdev);
68 struct mlx5_accel_esp_xfrm* (*esp_create_xfrm)(struct mlx5_core_dev *mdev,
69 const struct mlx5_accel_esp_xfrm_attrs *attrs,
70 u32 flags);
71 int (*esp_modify_xfrm)(struct mlx5_accel_esp_xfrm *xfrm,
72 const struct mlx5_accel_esp_xfrm_attrs *attrs);
73 void (*esp_destroy_xfrm)(struct mlx5_accel_esp_xfrm *xfrm);
74};
75
76#else
77
78#define MLX5_IPSEC_DEV(mdev) false
79
80static inline void *
81mlx5_accel_esp_create_hw_context(struct mlx5_core_dev *mdev,
82 struct mlx5_accel_esp_xfrm *xfrm,
83 u32 *sa_handle)
84{
85 return NULL;
86}
87
88static inline void mlx5_accel_esp_free_hw_context(struct mlx5_core_dev *mdev, void *context) {}
89
90static inline void mlx5_accel_ipsec_init(struct mlx5_core_dev *mdev) {}
91
92static inline void mlx5_accel_ipsec_cleanup(struct mlx5_core_dev *mdev) {}
93
94#endif
95
96#endif
97