ixgbe: Add support for setting CC bit when SR-IOV is enabled
authorAlexander Duyck <alexander.h.duyck@intel.com>
Wed, 29 Jun 2011 05:43:27 +0000 (05:43 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Mon, 29 Aug 2011 08:04:12 +0000 (01:04 -0700)
This change makes it so that the CC bit in the descriptor is set when
SR-IOV is enabled.  This is needed in order to support offloading
functionality when passing traffic over the internal TX switch.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index dc3b12e1533153424ae1191b26e2995cd368cbb2..58482fc3024b0b661e27b1a878511db7d33acf13 100644 (file)
@@ -97,7 +97,8 @@
 #define IXGBE_TX_FLAGS_IPV4            (u32)(1 << 4)
 #define IXGBE_TX_FLAGS_FCOE            (u32)(1 << 5)
 #define IXGBE_TX_FLAGS_FSO             (u32)(1 << 6)
-#define IXGBE_TX_FLAGS_MAPPED_AS_PAGE  (u32)(1 << 7)
+#define IXGBE_TX_FLAGS_TXSW            (u32)(1 << 7)
+#define IXGBE_TX_FLAGS_MAPPED_AS_PAGE  (u32)(1 << 8)
 #define IXGBE_TX_FLAGS_VLAN_MASK       0xffff0000
 #define IXGBE_TX_FLAGS_VLAN_PRIO_MASK  0xe0000000
 #define IXGBE_TX_FLAGS_VLAN_PRIO_SHIFT  29
index bb54d3d28419e6cd0b3d4efedb45802c5c7d7e87..d587967a65473645cf61d3a77e4dfaa4d6562325 100644 (file)
@@ -6295,7 +6295,8 @@ static bool ixgbe_tx_csum(struct ixgbe_ring *tx_ring,
        u32 type_tucmd = 0;
 
        if (skb->ip_summed != CHECKSUM_PARTIAL) {
-           if (!(tx_flags & IXGBE_TX_FLAGS_HW_VLAN))
+           if (!(tx_flags & IXGBE_TX_FLAGS_HW_VLAN) &&
+               !(tx_flags & IXGBE_TX_FLAGS_TXSW))
                        return false;
        } else {
                u8 l4_hdr = 0;
@@ -6398,6 +6399,13 @@ static __le32 ixgbe_tx_olinfo_status(u32 tx_flags, unsigned int paylen)
                                            (1 << IXGBE_ADVTXD_IDX_SHIFT));
 
 #endif
+       /*
+        * Check Context must be set if Tx switch is enabled, which it
+        * always is for case where virtual functions are running
+        */
+       if (tx_flags & IXGBE_TX_FLAGS_TXSW)
+               olinfo_status |= cpu_to_le32(IXGBE_ADVTXD_CC);
+
        return olinfo_status;
 }
 
@@ -6732,6 +6740,11 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
                return NETDEV_TX_BUSY;
        }
 
+#ifdef CONFIG_PCI_IOV
+       if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
+               tx_flags |= IXGBE_TX_FLAGS_TXSW;
+
+#endif
        /* if we have a HW VLAN tag being added default to the HW one */
        if (vlan_tx_tag_present(skb)) {
                tx_flags |= vlan_tx_tag_get(skb) << IXGBE_TX_FLAGS_VLAN_SHIFT;