Imported Upstream version 16.07.2
[deb_dpdk.git] / drivers / net / bnxt / bnxt_ethdev.c
index 406e38a..7052ecf 100644 (file)
 static const char bnxt_version[] =
        "Broadcom Cumulus driver " DRV_MODULE_NAME "\n";
 
+#define PCI_VENDOR_ID_BROADCOM 0x14E4
+
+#define BROADCOM_DEV_ID_57301 0x16c8
+#define BROADCOM_DEV_ID_57302 0x16c9
+#define BROADCOM_DEV_ID_57304_PF 0x16ca
+#define BROADCOM_DEV_ID_57304_VF 0x16cb
+#define BROADCOM_DEV_ID_57402 0x16d0
+#define BROADCOM_DEV_ID_57404 0x16d1
+#define BROADCOM_DEV_ID_57406_PF 0x16d2
+#define BROADCOM_DEV_ID_57406_VF 0x16d3
+#define BROADCOM_DEV_ID_57406_MF 0x16d4
+#define BROADCOM_DEV_ID_57314 0x16df
+
 static struct rte_pci_id bnxt_pci_id_map[] = {
-#define RTE_PCI_DEV_ID_DECL_BNXT(vend, dev) {RTE_PCI_DEVICE(vend, dev)},
-#include "rte_pci_dev_ids.h"
-       {.device_id = 0},
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57301) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57302) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57304_PF) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57304_VF) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57402) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57404) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57406_PF) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57406_VF) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57406_MF) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57314) },
+       { .vendor_id = 0, /* sentinel */ },
 };
 
 #define BNXT_ETH_RSS_SUPPORT ( \
@@ -363,6 +384,7 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)
        struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private;
        int rc;
 
+       bp->dev_stopped = 0;
        rc = bnxt_hwrm_func_reset(bp);
        if (rc) {
                RTE_LOG(ERR, PMD, "hwrm chip reset failure rc: %x\n", rc);
@@ -406,16 +428,6 @@ static int bnxt_dev_set_link_down_op(struct rte_eth_dev *eth_dev)
        return 0;
 }
 
-static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev)
-{
-       struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private;
-
-       bnxt_free_tx_mbufs(bp);
-       bnxt_free_rx_mbufs(bp);
-       bnxt_free_mem(bp);
-       rte_free(eth_dev->data->mac_addrs);
-}
-
 /* Unload the driver, release resources */
 static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)
 {
@@ -428,6 +440,19 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)
        bnxt_shutdown_nic(bp);
 }
 
+static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev)
+{
+       struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private;
+
+       if (bp->dev_stopped == 0)
+               bnxt_dev_stop_op(eth_dev);
+
+       bnxt_free_tx_mbufs(bp);
+       bnxt_free_rx_mbufs(bp);
+       bnxt_free_mem(bp);
+       rte_free(eth_dev->data->mac_addrs);
+}
+
 static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev,
                                    uint32_t index)
 {
@@ -442,7 +467,7 @@ static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev,
         * remove the corresponding MAC addr filter
         */
        for (i = 0; i < MAX_FF_POOLS; i++) {
-               if (!(pool_mask & (1 << i)))
+               if (!(pool_mask & (1ULL << i)))
                        continue;
 
                STAILQ_FOREACH(vnic, &bp->ff_pool[i], next) {
@@ -1000,6 +1025,8 @@ bnxt_dev_init(struct rte_eth_dev *eth_dev)
                eth_dev->pci_dev->mem_resource[0].phys_addr,
                eth_dev->pci_dev->mem_resource[0].addr);
 
+       bp->dev_stopped = 0;
+
        return 0;
 
 error_free:
@@ -1019,6 +1046,8 @@ bnxt_dev_uninit(struct rte_eth_dev *eth_dev) {
                rte_free(bp->grp_info);
        rc = bnxt_hwrm_func_driver_unregister(bp, 0);
        bnxt_free_hwrm_resources(bp);
+       if (bp->dev_stopped == 0)
+               bnxt_dev_close_op(eth_dev);
        return rc;
 }
 
@@ -1041,9 +1070,9 @@ static int bnxt_rte_pmd_init(const char *name, const char *params __rte_unused)
 }
 
 static struct rte_driver bnxt_pmd_drv = {
-       .name = "eth_bnxt",
        .type = PMD_PDEV,
        .init = bnxt_rte_pmd_init,
 };
 
-PMD_REGISTER_DRIVER(bnxt_pmd_drv);
+PMD_REGISTER_DRIVER(bnxt_pmd_drv, bnxt);
+DRIVER_REGISTER_PCI_TABLE(bnxt, bnxt_pci_id_map);