Skip to content

Commit

Permalink
mlx5: DR, Rename builders HW specific names
Browse files Browse the repository at this point in the history
We will support multiple STE versions, the naming that was used was not
correct for newer versions, removed the HW specific details and renamed
with a more general name.

Signed-off-by: Alex Vesker <valex@mellanox.com>
Reviewed-by: Erez Shitrit <erezsh@mellanox.com>
Signed-off-by: Yishai Hadas <yishaih@mellanox.com>
  • Loading branch information
alexvesker authored and yishaih committed Jul 15, 2020
1 parent b62d868 commit 7f3f23f
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 76 deletions.
65 changes: 37 additions & 28 deletions providers/mlx5/dr_matcher.c
Expand Up @@ -120,7 +120,7 @@ static bool dr_mask_is_ttl_set(struct dr_match_spec *spec)
(_misc2)._inner_outer##_first_mpls_s_bos || \
(_misc2)._inner_outer##_first_mpls_ttl)

static bool dr_mask_is_gre_set(struct dr_match_misc *misc)
static bool dr_mask_is_tnl_gre_set(struct dr_match_misc *misc)
{
return (misc->gre_key_h || misc->gre_key_l ||
misc->gre_protocol || misc->gre_c_present ||
Expand All @@ -133,7 +133,7 @@ static bool dr_mask_is_gre_set(struct dr_match_misc *misc)
(_misc2).outer_first_mpls_over_##gre_udp##_s_bos || \
(_misc2).outer_first_mpls_over_##gre_udp##_ttl)

#define DR_MASK_IS_FLEX_PARSER_0_SET(_misc2) ( \
#define DR_MASK_IS_TNL_MPLS_SET(_misc2) ( \
DR_MASK_IS_OUTER_MPLS_OVER_GRE_UDP_SET(_misc2, gre) || \
DR_MASK_IS_OUTER_MPLS_OVER_GRE_UDP_SET(_misc2, udp))

Expand Down Expand Up @@ -203,12 +203,23 @@ static bool dr_mask_is_flex_parser_tnl_gtpu_set(struct dr_match_param *mask,
dr_matcher_supp_flex_parser_gtpu(&dmn->info.caps);
}

static bool dr_mask_is_flex_parser_icmpv6_set(struct dr_match_misc3 *misc3)
static bool dr_mask_is_icmpv6_set(struct dr_match_misc3 *misc3)
{
return (misc3->icmpv6_type || misc3->icmpv6_code ||
misc3->icmpv6_header_data);
}

static bool dr_mask_is_flex_parser_icmp_set(struct dr_match_param *mask,
struct mlx5dv_dr_domain *dmn)
{
if (DR_MASK_IS_ICMPV4_SET(&mask->misc3))
return dr_matcher_supp_flex_parser_icmp_v4(&dmn->info.caps);
else if (dr_mask_is_icmpv6_set(&mask->misc3))
return dr_matcher_supp_flex_parser_icmp_v6(&dmn->info.caps);

return false;
}

static bool dr_mask_is_wqe_metadata_set(struct dr_match_misc2 *misc2)
{
return misc2->metadata_reg_a;
Expand Down Expand Up @@ -302,7 +313,7 @@ static int dr_matcher_set_ste_builders(struct mlx5dv_dr_matcher *matcher,

if (dr_mask_is_smac_set(&mask.outer) &&
dr_mask_is_dmac_set(&mask.outer))
dr_ste_build_eth_l2_src_des(&sb[idx++], &mask, inner, rx);
dr_ste_build_eth_l2_src_dst(&sb[idx++], &mask, inner, rx);

if (dr_mask_is_smac_set(&mask.outer))
dr_ste_build_eth_l2_src(&sb[idx++], &mask, inner, rx);
Expand All @@ -328,41 +339,38 @@ static int dr_matcher_set_ste_builders(struct mlx5dv_dr_matcher *matcher,
inner, rx);

if (DR_MASK_IS_ETH_L4_SET(mask.outer, mask.misc, outer))
dr_ste_build_ipv6_l3_l4(&sb[idx++], &mask,
inner, rx);
dr_ste_build_eth_ipv6_l3_l4(&sb[idx++], &mask,
inner, rx);
}

if (dr_mask_is_flex_parser_tnl_vxlan_gpe_set(&mask, dmn))
dr_ste_build_flex_parser_tnl_vxlan_gpe(&sb[idx++], &mask,
inner, rx);
dr_ste_build_tnl_vxlan_gpe(&sb[idx++], &mask,
inner, rx);
else if (dr_mask_is_flex_parser_tnl_geneve_set(&mask, dmn))
dr_ste_build_flex_parser_tnl_geneve(&sb[idx++], &mask,
inner, rx);
dr_ste_build_tnl_geneve(&sb[idx++], &mask,
inner, rx);
else if (dr_mask_is_flex_parser_tnl_gtpu_set(&mask, dmn))
dr_ste_build_flex_parser_tnl_gtpu(&sb[idx++], &mask,
inner, rx);
dr_ste_build_tnl_gtpu(&sb[idx++], &mask,
inner, rx);

if (DR_MASK_IS_ETH_L4_MISC_SET(mask.misc3, outer))
dr_ste_build_eth_l4_misc(&sb[idx++], &mask, inner, rx);

if (DR_MASK_IS_FIRST_MPLS_SET(mask.misc2, outer))
dr_ste_build_mpls(&sb[idx++], &mask, inner, rx);

if (DR_MASK_IS_FLEX_PARSER_0_SET(mask.misc2))
dr_ste_build_flex_parser_0(&sb[idx++], &mask, inner, rx);
if (DR_MASK_IS_TNL_MPLS_SET(mask.misc2))
dr_ste_build_tnl_mpls(&sb[idx++], &mask, inner, rx);

if ((DR_MASK_IS_FLEX_PARSER_ICMPV4_SET(&mask.misc3) &&
dr_matcher_supp_flex_parser_icmp_v4(&dmn->info.caps)) ||
(dr_mask_is_flex_parser_icmpv6_set(&mask.misc3) &&
dr_matcher_supp_flex_parser_icmp_v6(&dmn->info.caps))) {
ret = dr_ste_build_flex_parser_1(&sb[idx++],
&mask, &dmn->info.caps,
inner, rx);
if (dr_mask_is_flex_parser_icmp_set(&mask, dmn)) {
ret = dr_ste_build_icmp(&sb[idx++],
&mask, &dmn->info.caps,
inner, rx);
if (ret)
return ret;
}
if (dr_mask_is_gre_set(&mask.misc))
dr_ste_build_gre(&sb[idx++], &mask, inner, rx);
if (dr_mask_is_tnl_gre_set(&mask.misc))
dr_ste_build_tnl_gre(&sb[idx++], &mask, inner, rx);
}

/* Inner */
Expand All @@ -378,7 +386,7 @@ static int dr_matcher_set_ste_builders(struct mlx5dv_dr_matcher *matcher,

if (dr_mask_is_smac_set(&mask.inner) &&
dr_mask_is_dmac_set(&mask.inner))
dr_ste_build_eth_l2_src_des(&sb[idx++], &mask, inner, rx);
dr_ste_build_eth_l2_src_dst(&sb[idx++], &mask, inner, rx);

if (dr_mask_is_smac_set(&mask.inner))
dr_ste_build_eth_l2_src(&sb[idx++], &mask, inner, rx);
Expand All @@ -404,8 +412,8 @@ static int dr_matcher_set_ste_builders(struct mlx5dv_dr_matcher *matcher,
inner, rx);

if (DR_MASK_IS_ETH_L4_SET(mask.inner, mask.misc, inner))
dr_ste_build_ipv6_l3_l4(&sb[idx++], &mask,
inner, rx);
dr_ste_build_eth_ipv6_l3_l4(&sb[idx++], &mask,
inner, rx);
}

if (DR_MASK_IS_ETH_L4_MISC_SET(mask.misc3, inner))
Expand All @@ -414,8 +422,9 @@ static int dr_matcher_set_ste_builders(struct mlx5dv_dr_matcher *matcher,
if (DR_MASK_IS_FIRST_MPLS_SET(mask.misc2, inner))
dr_ste_build_mpls(&sb[idx++], &mask, inner, rx);

if (DR_MASK_IS_FLEX_PARSER_0_SET(mask.misc2))
dr_ste_build_flex_parser_0(&sb[idx++], &mask, inner, rx);
if (DR_MASK_IS_TNL_MPLS_SET(mask.misc2))
dr_ste_build_tnl_mpls(&sb[idx++], &mask, inner, rx);

}

/* Empty matcher, takes all */
Expand Down
48 changes: 24 additions & 24 deletions providers/mlx5/dr_ste.c
Expand Up @@ -1121,7 +1121,7 @@ static int dr_ste_build_eth_l2_src_des_tag(struct dr_match_param *value,
return 0;
}

void dr_ste_build_eth_l2_src_des(struct dr_ste_build *sb,
void dr_ste_build_eth_l2_src_dst(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
{
Expand Down Expand Up @@ -1626,9 +1626,9 @@ static int dr_ste_build_ipv6_l3_l4_tag(struct dr_match_param *value,
return 0;
}

void dr_ste_build_ipv6_l3_l4(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
void dr_ste_build_eth_ipv6_l3_l4(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
{
dr_ste_build_ipv6_l3_l4_bit_mask(mask, inner, sb->bit_mask);

Expand Down Expand Up @@ -1724,8 +1724,8 @@ static int dr_ste_build_gre_tag(struct dr_match_param *value,
return 0;
}

void dr_ste_build_gre(struct dr_ste_build *sb, struct dr_match_param *mask,
bool inner, bool rx)
void dr_ste_build_tnl_gre(struct dr_ste_build *sb, struct dr_match_param *mask,
bool inner, bool rx)
{
dr_ste_build_gre_bit_mask(mask, inner, sb->bit_mask);

Expand Down Expand Up @@ -1802,9 +1802,9 @@ static int dr_ste_build_flex_parser_0_tag(struct dr_match_param *value,
return 0;
}

void dr_ste_build_flex_parser_0(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
void dr_ste_build_tnl_mpls(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
{
dr_ste_build_flex_parser_0_bit_mask(mask, inner, sb->bit_mask);

Expand All @@ -1824,7 +1824,7 @@ static int dr_ste_build_flex_parser_1_bit_mask(struct dr_match_param *mask,
uint8_t *bit_mask)
{
struct dr_match_misc3 *misc_3_mask = &mask->misc3;
bool is_ipv4_mask = DR_MASK_IS_FLEX_PARSER_ICMPV4_SET(misc_3_mask);
bool is_ipv4_mask = DR_MASK_IS_ICMPV4_SET(misc_3_mask);
uint32_t icmp_header_data_mask;
uint32_t icmp_type_mask;
uint32_t icmp_code_mask;
Expand Down Expand Up @@ -1895,7 +1895,7 @@ static int dr_ste_build_flex_parser_1_tag(struct dr_match_param *value,
uint8_t *tag)
{
struct dr_match_misc3 *misc_3 = &value->misc3;
bool is_ipv4 = DR_MASK_IS_FLEX_PARSER_ICMPV4_SET(misc_3);
bool is_ipv4 = DR_MASK_IS_ICMPV4_SET(misc_3);
uint32_t icmp_header_data;
uint32_t icmp_type;
uint32_t icmp_code;
Expand Down Expand Up @@ -1962,10 +1962,10 @@ static int dr_ste_build_flex_parser_1_tag(struct dr_match_param *value,
return 0;
}

int dr_ste_build_flex_parser_1(struct dr_ste_build *sb,
struct dr_match_param *mask,
struct dr_devx_caps *caps,
bool inner, bool rx)
int dr_ste_build_icmp(struct dr_ste_build *sb,
struct dr_match_param *mask,
struct dr_devx_caps *caps,
bool inner, bool rx)
{
int ret;

Expand Down Expand Up @@ -2103,9 +2103,9 @@ dr_ste_build_flex_parser_tnl_vxlan_gpe_tag(struct dr_match_param *value,
return 0;
}

void dr_ste_build_flex_parser_tnl_vxlan_gpe(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
void dr_ste_build_tnl_vxlan_gpe(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
{
dr_ste_build_flex_parser_tnl_vxlan_gpe_bit_mask(mask, inner,
sb->bit_mask);
Expand Down Expand Up @@ -2155,9 +2155,9 @@ dr_ste_build_flex_parser_tnl_geneve_tag(struct dr_match_param *value,
return 0;
}

void dr_ste_build_flex_parser_tnl_geneve(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
void dr_ste_build_tnl_geneve(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
{
dr_ste_build_flex_parser_tnl_geneve_bit_mask(mask, sb->bit_mask);
sb->rx = rx;
Expand Down Expand Up @@ -2204,9 +2204,9 @@ dr_ste_build_flex_parser_tnl_gtpu_tag(struct dr_match_param *value,
return 0;
}

void dr_ste_build_flex_parser_tnl_gtpu(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
void dr_ste_build_tnl_gtpu(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx)
{
dr_ste_build_flex_parser_tnl_gtpu_bit_mask(mask, sb->bit_mask);
sb->rx = rx;
Expand Down
48 changes: 24 additions & 24 deletions providers/mlx5/mlx5dv_dr.h
Expand Up @@ -363,7 +363,7 @@ int dr_ste_build_ste_arr(struct mlx5dv_dr_matcher *matcher,
struct dr_matcher_rx_tx *nic_matcher,
struct dr_match_param *value,
uint8_t *ste_arr);
void dr_ste_build_eth_l2_src_des(struct dr_ste_build *sb,
void dr_ste_build_eth_l2_src_dst(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_eth_l3_ipv4_5_tuple(struct dr_ste_build *sb,
Expand All @@ -387,34 +387,34 @@ void dr_ste_build_eth_l2_dst(struct dr_ste_build *sb,
void dr_ste_build_eth_l2_tnl(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_ipv6_l3_l4(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_eth_ipv6_l3_l4(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_eth_l4_misc(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_gre(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_tnl_gre(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_mpls(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_flex_parser_0(struct dr_ste_build *sb,
void dr_ste_build_tnl_mpls(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
int dr_ste_build_icmp(struct dr_ste_build *sb,
struct dr_match_param *mask,
struct dr_devx_caps *caps,
bool inner, bool rx);
void dr_ste_build_tnl_vxlan_gpe(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
int dr_ste_build_flex_parser_1(struct dr_ste_build *sb,
struct dr_match_param *mask,
struct dr_devx_caps *caps,
bool inner, bool rx);
void dr_ste_build_flex_parser_tnl_vxlan_gpe(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_flex_parser_tnl_geneve(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_flex_parser_tnl_gtpu(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_tnl_geneve(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_tnl_gtpu(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
void dr_ste_build_general_purpose(struct dr_ste_build *sb,
struct dr_match_param *mask,
bool inner, bool rx);
Expand Down Expand Up @@ -561,9 +561,9 @@ struct dr_match_param {
struct dr_match_misc3 misc3;
};

#define DR_MASK_IS_FLEX_PARSER_ICMPV4_SET(_misc3) ((_misc3)->icmpv4_type || \
(_misc3)->icmpv4_code || \
(_misc3)->icmpv4_header_data)
#define DR_MASK_IS_ICMPV4_SET(_misc3) ((_misc3)->icmpv4_type || \
(_misc3)->icmpv4_code || \
(_misc3)->icmpv4_header_data)

struct dr_esw_caps {
uint64_t drop_icm_address_rx;
Expand Down

0 comments on commit 7f3f23f

Please sign in to comment.