New upstream version 18.02
[deb_dpdk.git] / lib / librte_eal / linuxapp / kni / ethtool / igb / igb_main.c
index f1dcc95..af378d2 100644 (file)
@@ -1,24 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0
 /*******************************************************************************
 
   Intel(R) Gigabit Ethernet Linux driver
   Copyright(c) 2007-2013 Intel Corporation.
 
-  This program is free software; you can redistribute it and/or modify it
-  under the terms and conditions of the GNU General Public License,
-  version 2, as published by the Free Software Foundation.
-
-  This program is distributed in the hope it will be useful, but WITHOUT
-  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
-  more details.
-
-  You should have received a copy of the GNU General Public License along with
-  this program; if not, write to the Free Software Foundation, Inc.,
-  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-  The full GNU General Public License is included in this distribution in
-  the file called "COPYING".
-
   Contact Information:
   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
@@ -137,11 +122,20 @@ static void igb_clean_all_tx_rings(struct igb_adapter *);
 static void igb_clean_all_rx_rings(struct igb_adapter *);
 static void igb_clean_tx_ring(struct igb_ring *);
 static void igb_set_rx_mode(struct net_device *);
+#ifdef HAVE_TIMER_SETUP
+static void igb_update_phy_info(struct timer_list *);
+static void igb_watchdog(struct timer_list *);
+#else
 static void igb_update_phy_info(unsigned long);
 static void igb_watchdog(unsigned long);
+#endif
 static void igb_watchdog_task(struct work_struct *);
 static void igb_dma_err_task(struct work_struct *);
+#ifdef HAVE_TIMER_SETUP
+static void igb_dma_err_timer(struct timer_list *);
+#else
 static void igb_dma_err_timer(unsigned long data);
+#endif
 static netdev_tx_t igb_xmit_frame(struct sk_buff *skb, struct net_device *);
 static struct net_device_stats *igb_get_stats(struct net_device *);
 static int igb_change_mtu(struct net_device *, int);
@@ -1031,8 +1025,15 @@ static void igb_set_interrupt_capability(struct igb_adapter *adapter, bool msix)
                        for (i = 0; i < numvecs; i++)
                                adapter->msix_entries[i].entry = i;
 
+#ifdef HAVE_PCI_ENABLE_MSIX
                        err = pci_enable_msix(pdev,
                                              adapter->msix_entries, numvecs);
+#else
+                       err = pci_enable_msix_range(pdev,
+                                       adapter->msix_entries,
+                                       numvecs,
+                                       numvecs);
+#endif
                        if (err == 0)
                                break;
                }
@@ -1126,7 +1127,7 @@ static int igb_alloc_q_vector(struct igb_adapter *adapter,
        /* initialize pointer to rings */
        ring = q_vector->ring;
 
