X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fnet%2Fbnx2x%2Fbnx2x_ethdev.c;h=adc3690fc12e527cf9600fa23375faf5c8c70e40;hb=d789705873d47d70a3ba0a6a4dfb83fb629d3464;hp=7864b5b80a27ba15ec65bcb622865e2434473938;hpb=b0b9fdad24e7808f2fbad01b35f0852109639293;p=dpdk.git diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c index 7864b5b80a..adc3690fc1 100644 --- a/drivers/net/bnx2x/bnx2x_ethdev.c +++ b/drivers/net/bnx2x/bnx2x_ethdev.c @@ -240,6 +240,9 @@ bnx2x_dev_start(struct rte_eth_dev *dev) PMD_DRV_LOG(ERR, sc, "rte_intr_enable failed"); } + /* Configure the previously stored Multicast address list */ + if (IS_VF(sc)) + bnx2x_vfpf_set_mcast(sc, sc->mc_addrs, sc->mc_addrs_num); bnx2x_dev_rxtx_init(dev); bnx2x_print_device_info(sc); @@ -265,7 +268,12 @@ bnx2x_dev_stop(struct rte_eth_dev *dev) /* stop the periodic callout */ bnx2x_periodic_stop(dev); } - + /* Remove the configured Multicast list + * Sending NULL for the list of address and the + * Number is set to 0 denoting DEL_CMD + */ + if (IS_VF(sc)) + bnx2x_vfpf_set_mcast(sc, NULL, 0); ret = bnx2x_nic_unload(sc, UNLOAD_NORMAL, FALSE); if (ret) { PMD_DRV_LOG(DEBUG, sc, "bnx2x_nic_unload failed (%d)", ret); @@ -348,6 +356,30 @@ bnx2x_dev_allmulticast_disable(struct rte_eth_dev *dev) return 0; } +static int +bnx2x_dev_set_mc_addr_list(struct rte_eth_dev *dev, + struct rte_ether_addr *mc_addrs, uint32_t mc_addrs_num) +{ + struct bnx2x_softc *sc = dev->data->dev_private; + int err; + PMD_INIT_FUNC_TRACE(sc); + /* flush previous addresses */ + err = bnx2x_vfpf_set_mcast(sc, NULL, 0); + if (err) + return err; + sc->mc_addrs_num = 0; + + /* Add new ones */ + err = bnx2x_vfpf_set_mcast(sc, mc_addrs, mc_addrs_num); + if (err) + return err; + + sc->mc_addrs_num = mc_addrs_num; + memcpy(sc->mc_addrs, mc_addrs, mc_addrs_num * sizeof(*mc_addrs)); + + return 0; +} + static int bnx2x_dev_link_update(struct rte_eth_dev *dev, __rte_unused int wait_to_complete) { @@ -501,6 +533,7 @@ bnx2x_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->rx_desc_lim.nb_max = MAX_RX_AVAIL; dev_info->rx_desc_lim.nb_min = MIN_RX_SIZE_NONTPA; + dev_info->rx_desc_lim.nb_mtu_seg_max = 1; dev_info->tx_desc_lim.nb_max = MAX_TX_AVAIL; return 0; @@ -562,6 +595,7 @@ static const struct eth_dev_ops bnx2xvf_eth_dev_ops = { .promiscuous_disable = bnx2x_promisc_disable, .allmulticast_enable = bnx2x_dev_allmulticast_enable, .allmulticast_disable = bnx2x_dev_allmulticast_disable, + .set_mc_addr_list = bnx2x_dev_set_mc_addr_list, .link_update = bnx2xvf_dev_link_update, .stats_get = bnx2x_dev_stats_get, .xstats_get = bnx2x_dev_xstats_get,