net/i40e: remove unnecessary void casts
[dpdk.git] / drivers / net / i40e / i40e_ethdev.c
index f3339b5..3b3f13c 100644 (file)
 /* Flow control default timer */
 #define I40E_DEFAULT_PAUSE_TIME 0xFFFFU
 
-/* Flow control default high water */
-#define I40E_DEFAULT_HIGH_WATER (0x1C40/1024)
-
-/* Flow control default low water */
-#define I40E_DEFAULT_LOW_WATER  (0x1A40/1024)
-
 /* Flow control enable fwd bit */
 #define I40E_PRTMAC_FWD_CTRL   0x00000001
 
 /* Kilobytes shift */
 #define I40E_KILOSHIFT 10
 
+/* Flow control default high water */
+#define I40E_DEFAULT_HIGH_WATER (0xF2000 >> I40E_KILOSHIFT)
+
+/* Flow control default low water */
+#define I40E_DEFAULT_LOW_WATER  (0xF2000 >> I40E_KILOSHIFT)
+
 /* Receive Average Packet Size in Byte*/
 #define I40E_PACKET_AVERAGE_SIZE 128
 
@@ -250,6 +250,7 @@ static int i40e_dev_configure(struct rte_eth_dev *dev);
 static int i40e_dev_start(struct rte_eth_dev *dev);
 static void i40e_dev_stop(struct rte_eth_dev *dev);
 static void i40e_dev_close(struct rte_eth_dev *dev);
+static int  i40e_dev_reset(struct rte_eth_dev *dev);
 static void i40e_dev_promiscuous_enable(struct rte_eth_dev *dev);
 static void i40e_dev_promiscuous_disable(struct rte_eth_dev *dev);
 static void i40e_dev_allmulticast_enable(struct rte_eth_dev *dev);
@@ -449,6 +450,7 @@ static const struct eth_dev_ops i40e_eth_dev_ops = {
        .dev_start                    = i40e_dev_start,
        .dev_stop                     = i40e_dev_stop,
        .dev_close                    = i40e_dev_close,
+       .dev_reset                    = i40e_dev_reset,
        .promiscuous_enable           = i40e_dev_promiscuous_enable,
        .promiscuous_disable          = i40e_dev_promiscuous_disable,
        .allmulticast_enable          = i40e_dev_allmulticast_enable,
@@ -1594,7 +1596,8 @@ i40e_vsi_queues_unbind_intr(struct i40e_vsi *vsi)
 
 static void
 __vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t msix_vect,
-                      int base_queue, int nb_queue)
+                      int base_queue, int nb_queue,
+                      uint16_t itr_idx)
 {
        int i;
        uint32_t val;
@@ -1603,7 +1606,7 @@ __vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t msix_vect,
        /* Bind all RX queues to allocated MSIX interrupt */
        for (i = 0; i < nb_queue; i++) {
                val = (msix_vect << I40E_QINT_RQCTL_MSIX_INDX_SHIFT) |
-                       I40E_QINT_RQCTL_ITR_INDX_MASK |
+                       itr_idx << I40E_QINT_RQCTL_ITR_INDX_SHIFT |
                        ((base_queue + i + 1) <<
                         I40E_QINT_RQCTL_NEXTQ_INDX_SHIFT) |
                        (0 << I40E_QINT_RQCTL_NEXTQ_TYPE_SHIFT) |
@@ -1666,7 +1669,7 @@ __vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t msix_vect,
 }
 
 void
-i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi)
+i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t itr_idx)
 {
        struct rte_eth_dev *dev = vsi->adapter->eth_dev;
        struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
@@ -1694,7 +1697,8 @@ i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi)
        /* VF bind interrupt */
        if (vsi->type == I40E_VSI_SRIOV) {
                __vsi_queues_bind_intr(vsi, msix_vect,
-                                      vsi->base_queue, vsi->nb_qps);
+                                      vsi->base_queue, vsi->nb_qps,
+                                      itr_idx);
                return;
        }
 
@@ -1720,7 +1724,8 @@ i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi)
                        /* no enough msix_vect, map all to one */
                        __vsi_queues_bind_intr(vsi, msix_vect,
                                               vsi->base_queue + i,
-                                              vsi->nb_used_qps - i);
+                                              vsi->nb_used_qps - i,
+                                              itr_idx);
                        for (; !!record && i < vsi->nb_used_qps; i++)
                                intr_handle->intr_vec[queue_idx + i] =
                                        msix_vect;