-       /* intialize ITR */
+       /* initialize ITR */
        if (rxr_count) {
                /* rx or rx/tx vector */
                if (!adapter->rx_itr_setting || adapter->rx_itr_setting > 3)
@@ -1562,6 +1563,7 @@ static void igb_check_swap_media(struct igb_adapter *adapter)
        ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
        connsw = E1000_READ_REG(hw, E1000_CONNSW);
        link = igb_has_link(adapter);
+       (void) link;
 
        /* need to live swap if current media is copper and we have fiber/serdes
         * to go to.
@@ -1628,7 +1630,7 @@ static void igb_check_swap_media(struct igb_adapter *adapter)
  */
 static int igb_get_i2c_data(void *data)
 {
-       struct igb_adapter *adapter = (struct igb_adapter *)data;
+       struct igb_adapter *adapter = data;
        struct e1000_hw *hw = &adapter->hw;
        s32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 
@@ -1643,7 +1645,7 @@ static int igb_get_i2c_data(void *data)
  */
 static void igb_set_i2c_data(void *data, int state)
 {
-       struct igb_adapter *adapter = (struct igb_adapter *)data;
+       struct igb_adapter *adapter = data;
        struct e1000_hw *hw = &adapter->hw;
        s32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 
@@ -1668,7 +1670,7 @@ static void igb_set_i2c_data(void *data, int state)
  */
 static void igb_set_i2c_clk(void *data, int state)
 {
-       struct igb_adapter *adapter = (struct igb_adapter *)data;
+       struct igb_adapter *adapter = data;
        struct e1000_hw *hw = &adapter->hw;
        s32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 
@@ -1690,7 +1692,7 @@ static void igb_set_i2c_clk(void *data, int state)
  */
 static int igb_get_i2c_clk(void *data)
 {
-       struct igb_adapter *adapter = (struct igb_adapter *)data;
+       struct igb_adapter *adapter = data;
        struct e1000_hw *hw = &adapter->hw;
        s32 i2cctl = E1000_READ_REG(hw, E1000_I2CPARAMS);
 
@@ -2798,6 +2800,12 @@ static int __devinit igb_probe(struct pci_dev *pdev,
        /* Check if Media Autosense is enabled */
        if (hw->mac.type == e1000_82580)
                igb_init_mas(adapter);
+#ifdef HAVE_TIMER_SETUP
+       timer_setup(&adapter->watchdog_timer, &igb_watchdog, 0);
+       if (adapter->flags & IGB_FLAG_DETECT_BAD_DMA)
+               timer_setup(&adapter->dma_err_timer, &igb_dma_err_timer, 0);
+       timer_setup(&adapter->phy_info_timer, &igb_update_phy_info, 0);
+#else
        setup_timer(&adapter->watchdog_timer, &igb_watchdog,
                    (unsigned long) adapter);
        if (adapter->flags & IGB_FLAG_DETECT_BAD_DMA)
@@ -2805,6 +2813,7 @@ static int __devinit igb_probe(struct pci_dev *pdev,
                            (unsigned long) adapter);
        setup_timer(&adapter->phy_info_timer, &igb_update_phy_info,
                    (unsigned long) adapter);
+#endif
 
        INIT_WORK(&adapter->reset_task, igb_reset_task);
        INIT_WORK(&adapter->watchdog_task, igb_watchdog_task);
@@ -2985,7 +2994,7 @@ static int __devinit igb_probe(struct pci_dev *pdev,
                case e1000_i211:
                        /* Enable EEE for internal copper PHY devices */
                        err = e1000_set_eee_i350(hw);
-                       if ((!err) &&
+                       if (!err &&
                            (adapter->flags & IGB_FLAG_EEE))
                                adapter->eee_advert =
                                        MDIO_EEE_100TX | MDIO_EEE_1000T;
@@ -4535,9 +4544,15 @@ static void igb_spoof_check(struct igb_adapter *adapter)
 
 /* Need to wait a few seconds after link up to get diagnostic information from
  * the phy */
+#ifdef HAVE_TIMER_SETUP
+static void igb_update_phy_info(struct timer_list *t)
+{
+       struct igb_adapter *adapter = from_timer(adapter, t, phy_info_timer);
+#else
 static void igb_update_phy_info(unsigned long data)
 {
        struct igb_adapter *adapter = (struct igb_adapter *) data;
+#endif
        e1000_get_phy_info(&adapter->hw);
 }
 
@@ -4586,9 +4601,15 @@ bool igb_has_link(struct igb_adapter *adapter)
  * igb_watchdog - Timer Call-back
  * @data: pointer to adapter cast into an unsigned long
  **/
+#ifdef HAVE_TIMER_SETUP
+static void igb_watchdog(struct timer_list *t)
+{
+       struct igb_adapter *adapter = from_timer(adapter, t, watchdog_timer);
+#else
 static void igb_watchdog(unsigned long data)
 {
        struct igb_adapter *adapter = (struct igb_adapter *)data;
+#endif
        /* Do the rest outside of interrupt context */
        schedule_work(&adapter->watchdog_task);
 }
@@ -4846,9 +4867,15 @@ dma_timer_reset:
  * igb_dma_err_timer - Timer Call-back
  * @data: pointer to adapter cast into an unsigned long
  **/
+#ifdef HAVE_TIMER_SETUP
+static void igb_dma_err_timer(struct timer_list *t)
+{
+       struct igb_adapter *adapter = from_timer(adapter, t, dma_err_timer);
+#else
 static void igb_dma_err_timer(unsigned long data)
 {
        struct igb_adapter *adapter = (struct igb_adapter *)data;
+#endif
        /* Do the rest outside of interrupt context */
        schedule_work(&adapter->dma_err_task);
 }
@@ -4980,7 +5007,7 @@ static void igb_update_itr(struct igb_q_vector *q_vector,
                                itrval = bulk_latency;
                        } else if ((packets < 10) || ((bytes/packets) > 1200)) {
                                itrval = bulk_latency;
-                       } else if ((packets > 35)) {
+                       } else if (packets > 35) {
                                itrval = lowest_latency;
                        }
                } else if (bytes/packets > 2000) {
@@ -10043,6 +10070,12 @@ int igb_kni_probe(struct pci_dev *pdev,
                igb_init_mas(adapter);
 
 #ifdef NO_KNI
+#ifdef HAVE_TIMER_SETUP
+       timer_setup(&adapter->watchdog_timer, &igb_watchdog, 0);
+       if (adapter->flags & IGB_FLAG_DETECT_BAD_DMA)
+               timer_setup(&adapter->dma_err_timer, &igb_dma_err_timer, 0);
+       timer_setup(&adapter->phy_info_timer, &igb_update_phy_info, 0);
+#else
        setup_timer(&adapter->watchdog_timer, &igb_watchdog,
                    (unsigned long) adapter);
        if (adapter->flags & IGB_FLAG_DETECT_BAD_DMA)
@@ -10050,6 +10083,7 @@ int igb_kni_probe(struct pci_dev *pdev,
                            (unsigned long) adapter);
        setup_timer(&adapter->phy_info_timer, &igb_update_phy_info,
                    (unsigned long) adapter);
+#endif
 
        INIT_WORK(&adapter->reset_task, igb_reset_task);
        INIT_WORK(&adapter->watchdog_task, igb_watchdog_task);