OFED-3.5/NES: Updated backports to be applied on top of the previously 
submitted backport patch.

Signed-off-by: Tatyana Nikolova <[email protected]>
---
 drivers/infiniband/hw/nes/nes_hw.c  |   11 ++++++++
 drivers/infiniband/hw/nes/nes_hw.h  |    3 ++
 drivers/infiniband/hw/nes/nes_nic.c |   49 ++++++++++++++++++++++++++++------
 3 files changed, 54 insertions(+), 9 deletions(-)

diff --git a/drivers/infiniband/hw/nes/nes_hw.c 
b/drivers/infiniband/hw/nes/nes_hw.c
index d42c9f4..151cefe 100644
--- a/drivers/infiniband/hw/nes/nes_hw.c
+++ b/drivers/infiniband/hw/nes/nes_hw.c
@@ -2951,7 +2951,18 @@ void nes_nic_ce_handler(struct nes_device *nesdev, 
struct nes_hw_nic_cq *cq)
                                        nes_debug(NES_DBG_CQ, "%s: Reporting 
stripped VLAN packet. Tag = 0x%04X\n",
                                                        nesvnic->netdev->name, 
vlan_tag);
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
+                                       if (nesvnic->vlan_grp != NULL) {
+                                               if (nes_use_lro)
+                                                       
lro_vlan_hwaccel_receive_skb(&nesvnic->lro_mgr, rx_skb,
+                                                               
nesvnic->vlan_grp, vlan_tag, NULL);
+                                               else
+                                                       
vlan_hwaccel_receive_skb(rx_skb, nesvnic->vlan_grp, vlan_tag);
+                                               goto skip_rx_indicate0;
+                                       }
+#endif
                                        __vlan_hwaccel_put_tag(rx_skb, 
vlan_tag);
+
                                }
                                if (nes_use_lro)
                                        lro_receive_skb(&nesvnic->lro_mgr, 
rx_skb, NULL);
diff --git a/drivers/infiniband/hw/nes/nes_hw.h 
b/drivers/infiniband/hw/nes/nes_hw.h
index d748e4b..b4a31de 100644
--- a/drivers/infiniband/hw/nes/nes_hw.h
+++ b/drivers/infiniband/hw/nes/nes_hw.h
@@ -1236,6 +1236,9 @@ struct nes_vnic {
        /* void *mem; */
        struct nes_device *nesdev;
        struct net_device *netdev;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
+       struct vlan_group *vlan_grp;
+#endif
        atomic_t          rx_skbs_needed;
        atomic_t          rx_skb_timer_running;
        int               budget;
diff --git a/drivers/infiniband/hw/nes/nes_nic.c 
b/drivers/infiniband/hw/nes/nes_nic.c
index 8544d0a..864469f 100644
--- a/drivers/infiniband/hw/nes/nes_nic.c
+++ b/drivers/infiniband/hw/nes/nes_nic.c
@@ -1597,6 +1597,33 @@ static const struct ethtool_ops nes_ethtool_ops = {
        .set_pauseparam = nes_netdev_set_pauseparam,
 };
 
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
+static void nes_netdev_vlan_rx_register(struct net_device *netdev, struct 
vlan_group *grp)
+{
+       struct nes_vnic *nesvnic = netdev_priv(netdev);
+       struct nes_device *nesdev = nesvnic->nesdev;
+       struct nes_adapter *nesadapter = nesdev->nesadapter;
+       u32 u32temp;
+       unsigned long flags;
+
+       spin_lock_irqsave(&nesadapter->phy_lock, flags);
+       nesvnic->vlan_grp = grp;
+
+       nes_debug(NES_DBG_NETDEV, "%s: %s\n", __func__, netdev->name);
+
+       /* Enable/Disable VLAN Stripping */
+       u32temp = nes_read_indexed(nesdev, NES_IDX_PCIX_DIAG);
+       if (grp)
+               u32temp &= 0xfdffffff;
+       else
+               u32temp |= 0x02000000;
+
+       nes_write_indexed(nesdev, NES_IDX_PCIX_DIAG, u32temp);
+       spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
+}
+#endif
+
 static void nes_vlan_mode(struct net_device *netdev, struct nes_device 
*nesdev, netdev_features_t features)
 {
        struct nes_adapter *nesadapter = nesdev->nesadapter;
@@ -1618,6 +1645,7 @@ static void nes_vlan_mode(struct net_device *netdev, 
struct nes_device *nesdev,
        spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
 }
 
+
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
 static netdev_features_t nes_fix_features(struct net_device *netdev, 
netdev_features_t features)
 {
@@ -1656,6 +1684,9 @@ static const struct net_device_ops nes_netdev_ops = {
        .ndo_set_rx_mode        = nes_netdev_set_multicast_list,
        .ndo_change_mtu         = nes_netdev_change_mtu,
        .ndo_validate_addr      = eth_validate_addr,
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
+       .ndo_vlan_rx_register   = nes_netdev_vlan_rx_register,
+#endif
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
        .ndo_fix_features       = nes_fix_features,
        .ndo_set_features       = nes_set_features,
@@ -1691,12 +1722,10 @@ struct net_device *nes_netdev_init(struct nes_device 
*nesdev,
        netdev->hard_header_len = ETH_HLEN;
        netdev->addr_len = ETH_ALEN;
        netdev->type = ARPHRD_ETHER;
-       netdev->features = NETIF_F_HIGHDMA;
        netdev->netdev_ops = &nes_netdev_ops;
        netdev->ethtool_ops = &nes_ethtool_ops;
        netif_napi_add(netdev, &nesvnic->napi, nes_netdev_poll, 128);
        nes_debug(NES_DBG_INIT, "Enabling VLAN Insert/Delete.\n");
-       netdev->features |= NETIF_F_HW_VLAN_TX;
 
        /* Fill in the port structure */
        nesvnic->netdev = netdev;
@@ -1723,19 +1752,20 @@ struct net_device *nes_netdev_init(struct nes_device 
*nesdev,
        netdev->dev_addr[5] = (u8)u64temp;
        memcpy(netdev->perm_addr, netdev->dev_addr, 6);
 
-       netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
+       netdev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM | 
NETIF_F_HW_VLAN_RX;
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
-       netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_IP_CSUM |
-                             NETIF_F_HW_VLAN_RX;
-       netdev->features |= netdev->hw_features;
-       netdev->hw_features |= NETIF_F_LRO;
+       netdev->hw_features |= netdev->features | NETIF_F_LRO;
 #endif
+       netdev->features |= NETIF_F_HIGHDMA | NETIF_F_HW_VLAN_TX;
+
        if ((nesvnic->logical_port < 2) || (nesdev->nesadapter->hw_rev != 
NE020_REV)) {
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(3,3,0))
+               netdev->features |= NETIF_F_TSO;
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
                netdev->hw_features |= NETIF_F_TSO;
 #endif
-               netdev->features |= NETIF_F_TSO | NETIF_F_GSO;
+#endif
        }
 
        nes_debug(NES_DBG_INIT, "nesvnic = %p, reported features = 0x%lX, QPid 
= %d,"
@@ -1864,8 +1894,9 @@ struct net_device *nes_netdev_init(struct nes_device 
*nesdev,
                nes_init_phy(nesdev);
        }
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
        nes_vlan_mode(netdev, nesdev, netdev->features);
-
+#endif
        return netdev;
 }
 
-- 
1.7.4.2

_______________________________________________
ewg mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg

Reply via email to