X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fcxgbe%2Fcxgbevf_main.c;h=d3345508f4914484e93d2d9bc17ff1c3ba546459;hb=7f9f46d6cef5b03681a3935b9a18378e08ca6f62;hp=f4d0f4de59c67f1f446c9cea85d1ba11576509ee;hpb=5e59e39a1db781e2f04f76f5b651b040e171e5ba;p=dpdk.git diff --git a/drivers/net/cxgbe/cxgbevf_main.c b/drivers/net/cxgbe/cxgbevf_main.c index f4d0f4de59..d3345508f4 100644 --- a/drivers/net/cxgbe/cxgbevf_main.c +++ b/drivers/net/cxgbe/cxgbevf_main.c @@ -7,10 +7,11 @@ #include #include -#include "common.h" -#include "t4_regs.h" -#include "t4_msg.h" +#include "base/common.h" +#include "base/t4_regs.h" +#include "base/t4_msg.h" #include "cxgbe.h" +#include "mps_tcam.h" /* * Figure out how many Ports and Queue Sets we can support. This depends on @@ -20,7 +21,7 @@ static void size_nports_qsets(struct adapter *adapter) { struct vf_resources *vfres = &adapter->params.vfres; - unsigned int ethqsets, pmask_nports; + unsigned int pmask_nports; /* * The number of "ports" which we support is equal to the number of @@ -49,23 +50,7 @@ static void size_nports_qsets(struct adapter *adapter) adapter->params.nports = pmask_nports; } - /* - * We need to reserve an Ingress Queue for the Asynchronous Firmware - * Event Queue. - * - * For each Queue Set, we'll need the ability to allocate two Egress - * Contexts -- one for the Ingress Queue Free List and one for the TX - * Ethernet Queue. - */ - ethqsets = vfres->niqflint - 1; - if (vfres->nethctrl != ethqsets) - ethqsets = min(vfres->nethctrl, ethqsets); - if (vfres->neq < ethqsets * 2) - ethqsets = vfres->neq / 2; - if (ethqsets > MAX_ETH_QSETS) - ethqsets = MAX_ETH_QSETS; - adapter->sge.max_ethqsets = ethqsets; - + cxgbe_configure_max_ethqsets(adapter); if (adapter->sge.max_ethqsets < adapter->params.nports) { dev_warn(adapter->pdev_dev, "only using %d of %d available" " virtual interfaces (too few Queue Sets)\n", @@ -74,6 +59,11 @@ static void size_nports_qsets(struct adapter *adapter) } } +void cxgbevf_stats_get(struct port_info *pi, struct port_stats *stats) +{ + t4vf_get_port_stats(pi->adapter, pi->pidx, stats); +} + static int adap_init0vf(struct adapter *adapter) { u32 param, val = 0; @@ -114,6 +104,19 @@ static int adap_init0vf(struct adapter *adapter) return err; } + err = t4vf_get_rss_glb_config(adapter); + if (err) { + dev_err(adapter->pdev_dev, "unable to retrieve adapter" + " RSS parameters: err=%d\n", err); + return err; + } + if (adapter->params.rss.mode != + FW_RSS_GLB_CONFIG_CMD_MODE_BASICVIRTUAL) { + dev_err(adapter->pdev_dev, "unable to operate with global RSS" + " mode %d\n", adapter->params.rss.mode); + return -EINVAL; + } + /* If we're running on newer firmware, let it know that we're * prepared to deal with encapsulated CPL messages. Older * firmware won't understand this and we'll just get @@ -242,13 +245,18 @@ allocate_mac: rte_eth_copy_pci_info(pi->eth_dev, adapter->pdev); pi->eth_dev->data->mac_addrs = rte_zmalloc(name, - ETHER_ADDR_LEN, 0); + RTE_ETHER_ADDR_LEN, 0); if (!pi->eth_dev->data->mac_addrs) { dev_err(adapter, "%s: Mem allocation failed for storing mac addr, aborting\n", __func__); err = -ENOMEM; goto out_free; } + + if (i > 0) { + /* First port will be notified by upper layer */ + rte_eth_dev_probing_finish(eth_dev); + } } if (adapter->flags & FW_OK) { @@ -260,10 +268,18 @@ allocate_mac: } } - cfg_queues(adapter->eth_dev); - print_adapter_info(adapter); - print_port_info(adapter); + cxgbe_cfg_queues(adapter->eth_dev); + cxgbe_print_adapter_info(adapter); + cxgbe_print_port_info(adapter); + adapter->mpstcam = t4_init_mpstcam(adapter); + if (!adapter->mpstcam) + dev_warn(adapter, + "VF could not allocate mps tcam table. Continuing\n"); + + err = cxgbe_init_rss(adapter); + if (err) + goto out_free; return 0; out_free: @@ -272,14 +288,7 @@ out_free: if (pi->viid != 0) t4_free_vi(adapter, adapter->mbox, adapter->pf, 0, pi->viid); - /* Skip first port since it'll be de-allocated by DPDK */ - if (i == 0) - continue; - if (pi->eth_dev) { - if (pi->eth_dev->data->dev_private) - rte_free(pi->eth_dev->data->dev_private); - rte_eth_dev_release_port(pi->eth_dev); - } + rte_eth_dev_release_port(pi->eth_dev); } return -err; }