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_metadata_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