X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Faxgbe%2Faxgbe_ethdev.c;h=d1f160e7979c73e12898e57bdc8fb65a78d75872;hb=4b701523742e3753d58949846ac4eeebc6d5a78f;hp=4b84b50c04be2bad3bd3bc9851ab6f136fa6aad6;hpb=323e7b667f18376c60351282950b28d4d0cc6165;p=dpdk.git diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c index 4b84b50c04..d1f160e797 100644 --- a/drivers/net/axgbe/axgbe_ethdev.c +++ b/drivers/net/axgbe/axgbe_ethdev.c @@ -15,16 +15,16 @@ static int axgbe_dev_start(struct rte_eth_dev *dev); static void axgbe_dev_stop(struct rte_eth_dev *dev); static void axgbe_dev_interrupt_handler(void *param); static void axgbe_dev_close(struct rte_eth_dev *dev); -static void axgbe_dev_promiscuous_enable(struct rte_eth_dev *dev); -static void axgbe_dev_promiscuous_disable(struct rte_eth_dev *dev); -static void axgbe_dev_allmulticast_enable(struct rte_eth_dev *dev); -static void axgbe_dev_allmulticast_disable(struct rte_eth_dev *dev); +static int axgbe_dev_promiscuous_enable(struct rte_eth_dev *dev); +static int axgbe_dev_promiscuous_disable(struct rte_eth_dev *dev); +static int axgbe_dev_allmulticast_enable(struct rte_eth_dev *dev); +static int axgbe_dev_allmulticast_disable(struct rte_eth_dev *dev); static int axgbe_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete); static int axgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats); -static void axgbe_dev_stats_reset(struct rte_eth_dev *dev); -static void axgbe_dev_info_get(struct rte_eth_dev *dev, +static int axgbe_dev_stats_reset(struct rte_eth_dev *dev); +static int axgbe_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info); /* The set of PCI devices this driver supports */ @@ -136,8 +136,8 @@ axgbe_dev_interrupt_handler(void *param) DMA_CH_SR, dma_ch_isr); } } - /* Enable interrupts since disabled after generation*/ - rte_intr_enable(&pdata->pci_dev->intr_handle); + /* Unmask interrupts since disabled after generation */ + rte_intr_ack(&pdata->pci_dev->intr_handle); } /* @@ -157,7 +157,7 @@ axgbe_dev_configure(struct rte_eth_dev *dev) static int axgbe_dev_rx_mq_config(struct rte_eth_dev *dev) { - struct axgbe_port *pdata = (struct axgbe_port *)dev->data->dev_private; + struct axgbe_port *pdata = dev->data->dev_private; if (dev->data->dev_conf.rxmode.mq_mode == ETH_MQ_RX_RSS) pdata->rss_enable = 1; @@ -171,10 +171,11 @@ axgbe_dev_rx_mq_config(struct rte_eth_dev *dev) static int axgbe_dev_start(struct rte_eth_dev *dev) { - PMD_INIT_FUNC_TRACE(); - struct axgbe_port *pdata = (struct axgbe_port *)dev->data->dev_private; + struct axgbe_port *pdata = dev->data->dev_private; int ret; + PMD_INIT_FUNC_TRACE(); + /* Multiqueue RSS */ ret = axgbe_dev_rx_mq_config(dev); if (ret) { @@ -209,9 +210,10 @@ axgbe_dev_start(struct rte_eth_dev *dev) static void axgbe_dev_stop(struct rte_eth_dev *dev) { - PMD_INIT_FUNC_TRACE(); struct axgbe_port *pdata = dev->data->dev_private; + PMD_INIT_FUNC_TRACE(); + rte_intr_disable(&pdata->pci_dev->intr_handle); if (axgbe_test_bit(AXGBE_STOPPED, &pdata->dev_state)) @@ -234,44 +236,56 @@ axgbe_dev_close(struct rte_eth_dev *dev) axgbe_dev_clear_queues(dev); } -static void +static int axgbe_dev_promiscuous_enable(struct rte_eth_dev *dev) { - PMD_INIT_FUNC_TRACE(); struct axgbe_port *pdata = dev->data->dev_private; + PMD_INIT_FUNC_TRACE(); + AXGMAC_IOWRITE_BITS(pdata, MAC_PFR, PR, 1); + + return 0; } -static void +static int axgbe_dev_promiscuous_disable(struct rte_eth_dev *dev) { - PMD_INIT_FUNC_TRACE(); struct axgbe_port *pdata = dev->data->dev_private; + PMD_INIT_FUNC_TRACE(); + AXGMAC_IOWRITE_BITS(pdata, MAC_PFR, PR, 0); + + return 0; } -static void +static int axgbe_dev_allmulticast_enable(struct rte_eth_dev *dev) { - PMD_INIT_FUNC_TRACE(); struct axgbe_port *pdata = dev->data->dev_private; + PMD_INIT_FUNC_TRACE(); + if (AXGMAC_IOREAD_BITS(pdata, MAC_PFR, PM)) - return; + return 0; AXGMAC_IOWRITE_BITS(pdata, MAC_PFR, PM, 1); + + return 0; } -static void +static int axgbe_dev_allmulticast_disable(struct rte_eth_dev *dev) { - PMD_INIT_FUNC_TRACE(); struct axgbe_port *pdata = dev->data->dev_private; + PMD_INIT_FUNC_TRACE(); + if (!AXGMAC_IOREAD_BITS(pdata, MAC_PFR, PM)) - return; + return 0; AXGMAC_IOWRITE_BITS(pdata, MAC_PFR, PM, 0); + + return 0; } /* return 0 means link status changed, -1 means not changed */ @@ -327,7 +341,7 @@ axgbe_dev_stats_get(struct rte_eth_dev *dev, return 0; } -static void +static int axgbe_dev_stats_reset(struct rte_eth_dev *dev) { struct axgbe_rx_queue *rxq; @@ -346,9 +360,11 @@ axgbe_dev_stats_reset(struct rte_eth_dev *dev) txq->bytes = 0; txq->errors = 0; } + + return 0; } -static void +static int axgbe_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { struct axgbe_port *pdata = dev->data->dev_private; @@ -387,6 +403,8 @@ axgbe_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->default_txconf = (struct rte_eth_txconf) { .tx_free_thresh = AXGBE_TX_FREE_THRESH, }; + + return 0; } static void axgbe_get_all_hw_features(struct axgbe_port *pdata) @@ -578,7 +596,7 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - pdata = (struct axgbe_port *)eth_dev->data->dev_private; + pdata = eth_dev->data->dev_private; /* initial state */ axgbe_set_bit(AXGBE_DOWN, &pdata->dev_state); axgbe_set_bit(AXGBE_STOPPED, &pdata->dev_state); @@ -626,19 +644,19 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev) pdata->mac_addr.addr_bytes[5] = (mac_hi >> 8) & 0xff; eth_dev->data->mac_addrs = rte_zmalloc("axgbe_mac_addr", - ETHER_ADDR_LEN, 0); + RTE_ETHER_ADDR_LEN, 0); if (!eth_dev->data->mac_addrs) { PMD_INIT_LOG(ERR, "Failed to alloc %u bytes needed to store MAC addr tbl", - ETHER_ADDR_LEN); + RTE_ETHER_ADDR_LEN); return -ENOMEM; } - if (!is_valid_assigned_ether_addr(&pdata->mac_addr)) - eth_random_addr(pdata->mac_addr.addr_bytes); + if (!rte_is_valid_assigned_ether_addr(&pdata->mac_addr)) + rte_eth_random_addr(pdata->mac_addr.addr_bytes); /* Copy the permanent MAC address */ - ether_addr_copy(&pdata->mac_addr, ð_dev->data->mac_addrs[0]); + rte_ether_addr_copy(&pdata->mac_addr, ð_dev->data->mac_addrs[0]); /* Clock settings */ pdata->sysclk_rate = AXGBE_V2_DMA_CLOCK_FREQ; @@ -694,6 +712,7 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev) ret = pdata->phy_if.phy_init(pdata); if (ret) { rte_free(eth_dev->data->mac_addrs); + eth_dev->data->mac_addrs = NULL; return ret; } @@ -718,9 +737,6 @@ eth_axgbe_dev_uninit(struct rte_eth_dev *eth_dev) return 0; pci_dev = RTE_DEV_TO_PCI(eth_dev->device); - /*Free macaddres*/ - rte_free(eth_dev->data->mac_addrs); - eth_dev->data->mac_addrs = NULL; eth_dev->dev_ops = NULL; eth_dev->rx_pkt_burst = NULL; eth_dev->tx_pkt_burst = NULL;