1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2 /* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ 3 4 #ifndef __MLX5_EN_ACCEL_MACSEC_H__ 5 #define __MLX5_EN_ACCEL_MACSEC_H__ 6 7 #ifdef CONFIG_MLX5_MACSEC 8 9 #include <linux/mlx5/driver.h> 10 #include <net/macsec.h> 11 #include <net/dst_metadata.h> 12 #include "lib/macsec_fs.h" 13 14 struct mlx5e_priv; 15 struct mlx5e_macsec; 16 17 void mlx5e_macsec_build_netdev(struct mlx5e_priv *priv); 18 int mlx5e_macsec_init(struct mlx5e_priv *priv); 19 void mlx5e_macsec_cleanup(struct mlx5e_priv *priv); 20 bool mlx5e_macsec_handle_tx_skb(struct mlx5e_macsec *macsec, struct sk_buff *skb); 21 void mlx5e_macsec_tx_build_eseg(struct mlx5e_macsec *macsec, 22 struct sk_buff *skb, 23 struct mlx5_wqe_eth_seg *eseg); 24 25 static inline bool mlx5e_macsec_skb_is_offload(struct sk_buff *skb) 26 { 27 struct metadata_dst *md_dst = skb_metadata_dst(skb); 28 29 return md_dst && (md_dst->type == METADATA_MACSEC); 30 } 31 32 static inline bool mlx5e_macsec_is_rx_flow(struct mlx5_cqe64 *cqe) 33 { 34 return MLX5_MACSEC_METADATA_MARKER(be32_to_cpu(cqe->ft_metadata)); 35 } 36 37 void mlx5e_macsec_offload_handle_rx_skb(struct net_device *netdev, struct sk_buff *skb, 38 struct mlx5_cqe64 *cqe); 39 40 #else 41 42 static inline void mlx5e_macsec_build_netdev(struct mlx5e_priv *priv) {} 43 static inline int mlx5e_macsec_init(struct mlx5e_priv *priv) { return 0; } 44 static inline void mlx5e_macsec_cleanup(struct mlx5e_priv *priv) {} 45 static inline bool mlx5e_macsec_skb_is_offload(struct sk_buff *skb) { return false; } 46 static inline bool mlx5e_macsec_is_rx_flow(struct mlx5_cqe64 *cqe) { return false; } 47 static inline void mlx5e_macsec_offload_handle_rx_skb(struct net_device *netdev, 48 struct sk_buff *skb, 49 struct mlx5_cqe64 *cqe) 50 {} 51 #endif /* CONFIG_MLX5_MACSEC */ 52 53 #endif /* __MLX5_ACCEL_EN_MACSEC_H__ */ 54