| .. | .. |
|---|
| 34 | 34 | #ifndef __MLX5E_IPSEC_RXTX_H__ |
|---|
| 35 | 35 | #define __MLX5E_IPSEC_RXTX_H__ |
|---|
| 36 | 36 | |
|---|
| 37 | | -#ifdef CONFIG_MLX5_EN_IPSEC |
|---|
| 38 | | - |
|---|
| 39 | 37 | #include <linux/skbuff.h> |
|---|
| 40 | 38 | #include <net/xfrm.h> |
|---|
| 41 | 39 | #include "en.h" |
|---|
| 40 | +#include "en/txrx.h" |
|---|
| 41 | + |
|---|
| 42 | +/* Bit31: IPsec marker, Bit30-24: IPsec syndrome, Bit23-0: IPsec obj id */ |
|---|
| 43 | +#define MLX5_IPSEC_METADATA_MARKER(metadata) (((metadata) >> 31) & 0x1) |
|---|
| 44 | +#define MLX5_IPSEC_METADATA_SYNDROM(metadata) (((metadata) >> 24) & GENMASK(6, 0)) |
|---|
| 45 | +#define MLX5_IPSEC_METADATA_HANDLE(metadata) ((metadata) & GENMASK(23, 0)) |
|---|
| 46 | + |
|---|
| 47 | +struct mlx5e_accel_tx_ipsec_state { |
|---|
| 48 | + struct xfrm_offload *xo; |
|---|
| 49 | + struct xfrm_state *x; |
|---|
| 50 | + u32 tailen; |
|---|
| 51 | + u32 plen; |
|---|
| 52 | +}; |
|---|
| 53 | + |
|---|
| 54 | +#ifdef CONFIG_MLX5_EN_IPSEC |
|---|
| 42 | 55 | |
|---|
| 43 | 56 | struct sk_buff *mlx5e_ipsec_handle_rx_skb(struct net_device *netdev, |
|---|
| 44 | 57 | struct sk_buff *skb, u32 *cqe_bcnt); |
|---|
| 45 | | -void mlx5e_ipsec_handle_rx_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe); |
|---|
| 46 | 58 | |
|---|
| 47 | 59 | void mlx5e_ipsec_inverse_table_init(void); |
|---|
| 48 | 60 | bool mlx5e_ipsec_feature_check(struct sk_buff *skb, struct net_device *netdev, |
|---|
| .. | .. |
|---|
| 51 | 63 | struct xfrm_offload *xo); |
|---|
| 52 | 64 | void mlx5e_ipsec_set_iv(struct sk_buff *skb, struct xfrm_state *x, |
|---|
| 53 | 65 | struct xfrm_offload *xo); |
|---|
| 54 | | -struct sk_buff *mlx5e_ipsec_handle_tx_skb(struct net_device *netdev, |
|---|
| 55 | | - struct mlx5e_tx_wqe *wqe, |
|---|
| 56 | | - struct sk_buff *skb); |
|---|
| 66 | +bool mlx5e_ipsec_handle_tx_skb(struct net_device *netdev, |
|---|
| 67 | + struct sk_buff *skb, |
|---|
| 68 | + struct mlx5e_accel_tx_ipsec_state *ipsec_st); |
|---|
| 69 | +void mlx5e_ipsec_handle_tx_wqe(struct mlx5e_tx_wqe *wqe, |
|---|
| 70 | + struct mlx5e_accel_tx_ipsec_state *ipsec_st, |
|---|
| 71 | + struct mlx5_wqe_inline_seg *inlseg); |
|---|
| 72 | +void mlx5e_ipsec_offload_handle_rx_skb(struct net_device *netdev, |
|---|
| 73 | + struct sk_buff *skb, |
|---|
| 74 | + struct mlx5_cqe64 *cqe); |
|---|
| 75 | +static inline unsigned int mlx5e_ipsec_tx_ids_len(struct mlx5e_accel_tx_ipsec_state *ipsec_st) |
|---|
| 76 | +{ |
|---|
| 77 | + return ipsec_st->tailen; |
|---|
| 78 | +} |
|---|
| 57 | 79 | |
|---|
| 80 | +static inline bool mlx5_ipsec_is_rx_flow(struct mlx5_cqe64 *cqe) |
|---|
| 81 | +{ |
|---|
| 82 | + return MLX5_IPSEC_METADATA_MARKER(be32_to_cpu(cqe->ft_metadata)); |
|---|
| 83 | +} |
|---|
| 84 | + |
|---|
| 85 | +static inline bool mlx5e_ipsec_is_tx_flow(struct mlx5e_accel_tx_ipsec_state *ipsec_st) |
|---|
| 86 | +{ |
|---|
| 87 | + return ipsec_st->x; |
|---|
| 88 | +} |
|---|
| 89 | + |
|---|
| 90 | +void mlx5e_ipsec_tx_build_eseg(struct mlx5e_priv *priv, struct sk_buff *skb, |
|---|
| 91 | + struct mlx5_wqe_eth_seg *eseg); |
|---|
| 92 | +#else |
|---|
| 93 | +static inline |
|---|
| 94 | +void mlx5e_ipsec_offload_handle_rx_skb(struct net_device *netdev, |
|---|
| 95 | + struct sk_buff *skb, |
|---|
| 96 | + struct mlx5_cqe64 *cqe) |
|---|
| 97 | +{} |
|---|
| 98 | + |
|---|
| 99 | +static inline bool mlx5_ipsec_is_rx_flow(struct mlx5_cqe64 *cqe) { return false; } |
|---|
| 58 | 100 | #endif /* CONFIG_MLX5_EN_IPSEC */ |
|---|
| 59 | 101 | |
|---|
| 60 | 102 | #endif /* __MLX5E_IPSEC_RXTX_H__ */ |
|---|