X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fbnxt%2Fbnxt_ethdev.c;h=b00966942b4b200be88acd765d4cfa1c0fa08786;hb=f03e66cb64cee0e9b4351a7ac42f467e69d966f2;hp=4b39586479ce667dc2933e7f7be54c535cfa5ab1;hpb=acf2f2a451c0328e175f8d53ad19f3c160773697;p=dpdk.git diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 4b39586479..b00966942b 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -14,7 +14,6 @@ #include #include "bnxt.h" -#include "bnxt_cpr.h" #include "bnxt_filter.h" #include "bnxt_hwrm.h" #include "bnxt_irq.h" @@ -27,61 +26,15 @@ #include "bnxt_vnic.h" #include "hsi_struct_def_dpdk.h" #include "bnxt_nvm_defs.h" -#include "bnxt_util.h" #define DRV_MODULE_NAME "bnxt" static const char bnxt_version[] = "Broadcom NetXtreme driver " DRV_MODULE_NAME; int bnxt_logtype_driver; -#define PCI_VENDOR_ID_BROADCOM 0x14E4 - -#define BROADCOM_DEV_ID_STRATUS_NIC_VF1 0x1606 -#define BROADCOM_DEV_ID_STRATUS_NIC_VF2 0x1609 -#define BROADCOM_DEV_ID_STRATUS_NIC 0x1614 -#define BROADCOM_DEV_ID_57414_VF 0x16c1 -#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_57417_MF 0x16cc -#define BROADCOM_DEV_ID_NS2 0x16cd -#define BROADCOM_DEV_ID_57311 0x16ce -#define BROADCOM_DEV_ID_57312 0x16cf -#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_57402_MF 0x16d4 -#define BROADCOM_DEV_ID_57407_RJ45 0x16d5 -#define BROADCOM_DEV_ID_57412 0x16d6 -#define BROADCOM_DEV_ID_57414 0x16d7 -#define BROADCOM_DEV_ID_57416_RJ45 0x16d8 -#define BROADCOM_DEV_ID_57417_RJ45 0x16d9 -#define BROADCOM_DEV_ID_5741X_VF 0x16dc -#define BROADCOM_DEV_ID_57412_MF 0x16de -#define BROADCOM_DEV_ID_57314 0x16df -#define BROADCOM_DEV_ID_57317_RJ45 0x16e0 -#define BROADCOM_DEV_ID_5731X_VF 0x16e1 -#define BROADCOM_DEV_ID_57417_SFP 0x16e2 -#define BROADCOM_DEV_ID_57416_SFP 0x16e3 -#define BROADCOM_DEV_ID_57317_SFP 0x16e4 -#define BROADCOM_DEV_ID_57404_MF 0x16e7 -#define BROADCOM_DEV_ID_57406_MF 0x16e8 -#define BROADCOM_DEV_ID_57407_SFP 0x16e9 -#define BROADCOM_DEV_ID_57407_MF 0x16ea -#define BROADCOM_DEV_ID_57414_MF 0x16ec -#define BROADCOM_DEV_ID_57416_MF 0x16ee -#define BROADCOM_DEV_ID_57508 0x1750 -#define BROADCOM_DEV_ID_57504 0x1751 -#define BROADCOM_DEV_ID_57502 0x1752 -#define BROADCOM_DEV_ID_57500_VF1 0x1806 -#define BROADCOM_DEV_ID_57500_VF2 0x1807 -#define BROADCOM_DEV_ID_58802 0xd802 -#define BROADCOM_DEV_ID_58804 0xd804 -#define BROADCOM_DEV_ID_58808 0x16f0 -#define BROADCOM_DEV_ID_58802_VF 0xd800 - +/* + * The set of PCI devices this driver supports + */ static const struct rte_pci_id bnxt_pci_id_map[] = { { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_STRATUS_NIC_VF1) }, @@ -130,6 +83,12 @@ static const struct rte_pci_id bnxt_pci_id_map[] = { { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57502) }, { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57500_VF1) }, { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57500_VF2) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57508_MF1) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57504_MF1) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57502_MF1) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57508_MF2) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57504_MF2) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57502_MF2) }, { .vendor_id = 0, /* sentinel */ }, }; @@ -164,11 +123,11 @@ static const struct rte_pci_id bnxt_pci_id_map[] = { DEV_RX_OFFLOAD_KEEP_CRC | \ DEV_RX_OFFLOAD_VLAN_EXTEND | \ DEV_RX_OFFLOAD_TCP_LRO | \ - DEV_RX_OFFLOAD_SCATTER) + DEV_RX_OFFLOAD_SCATTER | \ + DEV_RX_OFFLOAD_RSS_HASH) static int bnxt_vlan_offload_set_op(struct rte_eth_dev *dev, int mask); static void bnxt_print_link_info(struct rte_eth_dev *eth_dev); -static int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu); static int bnxt_dev_uninit(struct rte_eth_dev *eth_dev); static int bnxt_init_resources(struct bnxt *bp, bool reconfig_dev); static int bnxt_uninit_resources(struct bnxt *bp, bool reconfig_dev); @@ -225,6 +184,9 @@ static void bnxt_free_mem(struct bnxt *bp, bool reconfig) } bnxt_free_async_cp_ring(bp); bnxt_free_rxtx_nq_ring(bp); + + rte_free(bp->grp_info); + bp->grp_info = NULL; } static int bnxt_alloc_mem(struct bnxt *bp, bool reconfig) @@ -518,22 +480,6 @@ static int bnxt_shutdown_nic(struct bnxt *bp) return 0; } -static int bnxt_init_nic(struct bnxt *bp) -{ - int rc; - - if (BNXT_HAS_RING_GRPS(bp)) { - rc = bnxt_init_ring_grps(bp); - if (rc) - return rc; - } - - bnxt_init_vnics(bp); - bnxt_init_filters(bp); - - return 0; -} - /* * Device configuration and status function */ @@ -559,7 +505,7 @@ static int bnxt_dev_info_get_op(struct rte_eth_dev *eth_dev, if (BNXT_PF(bp)) dev_info->max_vfs = pdev->max_vfs; - max_rx_rings = RTE_MIN(bp->max_rx_rings, bp->max_stat_ctx); + max_rx_rings = BNXT_MAX_RINGS(bp); /* For the sake of symmetry, max_rx_queues = max_tx_queues */ dev_info->max_rx_queues = max_rx_rings; dev_info->max_tx_queues = max_rx_rings; @@ -674,6 +620,9 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev) * resource reservation. This will ensure the resource counts * are calculated correctly. */ + + pthread_mutex_lock(&bp->def_cp_lock); + if (!BNXT_HAS_NQ(bp) && bp->async_cp_ring) { bnxt_disable_int(bp); bnxt_free_cp_ring(bp, bp->async_cp_ring); @@ -682,15 +631,20 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev) rc = bnxt_hwrm_func_reserve_vf_resc(bp, false); if (rc) { PMD_DRV_LOG(ERR, "HWRM resource alloc fail:%x\n", rc); + pthread_mutex_unlock(&bp->def_cp_lock); return -ENOSPC; } if (!BNXT_HAS_NQ(bp) && bp->async_cp_ring) { rc = bnxt_alloc_async_cp_ring(bp); - if (rc) + if (rc) { + pthread_mutex_unlock(&bp->def_cp_lock); return rc; + } bnxt_enable_int(bp); } + + pthread_mutex_unlock(&bp->def_cp_lock); } else { /* legacy driver needs to get updated values */ rc = bnxt_hwrm_func_qcaps(bp); @@ -720,6 +674,9 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev) bp->rx_cp_nr_rings = bp->rx_nr_rings; bp->tx_cp_nr_rings = bp->tx_nr_rings; + rx_offloads |= DEV_RX_OFFLOAD_RSS_HASH; + eth_dev->data->dev_conf.rxmode.offloads = rx_offloads; + if (rx_offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) { eth_dev->data->mtu = eth_dev->data->dev_conf.rxmode.max_rx_pkt_len - @@ -870,13 +827,17 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev) int vlan_mask = 0; int rc; + if (!eth_dev->data->nb_tx_queues || !eth_dev->data->nb_rx_queues) { + PMD_DRV_LOG(ERR, "Queues are not configured yet!\n"); + return -EINVAL; + } + if (bp->rx_cp_nr_rings > RTE_ETHDEV_QUEUE_STAT_CNTRS) { PMD_DRV_LOG(ERR, "RxQ cnt %d > CONFIG_RTE_ETHDEV_QUEUE_STAT_CNTRS %d\n", bp->rx_cp_nr_rings, RTE_ETHDEV_QUEUE_STAT_CNTRS); } - bnxt_enable_int(bp); rc = bnxt_hwrm_if_change(bp, 1); if (!rc) { if (bp->flags & BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE) { @@ -885,6 +846,7 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev) return rc; } } + bnxt_enable_int(bp); rc = bnxt_init_chip(bp); if (rc) @@ -908,7 +870,9 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev) bp->flags |= BNXT_FLAG_INIT_DONE; eth_dev->data->dev_started = 1; bp->dev_stopped = 0; + pthread_mutex_lock(&bp->def_cp_lock); bnxt_schedule_fw_health_check(bp); + pthread_mutex_unlock(&bp->def_cp_lock); return 0; error: @@ -969,8 +933,12 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev) eth_dev->data->dev_link.link_status = 0; } bnxt_dev_set_link_down_op(eth_dev); - /* Wait for link to be reset and the async notification to process. */ - rte_delay_ms(BNXT_LINK_WAIT_INTERVAL * 2); + + /* Wait for link to be reset and the async notification to process. + * During reset recovery, there is no need to wait + */ + if (!is_bnxt_in_error(bp)) + rte_delay_ms(BNXT_LINK_WAIT_INTERVAL * 2); /* Clean queue intr-vector mapping */ rte_intr_efd_disable(intr_handle); @@ -987,6 +955,7 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev) bnxt_shutdown_nic(bp); bnxt_hwrm_if_change(bp, 0); bp->dev_stopped = 1; + bp->rx_cosq_cnt = 0; } static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev) @@ -1038,8 +1007,7 @@ static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev, bnxt_hwrm_clear_l2_filter(bp, filter); filter->mac_index = INVALID_MAC_INDEX; memset(&filter->l2_addr, 0, RTE_ETHER_ADDR_LEN); - STAILQ_INSERT_TAIL(&bp->free_filter_list, - filter, next); + bnxt_free_filter(bp, filter); } filter = temp_filter; } @@ -1047,19 +1015,21 @@ static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev, } static int bnxt_add_mac_filter(struct bnxt *bp, struct bnxt_vnic_info *vnic, - struct rte_ether_addr *mac_addr, uint32_t index) + struct rte_ether_addr *mac_addr, uint32_t index, + uint32_t pool) { struct bnxt_filter_info *filter; int rc = 0; - filter = STAILQ_FIRST(&vnic->filter); - /* During bnxt_mac_addr_add_op, default MAC is - * already programmed, so skip it. But, when - * hw-vlan-filter is turned OFF from ON, default - * MAC filter should be restored - */ - if (filter->dflt) - return 0; + /* Attach requested MAC address to the new l2_filter */ + STAILQ_FOREACH(filter, &vnic->filter, next) { + if (filter->mac_index == index) { + PMD_DRV_LOG(ERR, + "MAC addr already existed for pool %d\n", + pool); + return 0; + } + } filter = bnxt_alloc_filter(bp); if (!filter) { @@ -1067,7 +1037,6 @@ static int bnxt_add_mac_filter(struct bnxt *bp, struct bnxt_vnic_info *vnic, return -ENODEV; } - filter->mac_index = index; /* bnxt_alloc_filter copies default MAC to filter->l2_addr. So, * if the MAC that's been programmed now is a different one, then, * copy that addr to filter->l2_addr @@ -1078,14 +1047,12 @@ static int bnxt_add_mac_filter(struct bnxt *bp, struct bnxt_vnic_info *vnic, rc = bnxt_hwrm_set_l2_filter(bp, vnic->fw_vnic_id, filter); if (!rc) { - if (filter->mac_index == 0) { - filter->dflt = true; + filter->mac_index = index; + if (filter->mac_index == 0) STAILQ_INSERT_HEAD(&vnic->filter, filter, next); - } else { + else STAILQ_INSERT_TAIL(&vnic->filter, filter, next); - } } else { - filter->mac_index = INVALID_MAC_INDEX; memset(&filter->l2_addr, 0, RTE_ETHER_ADDR_LEN); bnxt_free_filter(bp, filter); } @@ -1099,7 +1066,6 @@ static int bnxt_mac_addr_add_op(struct rte_eth_dev *eth_dev, { struct bnxt *bp = eth_dev->data->dev_private; struct bnxt_vnic_info *vnic = &bp->vnic_info[pool]; - struct bnxt_filter_info *filter; int rc = 0; rc = is_bnxt_in_error(bp); @@ -1115,16 +1081,8 @@ static int bnxt_mac_addr_add_op(struct rte_eth_dev *eth_dev, PMD_DRV_LOG(ERR, "VNIC not found for pool %d!\n", pool); return -EINVAL; } - /* Attach requested MAC address to the new l2_filter */ - STAILQ_FOREACH(filter, &vnic->filter, next) { - if (filter->mac_index == index) { - PMD_DRV_LOG(ERR, - "MAC addr already existed for pool %d\n", pool); - return 0; - } - } - rc = bnxt_add_mac_filter(bp, vnic, mac_addr, index); + rc = bnxt_add_mac_filter(bp, vnic, mac_addr, index, pool); return rc; } @@ -1357,9 +1315,6 @@ static int bnxt_reta_update_op(struct rte_eth_dev *eth_dev, vnic->rss_table[i] = vnic->fw_grp_ids[reta_conf[idx].reta[sft]]; } - - vnic->rss_table[i] = - vnic->fw_grp_ids[reta_conf[idx].reta[sft]]; } bnxt_hwrm_vnic_rss_cfg(bp, vnic); @@ -1749,33 +1704,22 @@ static int bnxt_del_vlan_filter(struct bnxt *bp, uint16_t vlan_id) int rc = 0; uint32_t chk = HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN; - /* if VLAN exists && VLAN matches vlan_id - * remove the MAC+VLAN filter - * add a new MAC only filter - * else - * VLAN filter doesn't exist, just skip and continue - */ vnic = BNXT_GET_DEFAULT_VNIC(bp); filter = STAILQ_FIRST(&vnic->filter); while (filter) { /* Search for this matching MAC+VLAN filter */ - if ((filter->enables & chk) && - (filter->l2_ivlan == vlan_id && - filter->l2_ivlan_mask != 0) && - !memcmp(filter->l2_addr, bp->mac_addr, - RTE_ETHER_ADDR_LEN)) { + if (bnxt_vlan_filter_exists(bp, filter, chk, vlan_id)) { /* Delete the filter */ rc = bnxt_hwrm_clear_l2_filter(bp, filter); if (rc) return rc; STAILQ_REMOVE(&vnic->filter, filter, bnxt_filter_info, next); - STAILQ_INSERT_TAIL(&bp->free_filter_list, filter, next); - + bnxt_free_filter(bp, filter); PMD_DRV_LOG(INFO, - "Del Vlan filter for %d\n", + "Deleted vlan filter for %d\n", vlan_id); - return rc; + return 0; } filter = STAILQ_NEXT(filter, next); } @@ -1803,11 +1747,7 @@ static int bnxt_add_vlan_filter(struct bnxt *bp, uint16_t vlan_id) filter = STAILQ_FIRST(&vnic->filter); /* Check if the VLAN has already been added */ while (filter) { - if ((filter->enables & chk) && - (filter->l2_ivlan == vlan_id && - filter->l2_ivlan_mask == 0x0FFF) && - !memcmp(filter->l2_addr, bp->mac_addr, - RTE_ETHER_ADDR_LEN)) + if (bnxt_vlan_filter_exists(bp, filter, chk, vlan_id)) return -EEXIST; filter = STAILQ_NEXT(filter, next); @@ -1840,18 +1780,17 @@ static int bnxt_add_vlan_filter(struct bnxt *bp, uint16_t vlan_id) * not able to create the filter in hardware. */ filter->fw_l2_filter_id = UINT64_MAX; - STAILQ_INSERT_TAIL(&bp->free_filter_list, filter, next); + bnxt_free_filter(bp, filter); return rc; - } else { - /* Add this new filter to the list */ - if (vlan_id == 0) { - filter->dflt = true; - STAILQ_INSERT_HEAD(&vnic->filter, filter, next); - } else { - STAILQ_INSERT_TAIL(&vnic->filter, filter, next); - } } + filter->mac_index = 0; + /* Add this new filter to the list */ + if (vlan_id == 0) + STAILQ_INSERT_HEAD(&vnic->filter, filter, next); + else + STAILQ_INSERT_TAIL(&vnic->filter, filter, next); + PMD_DRV_LOG(INFO, "Added Vlan filter for %d\n", vlan_id); return rc; @@ -1882,19 +1821,17 @@ static int bnxt_del_dflt_mac_filter(struct bnxt *bp, filter = STAILQ_FIRST(&vnic->filter); while (filter) { - if (filter->dflt && + if (filter->mac_index == 0 && !memcmp(filter->l2_addr, bp->mac_addr, RTE_ETHER_ADDR_LEN)) { rc = bnxt_hwrm_clear_l2_filter(bp, filter); - if (rc) - return rc; - filter->dflt = false; - STAILQ_REMOVE(&vnic->filter, filter, - bnxt_filter_info, next); - STAILQ_INSERT_TAIL(&bp->free_filter_list, - filter, next); - filter->fw_l2_filter_id = -1; - break; + if (!rc) { + STAILQ_REMOVE(&vnic->filter, filter, + bnxt_filter_info, next); + bnxt_free_filter(bp, filter); + filter->fw_l2_filter_id = UINT64_MAX; + } + return rc; } filter = STAILQ_NEXT(filter, next); } @@ -1917,10 +1854,10 @@ bnxt_vlan_offload_set_op(struct rte_eth_dev *dev, int mask) vnic = BNXT_GET_DEFAULT_VNIC(bp); if (!(rx_offloads & DEV_RX_OFFLOAD_VLAN_FILTER)) { /* Remove any VLAN filters programmed */ - for (i = 0; i < 4095; i++) + for (i = 0; i < RTE_ETHER_MAX_VLAN_ID; i++) bnxt_del_vlan_filter(bp, i); - rc = bnxt_add_mac_filter(bp, vnic, NULL, 0); + rc = bnxt_add_mac_filter(bp, vnic, NULL, 0, 0); if (rc) return rc; } else { @@ -2130,8 +2067,12 @@ static void bnxt_rxq_info_get_op(struct rte_eth_dev *dev, uint16_t queue_id, struct rte_eth_rxq_info *qinfo) { + struct bnxt *bp = dev->data->dev_private; struct bnxt_rx_queue *rxq; + if (is_bnxt_in_error(bp)) + return; + rxq = dev->data->rx_queues[queue_id]; qinfo->mp = rxq->mb_pool; @@ -2147,8 +2088,12 @@ static void bnxt_txq_info_get_op(struct rte_eth_dev *dev, uint16_t queue_id, struct rte_eth_txq_info *qinfo) { + struct bnxt *bp = dev->data->dev_private; struct bnxt_tx_queue *txq; + if (is_bnxt_in_error(bp)) + return; + txq = dev->data->tx_queues[queue_id]; qinfo->nb_desc = txq->nb_tx_desc; @@ -2162,7 +2107,7 @@ bnxt_txq_info_get_op(struct rte_eth_dev *dev, uint16_t queue_id, qinfo->conf.tx_deferred_start = txq->tx_deferred_start; } -static int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu) +int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu) { struct bnxt *bp = eth_dev->data->dev_private; uint32_t new_pkt_size; @@ -2173,6 +2118,10 @@ static int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu) if (rc) return rc; + /* Exit if receive queues are not configured yet */ + if (!eth_dev->data->nb_rx_queues) + return rc; + new_pkt_size = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + VLAN_TAG_SIZE * BNXT_NUM_VLANS; @@ -2203,14 +2152,15 @@ static int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu) bp->flags &= ~BNXT_FLAG_JUMBO; } - eth_dev->data->dev_conf.rxmode.max_rx_pkt_len = new_pkt_size; + /* Is there a change in mtu setting? */ + if (eth_dev->data->dev_conf.rxmode.max_rx_pkt_len == new_pkt_size) + return rc; for (i = 0; i < bp->nr_vnics; i++) { struct bnxt_vnic_info *vnic = &bp->vnic_info[i]; uint16_t size = 0; - vnic->mru = new_mtu + RTE_ETHER_HDR_LEN + - RTE_ETHER_CRC_LEN + VLAN_TAG_SIZE * 2; + vnic->mru = BNXT_VNIC_MRU(new_mtu); rc = bnxt_hwrm_vnic_cfg(bp, vnic); if (rc) break; @@ -2225,6 +2175,9 @@ static int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu) } } + if (!rc) + eth_dev->data->dev_conf.rxmode.max_rx_pkt_len = new_pkt_size; + PMD_DRV_LOG(INFO, "New MTU is %d\n", new_mtu); return rc; @@ -2631,9 +2584,6 @@ parse_ntuple_filter(struct bnxt *bp, return -EINVAL; } - //TODO Priority - //nfilter->priority = (uint8_t)filter->priority; - bfilter->enables = en; return 0; } @@ -3000,7 +2950,6 @@ bnxt_parse_fdir_filter(struct bnxt *bp, return -EINVAL; } - if (fdir_mode == RTE_FDIR_MODE_PERFECT_MAC_VLAN) { rte_memcpy(filter->dst_macaddr, fdir->input.flow.mac_vlan_flow.mac_addr.addr_bytes, 6); @@ -4093,6 +4042,24 @@ static bool bnxt_vf_pciid(uint16_t id) return false; } +static bool bnxt_thor_device(uint16_t id) +{ + if (id == BROADCOM_DEV_ID_57508 || + id == BROADCOM_DEV_ID_57504 || + id == BROADCOM_DEV_ID_57502 || + id == BROADCOM_DEV_ID_57508_MF1 || + id == BROADCOM_DEV_ID_57504_MF1 || + id == BROADCOM_DEV_ID_57502_MF1 || + id == BROADCOM_DEV_ID_57508_MF2 || + id == BROADCOM_DEV_ID_57504_MF2 || + id == BROADCOM_DEV_ID_57502_MF2 || + id == BROADCOM_DEV_ID_57500_VF1 || + id == BROADCOM_DEV_ID_57500_VF2) + return true; + + return false; +} + bool bnxt_stratus_device(struct bnxt *bp) { uint16_t id = bp->pdev->id.device_id; @@ -4629,8 +4596,14 @@ bnxt_init_locks(struct bnxt *bp) int err; err = pthread_mutex_init(&bp->flow_lock, NULL); - if (err) + if (err) { PMD_DRV_LOG(ERR, "Unable to initialize flow_lock\n"); + return err; + } + + err = pthread_mutex_init(&bp->def_cp_lock, NULL); + if (err) + PMD_DRV_LOG(ERR, "Unable to initialize def_cp_lock\n"); return err; } @@ -4685,8 +4658,6 @@ static int bnxt_init_resources(struct bnxt *bp, bool reconfig_dev) if (rc) return rc; - bnxt_init_nic(bp); - rc = bnxt_request_int(bp); if (rc) return rc; @@ -4729,11 +4700,7 @@ bnxt_dev_init(struct rte_eth_dev *eth_dev) if (bnxt_vf_pciid(pci_dev->id.device_id)) bp->flags |= BNXT_FLAG_VF; - if (pci_dev->id.device_id == BROADCOM_DEV_ID_57508 || - pci_dev->id.device_id == BROADCOM_DEV_ID_57504 || - pci_dev->id.device_id == BROADCOM_DEV_ID_57502 || - pci_dev->id.device_id == BROADCOM_DEV_ID_57500_VF1 || - pci_dev->id.device_id == BROADCOM_DEV_ID_57500_VF2) + if (bnxt_thor_device(pci_dev->id.device_id)) bp->flags |= BNXT_FLAG_THOR_CHIP; if (pci_dev->id.device_id == BROADCOM_DEV_ID_58802 || @@ -4779,6 +4746,7 @@ static void bnxt_uninit_locks(struct bnxt *bp) { pthread_mutex_destroy(&bp->flow_lock); + pthread_mutex_destroy(&bp->def_cp_lock); } static int @@ -4801,6 +4769,7 @@ bnxt_uninit_resources(struct bnxt *bp, bool reconfig_dev) } } + bnxt_uninit_locks(bp); rte_free(bp->ptp_cfg); bp->ptp_cfg = NULL; return rc; @@ -4819,11 +4788,6 @@ bnxt_dev_uninit(struct rte_eth_dev *eth_dev) rc = bnxt_uninit_resources(bp, false); - if (bp->grp_info != NULL) { - rte_free(bp->grp_info); - bp->grp_info = NULL; - } - if (bp->tx_mem_zone) { rte_memzone_free((const struct rte_memzone *)bp->tx_mem_zone); bp->tx_mem_zone = NULL; @@ -4842,8 +4806,6 @@ bnxt_dev_uninit(struct rte_eth_dev *eth_dev) eth_dev->rx_pkt_burst = NULL; eth_dev->tx_pkt_burst = NULL; - bnxt_uninit_locks(bp); - return rc; }