@ -554,3 +554,97 @@ void ixgbe_cleanup_fcoe(struct ixgbe_adapter *adapter)
fcoe - > pool = NULL ;
}
}
/**
* ixgbe_fcoe_enable - turn on FCoE offload feature
* @ netdev : the corresponding netdev
*
* Turns on FCoE offload feature in 82599.
*
* Returns : 0 indicates success or - EINVAL on failure
*/
int ixgbe_fcoe_enable ( struct net_device * netdev )
{
int rc = - EINVAL ;
struct ixgbe_adapter * adapter = netdev_priv ( netdev ) ;
if ( ! ( adapter - > flags & IXGBE_FLAG_FCOE_CAPABLE ) )
goto out_enable ;
if ( adapter - > flags & IXGBE_FLAG_FCOE_ENABLED )
goto out_enable ;
DPRINTK ( DRV , INFO , " Enabling FCoE offload features. \n " ) ;
if ( netif_running ( netdev ) )
netdev - > netdev_ops - > ndo_stop ( netdev ) ;
ixgbe_clear_interrupt_scheme ( adapter ) ;
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 - > features | = NETIF_F_FCOE_MTU ;
netdev - > vlan_features | = NETIF_F_FCOE_CRC ;
netdev - > vlan_features | = NETIF_F_FSO ;
netdev - > vlan_features | = NETIF_F_FCOE_MTU ;
netdev - > fcoe_ddp_xid = IXGBE_FCOE_DDP_MAX - 1 ;
netdev_features_change ( netdev ) ;
ixgbe_init_interrupt_scheme ( adapter ) ;
if ( netif_running ( netdev ) )
netdev - > netdev_ops - > ndo_open ( netdev ) ;
rc = 0 ;
out_enable :
return rc ;
}
/**
* ixgbe_fcoe_disable - turn off FCoE offload feature
* @ netdev : the corresponding netdev
*
* Turns off FCoE offload feature in 82599.
*
* Returns : 0 indicates success or - EINVAL on failure
*/
int ixgbe_fcoe_disable ( struct net_device * netdev )
{
int rc = - EINVAL ;
struct ixgbe_adapter * adapter = netdev_priv ( netdev ) ;
if ( ! ( adapter - > flags & IXGBE_FLAG_FCOE_CAPABLE ) )
goto out_disable ;
if ( ! ( adapter - > flags & IXGBE_FLAG_FCOE_ENABLED ) )
goto out_disable ;
DPRINTK ( DRV , INFO , " Disabling FCoE offload features. \n " ) ;
if ( netif_running ( netdev ) )
netdev - > netdev_ops - > ndo_stop ( netdev ) ;
ixgbe_clear_interrupt_scheme ( adapter ) ;
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 - > features & = ~ NETIF_F_FCOE_MTU ;
netdev - > vlan_features & = ~ NETIF_F_FCOE_CRC ;
netdev - > vlan_features & = ~ NETIF_F_FSO ;
netdev - > vlan_features & = ~ NETIF_F_FCOE_MTU ;
netdev - > fcoe_ddp_xid = 0 ;
netdev_features_change ( netdev ) ;
ixgbe_cleanup_fcoe ( adapter ) ;
ixgbe_init_interrupt_scheme ( adapter ) ;
if ( netif_running ( netdev ) )
netdev - > netdev_ops - > ndo_open ( netdev ) ;
rc = 0 ;
out_disable :
return rc ;
}