mirror of
https://github.com/torvalds/linux.git
synced 2024-12-25 20:32:22 +00:00
Merge branch 'mlx5-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux into net-next
mlx5 updates for both net-next and rdma-next * 'mlx5-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux: (21 commits) net/mlx5: Expose DC scatter to CQE capability bit net/mlx5: Update mlx5_ifc with DEVX UID bits net/mlx5: Set uid as part of DCT commands net/mlx5: Set uid as part of SRQ commands net/mlx5: Set uid as part of SQ commands net/mlx5: Set uid as part of RQ commands net/mlx5: Set uid as part of QP commands net/mlx5: Set uid as part of CQ commands net/mlx5: Rename incorrect naming in IFC file net/mlx5: Export packet reformat alloc/dealloc functions net/mlx5: Pass a namespace for packet reformat ID allocation net/mlx5: Expose new packet reformat capabilities {net, RDMA}/mlx5: Rename encap to reformat packet net/mlx5: Move header encap type to IFC header file net/mlx5: Break encap/decap into two separated flow table creation flags net/mlx5: Add support for more namespaces when allocating modify header net/mlx5: Export modify header alloc/dealloc functions net/mlx5: Add proper NIC TX steering flow tables support net/mlx5: Cleanup flow namespace getter switch logic net/mlx5: Add memic command opcode to command checker ... Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
commit
186daf0c20
@ -284,7 +284,7 @@ static bool devx_is_obj_create_cmd(const void *in)
|
||||
case MLX5_CMD_OP_CREATE_FLOW_TABLE:
|
||||
case MLX5_CMD_OP_CREATE_FLOW_GROUP:
|
||||
case MLX5_CMD_OP_ALLOC_FLOW_COUNTER:
|
||||
case MLX5_CMD_OP_ALLOC_ENCAP_HEADER:
|
||||
case MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT:
|
||||
case MLX5_CMD_OP_ALLOC_MODIFY_HEADER_CONTEXT:
|
||||
case MLX5_CMD_OP_CREATE_SCHEDULING_ELEMENT:
|
||||
case MLX5_CMD_OP_ADD_VXLAN_UDP_DPORT:
|
||||
@ -627,9 +627,9 @@ static void devx_obj_build_destroy_cmd(void *in, void *out, void *din,
|
||||
MLX5_SET(general_obj_in_cmd_hdr, din, opcode,
|
||||
MLX5_CMD_OP_DEALLOC_FLOW_COUNTER);
|
||||
break;
|
||||
case MLX5_CMD_OP_ALLOC_ENCAP_HEADER:
|
||||
case MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT:
|
||||
MLX5_SET(general_obj_in_cmd_hdr, din, opcode,
|
||||
MLX5_CMD_OP_DEALLOC_ENCAP_HEADER);
|
||||
MLX5_CMD_OP_DEALLOC_PACKET_REFORMAT_CONTEXT);
|
||||
break;
|
||||
case MLX5_CMD_OP_ALLOC_MODIFY_HEADER_CONTEXT:
|
||||
MLX5_SET(general_obj_in_cmd_hdr, din, opcode,
|
||||
|
@ -1279,7 +1279,7 @@ static int create_raw_packet_qp_tir(struct mlx5_ib_dev *dev,
|
||||
|
||||
if (dev->rep)
|
||||
MLX5_SET(tirc, tirc, self_lb_block,
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST_);
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST);
|
||||
|
||||
err = mlx5_core_create_tir(dev->mdev, in, inlen, &rq->tirn);
|
||||
|
||||
@ -1582,7 +1582,7 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
|
||||
create_tir:
|
||||
if (dev->rep)
|
||||
MLX5_SET(tirc, tirc, self_lb_block,
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST_);
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST);
|
||||
|
||||
err = mlx5_core_create_tir(dev->mdev, in, inlen, &qp->rss_qp.tirn);
|
||||
|
||||
|
@ -308,10 +308,11 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
|
||||
case MLX5_CMD_OP_MODIFY_FLOW_TABLE:
|
||||
case MLX5_CMD_OP_SET_FLOW_TABLE_ENTRY:
|
||||
case MLX5_CMD_OP_SET_FLOW_TABLE_ROOT:
|
||||
case MLX5_CMD_OP_DEALLOC_ENCAP_HEADER:
|
||||
case MLX5_CMD_OP_DEALLOC_PACKET_REFORMAT_CONTEXT:
|
||||
case MLX5_CMD_OP_DEALLOC_MODIFY_HEADER_CONTEXT:
|
||||
case MLX5_CMD_OP_FPGA_DESTROY_QP:
|
||||
case MLX5_CMD_OP_DESTROY_GENERAL_OBJECT:
|
||||
case MLX5_CMD_OP_DEALLOC_MEMIC:
|
||||
return MLX5_CMD_STAT_OK;
|
||||
|
||||
case MLX5_CMD_OP_QUERY_HCA_CAP:
|
||||
@ -426,7 +427,7 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
|
||||
case MLX5_CMD_OP_QUERY_FLOW_TABLE_ENTRY:
|
||||
case MLX5_CMD_OP_ALLOC_FLOW_COUNTER:
|
||||
case MLX5_CMD_OP_QUERY_FLOW_COUNTER:
|
||||
case MLX5_CMD_OP_ALLOC_ENCAP_HEADER:
|
||||
case MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT:
|
||||
case MLX5_CMD_OP_ALLOC_MODIFY_HEADER_CONTEXT:
|
||||
case MLX5_CMD_OP_FPGA_CREATE_QP:
|
||||
case MLX5_CMD_OP_FPGA_MODIFY_QP:
|
||||
@ -435,6 +436,7 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
|
||||
case MLX5_CMD_OP_CREATE_GENERAL_OBJECT:
|
||||
case MLX5_CMD_OP_MODIFY_GENERAL_OBJECT:
|
||||
case MLX5_CMD_OP_QUERY_GENERAL_OBJECT:
|
||||
case MLX5_CMD_OP_ALLOC_MEMIC:
|
||||
*status = MLX5_DRIVER_STATUS_ABORTED;
|
||||
*synd = MLX5_DRIVER_SYND;
|
||||
return -EIO;
|
||||
@ -599,8 +601,8 @@ const char *mlx5_command_str(int command)
|
||||
MLX5_COMMAND_STR_CASE(DEALLOC_FLOW_COUNTER);
|
||||
MLX5_COMMAND_STR_CASE(QUERY_FLOW_COUNTER);
|
||||
MLX5_COMMAND_STR_CASE(MODIFY_FLOW_TABLE);
|
||||
MLX5_COMMAND_STR_CASE(ALLOC_ENCAP_HEADER);
|
||||
MLX5_COMMAND_STR_CASE(DEALLOC_ENCAP_HEADER);
|
||||
MLX5_COMMAND_STR_CASE(ALLOC_PACKET_REFORMAT_CONTEXT);
|
||||
MLX5_COMMAND_STR_CASE(DEALLOC_PACKET_REFORMAT_CONTEXT);
|
||||
MLX5_COMMAND_STR_CASE(ALLOC_MODIFY_HEADER_CONTEXT);
|
||||
MLX5_COMMAND_STR_CASE(DEALLOC_MODIFY_HEADER_CONTEXT);
|
||||
MLX5_COMMAND_STR_CASE(FPGA_CREATE_QP);
|
||||
@ -617,6 +619,8 @@ const char *mlx5_command_str(int command)
|
||||
MLX5_COMMAND_STR_CASE(MODIFY_GENERAL_OBJECT);
|
||||
MLX5_COMMAND_STR_CASE(QUERY_GENERAL_OBJECT);
|
||||
MLX5_COMMAND_STR_CASE(QUERY_MODIFY_HEADER_CONTEXT);
|
||||
MLX5_COMMAND_STR_CASE(ALLOC_MEMIC);
|
||||
MLX5_COMMAND_STR_CASE(DEALLOC_MEMIC);
|
||||
default: return "unknown command opcode";
|
||||
}
|
||||
}
|
||||
|
@ -109,6 +109,7 @@ int mlx5_core_create_cq(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq,
|
||||
cq->cons_index = 0;
|
||||
cq->arm_sn = 0;
|
||||
cq->eq = eq;
|
||||
cq->uid = MLX5_GET(create_cq_in, in, uid);
|
||||
refcount_set(&cq->refcount, 1);
|
||||
init_completion(&cq->free);
|
||||
if (!cq->comp)
|
||||
@ -144,6 +145,7 @@ err_cmd:
|
||||
memset(dout, 0, sizeof(dout));
|
||||
MLX5_SET(destroy_cq_in, din, opcode, MLX5_CMD_OP_DESTROY_CQ);
|
||||
MLX5_SET(destroy_cq_in, din, cqn, cq->cqn);
|
||||
MLX5_SET(destroy_cq_in, din, uid, cq->uid);
|
||||
mlx5_cmd_exec(dev, din, sizeof(din), dout, sizeof(dout));
|
||||
return err;
|
||||
}
|
||||
@ -165,6 +167,7 @@ int mlx5_core_destroy_cq(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq)
|
||||
|
||||
MLX5_SET(destroy_cq_in, in, opcode, MLX5_CMD_OP_DESTROY_CQ);
|
||||
MLX5_SET(destroy_cq_in, in, cqn, cq->cqn);
|
||||
MLX5_SET(destroy_cq_in, in, uid, cq->uid);
|
||||
err = mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
|
||||
if (err)
|
||||
return err;
|
||||
@ -196,6 +199,7 @@ int mlx5_core_modify_cq(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq,
|
||||
u32 out[MLX5_ST_SZ_DW(modify_cq_out)] = {0};
|
||||
|
||||
MLX5_SET(modify_cq_in, in, opcode, MLX5_CMD_OP_MODIFY_CQ);
|
||||
MLX5_SET(modify_cq_in, in, uid, cq->uid);
|
||||
return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
|
||||
}
|
||||
EXPORT_SYMBOL(mlx5_core_modify_cq);
|
||||
|
@ -133,7 +133,7 @@ TRACE_EVENT(mlx5_fs_del_fg,
|
||||
{MLX5_FLOW_CONTEXT_ACTION_DROP, "DROP"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_FWD_DEST, "FWD"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_COUNT, "CNT"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_ENCAP, "ENCAP"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT, "REFORMAT"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_DECAP, "DECAP"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_MOD_HDR, "MOD_HDR"},\
|
||||
{MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH, "VLAN_PUSH"},\
|
||||
|
@ -153,7 +153,7 @@ int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb)
|
||||
|
||||
if (enable_uc_lb)
|
||||
MLX5_SET(modify_tir_in, in, ctx.self_lb_block,
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST_);
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST);
|
||||
|
||||
MLX5_SET(modify_tir_in, in, bitmask.self_lb_en, 1);
|
||||
|
||||
|
@ -100,11 +100,6 @@ struct mlx5e_tc_flow_parse_attr {
|
||||
int mirred_ifindex;
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_HEADER_TYPE_VXLAN = 0x0,
|
||||
MLX5_HEADER_TYPE_NVGRE = 0x1,
|
||||
};
|
||||
|
||||
#define MLX5E_TC_TABLE_NUM_GROUPS 4
|
||||
#define MLX5E_TC_TABLE_MAX_GROUP_SIZE BIT(16)
|
||||
|
||||
@ -690,7 +685,7 @@ mlx5e_tc_add_nic_flow(struct mlx5e_priv *priv,
|
||||
.action = attr->action,
|
||||
.has_flow_tag = true,
|
||||
.flow_tag = attr->flow_tag,
|
||||
.encap_id = 0,
|
||||
.reformat_id = 0,
|
||||
};
|
||||
struct mlx5_fc *counter = NULL;
|
||||
struct mlx5_flow_handle *rule;
|
||||
@ -842,7 +837,7 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv,
|
||||
struct mlx5e_priv *out_priv;
|
||||
int err;
|
||||
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_ENCAP) {
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT) {
|
||||
out_dev = __dev_get_by_index(dev_net(priv->netdev),
|
||||
attr->parse_attr->mirred_ifindex);
|
||||
err = mlx5e_attach_encap(priv, &parse_attr->tun_info,
|
||||
@ -898,7 +893,7 @@ err_add_rule:
|
||||
err_mod_hdr:
|
||||
mlx5_eswitch_del_vlan_action(esw, attr);
|
||||
err_add_vlan:
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_ENCAP)
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT)
|
||||
mlx5e_detach_encap(priv, flow);
|
||||
err_attach_encap:
|
||||
return rule;
|
||||
@ -919,7 +914,7 @@ static void mlx5e_tc_del_fdb_flow(struct mlx5e_priv *priv,
|
||||
|
||||
mlx5_eswitch_del_vlan_action(esw, attr);
|
||||
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_ENCAP) {
|
||||
if (attr->action & MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT) {
|
||||
mlx5e_detach_encap(priv, flow);
|
||||
kvfree(attr->parse_attr);
|
||||
}
|
||||
@ -936,9 +931,10 @@ void mlx5e_tc_encap_flows_add(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow *flow;
|
||||
int err;
|
||||
|
||||
err = mlx5_encap_alloc(priv->mdev, e->tunnel_type,
|
||||
e->encap_size, e->encap_header,
|
||||
&e->encap_id);
|
||||
err = mlx5_packet_reformat_alloc(priv->mdev, e->tunnel_type,
|
||||
e->encap_size, e->encap_header,
|
||||
MLX5_FLOW_NAMESPACE_FDB,
|
||||
&e->encap_id);
|
||||
if (err) {
|
||||
mlx5_core_warn(priv->mdev, "Failed to offload cached encapsulation header, %d\n",
|
||||
err);
|
||||
@ -992,7 +988,7 @@ void mlx5e_tc_encap_flows_del(struct mlx5e_priv *priv,
|
||||
|
||||
if (e->flags & MLX5_ENCAP_ENTRY_VALID) {
|
||||
e->flags &= ~MLX5_ENCAP_ENTRY_VALID;
|
||||
mlx5_encap_dealloc(priv->mdev, e->encap_id);
|
||||
mlx5_packet_reformat_dealloc(priv->mdev, e->encap_id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1061,7 +1057,7 @@ static void mlx5e_detach_encap(struct mlx5e_priv *priv,
|
||||
mlx5e_rep_encap_entry_detach(netdev_priv(e->out_dev), e);
|
||||
|
||||
if (e->flags & MLX5_ENCAP_ENTRY_VALID)
|
||||
mlx5_encap_dealloc(priv->mdev, e->encap_id);
|
||||
mlx5_packet_reformat_dealloc(priv->mdev, e->encap_id);
|
||||
|
||||
hash_del_rcu(&e->encap_hlist);
|
||||
kfree(e->encap_header);
|
||||
@ -2391,7 +2387,7 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv,
|
||||
return -ENOMEM;
|
||||
|
||||
switch (e->tunnel_type) {
|
||||
case MLX5_HEADER_TYPE_VXLAN:
|
||||
case MLX5_REFORMAT_TYPE_L2_TO_VXLAN:
|
||||
fl4.flowi4_proto = IPPROTO_UDP;
|
||||
fl4.fl4_dport = tun_key->tp_dst;
|
||||
break;
|
||||
@ -2435,7 +2431,7 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv,
|
||||
read_unlock_bh(&n->lock);
|
||||
|
||||
switch (e->tunnel_type) {
|
||||
case MLX5_HEADER_TYPE_VXLAN:
|
||||
case MLX5_REFORMAT_TYPE_L2_TO_VXLAN:
|
||||
gen_vxlan_header_ipv4(out_dev, encap_header,
|
||||
ipv4_encap_size, e->h_dest, tos, ttl,
|
||||
fl4.daddr,
|
||||
@ -2455,8 +2451,10 @@ static int mlx5e_create_encap_header_ipv4(struct mlx5e_priv *priv,
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = mlx5_encap_alloc(priv->mdev, e->tunnel_type,
|
||||
ipv4_encap_size, encap_header, &e->encap_id);
|
||||
err = mlx5_packet_reformat_alloc(priv->mdev, e->tunnel_type,
|
||||
ipv4_encap_size, encap_header,
|
||||
MLX5_FLOW_NAMESPACE_FDB,
|
||||
&e->encap_id);
|
||||
if (err)
|
||||
goto destroy_neigh_entry;
|
||||
|
||||
@ -2500,7 +2498,7 @@ static int mlx5e_create_encap_header_ipv6(struct mlx5e_priv *priv,
|
||||
return -ENOMEM;
|
||||
|
||||
switch (e->tunnel_type) {
|
||||
case MLX5_HEADER_TYPE_VXLAN:
|
||||
case MLX5_REFORMAT_TYPE_L2_TO_VXLAN:
|
||||
fl6.flowi6_proto = IPPROTO_UDP;
|
||||
fl6.fl6_dport = tun_key->tp_dst;
|
||||
break;
|
||||
@ -2544,7 +2542,7 @@ static int mlx5e_create_encap_header_ipv6(struct mlx5e_priv *priv,
|
||||
read_unlock_bh(&n->lock);
|
||||
|
||||
switch (e->tunnel_type) {
|
||||
case MLX5_HEADER_TYPE_VXLAN:
|
||||
case MLX5_REFORMAT_TYPE_L2_TO_VXLAN:
|
||||
gen_vxlan_header_ipv6(out_dev, encap_header,
|
||||
ipv6_encap_size, e->h_dest, tos, ttl,
|
||||
&fl6.daddr,
|
||||
@ -2565,8 +2563,10 @@ static int mlx5e_create_encap_header_ipv6(struct mlx5e_priv *priv,
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = mlx5_encap_alloc(priv->mdev, e->tunnel_type,
|
||||
ipv6_encap_size, encap_header, &e->encap_id);
|
||||
err = mlx5_packet_reformat_alloc(priv->mdev, e->tunnel_type,
|
||||
ipv6_encap_size, encap_header,
|
||||
MLX5_FLOW_NAMESPACE_FDB,
|
||||
&e->encap_id);
|
||||
if (err)
|
||||
goto destroy_neigh_entry;
|
||||
|
||||
@ -2617,7 +2617,7 @@ vxlan_encap_offload_err:
|
||||
|
||||
if (mlx5_vxlan_lookup_port(priv->mdev->vxlan, be16_to_cpu(key->tp_dst)) &&
|
||||
MLX5_CAP_ESW(priv->mdev, vxlan_encap_decap)) {
|
||||
tunnel_type = MLX5_HEADER_TYPE_VXLAN;
|
||||
tunnel_type = MLX5_REFORMAT_TYPE_L2_TO_VXLAN;
|
||||
} else {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"port isn't an offloaded vxlan udp dport");
|
||||
@ -2797,7 +2797,7 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
|
||||
parse_attr->mirred_ifindex = out_dev->ifindex;
|
||||
parse_attr->tun_info = *info;
|
||||
attr->parse_attr = parse_attr;
|
||||
action |= MLX5_FLOW_CONTEXT_ACTION_ENCAP |
|
||||
action |= MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT |
|
||||
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST |
|
||||
MLX5_FLOW_CONTEXT_ACTION_COUNT;
|
||||
/* attr->out_rep is resolved when we handle encap */
|
||||
@ -2954,7 +2954,8 @@ int mlx5e_configure_flower(struct mlx5e_priv *priv,
|
||||
flow->flags |= MLX5E_TC_FLOW_OFFLOADED;
|
||||
|
||||
if (!(flow->flags & MLX5E_TC_FLOW_ESWITCH) ||
|
||||
!(flow->esw_attr->action & MLX5_FLOW_CONTEXT_ACTION_ENCAP))
|
||||
!(flow->esw_attr->action &
|
||||
MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT))
|
||||
kvfree(parse_attr);
|
||||
|
||||
err = rhashtable_insert_fast(tc_ht, &flow->node, tc_ht_params);
|
||||
|
@ -1746,7 +1746,7 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
|
||||
esw->enabled_vports = 0;
|
||||
esw->mode = SRIOV_NONE;
|
||||
esw->offloads.inline_mode = MLX5_INLINE_MODE_NONE;
|
||||
if (MLX5_CAP_ESW_FLOWTABLE_FDB(dev, encap) &&
|
||||
if (MLX5_CAP_ESW_FLOWTABLE_FDB(dev, reformat) &&
|
||||
MLX5_CAP_ESW_FLOWTABLE_FDB(dev, decap))
|
||||
esw->offloads.encap = DEVLINK_ESWITCH_ENCAP_MODE_BASIC;
|
||||
else
|
||||
|
@ -127,8 +127,8 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw,
|
||||
if (flow_act.action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)
|
||||
flow_act.modify_id = attr->mod_hdr_id;
|
||||
|
||||
if (flow_act.action & MLX5_FLOW_CONTEXT_ACTION_ENCAP)
|
||||
flow_act.encap_id = attr->encap_id;
|
||||
if (flow_act.action & MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT)
|
||||
flow_act.reformat_id = attr->encap_id;
|
||||
|
||||
rule = mlx5_add_flow_rules(ft, spec, &flow_act, dest, i);
|
||||
if (IS_ERR(rule))
|
||||
@ -529,7 +529,8 @@ static int esw_create_offloads_fast_fdb_table(struct mlx5_eswitch *esw)
|
||||
esw_size >>= 1;
|
||||
|
||||
if (esw->offloads.encap != DEVLINK_ESWITCH_ENCAP_MODE_NONE)
|
||||
flags |= MLX5_FLOW_TABLE_TUNNEL_EN;
|
||||
flags |= (MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT |
|
||||
MLX5_FLOW_TABLE_TUNNEL_EN_DECAP);
|
||||
|
||||
fdb = mlx5_create_auto_grouped_flow_table(root_ns, FDB_FAST_PATH,
|
||||
esw_size,
|
||||
@ -1256,7 +1257,7 @@ int mlx5_devlink_eswitch_encap_mode_set(struct devlink *devlink, u8 encap,
|
||||
return err;
|
||||
|
||||
if (encap != DEVLINK_ESWITCH_ENCAP_MODE_NONE &&
|
||||
(!MLX5_CAP_ESW_FLOWTABLE_FDB(dev, encap) ||
|
||||
(!MLX5_CAP_ESW_FLOWTABLE_FDB(dev, reformat) ||
|
||||
!MLX5_CAP_ESW_FLOWTABLE_FDB(dev, decap)))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
|
@ -152,7 +152,8 @@ static int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
|
||||
struct mlx5_flow_table *next_ft,
|
||||
unsigned int *table_id, u32 flags)
|
||||
{
|
||||
int en_encap_decap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN);
|
||||
int en_encap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT);
|
||||
int en_decap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN_DECAP);
|
||||
u32 out[MLX5_ST_SZ_DW(create_flow_table_out)] = {0};
|
||||
u32 in[MLX5_ST_SZ_DW(create_flow_table_in)] = {0};
|
||||
int err;
|
||||
@ -169,9 +170,9 @@ static int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
|
||||
}
|
||||
|
||||
MLX5_SET(create_flow_table_in, in, flow_table_context.decap_en,
|
||||
en_encap_decap);
|
||||
MLX5_SET(create_flow_table_in, in, flow_table_context.encap_en,
|
||||
en_encap_decap);
|
||||
en_decap);
|
||||
MLX5_SET(create_flow_table_in, in, flow_table_context.reformat_en,
|
||||
en_encap);
|
||||
|
||||
switch (op_mod) {
|
||||
case FS_FT_OP_MOD_NORMAL:
|
||||
@ -343,7 +344,8 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
|
||||
|
||||
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, packet_reformat_id,
|
||||
fte->action.reformat_id);
|
||||
MLX5_SET(flow_context, in_flow_context, modify_header_id,
|
||||
fte->action.modify_id);
|
||||
|
||||
@ -594,62 +596,78 @@ void mlx5_cmd_fc_bulk_get(struct mlx5_core_dev *dev,
|
||||
*bytes = MLX5_GET64(traffic_counter, stats, octets);
|
||||
}
|
||||
|
||||
int mlx5_encap_alloc(struct mlx5_core_dev *dev,
|
||||
int header_type,
|
||||
size_t size,
|
||||
void *encap_header,
|
||||
u32 *encap_id)
|
||||
int mlx5_packet_reformat_alloc(struct mlx5_core_dev *dev,
|
||||
int reformat_type,
|
||||
size_t size,
|
||||
void *reformat_data,
|
||||
enum mlx5_flow_namespace_type namespace,
|
||||
u32 *packet_reformat_id)
|
||||
{
|
||||
int max_encap_size = MLX5_CAP_ESW(dev, max_encap_header_size);
|
||||
u32 out[MLX5_ST_SZ_DW(alloc_encap_header_out)];
|
||||
void *encap_header_in;
|
||||
void *header;
|
||||
u32 out[MLX5_ST_SZ_DW(alloc_packet_reformat_context_out)];
|
||||
void *packet_reformat_context_in;
|
||||
int max_encap_size;
|
||||
void *reformat;
|
||||
int inlen;
|
||||
int err;
|
||||
u32 *in;
|
||||
|
||||
if (namespace == MLX5_FLOW_NAMESPACE_FDB)
|
||||
max_encap_size = MLX5_CAP_ESW(dev, max_encap_header_size);
|
||||
else
|
||||
max_encap_size = MLX5_CAP_FLOWTABLE(dev, max_encap_header_size);
|
||||
|
||||
if (size > max_encap_size) {
|
||||
mlx5_core_warn(dev, "encap size %zd too big, max supported is %d\n",
|
||||
size, max_encap_size);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
in = kzalloc(MLX5_ST_SZ_BYTES(alloc_encap_header_in) + size,
|
||||
in = kzalloc(MLX5_ST_SZ_BYTES(alloc_packet_reformat_context_in) + size,
|
||||
GFP_KERNEL);
|
||||
if (!in)
|
||||
return -ENOMEM;
|
||||
|
||||
encap_header_in = MLX5_ADDR_OF(alloc_encap_header_in, in, encap_header);
|
||||
header = MLX5_ADDR_OF(encap_header_in, encap_header_in, encap_header);
|
||||
inlen = header - (void *)in + size;
|
||||
packet_reformat_context_in = MLX5_ADDR_OF(alloc_packet_reformat_context_in,
|
||||
in, packet_reformat_context);
|
||||
reformat = MLX5_ADDR_OF(packet_reformat_context_in,
|
||||
packet_reformat_context_in,
|
||||
reformat_data);
|
||||
inlen = reformat - (void *)in + size;
|
||||
|
||||
memset(in, 0, inlen);
|
||||
MLX5_SET(alloc_encap_header_in, in, opcode,
|
||||
MLX5_CMD_OP_ALLOC_ENCAP_HEADER);
|
||||
MLX5_SET(encap_header_in, encap_header_in, encap_header_size, size);
|
||||
MLX5_SET(encap_header_in, encap_header_in, header_type, header_type);
|
||||
memcpy(header, encap_header, size);
|
||||
MLX5_SET(alloc_packet_reformat_context_in, in, opcode,
|
||||
MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT);
|
||||
MLX5_SET(packet_reformat_context_in, packet_reformat_context_in,
|
||||
reformat_data_size, size);
|
||||
MLX5_SET(packet_reformat_context_in, packet_reformat_context_in,
|
||||
reformat_type, reformat_type);
|
||||
memcpy(reformat, reformat_data, size);
|
||||
|
||||
memset(out, 0, sizeof(out));
|
||||
err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
|
||||
|
||||
*encap_id = MLX5_GET(alloc_encap_header_out, out, encap_id);
|
||||
*packet_reformat_id = MLX5_GET(alloc_packet_reformat_context_out,
|
||||
out, packet_reformat_id);
|
||||
kfree(in);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(mlx5_packet_reformat_alloc);
|
||||
|
||||
void mlx5_encap_dealloc(struct mlx5_core_dev *dev, u32 encap_id)
|
||||
void mlx5_packet_reformat_dealloc(struct mlx5_core_dev *dev,
|
||||
u32 packet_reformat_id)
|
||||
{
|
||||
u32 in[MLX5_ST_SZ_DW(dealloc_encap_header_in)];
|
||||
u32 out[MLX5_ST_SZ_DW(dealloc_encap_header_out)];
|
||||
u32 in[MLX5_ST_SZ_DW(dealloc_packet_reformat_context_in)];
|
||||
u32 out[MLX5_ST_SZ_DW(dealloc_packet_reformat_context_out)];
|
||||
|
||||
memset(in, 0, sizeof(in));
|
||||
MLX5_SET(dealloc_encap_header_in, in, opcode,
|
||||
MLX5_CMD_OP_DEALLOC_ENCAP_HEADER);
|
||||
MLX5_SET(dealloc_encap_header_in, in, encap_id, encap_id);
|
||||
MLX5_SET(dealloc_packet_reformat_context_in, in, opcode,
|
||||
MLX5_CMD_OP_DEALLOC_PACKET_REFORMAT_CONTEXT);
|
||||
MLX5_SET(dealloc_packet_reformat_context_in, in, packet_reformat_id,
|
||||
packet_reformat_id);
|
||||
|
||||
mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
|
||||
}
|
||||
EXPORT_SYMBOL(mlx5_packet_reformat_dealloc);
|
||||
|
||||
int mlx5_modify_header_alloc(struct mlx5_core_dev *dev,
|
||||
u8 namespace, u8 num_actions,
|
||||
@ -667,9 +685,14 @@ int mlx5_modify_header_alloc(struct mlx5_core_dev *dev,
|
||||
table_type = FS_FT_FDB;
|
||||
break;
|
||||
case MLX5_FLOW_NAMESPACE_KERNEL:
|
||||
case MLX5_FLOW_NAMESPACE_BYPASS:
|
||||
max_actions = MLX5_CAP_FLOWTABLE_NIC_RX(dev, max_modify_header_actions);
|
||||
table_type = FS_FT_NIC_RX;
|
||||
break;
|
||||
case MLX5_FLOW_NAMESPACE_EGRESS:
|
||||
max_actions = MLX5_CAP_FLOWTABLE_NIC_TX(dev, max_modify_header_actions);
|
||||
table_type = FS_FT_NIC_TX;
|
||||
break;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
@ -702,6 +725,7 @@ int mlx5_modify_header_alloc(struct mlx5_core_dev *dev,
|
||||
kfree(in);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(mlx5_modify_header_alloc);
|
||||
|
||||
void mlx5_modify_header_dealloc(struct mlx5_core_dev *dev, u32 modify_header_id)
|
||||
{
|
||||
@ -716,6 +740,7 @@ void mlx5_modify_header_dealloc(struct mlx5_core_dev *dev, u32 modify_header_id)
|
||||
|
||||
mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
|
||||
}
|
||||
EXPORT_SYMBOL(mlx5_modify_header_dealloc);
|
||||
|
||||
static const struct mlx5_flow_cmds mlx5_flow_cmds = {
|
||||
.create_flow_table = mlx5_cmd_create_flow_table,
|
||||
@ -760,8 +785,8 @@ const struct mlx5_flow_cmds *mlx5_fs_cmd_get_default(enum fs_flow_table_type typ
|
||||
case FS_FT_FDB:
|
||||
case FS_FT_SNIFFER_RX:
|
||||
case FS_FT_SNIFFER_TX:
|
||||
return mlx5_fs_cmd_get_fw_cmds();
|
||||
case FS_FT_NIC_TX:
|
||||
return mlx5_fs_cmd_get_fw_cmds();
|
||||
default:
|
||||
return mlx5_fs_cmd_get_stub_cmds();
|
||||
}
|
||||
|
@ -76,6 +76,14 @@
|
||||
FS_CAP(flow_table_properties_nic_receive.identified_miss_table_mode), \
|
||||
FS_CAP(flow_table_properties_nic_receive.flow_table_modify))
|
||||
|
||||
#define FS_CHAINING_CAPS_EGRESS \
|
||||
FS_REQUIRED_CAPS( \
|
||||
FS_CAP(flow_table_properties_nic_transmit.flow_modify_en), \
|
||||
FS_CAP(flow_table_properties_nic_transmit.modify_root), \
|
||||
FS_CAP(flow_table_properties_nic_transmit \
|
||||
.identified_miss_table_mode), \
|
||||
FS_CAP(flow_table_properties_nic_transmit.flow_table_modify))
|
||||
|
||||
#define LEFTOVERS_NUM_LEVELS 1
|
||||
#define LEFTOVERS_NUM_PRIOS 1
|
||||
|
||||
@ -151,6 +159,17 @@ static struct init_tree_node {
|
||||
}
|
||||
};
|
||||
|
||||
static struct init_tree_node egress_root_fs = {
|
||||
.type = FS_TYPE_NAMESPACE,
|
||||
.ar_size = 1,
|
||||
.children = (struct init_tree_node[]) {
|
||||
ADD_PRIO(0, MLX5_BY_PASS_NUM_PRIOS, 0,
|
||||
FS_CHAINING_CAPS_EGRESS,
|
||||
ADD_NS(ADD_MULTIPLE_PRIO(MLX5_BY_PASS_NUM_PRIOS,
|
||||
BY_PASS_PRIO_NUM_LEVELS))),
|
||||
}
|
||||
};
|
||||
|
||||
enum fs_i_lock_class {
|
||||
FS_LOCK_GRANDPARENT,
|
||||
FS_LOCK_PARENT,
|
||||
@ -1388,7 +1407,7 @@ static bool check_conflicting_actions(u32 action1, u32 action2)
|
||||
return false;
|
||||
|
||||
if (xored_actions & (MLX5_FLOW_CONTEXT_ACTION_DROP |
|
||||
MLX5_FLOW_CONTEXT_ACTION_ENCAP |
|
||||
MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT |
|
||||
MLX5_FLOW_CONTEXT_ACTION_DECAP |
|
||||
MLX5_FLOW_CONTEXT_ACTION_MOD_HDR |
|
||||
MLX5_FLOW_CONTEXT_ACTION_VLAN_POP |
|
||||
@ -1980,7 +1999,7 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev,
|
||||
{
|
||||
struct mlx5_flow_steering *steering = dev->priv.steering;
|
||||
struct mlx5_flow_root_namespace *root_ns;
|
||||
int prio;
|
||||
int prio = 0;
|
||||
struct fs_prio *fs_prio;
|
||||
struct mlx5_flow_namespace *ns;
|
||||
|
||||
@ -1988,40 +2007,29 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev,
|
||||
return NULL;
|
||||
|
||||
switch (type) {
|
||||
case MLX5_FLOW_NAMESPACE_BYPASS:
|
||||
case MLX5_FLOW_NAMESPACE_LAG:
|
||||
case MLX5_FLOW_NAMESPACE_OFFLOADS:
|
||||
case MLX5_FLOW_NAMESPACE_ETHTOOL:
|
||||
case MLX5_FLOW_NAMESPACE_KERNEL:
|
||||
case MLX5_FLOW_NAMESPACE_LEFTOVERS:
|
||||
case MLX5_FLOW_NAMESPACE_ANCHOR:
|
||||
prio = type;
|
||||
break;
|
||||
case MLX5_FLOW_NAMESPACE_FDB:
|
||||
if (steering->fdb_root_ns)
|
||||
return &steering->fdb_root_ns->ns;
|
||||
else
|
||||
return NULL;
|
||||
return NULL;
|
||||
case MLX5_FLOW_NAMESPACE_SNIFFER_RX:
|
||||
if (steering->sniffer_rx_root_ns)
|
||||
return &steering->sniffer_rx_root_ns->ns;
|
||||
else
|
||||
return NULL;
|
||||
return NULL;
|
||||
case MLX5_FLOW_NAMESPACE_SNIFFER_TX:
|
||||
if (steering->sniffer_tx_root_ns)
|
||||
return &steering->sniffer_tx_root_ns->ns;
|
||||
else
|
||||
return NULL;
|
||||
case MLX5_FLOW_NAMESPACE_EGRESS:
|
||||
if (steering->egress_root_ns)
|
||||
return &steering->egress_root_ns->ns;
|
||||
else
|
||||
return NULL;
|
||||
default:
|
||||
return NULL;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (type == MLX5_FLOW_NAMESPACE_EGRESS) {
|
||||
root_ns = steering->egress_root_ns;
|
||||
} else { /* Must be NIC RX */
|
||||
root_ns = steering->root_ns;
|
||||
prio = type;
|
||||
}
|
||||
|
||||
root_ns = steering->root_ns;
|
||||
if (!root_ns)
|
||||
return NULL;
|
||||
|
||||
@ -2537,16 +2545,23 @@ cleanup_root_ns:
|
||||
|
||||
static int init_egress_root_ns(struct mlx5_flow_steering *steering)
|
||||
{
|
||||
struct fs_prio *prio;
|
||||
int err;
|
||||
|
||||
steering->egress_root_ns = create_root_ns(steering,
|
||||
FS_FT_NIC_TX);
|
||||
if (!steering->egress_root_ns)
|
||||
return -ENOMEM;
|
||||
|
||||
/* create 1 prio*/
|
||||
prio = fs_create_prio(&steering->egress_root_ns->ns, 0, 1);
|
||||
return PTR_ERR_OR_ZERO(prio);
|
||||
err = init_root_tree(steering, &egress_root_fs,
|
||||
&steering->egress_root_ns->ns.node);
|
||||
if (err)
|
||||
goto cleanup;
|
||||
set_prio_attrs(steering->egress_root_ns);
|
||||
return 0;
|
||||
cleanup:
|
||||
cleanup_root_ns(steering->egress_root_ns);
|
||||
steering->egress_root_ns = NULL;
|
||||
return err;
|
||||
}
|
||||
|
||||
int mlx5_init_fs(struct mlx5_core_dev *dev)
|
||||
@ -2614,7 +2629,7 @@ int mlx5_init_fs(struct mlx5_core_dev *dev)
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (MLX5_IPSEC_DEV(dev)) {
|
||||
if (MLX5_IPSEC_DEV(dev) || MLX5_CAP_FLOWTABLE_NIC_TX(dev, ft_support)) {
|
||||
err = init_egress_root_ns(steering);
|
||||
if (err)
|
||||
goto err;
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include <linux/if_link.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/mlx5/cq.h>
|
||||
#include <linux/mlx5/fs.h>
|
||||
|
||||
#define DRIVER_NAME "mlx5_core"
|
||||
#define DRIVER_VERSION "5.0-0"
|
||||
@ -171,17 +172,6 @@ struct mlx5_core_dev *mlx5_get_next_phys_dev(struct mlx5_core_dev *dev);
|
||||
void mlx5_dev_list_lock(void);
|
||||
void mlx5_dev_list_unlock(void);
|
||||
int mlx5_dev_list_trylock(void);
|
||||
int mlx5_encap_alloc(struct mlx5_core_dev *dev,
|
||||
int header_type,
|
||||
size_t size,
|
||||
void *encap_header,
|
||||
u32 *encap_id);
|
||||
void mlx5_encap_dealloc(struct mlx5_core_dev *dev, u32 encap_id);
|
||||
|
||||
int mlx5_modify_header_alloc(struct mlx5_core_dev *dev,
|
||||
u8 namespace, u8 num_actions,
|
||||
void *modify_actions, u32 *modify_header_id);
|
||||
void mlx5_modify_header_dealloc(struct mlx5_core_dev *dev, u32 modify_header_id);
|
||||
|
||||
bool mlx5_lag_intf_add(struct mlx5_interface *intf, struct mlx5_priv *priv);
|
||||
|
||||
|
@ -211,6 +211,7 @@ int mlx5_core_create_dct(struct mlx5_core_dev *dev,
|
||||
}
|
||||
|
||||
qp->qpn = MLX5_GET(create_dct_out, out, dctn);
|
||||
qp->uid = MLX5_GET(create_dct_in, in, uid);
|
||||
err = create_resource_common(dev, qp, MLX5_RES_DCT);
|
||||
if (err)
|
||||
goto err_cmd;
|
||||
@ -219,6 +220,7 @@ int mlx5_core_create_dct(struct mlx5_core_dev *dev,
|
||||
err_cmd:
|
||||
MLX5_SET(destroy_dct_in, din, opcode, MLX5_CMD_OP_DESTROY_DCT);
|
||||
MLX5_SET(destroy_dct_in, din, dctn, qp->qpn);
|
||||
MLX5_SET(destroy_dct_in, din, uid, qp->uid);
|
||||
mlx5_cmd_exec(dev, (void *)&in, sizeof(din),
|
||||
(void *)&out, sizeof(dout));
|
||||
return err;
|
||||
@ -240,6 +242,7 @@ int mlx5_core_create_qp(struct mlx5_core_dev *dev,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
qp->uid = MLX5_GET(create_qp_in, in, uid);
|
||||
qp->qpn = MLX5_GET(create_qp_out, out, qpn);
|
||||
mlx5_core_dbg(dev, "qpn = 0x%x\n", qp->qpn);
|
||||
|
||||
@ -261,6 +264,7 @@ err_cmd:
|
||||
memset(dout, 0, sizeof(dout));
|
||||
MLX5_SET(destroy_qp_in, din, opcode, MLX5_CMD_OP_DESTROY_QP);
|
||||
MLX5_SET(destroy_qp_in, din, qpn, qp->qpn);
|
||||
MLX5_SET(destroy_qp_in, din, uid, qp->uid);
|
||||
mlx5_cmd_exec(dev, din, sizeof(din), dout, sizeof(dout));
|
||||
return err;
|
||||
}
|
||||
@ -275,6 +279,7 @@ static int mlx5_core_drain_dct(struct mlx5_core_dev *dev,
|
||||
|
||||
MLX5_SET(drain_dct_in, in, opcode, MLX5_CMD_OP_DRAIN_DCT);
|
||||
MLX5_SET(drain_dct_in, in, dctn, qp->qpn);
|
||||
MLX5_SET(drain_dct_in, in, uid, qp->uid);
|
||||
return mlx5_cmd_exec(dev, (void *)&in, sizeof(in),
|
||||
(void *)&out, sizeof(out));
|
||||
}
|
||||
@ -301,6 +306,7 @@ destroy:
|
||||
destroy_resource_common(dev, &dct->mqp);
|
||||
MLX5_SET(destroy_dct_in, in, opcode, MLX5_CMD_OP_DESTROY_DCT);
|
||||
MLX5_SET(destroy_dct_in, in, dctn, qp->qpn);
|
||||
MLX5_SET(destroy_dct_in, in, uid, qp->uid);
|
||||
err = mlx5_cmd_exec(dev, (void *)&in, sizeof(in),
|
||||
(void *)&out, sizeof(out));
|
||||
return err;
|
||||
@ -320,6 +326,7 @@ int mlx5_core_destroy_qp(struct mlx5_core_dev *dev,
|
||||
|
||||
MLX5_SET(destroy_qp_in, in, opcode, MLX5_CMD_OP_DESTROY_QP);
|
||||
MLX5_SET(destroy_qp_in, in, qpn, qp->qpn);
|
||||
MLX5_SET(destroy_qp_in, in, uid, qp->uid);
|
||||
err = mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
|
||||
if (err)
|
||||
return err;
|
||||
@ -373,7 +380,7 @@ static void mbox_free(struct mbox_info *mbox)
|
||||
|
||||
static int modify_qp_mbox_alloc(struct mlx5_core_dev *dev, u16 opcode, int qpn,
|
||||
u32 opt_param_mask, void *qpc,
|
||||
struct mbox_info *mbox)
|
||||
struct mbox_info *mbox, u16 uid)
|
||||
{
|
||||
mbox->out = NULL;
|
||||
mbox->in = NULL;
|
||||
@ -381,26 +388,32 @@ static int modify_qp_mbox_alloc(struct mlx5_core_dev *dev, u16 opcode, int qpn,
|
||||
#define MBOX_ALLOC(mbox, typ) \
|
||||
mbox_alloc(mbox, MLX5_ST_SZ_BYTES(typ##_in), MLX5_ST_SZ_BYTES(typ##_out))
|
||||
|
||||
#define MOD_QP_IN_SET(typ, in, _opcode, _qpn) \
|
||||
MLX5_SET(typ##_in, in, opcode, _opcode); \
|
||||
MLX5_SET(typ##_in, in, qpn, _qpn)
|
||||
#define MOD_QP_IN_SET(typ, in, _opcode, _qpn, _uid) \
|
||||
do { \
|
||||
MLX5_SET(typ##_in, in, opcode, _opcode); \
|
||||
MLX5_SET(typ##_in, in, qpn, _qpn); \
|
||||
MLX5_SET(typ##_in, in, uid, _uid); \
|
||||
} while (0)
|
||||
|
||||
#define MOD_QP_IN_SET_QPC(typ, in, _opcode, _qpn, _opt_p, _qpc) \
|
||||
MOD_QP_IN_SET(typ, in, _opcode, _qpn); \
|
||||
MLX5_SET(typ##_in, in, opt_param_mask, _opt_p); \
|
||||
memcpy(MLX5_ADDR_OF(typ##_in, in, qpc), _qpc, MLX5_ST_SZ_BYTES(qpc))
|
||||
#define MOD_QP_IN_SET_QPC(typ, in, _opcode, _qpn, _opt_p, _qpc, _uid) \
|
||||
do { \
|
||||
MOD_QP_IN_SET(typ, in, _opcode, _qpn, _uid); \
|
||||
MLX5_SET(typ##_in, in, opt_param_mask, _opt_p); \
|
||||
memcpy(MLX5_ADDR_OF(typ##_in, in, qpc), _qpc, \
|
||||
MLX5_ST_SZ_BYTES(qpc)); \
|
||||
} while (0)
|
||||
|
||||
switch (opcode) {
|
||||
/* 2RST & 2ERR */
|
||||
case MLX5_CMD_OP_2RST_QP:
|
||||
if (MBOX_ALLOC(mbox, qp_2rst))
|
||||
return -ENOMEM;
|
||||
MOD_QP_IN_SET(qp_2rst, mbox->in, opcode, qpn);
|
||||
MOD_QP_IN_SET(qp_2rst, mbox->in, opcode, qpn, uid);
|
||||
break;
|
||||
case MLX5_CMD_OP_2ERR_QP:
|
||||
if (MBOX_ALLOC(mbox, qp_2err))
|
||||
return -ENOMEM;
|
||||
MOD_QP_IN_SET(qp_2err, mbox->in, opcode, qpn);
|
||||
MOD_QP_IN_SET(qp_2err, mbox->in, opcode, qpn, uid);
|
||||
break;
|
||||
|
||||
/* MODIFY with QPC */
|
||||
@ -408,37 +421,37 @@ static int modify_qp_mbox_alloc(struct mlx5_core_dev *dev, u16 opcode, int qpn,
|
||||
if (MBOX_ALLOC(mbox, rst2init_qp))
|
||||
return -ENOMEM;
|
||||
MOD_QP_IN_SET_QPC(rst2init_qp, mbox->in, opcode, qpn,
|
||||
opt_param_mask, qpc);
|
||||
opt_param_mask, qpc, uid);
|
||||
break;
|
||||
case MLX5_CMD_OP_INIT2RTR_QP:
|
||||
if (MBOX_ALLOC(mbox, init2rtr_qp))
|
||||
return -ENOMEM;
|
||||
MOD_QP_IN_SET_QPC(init2rtr_qp, mbox->in, opcode, qpn,
|
||||
opt_param_mask, qpc);
|
||||
opt_param_mask, qpc, uid);
|
||||
break;
|
||||
case MLX5_CMD_OP_RTR2RTS_QP:
|
||||
if (MBOX_ALLOC(mbox, rtr2rts_qp))
|
||||
return -ENOMEM;
|
||||
MOD_QP_IN_SET_QPC(rtr2rts_qp, mbox->in, opcode, qpn,
|
||||
opt_param_mask, qpc);
|
||||
opt_param_mask, qpc, uid);
|
||||
break;
|
||||
case MLX5_CMD_OP_RTS2RTS_QP:
|
||||
if (MBOX_ALLOC(mbox, rts2rts_qp))
|
||||
return -ENOMEM;
|
||||
MOD_QP_IN_SET_QPC(rts2rts_qp, mbox->in, opcode, qpn,
|
||||
opt_param_mask, qpc);
|
||||
opt_param_mask, qpc, uid);
|
||||
break;
|
||||
case MLX5_CMD_OP_SQERR2RTS_QP:
|
||||
if (MBOX_ALLOC(mbox, sqerr2rts_qp))
|
||||
return -ENOMEM;
|
||||
MOD_QP_IN_SET_QPC(sqerr2rts_qp, mbox->in, opcode, qpn,
|
||||
opt_param_mask, qpc);
|
||||
opt_param_mask, qpc, uid);
|
||||
break;
|
||||
case MLX5_CMD_OP_INIT2INIT_QP:
|
||||
if (MBOX_ALLOC(mbox, init2init_qp))
|
||||
return -ENOMEM;
|
||||
MOD_QP_IN_SET_QPC(init2init_qp, mbox->in, opcode, qpn,
|
||||
opt_param_mask, qpc);
|
||||
opt_param_mask, qpc, uid);
|
||||
break;
|
||||
default:
|
||||
mlx5_core_err(dev, "Unknown transition for modify QP: OP(0x%x) QPN(0x%x)\n",
|
||||
@ -456,7 +469,7 @@ int mlx5_core_qp_modify(struct mlx5_core_dev *dev, u16 opcode,
|
||||
int err;
|
||||
|
||||
err = modify_qp_mbox_alloc(dev, opcode, qp->qpn,
|
||||
opt_param_mask, qpc, &mbox);
|
||||
opt_param_mask, qpc, &mbox, qp->uid);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@ -531,6 +544,17 @@ int mlx5_core_xrcd_dealloc(struct mlx5_core_dev *dev, u32 xrcdn)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mlx5_core_xrcd_dealloc);
|
||||
|
||||
static void destroy_rq_tracked(struct mlx5_core_dev *dev, u32 rqn, u16 uid)
|
||||
{
|
||||
u32 in[MLX5_ST_SZ_DW(destroy_rq_in)] = {};
|
||||
u32 out[MLX5_ST_SZ_DW(destroy_rq_out)] = {};
|
||||
|
||||
MLX5_SET(destroy_rq_in, in, opcode, MLX5_CMD_OP_DESTROY_RQ);
|
||||
MLX5_SET(destroy_rq_in, in, rqn, rqn);
|
||||
MLX5_SET(destroy_rq_in, in, uid, uid);
|
||||
mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
|
||||
}
|
||||
|
||||
int mlx5_core_create_rq_tracked(struct mlx5_core_dev *dev, u32 *in, int inlen,
|
||||
struct mlx5_core_qp *rq)
|
||||
{
|
||||
@ -541,6 +565,7 @@ int mlx5_core_create_rq_tracked(struct mlx5_core_dev *dev, u32 *in, int inlen,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
rq->uid = MLX5_GET(create_rq_in, in, uid);
|
||||
rq->qpn = rqn;
|
||||
err = create_resource_common(dev, rq, MLX5_RES_RQ);
|
||||
if (err)
|
||||
@ -549,7 +574,7 @@ int mlx5_core_create_rq_tracked(struct mlx5_core_dev *dev, u32 *in, int inlen,
|
||||
return 0;
|
||||
|
||||
err_destroy_rq:
|
||||
mlx5_core_destroy_rq(dev, rq->qpn);
|
||||
destroy_rq_tracked(dev, rq->qpn, rq->uid);
|
||||
|
||||
return err;
|
||||
}
|
||||
@ -559,10 +584,21 @@ void mlx5_core_destroy_rq_tracked(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_qp *rq)
|
||||
{
|
||||
destroy_resource_common(dev, rq);
|
||||
mlx5_core_destroy_rq(dev, rq->qpn);
|
||||
destroy_rq_tracked(dev, rq->qpn, rq->uid);
|
||||
}
|
||||
EXPORT_SYMBOL(mlx5_core_destroy_rq_tracked);
|
||||
|
||||
static void destroy_sq_tracked(struct mlx5_core_dev *dev, u32 sqn, u16 uid)
|
||||
{
|
||||
u32 in[MLX5_ST_SZ_DW(destroy_sq_in)] = {};
|
||||
u32 out[MLX5_ST_SZ_DW(destroy_sq_out)] = {};
|
||||
|
||||
MLX5_SET(destroy_sq_in, in, opcode, MLX5_CMD_OP_DESTROY_SQ);
|
||||
MLX5_SET(destroy_sq_in, in, sqn, sqn);
|
||||
MLX5_SET(destroy_sq_in, in, uid, uid);
|
||||
mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
|
||||
}
|
||||
|
||||
int mlx5_core_create_sq_tracked(struct mlx5_core_dev *dev, u32 *in, int inlen,
|
||||
struct mlx5_core_qp *sq)
|
||||
{
|
||||
@ -573,6 +609,7 @@ int mlx5_core_create_sq_tracked(struct mlx5_core_dev *dev, u32 *in, int inlen,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
sq->uid = MLX5_GET(create_sq_in, in, uid);
|
||||
sq->qpn = sqn;
|
||||
err = create_resource_common(dev, sq, MLX5_RES_SQ);
|
||||
if (err)
|
||||
@ -581,7 +618,7 @@ int mlx5_core_create_sq_tracked(struct mlx5_core_dev *dev, u32 *in, int inlen,
|
||||
return 0;
|
||||
|
||||
err_destroy_sq:
|
||||
mlx5_core_destroy_sq(dev, sq->qpn);
|
||||
destroy_sq_tracked(dev, sq->qpn, sq->uid);
|
||||
|
||||
return err;
|
||||
}
|
||||
@ -591,7 +628,7 @@ void mlx5_core_destroy_sq_tracked(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_qp *sq)
|
||||
{
|
||||
destroy_resource_common(dev, sq);
|
||||
mlx5_core_destroy_sq(dev, sq->qpn);
|
||||
destroy_sq_tracked(dev, sq->qpn, sq->uid);
|
||||
}
|
||||
EXPORT_SYMBOL(mlx5_core_destroy_sq_tracked);
|
||||
|
||||
|
@ -166,6 +166,7 @@ static int create_srq_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
|
||||
if (!create_in)
|
||||
return -ENOMEM;
|
||||
|
||||
MLX5_SET(create_srq_in, create_in, uid, in->uid);
|
||||
srqc = MLX5_ADDR_OF(create_srq_in, create_in, srq_context_entry);
|
||||
pas = MLX5_ADDR_OF(create_srq_in, create_in, pas);
|
||||
|
||||
@ -178,8 +179,10 @@ static int create_srq_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
|
||||
err = mlx5_cmd_exec(dev, create_in, inlen, create_out,
|
||||
sizeof(create_out));
|
||||
kvfree(create_in);
|
||||
if (!err)
|
||||
if (!err) {
|
||||
srq->srqn = MLX5_GET(create_srq_out, create_out, srqn);
|
||||
srq->uid = in->uid;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
@ -193,6 +196,7 @@ static int destroy_srq_cmd(struct mlx5_core_dev *dev,
|
||||
MLX5_SET(destroy_srq_in, srq_in, opcode,
|
||||
MLX5_CMD_OP_DESTROY_SRQ);
|
||||
MLX5_SET(destroy_srq_in, srq_in, srqn, srq->srqn);
|
||||
MLX5_SET(destroy_srq_in, srq_in, uid, srq->uid);
|
||||
|
||||
return mlx5_cmd_exec(dev, srq_in, sizeof(srq_in),
|
||||
srq_out, sizeof(srq_out));
|
||||
@ -208,6 +212,7 @@ static int arm_srq_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
|
||||
MLX5_SET(arm_rq_in, srq_in, op_mod, MLX5_ARM_RQ_IN_OP_MOD_SRQ);
|
||||
MLX5_SET(arm_rq_in, srq_in, srq_number, srq->srqn);
|
||||
MLX5_SET(arm_rq_in, srq_in, lwm, lwm);
|
||||
MLX5_SET(arm_rq_in, srq_in, uid, srq->uid);
|
||||
|
||||
return mlx5_cmd_exec(dev, srq_in, sizeof(srq_in),
|
||||
srq_out, sizeof(srq_out));
|
||||
@ -260,6 +265,7 @@ static int create_xrc_srq_cmd(struct mlx5_core_dev *dev,
|
||||
if (!create_in)
|
||||
return -ENOMEM;
|
||||
|
||||
MLX5_SET(create_xrc_srq_in, create_in, uid, in->uid);
|
||||
xrc_srqc = MLX5_ADDR_OF(create_xrc_srq_in, create_in,
|
||||
xrc_srq_context_entry);
|
||||
pas = MLX5_ADDR_OF(create_xrc_srq_in, create_in, pas);
|
||||
@ -277,6 +283,7 @@ static int create_xrc_srq_cmd(struct mlx5_core_dev *dev,
|
||||
goto out;
|
||||
|
||||
srq->srqn = MLX5_GET(create_xrc_srq_out, create_out, xrc_srqn);
|
||||
srq->uid = in->uid;
|
||||
out:
|
||||
kvfree(create_in);
|
||||
return err;
|
||||
@ -291,6 +298,7 @@ static int destroy_xrc_srq_cmd(struct mlx5_core_dev *dev,
|
||||
MLX5_SET(destroy_xrc_srq_in, xrcsrq_in, opcode,
|
||||
MLX5_CMD_OP_DESTROY_XRC_SRQ);
|
||||
MLX5_SET(destroy_xrc_srq_in, xrcsrq_in, xrc_srqn, srq->srqn);
|
||||
MLX5_SET(destroy_xrc_srq_in, xrcsrq_in, uid, srq->uid);
|
||||
|
||||
return mlx5_cmd_exec(dev, xrcsrq_in, sizeof(xrcsrq_in),
|
||||
xrcsrq_out, sizeof(xrcsrq_out));
|
||||
@ -306,6 +314,7 @@ static int arm_xrc_srq_cmd(struct mlx5_core_dev *dev,
|
||||
MLX5_SET(arm_xrc_srq_in, xrcsrq_in, op_mod, MLX5_ARM_XRC_SRQ_IN_OP_MOD_XRC_SRQ);
|
||||
MLX5_SET(arm_xrc_srq_in, xrcsrq_in, xrc_srqn, srq->srqn);
|
||||
MLX5_SET(arm_xrc_srq_in, xrcsrq_in, lwm, lwm);
|
||||
MLX5_SET(arm_xrc_srq_in, xrcsrq_in, uid, srq->uid);
|
||||
|
||||
return mlx5_cmd_exec(dev, xrcsrq_in, sizeof(xrcsrq_in),
|
||||
xrcsrq_out, sizeof(xrcsrq_out));
|
||||
@ -365,10 +374,13 @@ static int create_rmp_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
|
||||
wq = MLX5_ADDR_OF(rmpc, rmpc, wq);
|
||||
|
||||
MLX5_SET(rmpc, rmpc, state, MLX5_RMPC_STATE_RDY);
|
||||
MLX5_SET(create_rmp_in, create_in, uid, in->uid);
|
||||
set_wq(wq, in);
|
||||
memcpy(MLX5_ADDR_OF(rmpc, rmpc, wq.pas), in->pas, pas_size);
|
||||
|
||||
err = mlx5_core_create_rmp(dev, create_in, inlen, &srq->srqn);
|
||||
if (!err)
|
||||
srq->uid = in->uid;
|
||||
|
||||
kvfree(create_in);
|
||||
return err;
|
||||
@ -377,7 +389,13 @@ static int create_rmp_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
|
||||
static int destroy_rmp_cmd(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_srq *srq)
|
||||
{
|
||||
return mlx5_core_destroy_rmp(dev, srq->srqn);
|
||||
u32 in[MLX5_ST_SZ_DW(destroy_rmp_in)] = {};
|
||||
u32 out[MLX5_ST_SZ_DW(destroy_rmp_out)] = {};
|
||||
|
||||
MLX5_SET(destroy_rmp_in, in, opcode, MLX5_CMD_OP_DESTROY_RMP);
|
||||
MLX5_SET(destroy_rmp_in, in, rmpn, srq->srqn);
|
||||
MLX5_SET(destroy_rmp_in, in, uid, srq->uid);
|
||||
return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
|
||||
}
|
||||
|
||||
static int arm_rmp_cmd(struct mlx5_core_dev *dev,
|
||||
@ -400,6 +418,7 @@ static int arm_rmp_cmd(struct mlx5_core_dev *dev,
|
||||
|
||||
MLX5_SET(modify_rmp_in, in, rmp_state, MLX5_RMPC_STATE_RDY);
|
||||
MLX5_SET(modify_rmp_in, in, rmpn, srq->srqn);
|
||||
MLX5_SET(modify_rmp_in, in, uid, srq->uid);
|
||||
MLX5_SET(wq, wq, lwm, lwm);
|
||||
MLX5_SET(rmp_bitmask, bitmask, lwm, 1);
|
||||
MLX5_SET(rmpc, rmpc, state, MLX5_RMPC_STATE_RDY);
|
||||
@ -469,11 +488,14 @@ static int create_xrq_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq,
|
||||
MLX5_SET(xrqc, xrqc, user_index, in->user_index);
|
||||
MLX5_SET(xrqc, xrqc, cqn, in->cqn);
|
||||
MLX5_SET(create_xrq_in, create_in, opcode, MLX5_CMD_OP_CREATE_XRQ);
|
||||
MLX5_SET(create_xrq_in, create_in, uid, in->uid);
|
||||
err = mlx5_cmd_exec(dev, create_in, inlen, create_out,
|
||||
sizeof(create_out));
|
||||
kvfree(create_in);
|
||||
if (!err)
|
||||
if (!err) {
|
||||
srq->srqn = MLX5_GET(create_xrq_out, create_out, xrqn);
|
||||
srq->uid = in->uid;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
@ -485,6 +507,7 @@ static int destroy_xrq_cmd(struct mlx5_core_dev *dev, struct mlx5_core_srq *srq)
|
||||
|
||||
MLX5_SET(destroy_xrq_in, in, opcode, MLX5_CMD_OP_DESTROY_XRQ);
|
||||
MLX5_SET(destroy_xrq_in, in, xrqn, srq->srqn);
|
||||
MLX5_SET(destroy_xrq_in, in, uid, srq->uid);
|
||||
|
||||
return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
|
||||
}
|
||||
@ -500,6 +523,7 @@ static int arm_xrq_cmd(struct mlx5_core_dev *dev,
|
||||
MLX5_SET(arm_rq_in, in, op_mod, MLX5_ARM_RQ_IN_OP_MOD_XRQ);
|
||||
MLX5_SET(arm_rq_in, in, srq_number, srq->srqn);
|
||||
MLX5_SET(arm_rq_in, in, lwm, lwm);
|
||||
MLX5_SET(arm_rq_in, in, uid, srq->uid);
|
||||
|
||||
return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
|
||||
}
|
||||
|
@ -61,6 +61,7 @@ struct mlx5_core_cq {
|
||||
int reset_notify_added;
|
||||
struct list_head reset_notify;
|
||||
struct mlx5_eq *eq;
|
||||
u16 uid;
|
||||
};
|
||||
|
||||
|
||||
|
@ -1124,6 +1124,12 @@ enum mlx5_qcam_feature_groups {
|
||||
#define MLX5_CAP_FLOWTABLE_NIC_RX_MAX(mdev, cap) \
|
||||
MLX5_CAP_FLOWTABLE_MAX(mdev, flow_table_properties_nic_receive.cap)
|
||||
|
||||
#define MLX5_CAP_FLOWTABLE_NIC_TX(mdev, cap) \
|
||||
MLX5_CAP_FLOWTABLE(mdev, flow_table_properties_nic_transmit.cap)
|
||||
|
||||
#define MLX5_CAP_FLOWTABLE_NIC_TX_MAX(mdev, cap) \
|
||||
MLX5_CAP_FLOWTABLE_MAX(mdev, flow_table_properties_nic_transmit.cap)
|
||||
|
||||
#define MLX5_CAP_FLOWTABLE_SNIFFER_RX(mdev, cap) \
|
||||
MLX5_CAP_FLOWTABLE(mdev, flow_table_properties_nic_receive_sniffer.cap)
|
||||
|
||||
|
@ -163,10 +163,7 @@ enum mlx5_dcbx_oper_mode {
|
||||
};
|
||||
|
||||
enum mlx5_dct_atomic_mode {
|
||||
MLX5_ATOMIC_MODE_DCT_OFF = 20,
|
||||
MLX5_ATOMIC_MODE_DCT_NONE = 0 << MLX5_ATOMIC_MODE_DCT_OFF,
|
||||
MLX5_ATOMIC_MODE_DCT_IB_COMP = 1 << MLX5_ATOMIC_MODE_DCT_OFF,
|
||||
MLX5_ATOMIC_MODE_DCT_CX = 2 << MLX5_ATOMIC_MODE_DCT_OFF,
|
||||
MLX5_ATOMIC_MODE_DCT_CX = 2,
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -477,6 +474,7 @@ struct mlx5_core_srq {
|
||||
|
||||
atomic_t refcount;
|
||||
struct completion free;
|
||||
u16 uid;
|
||||
};
|
||||
|
||||
struct mlx5_eq_table {
|
||||
|
@ -45,7 +45,8 @@ enum {
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_FLOW_TABLE_TUNNEL_EN = BIT(0),
|
||||
MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT = BIT(0),
|
||||
MLX5_FLOW_TABLE_TUNNEL_EN_DECAP = BIT(1),
|
||||
};
|
||||
|
||||
#define LEFTOVERS_RULE_NUM 2
|
||||
@ -159,7 +160,7 @@ struct mlx5_flow_act {
|
||||
u32 action;
|
||||
bool has_flow_tag;
|
||||
u32 flow_tag;
|
||||
u32 encap_id;
|
||||
u32 reformat_id;
|
||||
u32 modify_id;
|
||||
uintptr_t esp_id;
|
||||
struct mlx5_fs_vlan vlan[MLX5_FS_VLAN_DEPTH];
|
||||
@ -196,4 +197,19 @@ int mlx5_fc_query(struct mlx5_core_dev *dev, struct mlx5_fc *counter,
|
||||
int mlx5_fs_add_rx_underlay_qpn(struct mlx5_core_dev *dev, u32 underlay_qpn);
|
||||
int mlx5_fs_remove_rx_underlay_qpn(struct mlx5_core_dev *dev, u32 underlay_qpn);
|
||||
|
||||
int mlx5_modify_header_alloc(struct mlx5_core_dev *dev,
|
||||
u8 namespace, u8 num_actions,
|
||||
void *modify_actions, u32 *modify_header_id);
|
||||
void mlx5_modify_header_dealloc(struct mlx5_core_dev *dev,
|
||||
u32 modify_header_id);
|
||||
|
||||
int mlx5_packet_reformat_alloc(struct mlx5_core_dev *dev,
|
||||
int reformat_type,
|
||||
size_t size,
|
||||
void *reformat_data,
|
||||
enum mlx5_flow_namespace_type namespace,
|
||||
u32 *packet_reformat_id);
|
||||
void mlx5_packet_reformat_dealloc(struct mlx5_core_dev *dev,
|
||||
u32 packet_reformat_id);
|
||||
|
||||
#endif
|
||||
|
@ -243,8 +243,8 @@ enum {
|
||||
MLX5_CMD_OP_DEALLOC_FLOW_COUNTER = 0x93a,
|
||||
MLX5_CMD_OP_QUERY_FLOW_COUNTER = 0x93b,
|
||||
MLX5_CMD_OP_MODIFY_FLOW_TABLE = 0x93c,
|
||||
MLX5_CMD_OP_ALLOC_ENCAP_HEADER = 0x93d,
|
||||
MLX5_CMD_OP_DEALLOC_ENCAP_HEADER = 0x93e,
|
||||
MLX5_CMD_OP_ALLOC_PACKET_REFORMAT_CONTEXT = 0x93d,
|
||||
MLX5_CMD_OP_DEALLOC_PACKET_REFORMAT_CONTEXT = 0x93e,
|
||||
MLX5_CMD_OP_ALLOC_MODIFY_HEADER_CONTEXT = 0x940,
|
||||
MLX5_CMD_OP_DEALLOC_MODIFY_HEADER_CONTEXT = 0x941,
|
||||
MLX5_CMD_OP_QUERY_MODIFY_HEADER_CONTEXT = 0x942,
|
||||
@ -336,7 +336,7 @@ struct mlx5_ifc_flow_table_prop_layout_bits {
|
||||
u8 modify_root[0x1];
|
||||
u8 identified_miss_table_mode[0x1];
|
||||
u8 flow_table_modify[0x1];
|
||||
u8 encap[0x1];
|
||||
u8 reformat[0x1];
|
||||
u8 decap[0x1];
|
||||
u8 reserved_at_9[0x1];
|
||||
u8 pop_vlan[0x1];
|
||||
@ -344,8 +344,12 @@ struct mlx5_ifc_flow_table_prop_layout_bits {
|
||||
u8 reserved_at_c[0x1];
|
||||
u8 pop_vlan_2[0x1];
|
||||
u8 push_vlan_2[0x1];
|
||||
u8 reserved_at_f[0x11];
|
||||
|
||||
u8 reformat_and_vlan_action[0x1];
|
||||
u8 reserved_at_10[0x2];
|
||||
u8 reformat_l3_tunnel_to_l2[0x1];
|
||||
u8 reformat_l2_to_l3_tunnel[0x1];
|
||||
u8 reformat_and_modify_action[0x1];
|
||||
u8 reserved_at_14[0xb];
|
||||
u8 reserved_at_20[0x2];
|
||||
u8 log_max_ft_size[0x6];
|
||||
u8 log_max_modify_header_context[0x8];
|
||||
@ -554,7 +558,13 @@ struct mlx5_ifc_flow_table_nic_cap_bits {
|
||||
u8 nic_rx_multi_path_tirs[0x1];
|
||||
u8 nic_rx_multi_path_tirs_fts[0x1];
|
||||
u8 allow_sniffer_and_nic_rx_shared_tir[0x1];
|
||||
u8 reserved_at_3[0x1fd];
|
||||
u8 reserved_at_3[0x1d];
|
||||
u8 encap_general_header[0x1];
|
||||
u8 reserved_at_21[0xa];
|
||||
u8 log_max_packet_reformat_context[0x5];
|
||||
u8 reserved_at_30[0x6];
|
||||
u8 max_encap_header_size[0xa];
|
||||
u8 reserved_at_40[0x1c0];
|
||||
|
||||
struct mlx5_ifc_flow_table_prop_layout_bits flow_table_properties_nic_receive;
|
||||
|
||||
@ -599,7 +609,7 @@ struct mlx5_ifc_e_switch_cap_bits {
|
||||
u8 vxlan_encap_decap[0x1];
|
||||
u8 nvgre_encap_decap[0x1];
|
||||
u8 reserved_at_22[0x9];
|
||||
u8 log_max_encap_headers[0x5];
|
||||
u8 log_max_packet_reformat_context[0x5];
|
||||
u8 reserved_2b[0x6];
|
||||
u8 max_encap_header_size[0xa];
|
||||
|
||||
@ -996,7 +1006,8 @@ struct mlx5_ifc_cmd_hca_cap_bits {
|
||||
u8 umr_modify_atomic_disabled[0x1];
|
||||
u8 umr_indirect_mkey_disabled[0x1];
|
||||
u8 umr_fence[0x2];
|
||||
u8 reserved_at_20c[0x3];
|
||||
u8 dc_req_scat_data_cqe[0x1];
|
||||
u8 reserved_at_20d[0x2];
|
||||
u8 drain_sigerr[0x1];
|
||||
u8 cmdif_checksum[0x2];
|
||||
u8 sigerr_cqe[0x1];
|
||||
@ -1281,7 +1292,9 @@ struct mlx5_ifc_wq_bits {
|
||||
u8 reserved_at_118[0x3];
|
||||
u8 log_wq_sz[0x5];
|
||||
|
||||
u8 reserved_at_120[0x3];
|
||||
u8 dbr_umem_valid[0x1];
|
||||
u8 wq_umem_valid[0x1];
|
||||
u8 reserved_at_122[0x1];
|
||||
u8 log_hairpin_num_packets[0x5];
|
||||
u8 reserved_at_128[0x3];
|
||||
u8 log_hairpin_data_sz[0x5];
|
||||
@ -2355,7 +2368,10 @@ struct mlx5_ifc_qpc_bits {
|
||||
|
||||
u8 dc_access_key[0x40];
|
||||
|
||||
u8 reserved_at_680[0xc0];
|
||||
u8 reserved_at_680[0x3];
|
||||
u8 dbr_umem_valid[0x1];
|
||||
|
||||
u8 reserved_at_684[0xbc];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_roce_addr_layout_bits {
|
||||
@ -2395,7 +2411,7 @@ enum {
|
||||
MLX5_FLOW_CONTEXT_ACTION_DROP = 0x2,
|
||||
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST = 0x4,
|
||||
MLX5_FLOW_CONTEXT_ACTION_COUNT = 0x8,
|
||||
MLX5_FLOW_CONTEXT_ACTION_ENCAP = 0x10,
|
||||
MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT = 0x10,
|
||||
MLX5_FLOW_CONTEXT_ACTION_DECAP = 0x20,
|
||||
MLX5_FLOW_CONTEXT_ACTION_MOD_HDR = 0x40,
|
||||
MLX5_FLOW_CONTEXT_ACTION_VLAN_POP = 0x80,
|
||||
@ -2428,7 +2444,7 @@ struct mlx5_ifc_flow_context_bits {
|
||||
u8 reserved_at_a0[0x8];
|
||||
u8 flow_counter_list_size[0x18];
|
||||
|
||||
u8 encap_id[0x20];
|
||||
u8 packet_reformat_id[0x20];
|
||||
|
||||
u8 modify_header_id[0x20];
|
||||
|
||||
@ -2455,7 +2471,7 @@ struct mlx5_ifc_xrc_srqc_bits {
|
||||
|
||||
u8 wq_signature[0x1];
|
||||
u8 cont_srq[0x1];
|
||||
u8 reserved_at_22[0x1];
|
||||
u8 dbr_umem_valid[0x1];
|
||||
u8 rlky[0x1];
|
||||
u8 basic_cyclic_rcv_wqe[0x1];
|
||||
u8 log_rq_stride[0x3];
|
||||
@ -2550,8 +2566,8 @@ enum {
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST_ = 0x1,
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_MULTICAST_ = 0x2,
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_UNICAST = 0x1,
|
||||
MLX5_TIRC_SELF_LB_BLOCK_BLOCK_MULTICAST = 0x2,
|
||||
};
|
||||
|
||||
struct mlx5_ifc_tirc_bits {
|
||||
@ -3119,7 +3135,9 @@ enum {
|
||||
|
||||
struct mlx5_ifc_cqc_bits {
|
||||
u8 status[0x4];
|
||||
u8 reserved_at_4[0x4];
|
||||
u8 reserved_at_4[0x2];
|
||||
u8 dbr_umem_valid[0x1];
|
||||
u8 reserved_at_7[0x1];
|
||||
u8 cqe_sz[0x3];
|
||||
u8 cc[0x1];
|
||||
u8 reserved_at_c[0x1];
|
||||
@ -3386,7 +3404,7 @@ struct mlx5_ifc_sqerr2rts_qp_out_bits {
|
||||
|
||||
struct mlx5_ifc_sqerr2rts_qp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -3416,7 +3434,7 @@ struct mlx5_ifc_sqd2rts_qp_out_bits {
|
||||
|
||||
struct mlx5_ifc_sqd2rts_qp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -3621,7 +3639,7 @@ struct mlx5_ifc_rts2rts_qp_out_bits {
|
||||
|
||||
struct mlx5_ifc_rts2rts_qp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -3651,7 +3669,7 @@ struct mlx5_ifc_rtr2rts_qp_out_bits {
|
||||
|
||||
struct mlx5_ifc_rtr2rts_qp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -3681,7 +3699,7 @@ struct mlx5_ifc_rst2init_qp_out_bits {
|
||||
|
||||
struct mlx5_ifc_rst2init_qp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -4804,19 +4822,19 @@ struct mlx5_ifc_query_eq_in_bits {
|
||||
u8 reserved_at_60[0x20];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_encap_header_in_bits {
|
||||
struct mlx5_ifc_packet_reformat_context_in_bits {
|
||||
u8 reserved_at_0[0x5];
|
||||
u8 header_type[0x3];
|
||||
u8 reformat_type[0x3];
|
||||
u8 reserved_at_8[0xe];
|
||||
u8 encap_header_size[0xa];
|
||||
u8 reformat_data_size[0xa];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 encap_header[2][0x8];
|
||||
u8 reformat_data[2][0x8];
|
||||
|
||||
u8 more_encap_header[0][0x8];
|
||||
u8 more_reformat_data[0][0x8];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_query_encap_header_out_bits {
|
||||
struct mlx5_ifc_query_packet_reformat_context_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
@ -4824,33 +4842,41 @@ struct mlx5_ifc_query_encap_header_out_bits {
|
||||
|
||||
u8 reserved_at_40[0xa0];
|
||||
|
||||
struct mlx5_ifc_encap_header_in_bits encap_header[0];
|
||||
struct mlx5_ifc_packet_reformat_context_in_bits packet_reformat_context[0];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_query_encap_header_in_bits {
|
||||
struct mlx5_ifc_query_packet_reformat_context_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
u8 encap_id[0x20];
|
||||
u8 packet_reformat_id[0x20];
|
||||
|
||||
u8 reserved_at_60[0xa0];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_alloc_encap_header_out_bits {
|
||||
struct mlx5_ifc_alloc_packet_reformat_context_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
u8 syndrome[0x20];
|
||||
|
||||
u8 encap_id[0x20];
|
||||
u8 packet_reformat_id[0x20];
|
||||
|
||||
u8 reserved_at_60[0x20];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_alloc_encap_header_in_bits {
|
||||
enum {
|
||||
MLX5_REFORMAT_TYPE_L2_TO_VXLAN = 0x0,
|
||||
MLX5_REFORMAT_TYPE_L2_TO_NVGRE = 0x1,
|
||||
MLX5_REFORMAT_TYPE_L2_TO_L2_TUNNEL = 0x2,
|
||||
MLX5_REFORMAT_TYPE_L3_TUNNEL_TO_L2 = 0x3,
|
||||
MLX5_REFORMAT_TYPE_L2_TO_L3_TUNNEL = 0x4,
|
||||
};
|
||||
|
||||
struct mlx5_ifc_alloc_packet_reformat_context_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
@ -4859,10 +4885,10 @@ struct mlx5_ifc_alloc_encap_header_in_bits {
|
||||
|
||||
u8 reserved_at_40[0xa0];
|
||||
|
||||
struct mlx5_ifc_encap_header_in_bits encap_header;
|
||||
struct mlx5_ifc_packet_reformat_context_in_bits packet_reformat_context;
|
||||
};
|
||||
|
||||
struct mlx5_ifc_dealloc_encap_header_out_bits {
|
||||
struct mlx5_ifc_dealloc_packet_reformat_context_out_bits {
|
||||
u8 status[0x8];
|
||||
u8 reserved_at_8[0x18];
|
||||
|
||||
@ -4871,14 +4897,14 @@ struct mlx5_ifc_dealloc_encap_header_out_bits {
|
||||
u8 reserved_at_40[0x40];
|
||||
};
|
||||
|
||||
struct mlx5_ifc_dealloc_encap_header_in_bits {
|
||||
struct mlx5_ifc_dealloc_packet_reformat_context_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
|
||||
u8 reserved_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
||||
u8 encap_id[0x20];
|
||||
u8 packet_reformat_id[0x20];
|
||||
|
||||
u8 reserved_60[0x20];
|
||||
};
|
||||
@ -5176,7 +5202,7 @@ struct mlx5_ifc_qp_2rst_out_bits {
|
||||
|
||||
struct mlx5_ifc_qp_2rst_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5198,7 +5224,7 @@ struct mlx5_ifc_qp_2err_out_bits {
|
||||
|
||||
struct mlx5_ifc_qp_2err_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5298,7 +5324,7 @@ struct mlx5_ifc_modify_tis_bitmask_bits {
|
||||
|
||||
struct mlx5_ifc_modify_tis_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5337,7 +5363,7 @@ struct mlx5_ifc_modify_tir_out_bits {
|
||||
|
||||
struct mlx5_ifc_modify_tir_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5365,7 +5391,7 @@ struct mlx5_ifc_modify_sq_out_bits {
|
||||
|
||||
struct mlx5_ifc_modify_sq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5438,7 +5464,7 @@ struct mlx5_ifc_rqt_bitmask_bits {
|
||||
|
||||
struct mlx5_ifc_modify_rqt_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5472,7 +5498,7 @@ enum {
|
||||
|
||||
struct mlx5_ifc_modify_rq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5508,7 +5534,7 @@ struct mlx5_ifc_rmp_bitmask_bits {
|
||||
|
||||
struct mlx5_ifc_modify_rmp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5613,7 +5639,7 @@ enum {
|
||||
|
||||
struct mlx5_ifc_modify_cq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5625,7 +5651,10 @@ struct mlx5_ifc_modify_cq_in_bits {
|
||||
|
||||
struct mlx5_ifc_cqc_bits cq_context;
|
||||
|
||||
u8 reserved_at_280[0x600];
|
||||
u8 reserved_at_280[0x40];
|
||||
|
||||
u8 cq_umem_valid[0x1];
|
||||
u8 reserved_at_2c1[0x5bf];
|
||||
|
||||
u8 pas[0][0x40];
|
||||
};
|
||||
@ -5773,7 +5802,7 @@ struct mlx5_ifc_init2rtr_qp_out_bits {
|
||||
|
||||
struct mlx5_ifc_init2rtr_qp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5803,7 +5832,7 @@ struct mlx5_ifc_init2init_qp_out_bits {
|
||||
|
||||
struct mlx5_ifc_init2init_qp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5902,7 +5931,7 @@ struct mlx5_ifc_drain_dct_out_bits {
|
||||
|
||||
struct mlx5_ifc_drain_dct_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5946,7 +5975,7 @@ struct mlx5_ifc_detach_from_mcg_out_bits {
|
||||
|
||||
struct mlx5_ifc_detach_from_mcg_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5970,7 +5999,7 @@ struct mlx5_ifc_destroy_xrq_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_xrq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -5992,7 +6021,7 @@ struct mlx5_ifc_destroy_xrc_srq_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_xrc_srq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6014,7 +6043,7 @@ struct mlx5_ifc_destroy_tis_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_tis_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6036,7 +6065,7 @@ struct mlx5_ifc_destroy_tir_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_tir_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6058,7 +6087,7 @@ struct mlx5_ifc_destroy_srq_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_srq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6080,7 +6109,7 @@ struct mlx5_ifc_destroy_sq_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_sq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6126,7 +6155,7 @@ struct mlx5_ifc_destroy_rqt_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_rqt_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6148,7 +6177,7 @@ struct mlx5_ifc_destroy_rq_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_rq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6192,7 +6221,7 @@ struct mlx5_ifc_destroy_rmp_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_rmp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6214,7 +6243,7 @@ struct mlx5_ifc_destroy_qp_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_qp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6366,7 +6395,7 @@ struct mlx5_ifc_destroy_dct_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_dct_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6388,7 +6417,7 @@ struct mlx5_ifc_destroy_cq_out_bits {
|
||||
|
||||
struct mlx5_ifc_destroy_cq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6491,7 +6520,7 @@ struct mlx5_ifc_dealloc_xrcd_out_bits {
|
||||
|
||||
struct mlx5_ifc_dealloc_xrcd_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6579,7 +6608,7 @@ struct mlx5_ifc_dealloc_pd_out_bits {
|
||||
|
||||
struct mlx5_ifc_dealloc_pd_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6625,7 +6654,7 @@ struct mlx5_ifc_create_xrq_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_xrq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6649,7 +6678,7 @@ struct mlx5_ifc_create_xrc_srq_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_xrc_srq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6658,7 +6687,9 @@ struct mlx5_ifc_create_xrc_srq_in_bits {
|
||||
|
||||
struct mlx5_ifc_xrc_srqc_bits xrc_srq_context_entry;
|
||||
|
||||
u8 reserved_at_280[0x600];
|
||||
u8 reserved_at_280[0x40];
|
||||
u8 xrc_srq_umem_valid[0x1];
|
||||
u8 reserved_at_2c1[0x5bf];
|
||||
|
||||
u8 pas[0][0x40];
|
||||
};
|
||||
@ -6677,7 +6708,7 @@ struct mlx5_ifc_create_tis_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_tis_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6701,7 +6732,7 @@ struct mlx5_ifc_create_tir_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_tir_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6725,7 +6756,7 @@ struct mlx5_ifc_create_srq_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_srq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6753,7 +6784,7 @@ struct mlx5_ifc_create_sq_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_sq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6807,7 +6838,7 @@ struct mlx5_ifc_create_rqt_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_rqt_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6831,7 +6862,7 @@ struct mlx5_ifc_create_rq_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_rq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6855,7 +6886,7 @@ struct mlx5_ifc_create_rmp_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_rmp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6879,7 +6910,7 @@ struct mlx5_ifc_create_qp_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_qp_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -6892,7 +6923,10 @@ struct mlx5_ifc_create_qp_in_bits {
|
||||
|
||||
struct mlx5_ifc_qpc_bits qpc;
|
||||
|
||||
u8 reserved_at_800[0x80];
|
||||
u8 reserved_at_800[0x60];
|
||||
|
||||
u8 wq_umem_valid[0x1];
|
||||
u8 reserved_at_861[0x1f];
|
||||
|
||||
u8 pas[0][0x40];
|
||||
};
|
||||
@ -6954,7 +6988,8 @@ struct mlx5_ifc_create_mkey_in_bits {
|
||||
u8 reserved_at_40[0x20];
|
||||
|
||||
u8 pg_access[0x1];
|
||||
u8 reserved_at_61[0x1f];
|
||||
u8 mkey_umem_valid[0x1];
|
||||
u8 reserved_at_62[0x1e];
|
||||
|
||||
struct mlx5_ifc_mkc_bits memory_key_mkey_entry;
|
||||
|
||||
@ -6980,7 +7015,7 @@ struct mlx5_ifc_create_flow_table_out_bits {
|
||||
};
|
||||
|
||||
struct mlx5_ifc_flow_table_context_bits {
|
||||
u8 encap_en[0x1];
|
||||
u8 reformat_en[0x1];
|
||||
u8 decap_en[0x1];
|
||||
u8 reserved_at_2[0x2];
|
||||
u8 table_miss_action[0x4];
|
||||
@ -7122,7 +7157,7 @@ struct mlx5_ifc_create_dct_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_dct_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -7148,7 +7183,7 @@ struct mlx5_ifc_create_cq_out_bits {
|
||||
|
||||
struct mlx5_ifc_create_cq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -7157,7 +7192,10 @@ struct mlx5_ifc_create_cq_in_bits {
|
||||
|
||||
struct mlx5_ifc_cqc_bits cq_context;
|
||||
|
||||
u8 reserved_at_280[0x600];
|
||||
u8 reserved_at_280[0x60];
|
||||
|
||||
u8 cq_umem_valid[0x1];
|
||||
u8 reserved_at_2e1[0x59f];
|
||||
|
||||
u8 pas[0][0x40];
|
||||
};
|
||||
@ -7205,7 +7243,7 @@ struct mlx5_ifc_attach_to_mcg_out_bits {
|
||||
|
||||
struct mlx5_ifc_attach_to_mcg_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -7256,7 +7294,7 @@ enum {
|
||||
|
||||
struct mlx5_ifc_arm_xrc_srq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -7284,7 +7322,7 @@ enum {
|
||||
|
||||
struct mlx5_ifc_arm_rq_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -7332,7 +7370,7 @@ struct mlx5_ifc_alloc_xrcd_out_bits {
|
||||
|
||||
struct mlx5_ifc_alloc_xrcd_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
@ -7420,7 +7458,7 @@ struct mlx5_ifc_alloc_pd_out_bits {
|
||||
|
||||
struct mlx5_ifc_alloc_pd_in_bits {
|
||||
u8 opcode[0x10];
|
||||
u8 reserved_at_10[0x10];
|
||||
u8 uid[0x10];
|
||||
|
||||
u8 reserved_at_20[0x10];
|
||||
u8 op_mod[0x10];
|
||||
|
@ -471,6 +471,7 @@ struct mlx5_core_qp {
|
||||
int qpn;
|
||||
struct mlx5_rsc_debug *dbg;
|
||||
int pid;
|
||||
u16 uid;
|
||||
};
|
||||
|
||||
struct mlx5_core_dct {
|
||||
|
@ -61,6 +61,7 @@ struct mlx5_srq_attr {
|
||||
u32 tm_next_tag;
|
||||
u32 tm_hw_phase_cnt;
|
||||
u32 tm_sw_phase_cnt;
|
||||
u16 uid;
|
||||
};
|
||||
|
||||
struct mlx5_core_dev;
|
||||
|
Loading…
Reference in New Issue
Block a user