diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-20 13:43:21 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-20 13:43:21 -0700 | 
| commit | 06f4e926d256d902dd9a53dcb400fd74974ce087 (patch) | |
| tree | 0b438b67f5f0eff6fd617bc497a9dace6164a488 /drivers/net/gianfar_ethtool.c | |
| parent | 8e7bfcbab3825d1b404d615cb1b54f44ff81f981 (diff) | |
| parent | d93515611bbc70c2fe4db232e5feb448ed8e4cc9 (diff) | |
| download | olio-linux-3.10-06f4e926d256d902dd9a53dcb400fd74974ce087.tar.xz olio-linux-3.10-06f4e926d256d902dd9a53dcb400fd74974ce087.zip  | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1446 commits)
  macvlan: fix panic if lowerdev in a bond
  tg3: Add braces around 5906 workaround.
  tg3: Fix NETIF_F_LOOPBACK error
  macvlan: remove one synchronize_rcu() call
  networking: NET_CLS_ROUTE4 depends on INET
  irda: Fix error propagation in ircomm_lmp_connect_response()
  irda: Kill set but unused variable 'bytes' in irlan_check_command_param()
  irda: Kill set but unused variable 'clen' in ircomm_connect_indication()
  rxrpc: Fix set but unused variable 'usage' in rxrpc_get_transport()
  be2net: Kill set but unused variable 'req' in lancer_fw_download()
  irda: Kill set but unused vars 'saddr' and 'daddr' in irlan_provider_connect_indication()
  atl1c: atl1c_resume() is only used when CONFIG_PM_SLEEP is defined.
  rxrpc: Fix set but unused variable 'usage' in rxrpc_get_peer().
  rxrpc: Kill set but unused variable 'local' in rxrpc_UDP_error_handler()
  rxrpc: Kill set but unused variable 'sp' in rxrpc_process_connection()
  rxrpc: Kill set but unused variable 'sp' in rxrpc_rotate_tx_window()
  pkt_sched: Kill set but unused variable 'protocol' in tc_classify()
  isdn: capi: Use pr_debug() instead of ifdefs.
  tg3: Update version to 3.119
  tg3: Apply rx_discards fix to 5719/5720
  ...
