mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-10 14:43:54 +08:00
net/mlx5: Add core support for vlan push/pop steering action
Newer NICs (ConnectX-5 and onward) can apply vlan pop or push as an action taking place during flow steering. Add the core bits for that. Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Reviewed-by: Mark Bloch <markb@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
aa24670ef6
commit
0c06897a9a
@ -136,6 +136,8 @@ TRACE_EVENT(mlx5_fs_del_fg,
|
||||
{MLX5_FLOW_CONTEXT_ACTION_ENCAP, "ENCAP"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_DECAP, "DECAP"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_MOD_HDR, "MOD_HDR"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH, "VLAN_PUSH"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_VLAN_POP, "VLAN_POP"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_FWD_NEXT_PRIO, "NEXT_PRIO"}
|
||||
|
||||
TRACE_EVENT(mlx5_fs_set_fte,
|
||||
|
@ -227,9 +227,6 @@ enum {
|
||||
SET_VLAN_INSERT = BIT(1)
|
||||
};
|
||||
|
||||
#define MLX5_FLOW_CONTEXT_ACTION_VLAN_POP 0x4000
|
||||
#define MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH 0x8000
|
||||
|
||||
struct mlx5_esw_flow_attr {
|
||||
struct mlx5_eswitch_rep *in_rep;
|
||||
struct mlx5_eswitch_rep *out_rep;
|
||||
|
@ -317,7 +317,7 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
|
||||
fte->dests_size * MLX5_ST_SZ_BYTES(dest_format_struct);
|
||||
u32 out[MLX5_ST_SZ_DW(set_fte_out)] = {0};
|
||||
struct mlx5_flow_rule *dst;
|
||||
void *in_flow_context;
|
||||
void *in_flow_context, *vlan;
|
||||
void *in_match_value;
|
||||
void *in_dests;
|
||||
u32 *in;
|
||||
@ -340,11 +340,19 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
|
||||
|
||||
in_flow_context = MLX5_ADDR_OF(set_fte_in, in, flow_context);
|
||||
MLX5_SET(flow_context, in_flow_context, group_id, group_id);
|
||||
|
||||
MLX5_SET(flow_context, in_flow_context, flow_tag, fte->action.flow_tag);
|
||||
MLX5_SET(flow_context, in_flow_context, action, fte->action.action);
|
||||
MLX5_SET(flow_context, in_flow_context, encap_id, fte->action.encap_id);
|
||||
MLX5_SET(flow_context, in_flow_context, modify_header_id,
|
||||
fte->action.modify_id);
|
||||
|
||||
vlan = MLX5_ADDR_OF(flow_context, in_flow_context, push_vlan);
|
||||
|
||||
MLX5_SET(vlan, vlan, ethtype, fte->action.vlan.ethtype);
|
||||
MLX5_SET(vlan, vlan, vid, fte->action.vlan.vid);
|
||||
MLX5_SET(vlan, vlan, prio, fte->action.vlan.prio);
|
||||
|
||||
in_match_value = MLX5_ADDR_OF(flow_context, in_flow_context,
|
||||
match_value);
|
||||
memcpy(in_match_value, &fte->val, sizeof(fte->val));
|
||||
|
@ -1439,7 +1439,9 @@ static bool check_conflicting_actions(u32 action1, u32 action2)
|
||||
if (xored_actions & (MLX5_FLOW_CONTEXT_ACTION_DROP |
|
||||
MLX5_FLOW_CONTEXT_ACTION_ENCAP |
|
||||
MLX5_FLOW_CONTEXT_ACTION_DECAP |
|
||||
MLX5_FLOW_CONTEXT_ACTION_MOD_HDR))
|
||||
MLX5_FLOW_CONTEXT_ACTION_MOD_HDR |
|
||||
MLX5_FLOW_CONTEXT_ACTION_VLAN_POP |
|
||||
MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@ -142,6 +142,12 @@ struct mlx5_flow_group *
|
||||
mlx5_create_flow_group(struct mlx5_flow_table *ft, u32 *in);
|
||||
void mlx5_destroy_flow_group(struct mlx5_flow_group *fg);
|
||||
|
||||
struct mlx5_fs_vlan {
|
||||
u16 ethtype;
|
||||
u16 vid;
|
||||
u8 prio;
|
||||
};
|
||||
|
||||
struct mlx5_flow_act {
|
||||
u32 action;
|
||||
bool has_flow_tag;
|
||||
@ -149,6 +155,7 @@ struct mlx5_flow_act {
|
||||
u32 encap_id;
|
||||
u32 modify_id;
|
||||
uintptr_t esp_id;
|
||||
struct mlx5_fs_vlan vlan;
|
||||
};
|
||||
|
||||
#define MLX5_DECLARE_FLOW_ACT(name) \
|
||||
|
@ -314,7 +314,10 @@ struct mlx5_ifc_flow_table_prop_layout_bits {
|
||||
u8 flow_table_modify[0x1];
|
||||
u8 encap[0x1];
|
||||
u8 decap[0x1];
|
||||
u8 reserved_at_9[0x17];
|
||||
u8 reserved_at_9[0x1];
|
||||
u8 pop_vlan[0x1];
|
||||
u8 push_vlan[0x1];
|
||||
u8 reserved_at_c[0x14];
|
||||
|
||||
u8 reserved_at_20[0x2];
|
||||
u8 log_max_ft_size[0x6];
|
||||
@ -2311,10 +2314,19 @@ enum {
|
||||
MLX5_FLOW_CONTEXT_ACTION_ENCAP = 0x10,
|
||||
MLX5_FLOW_CONTEXT_ACTION_DECAP = 0x20,
|
||||
MLX5_FLOW_CONTEXT_ACTION_MOD_HDR = 0x40,
|
||||
MLX5_FLOW_CONTEXT_ACTION_VLAN_POP = 0x80,
|
||||
MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH = 0x100,
|
||||
};
|
||||
|
||||
struct mlx5_ifc_vlan_bits {
|
||||
u8 ethtype[0x10];
|
||||
u8 prio[0x3];
|
||||
u8 cfi[0x1];
|
||||
u8 vid[0xc];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_flow_context_bits {
|
||||
u8 reserved_at_0[0x20];
|
||||
struct mlx5_ifc_vlan_bits push_vlan;
|
||||
|
||||
u8 group_id[0x20];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user