@ -764,73 +764,6 @@ qlcnic_get_ethtool_stats(struct net_device *dev,
qlcnic_fill_device_stats ( & index , data , & port_stats . tx ) ;
}
static int qlcnic_set_tx_csum ( struct net_device * dev , u32 data )
{
struct qlcnic_adapter * adapter = netdev_priv ( dev ) ;
if ( ( adapter - > flags & QLCNIC_ESWITCH_ENABLED ) )
return - EOPNOTSUPP ;
if ( data )
dev - > features | = ( NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM ) ;
else
dev - > features & = ~ ( NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM ) ;
return 0 ;
}
static u32 qlcnic_get_tx_csum ( struct net_device * dev )
{
return dev - > features & NETIF_F_IP_CSUM ;
}
static u32 qlcnic_get_rx_csum ( struct net_device * dev )
{
struct qlcnic_adapter * adapter = netdev_priv ( dev ) ;
return adapter - > rx_csum ;
}
static int qlcnic_set_rx_csum ( struct net_device * dev , u32 data )
{
struct qlcnic_adapter * adapter = netdev_priv ( dev ) ;
if ( ( adapter - > flags & QLCNIC_ESWITCH_ENABLED ) )
return - EOPNOTSUPP ;
if ( ! ! data ) {
adapter - > rx_csum = ! ! data ;
return 0 ;
}
if ( dev - > features & NETIF_F_LRO ) {
if ( qlcnic_config_hw_lro ( adapter , QLCNIC_LRO_DISABLED ) )
return - EIO ;
dev - > features & = ~ NETIF_F_LRO ;
qlcnic_send_lro_cleanup ( adapter ) ;
dev_info ( & adapter - > pdev - > dev ,
" disabling LRO as rx_csum is off \n " ) ;
}
adapter - > rx_csum = ! ! data ;
return 0 ;
}
static u32 qlcnic_get_tso ( struct net_device * dev )
{
return ( dev - > features & ( NETIF_F_TSO | NETIF_F_TSO6 ) ) ! = 0 ;
}
static int qlcnic_set_tso ( struct net_device * dev , u32 data )
{
struct qlcnic_adapter * adapter = netdev_priv ( dev ) ;
if ( ! ( adapter - > capabilities & QLCNIC_FW_CAPABILITY_TSO ) )
return - EOPNOTSUPP ;
if ( data )
dev - > features | = ( NETIF_F_TSO | NETIF_F_TSO6 ) ;
else
dev - > features & = ~ ( NETIF_F_TSO | NETIF_F_TSO6 ) ;
return 0 ;
}
static int qlcnic_set_led ( struct net_device * dev ,
enum ethtool_phys_id_state state )
{
@ -993,50 +926,6 @@ static int qlcnic_get_intr_coalesce(struct net_device *netdev,
return 0 ;
}
static int qlcnic_set_flags ( struct net_device * netdev , u32 data )
{
struct qlcnic_adapter * adapter = netdev_priv ( netdev ) ;
int hw_lro ;
if ( ethtool_invalid_flags ( netdev , data , ETH_FLAG_LRO ) )
return - EINVAL ;
if ( data & ETH_FLAG_LRO ) {
if ( netdev - > features & NETIF_F_LRO )
return 0 ;
if ( ! ( adapter - > capabilities & QLCNIC_FW_CAPABILITY_HW_LRO ) )
return - EINVAL ;
if ( ! adapter - > rx_csum ) {
dev_info ( & adapter - > pdev - > dev , " rx csum is off, "
" cannot toggle lro \n " ) ;
return - EINVAL ;
}
hw_lro = QLCNIC_LRO_ENABLED ;
netdev - > features | = NETIF_F_LRO ;
} else {
if ( ! ( netdev - > features & NETIF_F_LRO ) )
return 0 ;
hw_lro = 0 ;
netdev - > features & = ~ NETIF_F_LRO ;
}
if ( qlcnic_config_hw_lro ( adapter , hw_lro ) )
return - EIO ;
if ( ( hw_lro = = 0 ) & & qlcnic_send_lro_cleanup ( adapter ) )
return - EIO ;
return 0 ;
}
static u32 qlcnic_get_msglevel ( struct net_device * netdev )
{
struct qlcnic_adapter * adapter = netdev_priv ( netdev ) ;
@ -1064,23 +953,14 @@ const struct ethtool_ops qlcnic_ethtool_ops = {
. set_ringparam = qlcnic_set_ringparam ,
. get_pauseparam = qlcnic_get_pauseparam ,
. set_pauseparam = qlcnic_set_pauseparam ,
. get_tx_csum = qlcnic_get_tx_csum ,
. set_tx_csum = qlcnic_set_tx_csum ,
. set_sg = ethtool_op_set_sg ,
. get_tso = qlcnic_get_tso ,
. set_tso = qlcnic_set_tso ,
. get_wol = qlcnic_get_wol ,
. set_wol = qlcnic_set_wol ,
. self_test = qlcnic_diag_test ,
. get_strings = qlcnic_get_strings ,
. get_ethtool_stats = qlcnic_get_ethtool_stats ,
. get_sset_count = qlcnic_get_sset_count ,
. get_rx_csum = qlcnic_get_rx_csum ,
. set_rx_csum = qlcnic_set_rx_csum ,
. get_coalesce = qlcnic_get_intr_coalesce ,
. set_coalesce = qlcnic_set_intr_coalesce ,
. get_flags = ethtool_op_get_flags ,
. set_flags = qlcnic_set_flags ,
. set_phys_id = qlcnic_set_led ,
. set_msglevel = qlcnic_set_msglevel ,
. get_msglevel = qlcnic_get_msglevel ,