@@ -1728,7 +1733,8 @@ i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi)
                }
                /* 1:1 queue/msix_vect mapping */
                __vsi_queues_bind_intr(vsi, msix_vect,
-                                      vsi->base_queue + i, 1);
+                                      vsi->base_queue + i, 1,
+                                      itr_idx);
                if (!!record)
                        intr_handle->intr_vec[queue_idx + i] = msix_vect;
 
@@ -1957,19 +1963,21 @@ i40e_dev_start(struct rte_eth_dev *dev)
        /* Map queues with MSIX interrupt */
        main_vsi->nb_used_qps = dev->data->nb_rx_queues -
                pf->nb_cfg_vmdq_vsi * RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM;
-       i40e_vsi_queues_bind_intr(main_vsi);
+       i40e_vsi_queues_bind_intr(main_vsi, I40E_ITR_INDEX_DEFAULT);
        i40e_vsi_enable_queues_intr(main_vsi);
 
        /* Map VMDQ VSI queues with MSIX interrupt */
        for (i = 0; i < pf->nb_cfg_vmdq_vsi; i++) {
                pf->vmdq[i].vsi->nb_used_qps = RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM;
-               i40e_vsi_queues_bind_intr(pf->vmdq[i].vsi);
+               i40e_vsi_queues_bind_intr(pf->vmdq[i].vsi,
+                                         I40E_ITR_INDEX_DEFAULT);
                i40e_vsi_enable_queues_intr(pf->vmdq[i].vsi);
        }
 
        /* enable FDIR MSIX interrupt */
        if (pf->fdir.fdir_vsi) {
-               i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi);
+               i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi,
+                                         I40E_ITR_INDEX_NONE);
                i40e_vsi_enable_queues_intr(pf->fdir.fdir_vsi);
        }
 
@@ -2165,6 +2173,32 @@ i40e_dev_close(struct rte_eth_dev *dev)
        I40E_WRITE_FLUSH(hw);
 }
 
+/*
+ * Reset PF device only to re-initialize resources in PMD layer
+ */
+static int
+i40e_dev_reset(struct rte_eth_dev *dev)
+{
+       int ret;
+
+       /* When a DPDK PMD PF begin to reset PF port, it should notify all
+        * its VF to make them align with it. The detailed notification
+        * mechanism is PMD specific. As to i40e PF, it is rather complex.
+        * To avoid unexpected behavior in VF, currently reset of PF with
+        * SR-IOV activation is not supported. It might be supported later.
+        */
+       if (dev->data->sriov.active)
+               return -ENOTSUP;
+
+       ret = eth_i40e_dev_uninit(dev);
+       if (ret)
+               return ret;
+
+       ret = eth_i40e_dev_init(dev);
+
+       return ret;
+}
+
 static void
 i40e_dev_promiscuous_enable(struct rte_eth_dev *dev)
 {
@@ -3225,6 +3259,13 @@ i40e_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
        struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
 
        fc_conf->pause_time = pf->fc_conf.pause_time;
+
+       /* read out from register, in case they are modified by other port */
+       pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS] =
+               I40E_READ_REG(hw, I40E_GLRPB_GHW) >> I40E_KILOSHIFT;
+       pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS] =
+               I40E_READ_REG(hw, I40E_GLRPB_GLW) >> I40E_KILOSHIFT;
+
        fc_conf->high_water =  pf->fc_conf.high_water[I40E_MAX_TRAFFIC_CLASS];
        fc_conf->low_water = pf->fc_conf.low_water[I40E_MAX_TRAFFIC_CLASS];
 
@@ -3400,7 +3441,7 @@ i40e_macaddr_add(struct rte_eth_dev *dev,
                return -EINVAL;
        }
 
-       (void)rte_memcpy(&mac_filter.mac_addr, mac_addr, ETHER_ADDR_LEN);
+       rte_memcpy(&mac_filter.mac_addr, mac_addr, ETHER_ADDR_LEN);
        if (dev->data->dev_conf.rxmode.hw_vlan_filter)
                mac_filter.filter_type = RTE_MACVLAN_PERFECT_MATCH;
        else
