mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 05:04:00 +08:00
ixgbe: Enable FCoE offload when DCB is enabled for 82599
Currently, FCoE offload feature is turned on when the kernel config has CONFIG_FCOE or CONFIG_FCOE_MODULE set. However, we really want to turn FCoE offload on when there is FCoE traffic passing and turn it off when it's just LAN traffic. Since FCoE depends on a lossless network provided by DCB, this allows us to have FCoE turned on/off when user turns on DCB using dcbtool. Signed-off-by: Yi Zou <yi.zou@intel.com> Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
dacac4da52
commit
0d5515894f
@ -327,6 +327,7 @@ struct ixgbe_adapter {
|
||||
#define IXGBE_FLAG_IN_SFP_MOD_TASK (u32)(1 << 25)
|
||||
#define IXGBE_FLAG_FDIR_HASH_CAPABLE (u32)(1 << 26)
|
||||
#define IXGBE_FLAG_FDIR_PERFECT_CAPABLE (u32)(1 << 27)
|
||||
#define IXGBE_FLAG_FCOE_CAPABLE (u32)(1 << 28)
|
||||
#define IXGBE_FLAG_FCOE_ENABLED (u32)(1 << 29)
|
||||
|
||||
u32 flags2;
|
||||
|
@ -139,6 +139,18 @@ static u8 ixgbe_dcbnl_set_state(struct net_device *netdev, u8 state)
|
||||
adapter->flags &= ~IXGBE_FLAG_FDIR_PERFECT_CAPABLE;
|
||||
}
|
||||
adapter->flags |= IXGBE_FLAG_DCB_ENABLED;
|
||||
#ifdef IXGBE_FCOE
|
||||
/* Turn on FCoE offload */
|
||||
if ((adapter->flags & IXGBE_FLAG_FCOE_CAPABLE) &&
|
||||
(!(adapter->flags & IXGBE_FLAG_FCOE_ENABLED))) {
|
||||
adapter->flags |= IXGBE_FLAG_FCOE_ENABLED;
|
||||
adapter->ring_feature[RING_F_FCOE].indices =
|
||||
IXGBE_FCRETA_SIZE;
|
||||
netdev->features |= NETIF_F_FCOE_CRC;
|
||||
netdev->features |= NETIF_F_FSO;
|
||||
netdev->fcoe_ddp_xid = IXGBE_FCOE_DDP_MAX - 1;
|
||||
}
|
||||
#endif /* IXGBE_FCOE */
|
||||
ixgbe_init_interrupt_scheme(adapter);
|
||||
if (netif_running(netdev))
|
||||
netdev->netdev_ops->ndo_open(netdev);
|
||||
@ -156,6 +168,18 @@ static u8 ixgbe_dcbnl_set_state(struct net_device *netdev, u8 state)
|
||||
adapter->flags |= IXGBE_FLAG_RSS_ENABLED;
|
||||
if (adapter->hw.mac.type == ixgbe_mac_82599EB)
|
||||
adapter->flags |= IXGBE_FLAG_FDIR_HASH_CAPABLE;
|
||||
|
||||
#ifdef IXGBE_FCOE
|
||||
/* Turn off FCoE offload */
|
||||
if (adapter->flags & (IXGBE_FLAG_FCOE_CAPABLE |
|
||||
IXGBE_FLAG_FCOE_ENABLED)) {
|
||||
adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED;
|
||||
adapter->ring_feature[RING_F_FCOE].indices = 0;
|
||||
netdev->features &= ~NETIF_F_FCOE_CRC;
|
||||
netdev->features &= ~NETIF_F_FSO;
|
||||
netdev->fcoe_ddp_xid = 0;
|
||||
}
|
||||
#endif /* IXGBE_FCOE */
|
||||
ixgbe_init_interrupt_scheme(adapter);
|
||||
if (netif_running(netdev))
|
||||
netdev->netdev_ops->ndo_open(netdev);
|
||||
|
@ -3806,8 +3806,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 */
|
||||
}
|
||||
|
||||
@ -5580,16 +5581,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 */
|
||||
|
Loading…
Reference in New Issue
Block a user