Skip to content

Commit

Permalink
net/mlx5_core: Introduce modify flow table command
Browse files Browse the repository at this point in the history
Introduce the modify flow table command. This command is used when
we want to change the next flow table of an existing flow table.
The next flow table is defined as the table we search (in order
to find a match), if we couldn't find a match in any of the flow table
entries in the current flow table.

Signed-off-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Maor Gottlieb authored and David S. Miller committed Jan 11, 2016
1 parent 2cc43b4 commit 34a40e6
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 4 deletions.
27 changes: 27 additions & 0 deletions drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,33 @@ int mlx5_cmd_destroy_flow_table(struct mlx5_core_dev *dev,
sizeof(out));
}

int mlx5_cmd_modify_flow_table(struct mlx5_core_dev *dev,
struct mlx5_flow_table *ft,
struct mlx5_flow_table *next_ft)
{
u32 in[MLX5_ST_SZ_DW(modify_flow_table_in)];
u32 out[MLX5_ST_SZ_DW(modify_flow_table_out)];

memset(in, 0, sizeof(in));
memset(out, 0, sizeof(out));

MLX5_SET(modify_flow_table_in, in, opcode,
MLX5_CMD_OP_MODIFY_FLOW_TABLE);
MLX5_SET(modify_flow_table_in, in, table_type, ft->type);
MLX5_SET(modify_flow_table_in, in, table_id, ft->id);
MLX5_SET(modify_flow_table_in, in, modify_field_select,
MLX5_MODIFY_FLOW_TABLE_MISS_TABLE_ID);
if (next_ft) {
MLX5_SET(modify_flow_table_in, in, table_miss_mode, 1);
MLX5_SET(modify_flow_table_in, in, table_miss_id, next_ft->id);
} else {
MLX5_SET(modify_flow_table_in, in, table_miss_mode, 0);
}

return mlx5_cmd_exec_check_status(dev, in, sizeof(in), out,
sizeof(out));
}

int mlx5_cmd_create_flow_group(struct mlx5_core_dev *dev,
struct mlx5_flow_table *ft,
u32 *in,
Expand Down
4 changes: 4 additions & 0 deletions drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
int mlx5_cmd_destroy_flow_table(struct mlx5_core_dev *dev,
struct mlx5_flow_table *ft);

int mlx5_cmd_modify_flow_table(struct mlx5_core_dev *dev,
struct mlx5_flow_table *ft,
struct mlx5_flow_table *next_ft);

int mlx5_cmd_create_flow_group(struct mlx5_core_dev *dev,
struct mlx5_flow_table *ft,
u32 *in, unsigned int *group_id);
Expand Down
56 changes: 52 additions & 4 deletions include/linux/mlx5/mlx5_ifc.h
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,8 @@ enum {
MLX5_CMD_OP_QUERY_FLOW_GROUP = 0x935,
MLX5_CMD_OP_SET_FLOW_TABLE_ENTRY = 0x936,
MLX5_CMD_OP_QUERY_FLOW_TABLE_ENTRY = 0x937,
MLX5_CMD_OP_DELETE_FLOW_TABLE_ENTRY = 0x938
MLX5_CMD_OP_DELETE_FLOW_TABLE_ENTRY = 0x938,
MLX5_CMD_OP_MODIFY_FLOW_TABLE = 0x93c
};

struct mlx5_ifc_flow_table_fields_supported_bits {
Expand Down Expand Up @@ -260,7 +261,9 @@ struct mlx5_ifc_flow_table_prop_layout_bits {
u8 reserved_0[0x2];
u8 flow_modify_en[0x1];
u8 modify_root[0x1];
u8 reserved_1[0x1b];
u8 identified_miss_table_mode[0x1];
u8 flow_table_modify[0x1];
u8 reserved_1[0x19];

u8 reserved_2[0x2];
u8 log_max_ft_size[0x6];
Expand Down Expand Up @@ -5669,12 +5672,16 @@ struct mlx5_ifc_create_flow_table_in_bits {

u8 reserved_4[0x20];

u8 reserved_5[0x8];
u8 reserved_5[0x4];
u8 table_miss_mode[0x4];
u8 level[0x8];
u8 reserved_6[0x8];
u8 log_size[0x8];

u8 reserved_7[0x120];
u8 reserved_7[0x8];
u8 table_miss_id[0x18];

u8 reserved_8[0x100];
};

struct mlx5_ifc_create_flow_group_out_bits {
Expand Down Expand Up @@ -6975,4 +6982,45 @@ struct mlx5_ifc_set_flow_table_root_in_bits {
u8 reserved_5[0x140];
};

enum {
MLX5_MODIFY_FLOW_TABLE_MISS_TABLE_ID = 0x1,
};

struct mlx5_ifc_modify_flow_table_out_bits {
u8 status[0x8];
u8 reserved_0[0x18];

u8 syndrome[0x20];

u8 reserved_1[0x40];
};

struct mlx5_ifc_modify_flow_table_in_bits {
u8 opcode[0x10];
u8 reserved_0[0x10];

u8 reserved_1[0x10];
u8 op_mod[0x10];

u8 reserved_2[0x20];

u8 reserved_3[0x10];
u8 modify_field_select[0x10];

u8 table_type[0x8];
u8 reserved_4[0x18];

u8 reserved_5[0x8];
u8 table_id[0x18];

u8 reserved_6[0x4];
u8 table_miss_mode[0x4];
u8 reserved_7[0x18];

u8 reserved_8[0x8];
u8 table_miss_id[0x18];

u8 reserved_9[0x100];
};

#endif /* MLX5_IFC_H */

0 comments on commit 34a40e6

Please sign in to comment.