@@ -3505,10 +3546,10 @@ i40e_vf_mac_filter_set(struct i40e_pf *pf,
        }
 
        if (add) {
-               (void)rte_memcpy(&old_mac, hw->mac.addr, ETHER_ADDR_LEN);
-               (void)rte_memcpy(hw->mac.addr, new_mac->addr_bytes,
+               rte_memcpy(&old_mac, hw->mac.addr, ETHER_ADDR_LEN);
+               rte_memcpy(hw->mac.addr, new_mac->addr_bytes,
                                ETHER_ADDR_LEN);
-               (void)rte_memcpy(&mac_filter.mac_addr, &filter->mac_addr,
+               rte_memcpy(&mac_filter.mac_addr, &filter->mac_addr,
                                 ETHER_ADDR_LEN);
 
                mac_filter.filter_type = filter->filter_type;
@@ -3519,7 +3560,7 @@ i40e_vf_mac_filter_set(struct i40e_pf *pf,
                }
                ether_addr_copy(new_mac, &pf->dev_addr);
        } else {
-               (void)rte_memcpy(hw->mac.addr, hw->mac.perm_addr,
+               rte_memcpy(hw->mac.addr, hw->mac.perm_addr,
                                ETHER_ADDR_LEN);
                ret = i40e_vsi_delete_mac(vf->vsi, &filter->mac_addr);
                if (ret != I40E_SUCCESS) {
@@ -4311,7 +4352,7 @@ i40e_vsi_vlan_pvid_set(struct i40e_vsi *vsi,
        vsi->info.valid_sections =
                rte_cpu_to_le_16(I40E_AQ_VSI_PROP_VLAN_VALID);
        memset(&ctxt, 0, sizeof(ctxt));
-       (void)rte_memcpy(&ctxt.info, &vsi->info, sizeof(vsi->info));
+       rte_memcpy(&ctxt.info, &vsi->info, sizeof(vsi->info));
        ctxt.seid = vsi->seid;
 
        hw = I40E_VSI_TO_HW(vsi);
@@ -4350,7 +4391,7 @@ i40e_vsi_update_tc_bandwidth(struct i40e_vsi *vsi, uint8_t enabled_tcmap)
                return ret;
        }
 
-       (void)rte_memcpy(vsi->info.qs_handle, tc_bw_data.qs_handles,
+       rte_memcpy(vsi->info.qs_handle, tc_bw_data.qs_handles,
                                        sizeof(vsi->info.qs_handle));
        return I40E_SUCCESS;
 }
@@ -4607,7 +4648,7 @@ i40e_update_default_filter_setting(struct i40e_vsi *vsi)
        if (vsi->type != I40E_VSI_MAIN)
                return I40E_ERR_CONFIG;
        memset(&def_filter, 0, sizeof(def_filter));
-       (void)rte_memcpy(def_filter.mac_addr, hw->mac.perm_addr,
+       rte_memcpy(def_filter.mac_addr, hw->mac.perm_addr,
                                        ETH_ADDR_LEN);
        def_filter.vlan_tag = 0;
        def_filter.flags = I40E_AQC_MACVLAN_DEL_PERFECT_MATCH |
@@ -4626,7 +4667,7 @@ i40e_update_default_filter_setting(struct i40e_vsi *vsi)
                        return I40E_ERR_NO_MEMORY;
                }
                mac = &f->mac_info.mac_addr;
-               (void)rte_memcpy(&mac->addr_bytes, hw->mac.perm_addr,
+               rte_memcpy(&mac->addr_bytes, hw->mac.perm_addr,
                                ETH_ADDR_LEN);
                f->mac_info.filter_type = RTE_MACVLAN_PERFECT_MATCH;
                TAILQ_INSERT_TAIL(&vsi->mac_list, f, next);
@@ -4634,7 +4675,7 @@ i40e_update_default_filter_setting(struct i40e_vsi *vsi)
 
                return ret;
        }
-       (void)rte_memcpy(&filter.mac_addr,
+       rte_memcpy(&filter.mac_addr,
                (struct ether_addr *)(hw->mac.perm_addr), ETH_ADDR_LEN);
        filter.filter_type = RTE_MACVLAN_PERFECT_MATCH;
        return i40e_vsi_add_mac(vsi, &filter);
@@ -4895,7 +4936,7 @@ i40e_vsi_setup(struct i40e_pf *pf,
                        PMD_DRV_LOG(ERR, "Failed to get VSI params");
                        goto fail_msix_alloc;
                }
-               (void)rte_memcpy(&vsi->info, &ctxt.info,
+               rte_memcpy(&vsi->info, &ctxt.info,
                        sizeof(struct i40e_aqc_vsi_properties_data));
                vsi->vsi_id = ctxt.vsi_number;
                vsi->info.valid_sections = 0;
@@ -4913,7 +4954,7 @@ i40e_vsi_setup(struct i40e_pf *pf,
                        rte_cpu_to_le_16(I40E_AQ_VSI_PROP_VLAN_VALID);
                vsi->info.port_vlan_flags = I40E_AQ_VSI_PVLAN_MODE_ALL |
                                        I40E_AQ_VSI_PVLAN_EMOD_STR_BOTH;
-               (void)rte_memcpy(&ctxt.info, &vsi->info,
+               rte_memcpy(&ctxt.info, &vsi->info,
                        sizeof(struct i40e_aqc_vsi_properties_data));
                ret = i40e_vsi_config_tc_queue_mapping(vsi, &ctxt.info,
                                                I40E_DEFAULT_TCMAP);
@@ -4934,15 +4975,15 @@ i40e_vsi_setup(struct i40e_pf *pf,
                        goto fail_msix_alloc;
                }
 
-               (void)rte_memcpy(&vsi->info.tc_mapping, &ctxt.info.tc_mapping,
+               rte_memcpy(&vsi->info.tc_mapping, &ctxt.info.tc_mapping,
                                                sizeof(vsi->info.tc_mapping));
-               (void)rte_memcpy(&vsi->info.queue_mapping,
+               rte_memcpy(&vsi->info.queue_mapping,
                                &ctxt.info.queue_mapping,
                        sizeof(vsi->info.queue_mapping));
                vsi->info.mapping_flags = ctxt.info.mapping_flags;
                vsi->info.valid_sections = 0;
 
-               (void)rte_memcpy(pf->dev_addr.addr_bytes, hw->mac.perm_addr,
+               rte_memcpy(pf->dev_addr.addr_bytes, hw->mac.perm_addr,
                                ETH_ADDR_LEN);
 
                /**
@@ -5085,7 +5126,7 @@ i40e_vsi_setup(struct i40e_pf *pf,
        }
 
        /* MAC/VLAN configuration */
-       (void)rte_memcpy(&filter.mac_addr, &broadcast, ETHER_ADDR_LEN);
+       rte_memcpy(&filter.mac_addr, &broadcast, ETHER_ADDR_LEN);
        filter.filter_type = RTE_MACVLAN_PERFECT_MATCH;
 
        ret = i40e_vsi_add_mac(vsi, &filter);
@@ -5197,7 +5238,7 @@ i40e_vsi_config_vlan_stripping(struct i40e_vsi *vsi, bool on)
        vsi->info.port_vlan_flags &= ~(I40E_AQ_VSI_PVLAN_EMOD_MASK);
        vsi->info.port_vlan_flags |= vlan_flags;
        ctxt.seid = vsi->seid;
-       (void)rte_memcpy(&ctxt.info, &vsi->info, sizeof(vsi->info));
+       rte_memcpy(&ctxt.info, &vsi->info, sizeof(vsi->info));
        ret = i40e_aq_update_vsi_params(hw, &ctxt, NULL);
        if (ret)
                PMD_DRV_LOG(INFO, "Update VSI failed to %s vlan stripping",
@@ -5991,7 +6032,7 @@ i40e_add_macvlan_filters(struct i40e_vsi *vsi,
                memset(req_list, 0, ele_buff_size);
 
                for (i = 0; i < actual_num; i++) {
-                       (void)rte_memcpy(req_list[i].mac_addr,
+                       rte_memcpy(req_list[i].mac_addr,
                                &filter[num + i].macaddr, ETH_ADDR_LEN);
                        req_list[i].vlan_tag =
                                rte_cpu_to_le_16(filter[num + i].vlan_id);
@@ -6066,7 +6107,7 @@ i40e_remove_macvlan_filters(struct i40e_vsi *vsi,
                memset(req_list, 0, ele_buff_size);
 
                for (i = 0; i < actual_num; i++) {
-                       (void)rte_memcpy(req_list[i].mac_addr,
+                       rte_memcpy(req_list[i].mac_addr,
                                &filter[num + i].macaddr, ETH_ADDR_LEN);
                        req_list[i].vlan_tag =
                                rte_cpu_to_le_16(filter[num + i].vlan_id);
@@ -6217,7 +6258,7 @@ i40e_find_all_vlan_for_mac(struct i40e_vsi *vsi,
                                                        "vlan number doesn't match");
                                                return I40E_ERR_PARAM;
                                        }
-                                       (void)rte_memcpy(&mv_f[i].macaddr,
+                                       rte_memcpy(&mv_f[i].macaddr,
                                                        addr, ETH_ADDR_LEN);
                                        mv_f[i].vlan_id =
                                                j * I40E_UINT32_BIT_SIZE + k;
@@ -6246,7 +6287,7 @@ i40e_find_all_mac_for_vlan(struct i40e_vsi *vsi,
                        PMD_DRV_LOG(ERR, "buffer number not match");
                        return I40E_ERR_PARAM;
                }
-               (void)rte_memcpy(&mv_f[i].macaddr, &f->mac_info.mac_addr,
+               rte_memcpy(&mv_f[i].macaddr, &f->mac_info.mac_addr,
                                ETH_ADDR_LEN);
                mv_f[i].vlan_id = vlan;
                mv_f[i].filter_type = f->mac_info.filter_type;
@@ -6282,7 +6323,7 @@ i40e_vsi_remove_all_macvlan_filter(struct i40e_vsi *vsi)
        i = 0;
        if (vsi->vlan_num == 0) {
                TAILQ_FOREACH(f, &vsi->mac_list, next) {
-                       (void)rte_memcpy(&mv_f[i].macaddr,
+                       rte_memcpy(&mv_f[i].macaddr,
                                &f->mac_info.mac_addr, ETH_ADDR_LEN);
                        mv_f[i].filter_type = f->mac_info.filter_type;
                        mv_f[i].vlan_id = 0;
@@ -6452,7 +6493,7 @@ i40e_vsi_add_mac(struct i40e_vsi *vsi, struct i40e_mac_filter_info *mac_filter)
 
        for (i = 0; i < vlan_num; i++) {
                mv_f[i].filter_type = mac_filter->filter_type;
-               (void)rte_memcpy(&mv_f[i].macaddr, &mac_filter->mac_addr,
+               rte_memcpy(&mv_f[i].macaddr, &mac_filter->mac_addr,
                                ETH_ADDR_LEN);
        }
 
@@ -6475,7 +6516,7 @@ i40e_vsi_add_mac(struct i40e_vsi *vsi, struct i40e_mac_filter_info *mac_filter)
                ret = I40E_ERR_NO_MEMORY;
                goto DONE;
        }
-       (void)rte_memcpy(&f->mac_info.mac_addr, &mac_filter->mac_addr,
+       rte_memcpy(&f->mac_info.mac_addr, &mac_filter->mac_addr,
                        ETH_ADDR_LEN);
        f->mac_info.filter_type = mac_filter->filter_type;
        TAILQ_INSERT_TAIL(&vsi->mac_list, f, next);
@@ -6522,7 +6563,7 @@ i40e_vsi_delete_mac(struct i40e_vsi *vsi, struct ether_addr *addr)
 
        for (i = 0; i < vlan_num; i++) {
                mv_f[i].filter_type = filter_type;
-               (void)rte_memcpy(&mv_f[i].macaddr, &f->mac_info.mac_addr,
+               rte_memcpy(&mv_f[i].macaddr, &f->mac_info.mac_addr,
                                ETH_ADDR_LEN);
        }
        if (filter_type == RTE_MACVLAN_PERFECT_MATCH ||
@@ -9260,16 +9301,22 @@ i40e_dev_sync_phy_type(struct i40e_hw *hw)
        enum i40e_status_code status;
        struct i40e_aq_get_phy_abilities_resp phy_ab;
        int ret = -ENOTSUP;
+       int retries = 0;
 
        status = i40e_aq_get_phy_capabilities(hw, false, true, &phy_ab,
                                              NULL);
 
-       if (status) {
+       while (status) {
                PMD_INIT_LOG(WARNING, "Failed to sync phy type: status=%d",
                        status);
-               return ret;
+               retries++;
+               rte_delay_us(100000);
+               if  (retries < 5)
+                       status = i40e_aq_get_phy_capabilities(hw, false,
+                                       true, &phy_ab, NULL);
+               else
+                       return ret;
        }
-
        return 0;
 }
 
@@ -10242,9 +10289,9 @@ i40e_vsi_config_tc(struct i40e_vsi *vsi, uint8_t tc_map)
                goto out;
        }
        /* update the local VSI info with updated queue map */
-       (void)rte_memcpy(&vsi->info.tc_mapping, &ctxt.info.tc_mapping,
+       rte_memcpy(&vsi->info.tc_mapping, &ctxt.info.tc_mapping,
                                        sizeof(vsi->info.tc_mapping));
-       (void)rte_memcpy(&vsi->info.queue_mapping,
+       rte_memcpy(&vsi->info.queue_mapping,
                        &ctxt.info.queue_mapping,
                sizeof(vsi->info.queue_mapping));
        vsi->info.mapping_flags = ctxt.info.mapping_flags;