X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx5%2Fmlx5_ethdev.c;h=708e3a33696a46dff41acbb19e6a4e10f43bea39;hb=151cbe3aabf9e1a71e02827e5e1ff0814275019a;hp=130980d4d649bae9e0bee2fa3f26b7496b046cb8;hpb=f926cce3fa94298cdbed88c6bb37adfd0ca87a54;p=dpdk.git diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index 130980d4d6..708e3a3369 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -23,6 +23,7 @@ #include #include "mlx5_rxtx.h" +#include "mlx5_rx.h" #include "mlx5_autoconf.h" /** @@ -42,7 +43,10 @@ mlx5_ifindex(const struct rte_eth_dev *dev) MLX5_ASSERT(priv); MLX5_ASSERT(priv->if_index); - ifindex = priv->bond_ifindex > 0 ? priv->bond_ifindex : priv->if_index; + if (priv->master && priv->sh->bond.ifindex > 0) + ifindex = priv->sh->bond.ifindex; + else + ifindex = priv->if_index; if (!ifindex) rte_errno = ENXIO; return ifindex; @@ -360,12 +364,15 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info) * * @param info * Port switch info. + * @param hpf_type + * Use this type if port is HPF. * * @return * Encoded representor ID. */ uint16_t -mlx5_representor_id_encode(const struct mlx5_switch_info *info) +mlx5_representor_id_encode(const struct mlx5_switch_info *info, + enum rte_eth_representor_type hpf_type) { enum rte_eth_representor_type type = RTE_ETH_REPRESENTOR_VF; uint16_t repr = info->port_name; @@ -374,8 +381,10 @@ mlx5_representor_id_encode(const struct mlx5_switch_info *info) return UINT16_MAX; if (info->name_type == MLX5_PHYS_PORT_NAME_TYPE_PFSF) type = RTE_ETH_REPRESENTOR_SF; - if (info->name_type == MLX5_PHYS_PORT_NAME_TYPE_PFHPF) + if (info->name_type == MLX5_PHYS_PORT_NAME_TYPE_PFHPF) { + type = hpf_type; repr = UINT16_MAX; + } return MLX5_REPRESENTOR_ID(info->pf_num, type, repr); } @@ -400,7 +409,7 @@ mlx5_representor_info_get(struct rte_eth_dev *dev, struct rte_eth_representor_info *info) { struct mlx5_priv *priv = dev->data->dev_private; - int n_type = 3; /* Number of representor types, VF, HPF and SF. */ + int n_type = 4; /* Representor types, VF, HPF@VF, SF and HPF@SF. */ int n_pf = 2; /* Number of PFs. */ int i = 0, pf; @@ -421,7 +430,7 @@ mlx5_representor_info_get(struct rte_eth_dev *dev, snprintf(info->ranges[i].name, sizeof(info->ranges[i].name), "pf%dvf", pf); i++; - /* HPF range. */ + /* HPF range of VF type. */ info->ranges[i].type = RTE_ETH_REPRESENTOR_VF; info->ranges[i].controller = 0; info->ranges[i].pf = pf; @@ -445,6 +454,18 @@ mlx5_representor_info_get(struct rte_eth_dev *dev, snprintf(info->ranges[i].name, sizeof(info->ranges[i].name), "pf%dsf", pf); i++; + /* HPF range of SF type. */ + info->ranges[i].type = RTE_ETH_REPRESENTOR_SF; + info->ranges[i].controller = 0; + info->ranges[i].pf = pf; + info->ranges[i].vf = UINT16_MAX; + info->ranges[i].id_base = + MLX5_REPRESENTOR_ID(pf, info->ranges[i].type, -1); + info->ranges[i].id_end = + MLX5_REPRESENTOR_ID(pf, info->ranges[i].type, -1); + snprintf(info->ranges[i].name, + sizeof(info->ranges[i].name), "pf%dsf", pf); + i++; } out: return n_type * n_pf;