igb: fix i211 support
[dpdk.git] / lib / librte_pmd_e1000 / igb_ethdev.c
index 86f2d0c..0117d1a 100644 (file)
@@ -400,7 +400,7 @@ igb_reset_swfw_lock(struct e1000_hw *hw)
         * So force the release of the faulty lock.
         */
        if (e1000_get_hw_semaphore_generic(hw) < 0) {
-               DEBUGOUT("SMBI lock released");
+               PMD_DRV_LOG(DEBUG, "SMBI lock released");
        }
        e1000_put_hw_semaphore_generic(hw);
 
@@ -416,7 +416,8 @@ igb_reset_swfw_lock(struct e1000_hw *hw)
                if (hw->bus.func > E1000_FUNC_1)
                        mask <<= 2;
                if (hw->mac.ops.acquire_swfw_sync(hw, mask) < 0) {
-                       DEBUGOUT1("SWFW phy%d lock released", hw->bus.func);
+                       PMD_DRV_LOG(DEBUG, "SWFW phy%d lock released",
+                                   hw->bus.func);
                }
                hw->mac.ops.release_swfw_sync(hw, mask);
 
@@ -428,7 +429,7 @@ igb_reset_swfw_lock(struct e1000_hw *hw)
                 */
                mask = E1000_SWFW_EEP_SM;
                if (hw->mac.ops.acquire_swfw_sync(hw, mask) < 0) {
-                       DEBUGOUT("SWFW common locks released");
+                       PMD_DRV_LOG(DEBUG, "SWFW common locks released");
                }
                hw->mac.ops.release_swfw_sync(hw, mask);
        }
