net/mlx5: remove flags setting from flow preparation
[dpdk.git] / drivers / net / bnxt / bnxt_ethdev.c
index 28e2be7..801c6ff 100644 (file)
@@ -202,7 +202,9 @@ static int bnxt_init_chip(struct bnxt *bp)
        struct bnxt_rx_queue *rxq;
        struct rte_eth_link new;
        struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(bp->eth_dev);
+       struct rte_eth_conf *dev_conf = &bp->eth_dev->data->dev_conf;
        struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
+       uint64_t rx_offloads = dev_conf->rxmode.offloads;
        uint32_t intr_vector = 0;
        uint32_t queue_id, base = BNXT_MISC_VEC_ID;
        uint32_t vec = BNXT_MISC_VEC_ID;
@@ -283,6 +285,16 @@ static int bnxt_init_chip(struct bnxt *bp)
                        }
                }
 
+               /*
+                * Firmware sets pf pair in default vnic cfg. If the VLAN strip
+                * setting is not available at this time, it will not be
+                * configured correctly in the CFA.
+                */
+               if (rx_offloads & DEV_RX_OFFLOAD_VLAN_STRIP)
+                       vnic->vlan_strip = true;
+               else
+                       vnic->vlan_strip = false;
+
                rc = bnxt_hwrm_vnic_cfg(bp, vnic);
                if (rc) {
                        PMD_DRV_LOG(ERR, "HWRM vnic %d cfg failure rc: %x\n",
@@ -451,7 +463,7 @@ static void bnxt_dev_info_get_op(struct rte_eth_dev *eth_dev,
        /* Fast path specifics */
        dev_info->min_rx_bufsize = 1;
        dev_info->max_rx_pktlen = BNXT_MAX_MTU + ETHER_HDR_LEN + ETHER_CRC_LEN
-                                 + VLAN_TAG_SIZE;
+                                 + VLAN_TAG_SIZE * 2;
 
        dev_info->rx_offload_capa = BNXT_DEV_RX_OFFLOAD_SUPPORT;
        if (bp->flags & BNXT_FLAG_PTP_SUPPORTED)
@@ -755,7 +767,7 @@ static int bnxt_mac_addr_add_op(struct rte_eth_dev *eth_dev,
        struct bnxt_vnic_info *vnic = &bp->vnic_info[pool];
        struct bnxt_filter_info *filter;
 
-       if (BNXT_VF(bp)) {
+       if (BNXT_VF(bp) & !BNXT_VF_IS_TRUSTED(bp)) {
                PMD_DRV_LOG(ERR, "Cannot add MAC address to a VF interface\n");
                return -ENOTSUP;
        }
@@ -1447,7 +1459,7 @@ bnxt_set_default_mac_addr_op(struct rte_eth_dev *dev, struct ether_addr *addr)
        struct bnxt_filter_info *filter;
        int rc;
 
-       if (BNXT_VF(bp))
+       if (BNXT_VF(bp) && !BNXT_VF_IS_TRUSTED(bp))
                return -EPERM;
 
        memcpy(bp->mac_addr, addr, sizeof(bp->mac_addr));
@@ -1564,21 +1576,17 @@ static int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu)
 {
        struct bnxt *bp = eth_dev->data->dev_private;
        struct rte_eth_dev_info dev_info;
-       uint32_t max_dev_mtu;
        uint32_t rc = 0;
        uint32_t i;
 
        bnxt_dev_info_get_op(eth_dev, &dev_info);
-       max_dev_mtu = dev_info.max_rx_pktlen -
-                     ETHER_HDR_LEN - ETHER_CRC_LEN - VLAN_TAG_SIZE * 2;
 
-       if (new_mtu < ETHER_MIN_MTU || new_mtu > max_dev_mtu) {
+       if (new_mtu < ETHER_MIN_MTU || new_mtu > BNXT_MAX_MTU) {
                PMD_DRV_LOG(ERR, "MTU requested must be within (%d, %d)\n",
-                       ETHER_MIN_MTU, max_dev_mtu);
+                       ETHER_MIN_MTU, BNXT_MAX_MTU);
                return -EINVAL;
        }
 
-
        if (new_mtu > ETHER_MTU) {
                bp->flags |= BNXT_FLAG_JUMBO;
                bp->eth_dev->data->dev_conf.rxmode.offloads |=
@@ -3219,7 +3227,9 @@ skip_init:
                mz_name[RTE_MEMZONE_NAMESIZE - 1] = 0;
                mz = rte_memzone_lookup(mz_name);
                total_alloc_len = RTE_CACHE_LINE_ROUNDUP(
-                               sizeof(struct rx_port_stats) + 512);
+                                       sizeof(struct rx_port_stats) +
+                                       sizeof(struct rx_port_stats_ext) +
+                                       512);
                if (!mz) {
                        mz = rte_memzone_reserve(mz_name, total_alloc_len,
                                        SOCKET_ID_ANY,
@@ -3255,7 +3265,9 @@ skip_init:
                mz_name[RTE_MEMZONE_NAMESIZE - 1] = 0;
                mz = rte_memzone_lookup(mz_name);
                total_alloc_len = RTE_CACHE_LINE_ROUNDUP(
-                               sizeof(struct tx_port_stats) + 512);
+                                       sizeof(struct tx_port_stats) +
+                                       sizeof(struct tx_port_stats_ext) +
+                                       512);
                if (!mz) {
                        mz = rte_memzone_reserve(mz_name,
                                        total_alloc_len,
@@ -3286,8 +3298,30 @@ skip_init:
                bp->hw_tx_port_stats_map = mz_phys_addr;
 
                bp->flags |= BNXT_FLAG_PORT_STATS;
+
+               /* Display extended statistics if FW supports it */
+               if (bp->hwrm_spec_code < HWRM_SPEC_CODE_1_8_4 ||
+                   bp->hwrm_spec_code == HWRM_SPEC_CODE_1_9_0)
+                       goto skip_ext_stats;
+
+               bp->hw_rx_port_stats_ext = (void *)
+                       (bp->hw_rx_port_stats + sizeof(struct rx_port_stats));
+               bp->hw_rx_port_stats_ext_map = bp->hw_rx_port_stats_map +
+                       sizeof(struct rx_port_stats);
+               bp->flags |= BNXT_FLAG_EXT_RX_PORT_STATS;
+
+
+               if (bp->hwrm_spec_code < HWRM_SPEC_CODE_1_9_2) {
+                       bp->hw_tx_port_stats_ext = (void *)
+                       (bp->hw_tx_port_stats + sizeof(struct tx_port_stats));
+                       bp->hw_tx_port_stats_ext_map =
+                               bp->hw_tx_port_stats_map +
+                               sizeof(struct tx_port_stats);
+                       bp->flags |= BNXT_FLAG_EXT_TX_PORT_STATS;
+               }
        }
 
+skip_ext_stats:
        rc = bnxt_alloc_hwrm_resources(bp);
        if (rc) {
                PMD_DRV_LOG(ERR,
@@ -3467,10 +3501,6 @@ bnxt_dev_uninit(struct rte_eth_dev *eth_dev)
        bnxt_disable_int(bp);
        bnxt_free_int(bp);
        bnxt_free_mem(bp);
-       if (eth_dev->data->mac_addrs != NULL) {
-               rte_free(eth_dev->data->mac_addrs);
-               eth_dev->data->mac_addrs = NULL;
-       }
        if (bp->grp_info != NULL) {
                rte_free(bp->grp_info);
                bp->grp_info = NULL;
@@ -3508,7 +3538,11 @@ static int bnxt_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 
 static int bnxt_pci_remove(struct rte_pci_device *pci_dev)
 {
-       return rte_eth_dev_pci_generic_remove(pci_dev, bnxt_dev_uninit);
+       if (rte_eal_process_type() == RTE_PROC_PRIMARY)
+               return rte_eth_dev_pci_generic_remove(pci_dev,
+                               bnxt_dev_uninit);
+       else
+               return rte_eth_dev_pci_generic_remove(pci_dev, NULL);
 }
 
 static struct rte_pci_driver bnxt_rte_pmd = {
@@ -3535,7 +3569,7 @@ bool is_bnxt_supported(struct rte_eth_dev *dev)
 
 RTE_INIT(bnxt_init_log)
 {
-       bnxt_logtype_driver = rte_log_register("pmd.bnxt.driver");
+       bnxt_logtype_driver = rte_log_register("pmd.net.bnxt.driver");
        if (bnxt_logtype_driver >= 0)
                rte_log_set_level(bnxt_logtype_driver, RTE_LOG_INFO);
 }