X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fnet%2Fpfe%2Fpfe_ethdev.c;h=4c7f568bf42da4a6a1179929af4a1a54ecb49ef6;hb=39e4a2577fd05199f53182b7c8509aeed40dc07f;hp=940347819875e27238698c8597e331a546e33966;hpb=f513f620591370c7b10f43fc7baa2e258d2f428d;p=dpdk.git diff --git a/drivers/net/pfe/pfe_ethdev.c b/drivers/net/pfe/pfe_ethdev.c index 9403478198..4c7f568bf4 100644 --- a/drivers/net/pfe/pfe_ethdev.c +++ b/drivers/net/pfe/pfe_ethdev.c @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include #include @@ -13,7 +13,7 @@ #include "pfe_logs.h" #include "pfe_mod.h" -#define PFE_MAX_MACS 1 /*we can support upto 4 MACs per IF*/ +#define PFE_MAX_MACS 1 /* we can support up to 4 MACs per IF */ #define PFE_VDEV_GEM_ID_ARG "intf" struct pfe_vdev_init_params { @@ -40,8 +40,6 @@ unsigned int pfe_svr = SVR_LS1012A_REV1; static void *cbus_emac_base[3]; static void *cbus_gpi_base[3]; -int pfe_logtype_pmd; - /* pfe_gemac_init */ static int @@ -375,42 +373,43 @@ pfe_eth_close_cdev(struct pfe_eth_priv_s *priv) } } -static void +static int pfe_eth_stop(struct rte_eth_dev *dev/*, int wake*/) { struct pfe_eth_priv_s *priv = dev->data->dev_private; + dev->data->dev_started = 0; + gemac_disable(priv->EMAC_baseaddr); gpi_disable(priv->GPI_baseaddr); dev->rx_pkt_burst = &pfe_dummy_recv_pkts; dev->tx_pkt_burst = &pfe_dummy_xmit_pkts; -} - -static void -pfe_eth_exit(struct rte_eth_dev *dev, struct pfe *pfe) -{ - PMD_INIT_FUNC_TRACE(); - - pfe_eth_stop(dev); - /* Close the device file for link status */ - pfe_eth_close_cdev(dev->data->dev_private); - rte_free(dev->data->mac_addrs); - rte_eth_dev_release_port(dev); - pfe->nb_devs--; + return 0; } -static void +static int pfe_eth_close(struct rte_eth_dev *dev) { + int ret; + PMD_INIT_FUNC_TRACE(); + if (!dev) - return; + return -1; if (!g_pfe) - return; + return -1; + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; - pfe_eth_exit(dev, g_pfe); + ret = pfe_eth_stop(dev); + /* Close the device file for link status */ + pfe_eth_close_cdev(dev->data->dev_private); + + munmap(g_pfe->cbus_baseaddr, g_pfe->cbus_size); + g_pfe->nb_devs--; if (g_pfe->nb_devs == 0) { pfe_hif_exit(g_pfe); @@ -418,6 +417,8 @@ pfe_eth_close(struct rte_eth_dev *dev) rte_free(g_pfe); g_pfe = NULL; } + + return ret; } static int @@ -430,9 +431,6 @@ static int pfe_eth_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { - struct pfe_eth_priv_s *internals = dev->data->dev_private; - - dev_info->if_index = internals->id; dev_info->max_mac_addrs = PFE_MAX_MACS; dev_info->max_rx_queues = dev->data->nb_rx_queues; dev_info->max_tx_queues = dev->data->nb_tx_queues; @@ -496,18 +494,6 @@ pfe_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, return 0; } -static void -pfe_rx_queue_release(void *q __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); -} - -static void -pfe_tx_queue_release(void *q __rte_unused) -{ - PMD_INIT_FUNC_TRACE(); -} - static int pfe_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, @@ -584,11 +570,6 @@ pfe_eth_link_update(struct rte_eth_dev *dev, int wait_to_complete __rte_unused) struct rte_eth_link link, old; unsigned int lstatus = 1; - if (dev == NULL) { - PFE_PMD_ERR("Invalid device in link_update.\n"); - return 0; - } - memset(&old, 0, sizeof(old)); memset(&link, 0, sizeof(struct rte_eth_link)); @@ -674,8 +655,7 @@ pfe_allmulticast_enable(struct rte_eth_dev *dev) static int pfe_link_down(struct rte_eth_dev *dev) { - pfe_eth_stop(dev); - return 0; + return pfe_eth_stop(dev); } static int @@ -767,9 +747,7 @@ static const struct eth_dev_ops ops = { .dev_configure = pfe_eth_configure, .dev_infos_get = pfe_eth_info, .rx_queue_setup = pfe_rx_queue_setup, - .rx_queue_release = pfe_rx_queue_release, .tx_queue_setup = pfe_tx_queue_setup, - .tx_queue_release = pfe_tx_queue_release, .dev_supported_ptypes_get = pfe_supported_ptypes_get, .link_update = pfe_eth_link_update, .promiscuous_enable = pfe_promiscuous_enable, @@ -850,12 +828,16 @@ pfe_eth_init(struct rte_vdev_device *vdev, struct pfe *pfe, int id) eth_dev->data->mtu = 1500; eth_dev->dev_ops = &ops; - pfe_eth_stop(eth_dev); + err = pfe_eth_stop(eth_dev); + if (err != 0) + goto err0; pfe_gemac_init(priv); eth_dev->data->nb_rx_queues = 1; eth_dev->data->nb_tx_queues = 1; + eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; + /* For link status, open the PFE CDEV; Error from this function * is silently ignored; In case of error, the link status will not * be available. @@ -990,7 +972,7 @@ pmd_pfe_probe(struct rte_vdev_device *vdev) if (rc < 0) return -EINVAL; - RTE_LOG(INFO, PMD, "Initializing pmd_pfe for %s Given gem-id %d\n", + PFE_PMD_LOG(INFO, "Initializing pmd_pfe for %s Given gem-id %d", name, init_params.gem_id); if (g_pfe) { @@ -1118,7 +1100,7 @@ eth_init: else gem_id = init_params.gem_id; - RTE_LOG(INFO, PMD, "Init pmd_pfe for %s gem-id %d(given =%d)\n", + PFE_PMD_LOG(INFO, "Init pmd_pfe for %s gem-id %d(given =%d)", name, gem_id, init_params.gem_id); rc = pfe_eth_init(vdev, g_pfe, gem_id); @@ -1148,6 +1130,7 @@ pmd_pfe_remove(struct rte_vdev_device *vdev) { const char *name; struct rte_eth_dev *eth_dev = NULL; + int ret = 0; name = rte_vdev_device_name(vdev); if (name == NULL) @@ -1159,19 +1142,12 @@ pmd_pfe_remove(struct rte_vdev_device *vdev) return 0; eth_dev = rte_eth_dev_allocated(name); - if (eth_dev == NULL) - return -ENODEV; - - pfe_eth_exit(eth_dev, g_pfe); - munmap(g_pfe->cbus_baseaddr, g_pfe->cbus_size); - - if (g_pfe->nb_devs == 0) { - pfe_hif_exit(g_pfe); - pfe_hif_lib_exit(g_pfe); - rte_free(g_pfe); - g_pfe = NULL; + if (eth_dev) { + pfe_eth_close(eth_dev); + ret = rte_eth_dev_release_port(eth_dev); } - return 0; + + return ret; } static @@ -1182,10 +1158,4 @@ struct rte_vdev_driver pmd_pfe_drv = { RTE_PMD_REGISTER_VDEV(PFE_NAME_PMD, pmd_pfe_drv); RTE_PMD_REGISTER_PARAM_STRING(PFE_NAME_PMD, PFE_VDEV_GEM_ID_ARG "= "); - -RTE_INIT(pfe_pmd_init_log) -{ - pfe_logtype_pmd = rte_log_register("pmd.net.pfe"); - if (pfe_logtype_pmd >= 0) - rte_log_set_level(pfe_logtype_pmd, RTE_LOG_NOTICE); -} +RTE_LOG_REGISTER_DEFAULT(pfe_logtype_pmd, NOTICE);