Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[pandora-kernel.git] / drivers / net / ixgbe / ixgbe_main.c
index 79f60e8..50709da 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/in.h>
 #include <linux/ip.h>
 #include <linux/tcp.h>
+#include <linux/pkt_sched.h>
 #include <linux/ipv6.h>
 #include <net/checksum.h>
 #include <net/ip6_checksum.h>
@@ -3808,8 +3809,9 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
                adapter->atr_sample_rate = 20;
                adapter->fdir_pballoc = 0;
 #ifdef IXGBE_FCOE
-               adapter->flags |= IXGBE_FLAG_FCOE_ENABLED;
-               adapter->ring_feature[RING_F_FCOE].indices = IXGBE_FCRETA_SIZE;
+               adapter->flags |= IXGBE_FLAG_FCOE_CAPABLE;
+               adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED;
+               adapter->ring_feature[RING_F_FCOE].indices = 0;
 #endif /* IXGBE_FCOE */
        }
 
@@ -5127,9 +5129,6 @@ static int ixgbe_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
        int count = 0;
        unsigned int f;
 
-       r_idx = skb->queue_mapping;
-       tx_ring = &adapter->tx_ring[r_idx];
-
        if (adapter->vlgrp && vlan_tx_tag_present(skb)) {
                tx_flags |= vlan_tx_tag_get(skb);
                if (adapter->flags & IXGBE_FLAG_DCB_ENABLED) {
@@ -5139,11 +5138,19 @@ static int ixgbe_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
                tx_flags <<= IXGBE_TX_FLAGS_VLAN_SHIFT;
                tx_flags |= IXGBE_TX_FLAGS_VLAN;
        } else if (adapter->flags & IXGBE_FLAG_DCB_ENABLED) {
-               tx_flags |= (skb->queue_mapping << 13);
-               tx_flags <<= IXGBE_TX_FLAGS_VLAN_SHIFT;
-               tx_flags |= IXGBE_TX_FLAGS_VLAN;
+               if (skb->priority != TC_PRIO_CONTROL) {
+                       tx_flags |= (skb->queue_mapping << 13);
+                       tx_flags <<= IXGBE_TX_FLAGS_VLAN_SHIFT;
+                       tx_flags |= IXGBE_TX_FLAGS_VLAN;
+               } else {
+                       skb->queue_mapping =
+                               adapter->ring_feature[RING_F_DCB].indices-1;
+               }
        }
 
+       r_idx = skb->queue_mapping;
+       tx_ring = &adapter->tx_ring[r_idx];
+
        if ((adapter->flags & IXGBE_FLAG_FCOE_ENABLED) &&
            (skb->protocol == htons(ETH_P_FCOE)))
                tx_flags |= IXGBE_TX_FLAGS_FCOE;
@@ -5582,16 +5589,11 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
 #endif
 
 #ifdef IXGBE_FCOE
-       if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) {
+       if (adapter->flags & IXGBE_FLAG_FCOE_CAPABLE) {
                if (hw->mac.ops.get_device_caps) {
                        hw->mac.ops.get_device_caps(hw, &device_caps);
-                       if (!(device_caps & IXGBE_DEVICE_CAPS_FCOE_OFFLOADS)) {
-                               netdev->features |= NETIF_F_FCOE_CRC;
-                               netdev->features |= NETIF_F_FSO;
-                               netdev->fcoe_ddp_xid = IXGBE_FCOE_DDP_MAX - 1;
-                       } else {
-                               adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED;
-                       }
+                       if (device_caps & IXGBE_DEVICE_CAPS_FCOE_OFFLOADS)
+                               adapter->flags &= ~IXGBE_FLAG_FCOE_CAPABLE;
                }
        }
 #endif /* IXGBE_FCOE */
@@ -5640,7 +5642,6 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
                adapter->wol = 0;
                break;
        }
-       device_init_wakeup(&adapter->pdev->dev, true);
        device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
 
        /* pick up the PCI bus settings for reporting later */