@@ -564,7 +565,7 @@ eth_igb_dev_init(__attribute__((unused)) struct eth_driver *eth_drv,
        E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
        E1000_WRITE_FLUSH(hw);
 
-       PMD_INIT_LOG(INFO, "port_id %d vendorID=0x%x deviceID=0x%x\n",
+       PMD_INIT_LOG(INFO, "port_id %d vendorID=0x%x deviceID=0x%x",
                     eth_dev->data->port_id, pci_dev->id.vendor_id,
                     pci_dev->id.device_id);
 
@@ -597,7 +598,7 @@ eth_igbvf_dev_init(__attribute__((unused)) struct eth_driver *eth_drv,
                E1000_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);
        int diag;
 
-       PMD_INIT_LOG(DEBUG, "eth_igbvf_dev_init");
+       PMD_INIT_FUNC_TRACE();
 
        eth_dev->dev_ops = &igbvf_eth_dev_ops;
        eth_dev->rx_pkt_burst = &eth_igb_recv_pkts;
@@ -649,11 +650,10 @@ eth_igbvf_dev_init(__attribute__((unused)) struct eth_driver *eth_drv,
        ether_addr_copy((struct ether_addr *) hw->mac.perm_addr,
                        &eth_dev->data->mac_addrs[0]);
 
-       PMD_INIT_LOG(DEBUG, "\nport %d vendorID=0x%x deviceID=0x%x "
-                       "mac.type=%s\n",
-                       eth_dev->data->port_id, pci_dev->id.vendor_id,
-                       pci_dev->id.device_id,
-                       "igb_mac_82576_vf");
+       PMD_INIT_LOG(DEBUG, "port %d vendorID=0x%x deviceID=0x%x "
+                    "mac.type=%s",
+                    eth_dev->data->port_id, pci_dev->id.vendor_id,
+                    pci_dev->id.device_id, "igb_mac_82576_vf");
 
        return 0;
 }
@@ -662,7 +662,7 @@ static struct eth_driver rte_igb_pmd = {
        {
                .name = "rte_igb_pmd",
                .id_table = pci_id_igb_map,
-               .drv_flags = RTE_PCI_DRV_NEED_MAPPING,
+               .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,
        },
        .eth_dev_init = eth_igb_dev_init,
        .dev_private_size = sizeof(struct e1000_adapter),
@@ -707,7 +707,7 @@ igb_vmdq_vlan_hw_filter_enable(struct rte_eth_dev *dev)
 static int
 rte_igbvf_pmd_init(const char *name __rte_unused, const char *params __rte_unused)
 {
-       DEBUGFUNC("rte_igbvf_pmd_init");
+       PMD_INIT_FUNC_TRACE();
 
        rte_eth_driver_register(&rte_igbvf_pmd);
        return (0);
@@ -719,11 +719,9 @@ eth_igb_configure(struct rte_eth_dev *dev)
        struct e1000_interrupt *intr =
                E1000_DEV_PRIVATE_TO_INTR(dev->data->dev_private);
 
-       PMD_INIT_LOG(DEBUG, ">>");
-
+       PMD_INIT_FUNC_TRACE();
        intr->flags |= E1000_FLAG_NEED_LINK_UPDATE;
-
-       PMD_INIT_LOG(DEBUG, "<<");
+       PMD_INIT_FUNC_TRACE();
 
        return (0);
 }
@@ -736,7 +734,7 @@ eth_igb_start(struct rte_eth_dev *dev)
        int ret, i, mask;
        uint32_t ctrl_ext;
 
-       PMD_INIT_LOG(DEBUG, ">>");
+       PMD_INIT_FUNC_TRACE();
 
        /* Power up the phy. Needed to make the link go Up */
        e1000_power_up_phy(hw);
@@ -818,7 +816,8 @@ eth_igb_start(struct rte_eth_dev *dev)
         * value of Write-Back Threshold registers.
         */
        if ((hw->mac.type == e1000_82576) || (hw->mac.type == e1000_82580) ||
-               (hw->mac.type == e1000_i350) || (hw->mac.type == e1000_i210)) {
+               (hw->mac.type == e1000_i350) || (hw->mac.type == e1000_i210) ||
+               (hw->mac.type == e1000_i211)) {
                uint32_t ivar;
 
                /* Enable all RX & TX queues in the IVAR registers */
@@ -887,9 +886,9 @@ eth_igb_start(struct rte_eth_dev *dev)
        return (0);
 
 error_invalid_config:
-       PMD_INIT_LOG(ERR, "Invalid link_speed/link_duplex (%u/%u) for port %u\n",
-                       dev->data->dev_conf.link_speed,
-                       dev->data->dev_conf.link_duplex, dev->data->port_id);
+       PMD_INIT_LOG(ERR, "Invalid link_speed/link_duplex (%u/%u) for port %u",
+                    dev->data->dev_conf.link_speed,
+                    dev->data->dev_conf.link_duplex, dev->data->port_id);
        igb_dev_clear_queues(dev);
        return (-EINVAL);
 }
@@ -966,7 +965,7 @@ igb_get_rx_buffer_size(struct e1000_hw *hw)
                rx_buf_size = (E1000_READ_REG(hw, E1000_RXPBS) & 0xf);
                rx_buf_size = (uint32_t) e1000_rxpbs_adjust_82580(rx_buf_size);
                rx_buf_size = (rx_buf_size << 10);
-       } else if (hw->mac.type == e1000_i210) {
+       } else if (hw->mac.type == e1000_i210 || hw->mac.type == e1000_i211) {
                rx_buf_size = (E1000_READ_REG(hw, E1000_RXPBS) & 0x3f) << 10;
        } else {
                rx_buf_size = (E1000_READ_REG(hw, E1000_PBA) & 0xffff) << 10;
@@ -1313,6 +1312,12 @@ eth_igb_infos_get(struct rte_eth_dev *dev,
                dev_info->max_vmdq_pools = 0;
                break;
 
+       case e1000_i211:
+               dev_info->max_rx_queues = 2;
+               dev_info->max_tx_queues = 2;
+               dev_info->max_vmdq_pools = 0;
+               break;
+
        case e1000_vfadapt:
                dev_info->max_rx_queues = 2;
                dev_info->max_tx_queues = 2;
@@ -1789,19 +1794,20 @@ eth_igb_interrupt_action(struct rte_eth_dev *dev)
                rte_igb_dev_atomic_read_link_status(dev, &link);
                if (link.link_status) {
                        PMD_INIT_LOG(INFO,
-                               " Port %d: Link Up - speed %u Mbps - %s\n",
-                               dev->data->port_id, (unsigned)link.link_speed,
-                               link.link_duplex == ETH_LINK_FULL_DUPLEX ?
-                                       "full-duplex" : "half-duplex");
+                                    " Port %d: Link Up - speed %u Mbps - %s",
+                                    dev->data->port_id,
+                                    (unsigned)link.link_speed,
+                                    link.link_duplex == ETH_LINK_FULL_DUPLEX ?
+                                    "full-duplex" : "half-duplex");
                } else {
-                       PMD_INIT_LOG(INFO, " Port %d: Link Down\n",
-                                               dev->data->port_id);
+                       PMD_INIT_LOG(INFO, " Port %d: Link Down",
+                                    dev->data->port_id);
                }
                PMD_INIT_LOG(INFO, "PCI Address: %04d:%02d:%02d:%d",
-                                       dev->pci_dev->addr.domain,
-                                       dev->pci_dev->addr.bus,
-                                       dev->pci_dev->addr.devid,
-                                       dev->pci_dev->addr.function);
+                            dev->pci_dev->addr.domain,
+                            dev->pci_dev->addr.bus,
+                            dev->pci_dev->addr.devid,
+                            dev->pci_dev->addr.function);
                tctl = E1000_READ_REG(hw, E1000_TCTL);
                rctl = E1000_READ_REG(hw, E1000_RCTL);
                if (link.link_status) {
@@ -1922,14 +1928,14 @@ eth_igb_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
        if (fc_conf->autoneg != hw->mac.autoneg)
                return -ENOTSUP;
        rx_buf_size = igb_get_rx_buffer_size(hw);
-       PMD_INIT_LOG(DEBUG, "Rx packet buffer size = 0x%x \n", rx_buf_size);
+       PMD_INIT_LOG(DEBUG, "Rx packet buffer size = 0x%x", rx_buf_size);
 
        /* At least reserve one Ethernet frame for watermark */
        max_high_water = rx_buf_size - ETHER_MAX_LEN;
        if ((fc_conf->high_water > max_high_water) ||
-               (fc_conf->high_water < fc_conf->low_water)) {
-               PMD_INIT_LOG(ERR, "e1000 incorrect high/low water value \n");
-               PMD_INIT_LOG(ERR, "high water must <=  0x%x \n", max_high_water);
+           (fc_conf->high_water < fc_conf->low_water)) {
+               PMD_INIT_LOG(ERR, "e1000 incorrect high/low water value");
+               PMD_INIT_LOG(ERR, "high water must <=  0x%x", max_high_water);
                return (-EINVAL);
        }
 
@@ -1959,7 +1965,7 @@ eth_igb_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
                return 0;
        }
 
-       PMD_INIT_LOG(ERR, "e1000_setup_link_generic = 0x%x \n", err);
+       PMD_INIT_LOG(ERR, "e1000_setup_link_generic = 0x%x", err);
        return (-EIO);
 }
 
@@ -1994,7 +2000,7 @@ eth_igb_rar_clear(struct rte_eth_dev *dev, uint32_t index)
 static void
 igbvf_intr_disable(struct e1000_hw *hw)
 {
-       PMD_INIT_LOG(DEBUG, "igbvf_intr_disable");
+       PMD_INIT_FUNC_TRACE();
 
        /* Clear interrupt mask to stop from interrupts being generated */
        E1000_WRITE_REG(hw, E1000_EIMC, 0xFFFF);
@@ -2076,8 +2082,8 @@ igbvf_dev_configure(struct rte_eth_dev *dev)
 {
        struct rte_eth_conf* conf = &dev->data->dev_conf;
 
-       PMD_INIT_LOG(DEBUG, "\nConfigured Virtual Function port id: %d\n",
-               dev->data->port_id);
+       PMD_INIT_LOG(DEBUG, "Configured Virtual Function port id: %d",
+                    dev->data->port_id);
 
        /*
         * VF has no ability to enable/disable HW CRC
@@ -2085,12 +2091,12 @@ igbvf_dev_configure(struct rte_eth_dev *dev)
         */
 #ifndef RTE_LIBRTE_E1000_PF_DISABLE_STRIP_CRC
        if (!conf->rxmode.hw_strip_crc) {
-               PMD_INIT_LOG(INFO, "VF can't disable HW CRC Strip\n");
+               PMD_INIT_LOG(INFO, "VF can't disable HW CRC Strip");
                conf->rxmode.hw_strip_crc = 1;
        }
 #else
        if (conf->rxmode.hw_strip_crc) {
-               PMD_INIT_LOG(INFO, "VF can't enable HW CRC Strip\n");
+               PMD_INIT_LOG(INFO, "VF can't enable HW CRC Strip");
                conf->rxmode.hw_strip_crc = 0;
        }
 #endif
@@ -2105,7 +2111,7 @@ igbvf_dev_start(struct rte_eth_dev *dev)
                E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
        int ret;
 
-       PMD_INIT_LOG(DEBUG, "igbvf_dev_start");
+       PMD_INIT_FUNC_TRACE();
 
        hw->mac.ops.reset_hw(hw);
 
@@ -2128,7 +2134,7 @@ igbvf_dev_start(struct rte_eth_dev *dev)
 static void
 igbvf_dev_stop(struct rte_eth_dev *dev)
 {
-       PMD_INIT_LOG(DEBUG, "igbvf_dev_stop");
+       PMD_INIT_FUNC_TRACE();
 
        igbvf_stop_adapter(dev);
 
@@ -2146,7 +2152,7 @@ igbvf_dev_close(struct rte_eth_dev *dev)
 {
        struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
-       PMD_INIT_LOG(DEBUG, "igbvf_dev_close");
+       PMD_INIT_FUNC_TRACE();
 
        e1000_reset_hw(hw);
 
@@ -2202,7 +2208,7 @@ igbvf_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
        uint32_t vid_bit = 0;
        int ret = 0;
 
-       PMD_INIT_LOG(DEBUG, "igbvf_vlan_filter_set");
+       PMD_INIT_FUNC_TRACE();
 
        /*vind is not used in VF driver, set to 0, check ixgbe_set_vfta_vf*/
        ret = igbvf_set_vfta(hw, vlan_id, !!on);