1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2 /* Copyright (c) 2020 Mellanox Technologies Inc. All rights reserved. */ 3 4 #ifndef __MLX5_ESWITCH_ACL_OFLD_H__ 5 #define __MLX5_ESWITCH_ACL_OFLD_H__ 6 7 #include "eswitch.h" 8 9 #ifdef CONFIG_MLX5_ESWITCH 10 /* Eswitch acl egress external APIs */ 11 int esw_acl_egress_ofld_setup(struct mlx5_eswitch *esw, struct mlx5_vport *vport); 12 void esw_acl_egress_ofld_cleanup(struct mlx5_vport *vport); 13 int mlx5_esw_acl_egress_vport_bond(struct mlx5_eswitch *esw, u16 active_vport_num, 14 u16 passive_vport_num); 15 int mlx5_esw_acl_egress_vport_unbond(struct mlx5_eswitch *esw, u16 vport_num); 16 17 static inline bool mlx5_esw_acl_egress_fwd2vport_supported(struct mlx5_eswitch *esw) 18 { 19 return esw && esw->mode == MLX5_ESWITCH_OFFLOADS && 20 mlx5_eswitch_vport_match_metadata_enabled(esw) && 21 MLX5_CAP_ESW_FLOWTABLE(esw->dev, egress_acl_forward_to_vport); 22 } 23 24 /* Eswitch acl ingress external APIs */ 25 int esw_acl_ingress_ofld_setup(struct mlx5_eswitch *esw, struct mlx5_vport *vport); 26 void esw_acl_ingress_ofld_cleanup(struct mlx5_eswitch *esw, struct mlx5_vport *vport); 27 int mlx5_esw_acl_ingress_vport_bond_update(struct mlx5_eswitch *esw, u16 vport_num, 28 u32 metadata); 29 void mlx5_esw_acl_ingress_vport_drop_rule_destroy(struct mlx5_eswitch *esw, u16 vport_num); 30 int mlx5_esw_acl_ingress_vport_drop_rule_create(struct mlx5_eswitch *esw, u16 vport_num); 31 32 #else /* CONFIG_MLX5_ESWITCH */ 33 static void 34 mlx5_esw_acl_ingress_vport_drop_rule_destroy(struct mlx5_eswitch *esw, 35 u16 vport_num) 36 {} 37 38 static int mlx5_esw_acl_ingress_vport_drop_rule_create(struct mlx5_eswitch *esw, 39 u16 vport_num) 40 { 41 return 0; 42 } 43 #endif /* CONFIG_MLX5_ESWITCH */ 44 #endif /* __MLX5_ESWITCH_ACL_OFLD_H__ */ 45