Fix up trivial conflicts in arch/x86/Kconfig and net/mac80211/agg-tx.c
as per Davem.
Diffstat (limited to 'drivers/net/gianfar_ethtool.c')
| -rw-r--r-- | drivers/net/gianfar_ethtool.c | 110 | 
1 files changed, 6 insertions, 104 deletions
diff --git a/drivers/net/gianfar_ethtool.c b/drivers/net/gianfar_ethtool.c index 3bc8e276ba4..493d743839d 100644 --- a/drivers/net/gianfar_ethtool.c +++ b/drivers/net/gianfar_ethtool.c @@ -517,15 +517,15 @@ static int gfar_sringparam(struct net_device *dev, struct ethtool_ringparam *rva  	return err;  } -static int gfar_set_rx_csum(struct net_device *dev, uint32_t data) +int gfar_set_features(struct net_device *dev, u32 features)  {  	struct gfar_private *priv = netdev_priv(dev);  	unsigned long flags;  	int err = 0, i = 0; +	u32 changed = dev->features ^ features; -	if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) -		return -EOPNOTSUPP; - +	if (!(changed & NETIF_F_RXCSUM)) +		return 0;  	if (dev->flags & IFF_UP) {  		/* Halt TX and RX, and process the frames which @@ -546,58 +546,15 @@ static int gfar_set_rx_csum(struct net_device *dev, uint32_t data)  		/* Now we take down the rings to rebuild them */  		stop_gfar(dev); -	} -	spin_lock_irqsave(&priv->bflock, flags); -	priv->rx_csum_enable = data; -	spin_unlock_irqrestore(&priv->bflock, flags); +		dev->features = features; -	if (dev->flags & IFF_UP) {  		err = startup_gfar(dev);  		netif_tx_wake_all_queues(dev);  	}  	return err;  } -static uint32_t gfar_get_rx_csum(struct net_device *dev) -{ -	struct gfar_private *priv = netdev_priv(dev); - -	if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) -		return 0; - -	return priv->rx_csum_enable; -} - -static int gfar_set_tx_csum(struct net_device *dev, uint32_t data) -{ -	struct gfar_private *priv = netdev_priv(dev); - -	if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) -		return -EOPNOTSUPP; - -	netif_tx_lock_bh(dev); - -	if (data) -		dev->features |= NETIF_F_IP_CSUM; -	else -		dev->features &= ~NETIF_F_IP_CSUM; - -	netif_tx_unlock_bh(dev); - -	return 0; -} - -static uint32_t gfar_get_tx_csum(struct net_device *dev) -{ -	struct gfar_private *priv = netdev_priv(dev); - -	if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM)) -		return 0; - -	return (dev->features & NETIF_F_IP_CSUM) != 0; -} -  static uint32_t gfar_get_msglevel(struct net_device *dev)  {  	struct gfar_private *priv = netdev_priv(dev); @@ -645,42 +602,6 @@ static int gfar_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)  }  #endif -static int gfar_ethflow_to_class(int flow_type, u64 *class) -{ -	switch (flow_type) { -	case TCP_V4_FLOW: -		*class = CLASS_CODE_TCP_IPV4; -		break; -	case UDP_V4_FLOW: -		*class = CLASS_CODE_UDP_IPV4; -		break; -	case AH_V4_FLOW: -	case ESP_V4_FLOW: -		*class = CLASS_CODE_AH_ESP_IPV4; -		break; -	case SCTP_V4_FLOW: -		*class = CLASS_CODE_SCTP_IPV4; -		break; -	case TCP_V6_FLOW: -		*class = CLASS_CODE_TCP_IPV6; -		break; -	case UDP_V6_FLOW: -		*class = CLASS_CODE_UDP_IPV6; -		break; -	case AH_V6_FLOW: -	case ESP_V6_FLOW: -		*class = CLASS_CODE_AH_ESP_IPV6; -		break; -	case SCTP_V6_FLOW: -		*class = CLASS_CODE_SCTP_IPV6; -		break; -	default: -		return 0; -	} - -	return 1; -} -  static void ethflow_to_filer_rules (struct gfar_private *priv, u64 ethflow)  {  	u32 fcr = 0x0, fpr = FPR_FILER_MASK; @@ -778,11 +699,6 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow, u  	case UDP_V6_FLOW:  		cmp_rqfpr = RQFPR_IPV6 |RQFPR_UDP;  		break; -	case IPV4_FLOW: -		cmp_rqfpr = RQFPR_IPV4; -	case IPV6_FLOW: -		cmp_rqfpr = RQFPR_IPV6; -		break;  	default:  		printk(KERN_ERR "Right now this class is not supported\n");  		return 0; @@ -848,18 +764,9 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow, u  static int gfar_set_hash_opts(struct gfar_private *priv, struct ethtool_rxnfc *cmd)  { -	u64 class; - -	if (!gfar_ethflow_to_class(cmd->flow_type, &class)) -		return -EINVAL; - -	if (class < CLASS_CODE_USER_PROG1 || -			class > CLASS_CODE_SCTP_IPV6) -		return -EINVAL; -  	/* write the filer rules here */  	if (!gfar_ethflow_to_filer_table(priv, cmd->data, cmd->flow_type)) -		return -1; +		return -EINVAL;  	return 0;  } @@ -894,11 +801,6 @@ const struct ethtool_ops gfar_ethtool_ops = {  	.get_strings = gfar_gstrings,  	.get_sset_count = gfar_sset_count,  	.get_ethtool_stats = gfar_fill_stats, -	.get_rx_csum = gfar_get_rx_csum, -	.get_tx_csum = gfar_get_tx_csum, -	.set_rx_csum = gfar_set_rx_csum, -	.set_tx_csum = gfar_set_tx_csum, -	.set_sg = ethtool_op_set_sg,  	.get_msglevel = gfar_get_msglevel,  	.set_msglevel = gfar_set_msglevel,  #ifdef CONFIG_PM  |