qed*: HSI renaming for different types of HW
[linux-2.6-microblaze.git] / drivers / net / ethernet / qlogic / qede / qede_main.c
index 8f9b3eb..9292ca2 100644 (file)
@@ -545,6 +545,7 @@ static const struct net_device_ops qede_netdev_ops = {
 #endif
        .ndo_vlan_rx_add_vid = qede_vlan_rx_add_vid,
        .ndo_vlan_rx_kill_vid = qede_vlan_rx_kill_vid,
+       .ndo_fix_features = qede_fix_features,
        .ndo_set_features = qede_set_features,
        .ndo_get_stats64 = qede_get_stats64,
 #ifdef CONFIG_QED_SRIOV
@@ -572,6 +573,7 @@ static const struct net_device_ops qede_netdev_vf_ops = {
        .ndo_change_mtu = qede_change_mtu,
        .ndo_vlan_rx_add_vid = qede_vlan_rx_add_vid,
        .ndo_vlan_rx_kill_vid = qede_vlan_rx_kill_vid,
+       .ndo_fix_features = qede_fix_features,
        .ndo_set_features = qede_set_features,
        .ndo_get_stats64 = qede_get_stats64,
        .ndo_udp_tunnel_add = qede_udp_tunnel_add,
@@ -589,6 +591,7 @@ static const struct net_device_ops qede_netdev_vf_xdp_ops = {
        .ndo_change_mtu = qede_change_mtu,
        .ndo_vlan_rx_add_vid = qede_vlan_rx_add_vid,
        .ndo_vlan_rx_kill_vid = qede_vlan_rx_kill_vid,
+       .ndo_fix_features = qede_fix_features,
        .ndo_set_features = qede_set_features,
        .ndo_get_stats64 = qede_get_stats64,
        .ndo_udp_tunnel_add = qede_udp_tunnel_add,
@@ -676,7 +679,7 @@ static void qede_init_ndev(struct qede_dev *edev)
        ndev->priv_flags |= IFF_UNICAST_FLT;
 
        /* user-changeble features */
-       hw_features = NETIF_F_GRO | NETIF_F_SG |
+       hw_features = NETIF_F_GRO | NETIF_F_GRO_HW | NETIF_F_SG |
                      NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
                      NETIF_F_TSO | NETIF_F_TSO6;
 
@@ -1068,10 +1071,6 @@ static void __qede_remove(struct pci_dev *pdev, enum qede_remove_mode mode)
 
        pci_set_drvdata(pdev, NULL);
 
-       /* Release edev's reference to XDP's bpf if such exist */
-       if (edev->xdp_prog)
-               bpf_prog_put(edev->xdp_prog);
-
        /* Use global ops since we've freed edev */
        qed_ops->common->slowpath_stop(cdev);
        if (system_state == SYSTEM_POWER_OFF)
@@ -1148,7 +1147,7 @@ static void qede_free_mem_sb(struct qede_dev *edev, struct qed_sb_info *sb_info,
 static int qede_alloc_mem_sb(struct qede_dev *edev,
                             struct qed_sb_info *sb_info, u16 sb_id)
 {
-       struct status_block *sb_virt;
+       struct status_block_e4 *sb_virt;
        dma_addr_t sb_phys;
        int rc;
 
@@ -1232,18 +1231,9 @@ static int qede_alloc_sge_mem(struct qede_dev *edev, struct qede_rx_queue *rxq)
        dma_addr_t mapping;
        int i;
 
-       /* Don't perform FW aggregations in case of XDP */
-       if (edev->xdp_prog)
-               edev->gro_disable = 1;
-
        if (edev->gro_disable)
                return 0;
 
-       if (edev->ndev->mtu > PAGE_SIZE) {
-               edev->gro_disable = 1;
-               return 0;
-       }
-
        for (i = 0; i < ETH_TPA_MAX_AGGS_NUM; i++) {
                struct qede_agg_info *tpa_info = &rxq->tpa_info[i];
                struct sw_rx_data *replace_buf = &tpa_info->buffer;
@@ -1273,6 +1263,7 @@ static int qede_alloc_sge_mem(struct qede_dev *edev, struct qede_rx_queue *rxq)
 err:
        qede_free_sge_mem(edev, rxq);
        edev->gro_disable = 1;
+       edev->ndev->features &= ~NETIF_F_GRO_HW;
        return -ENOMEM;
 }
 
@@ -1515,7 +1506,7 @@ static void qede_init_fp(struct qede_dev *edev)
                         edev->ndev->name, queue_id);
        }
 
-       edev->gro_disable = !(edev->ndev->features & NETIF_F_GRO);
+       edev->gro_disable = !(edev->ndev->features & NETIF_F_GRO_HW);
 }
 
 static int qede_set_real_num_queues(struct qede_dev *edev)