Lines Matching refs:vport

9 static void esw_acl_egress_ofld_fwd2vport_destroy(struct mlx5_vport *vport)  in esw_acl_egress_ofld_fwd2vport_destroy()  argument
11 if (!vport->egress.offloads.fwd_rule) in esw_acl_egress_ofld_fwd2vport_destroy()
14 mlx5_del_flow_rules(vport->egress.offloads.fwd_rule); in esw_acl_egress_ofld_fwd2vport_destroy()
15 vport->egress.offloads.fwd_rule = NULL; in esw_acl_egress_ofld_fwd2vport_destroy()
18 void esw_acl_egress_ofld_bounce_rule_destroy(struct mlx5_vport *vport, int rule_index) in esw_acl_egress_ofld_bounce_rule_destroy() argument
21 xa_load(&vport->egress.offloads.bounce_rules, rule_index); in esw_acl_egress_ofld_bounce_rule_destroy()
27 xa_erase(&vport->egress.offloads.bounce_rules, rule_index); in esw_acl_egress_ofld_bounce_rule_destroy()
30 static void esw_acl_egress_ofld_bounce_rules_destroy(struct mlx5_vport *vport) in esw_acl_egress_ofld_bounce_rules_destroy() argument
35 xa_for_each(&vport->egress.offloads.bounce_rules, i, bounce_rule) { in esw_acl_egress_ofld_bounce_rules_destroy()
37 xa_erase(&vport->egress.offloads.bounce_rules, i); in esw_acl_egress_ofld_bounce_rules_destroy()
42 struct mlx5_vport *vport, in esw_acl_egress_ofld_fwd2vport_create() argument
49 vport->vport, fwd_dest->vport.num); in esw_acl_egress_ofld_fwd2vport_create()
52 esw_acl_egress_ofld_fwd2vport_destroy(vport); in esw_acl_egress_ofld_fwd2vport_create()
56 vport->egress.offloads.fwd_rule = in esw_acl_egress_ofld_fwd2vport_create()
57 mlx5_add_flow_rules(vport->egress.acl, NULL, in esw_acl_egress_ofld_fwd2vport_create()
59 if (IS_ERR(vport->egress.offloads.fwd_rule)) { in esw_acl_egress_ofld_fwd2vport_create()
60 err = PTR_ERR(vport->egress.offloads.fwd_rule); in esw_acl_egress_ofld_fwd2vport_create()
63 vport->vport, err); in esw_acl_egress_ofld_fwd2vport_create()
64 vport->egress.offloads.fwd_rule = NULL; in esw_acl_egress_ofld_fwd2vport_create()
71 struct mlx5_vport *vport, in esw_acl_egress_ofld_rules_create() argument
83 "vport[%d] configure prio tag egress rules\n", vport->vport); in esw_acl_egress_ofld_rules_create()
90 err = esw_egress_acl_vlan_create(esw, vport, fwd_dest, 0, action); in esw_acl_egress_ofld_rules_create()
96 err = esw_acl_egress_ofld_fwd2vport_create(esw, vport, fwd_dest); in esw_acl_egress_ofld_rules_create()
104 esw_acl_egress_vlan_destroy(vport); in esw_acl_egress_ofld_rules_create()
109 static void esw_acl_egress_ofld_rules_destroy(struct mlx5_vport *vport) in esw_acl_egress_ofld_rules_destroy() argument
111 esw_acl_egress_vlan_destroy(vport); in esw_acl_egress_ofld_rules_destroy()
112 esw_acl_egress_ofld_fwd2vport_destroy(vport); in esw_acl_egress_ofld_rules_destroy()
113 esw_acl_egress_ofld_bounce_rules_destroy(vport); in esw_acl_egress_ofld_rules_destroy()
117 struct mlx5_vport *vport) in esw_acl_egress_ofld_groups_create() argument
126 ret = esw_acl_egress_vlan_grp_create(esw, vport); in esw_acl_egress_ofld_groups_create()
147 fwd_grp = mlx5_create_flow_group(vport->egress.acl, flow_group_in); in esw_acl_egress_ofld_groups_create()
152 vport->vport, ret); in esw_acl_egress_ofld_groups_create()
156 vport->egress.offloads.fwd_grp = fwd_grp; in esw_acl_egress_ofld_groups_create()
161 esw_acl_egress_vlan_grp_destroy(vport); in esw_acl_egress_ofld_groups_create()
166 static void esw_acl_egress_ofld_groups_destroy(struct mlx5_vport *vport) in esw_acl_egress_ofld_groups_destroy() argument
168 if (!IS_ERR_OR_NULL(vport->egress.offloads.fwd_grp)) { in esw_acl_egress_ofld_groups_destroy()
169 mlx5_destroy_flow_group(vport->egress.offloads.fwd_grp); in esw_acl_egress_ofld_groups_destroy()
170 vport->egress.offloads.fwd_grp = NULL; in esw_acl_egress_ofld_groups_destroy()
173 if (!IS_ERR_OR_NULL(vport->egress.offloads.bounce_grp)) { in esw_acl_egress_ofld_groups_destroy()
174 mlx5_destroy_flow_group(vport->egress.offloads.bounce_grp); in esw_acl_egress_ofld_groups_destroy()
175 vport->egress.offloads.bounce_grp = NULL; in esw_acl_egress_ofld_groups_destroy()
178 esw_acl_egress_vlan_grp_destroy(vport); in esw_acl_egress_ofld_groups_destroy()
186 int esw_acl_egress_ofld_setup(struct mlx5_eswitch *esw, struct mlx5_vport *vport) in esw_acl_egress_ofld_setup() argument
195 if (!esw_acl_egress_needed(esw, vport->vport)) in esw_acl_egress_ofld_setup()
198 esw_acl_egress_ofld_rules_destroy(vport); in esw_acl_egress_ofld_setup()
204 vport->egress.acl = esw_acl_table_create(esw, vport, in esw_acl_egress_ofld_setup()
206 if (IS_ERR(vport->egress.acl)) { in esw_acl_egress_ofld_setup()
207 err = PTR_ERR(vport->egress.acl); in esw_acl_egress_ofld_setup()
208 vport->egress.acl = NULL; in esw_acl_egress_ofld_setup()
211 vport->egress.type = VPORT_EGRESS_ACL_TYPE_DEFAULT; in esw_acl_egress_ofld_setup()
213 err = esw_acl_egress_ofld_groups_create(esw, vport); in esw_acl_egress_ofld_setup()
217 esw_debug(esw->dev, "vport[%d] configure egress rules\n", vport->vport); in esw_acl_egress_ofld_setup()
219 err = esw_acl_egress_ofld_rules_create(esw, vport, NULL); in esw_acl_egress_ofld_setup()
226 esw_acl_egress_ofld_groups_destroy(vport); in esw_acl_egress_ofld_setup()
228 esw_acl_egress_table_destroy(vport); in esw_acl_egress_ofld_setup()
232 void esw_acl_egress_ofld_cleanup(struct mlx5_vport *vport) in esw_acl_egress_ofld_cleanup() argument
234 esw_acl_egress_ofld_rules_destroy(vport); in esw_acl_egress_ofld_cleanup()
235 esw_acl_egress_ofld_groups_destroy(vport); in esw_acl_egress_ofld_cleanup()
236 esw_acl_egress_table_destroy(vport); in esw_acl_egress_ofld_cleanup()
258 fwd_dest.vport.num = active_vport_num; in mlx5_esw_acl_egress_vport_bond()
259 fwd_dest.vport.vhca_id = MLX5_CAP_GEN(esw->dev, vhca_id); in mlx5_esw_acl_egress_vport_bond()
260 fwd_dest.vport.flags = MLX5_FLOW_DEST_VPORT_VHCA_ID; in mlx5_esw_acl_egress_vport_bond()
267 struct mlx5_vport *vport = mlx5_eswitch_get_vport(esw, vport_num); in mlx5_esw_acl_egress_vport_unbond() local
269 if (IS_ERR(vport)) in mlx5_esw_acl_egress_vport_unbond()
270 return PTR_ERR(vport); in mlx5_esw_acl_egress_vport_unbond()
272 esw_acl_egress_ofld_rules_destroy(vport); in mlx5_esw_acl_egress_vport_unbond()
273 return esw_acl_egress_ofld_rules_create(esw, vport, NULL); in mlx5_esw_acl_egress_vport_unbond()