diff options
Diffstat (limited to 'drivers/net/via-velocity.c')
| -rw-r--r-- | drivers/net/via-velocity.c | 28 | 
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c index 4fe05175384..06daa9d6fee 100644 --- a/drivers/net/via-velocity.c +++ b/drivers/net/via-velocity.c @@ -2600,8 +2600,7 @@ static netdev_tx_t velocity_xmit(struct sk_buff *skb,  	/*  	 *	Handle hardware checksum  	 */ -	if ((dev->features & NETIF_F_IP_CSUM) && -	    (skb->ip_summed == CHECKSUM_PARTIAL)) { +	if (skb->ip_summed == CHECKSUM_PARTIAL) {  		const struct iphdr *ip = ip_hdr(skb);  		if (ip->protocol == IPPROTO_TCP)  			td_ptr->tdesc1.TCR |= TCR0_TCPCK; @@ -2841,6 +2840,7 @@ static int __devinit velocity_found1(struct pci_dev *pdev, const struct pci_devi  	dev->ethtool_ops = &velocity_ethtool_ops;  	netif_napi_add(dev, &vptr->napi, velocity_poll, VELOCITY_NAPI_WEIGHT); +	dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_HW_VLAN_TX;  	dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_FILTER |  		NETIF_F_HW_VLAN_RX | NETIF_F_IP_CSUM; @@ -3182,7 +3182,8 @@ static void velocity_ethtool_down(struct net_device *dev)  		pci_set_power_state(vptr->pdev, PCI_D3hot);  } -static int velocity_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) +static int velocity_get_settings(struct net_device *dev, +				 struct ethtool_cmd *cmd)  {  	struct velocity_info *vptr = netdev_priv(dev);  	struct mac_regs __iomem *regs = vptr->mac_regs; @@ -3228,12 +3229,14 @@ static int velocity_get_settings(struct net_device *dev, struct ethtool_cmd *cmd  			break;  		}  	} +  	if (status & VELOCITY_SPEED_1000) -		cmd->speed = SPEED_1000; +		ethtool_cmd_speed_set(cmd, SPEED_1000);  	else if (status & VELOCITY_SPEED_100) -		cmd->speed = SPEED_100; +		ethtool_cmd_speed_set(cmd, SPEED_100);  	else -		cmd->speed = SPEED_10; +		ethtool_cmd_speed_set(cmd, SPEED_10); +  	cmd->autoneg = (status & VELOCITY_AUTONEG_ENABLE) ? AUTONEG_ENABLE : AUTONEG_DISABLE;  	cmd->port = PORT_TP;  	cmd->transceiver = XCVR_INTERNAL; @@ -3247,9 +3250,11 @@ static int velocity_get_settings(struct net_device *dev, struct ethtool_cmd *cmd  	return 0;  } -static int velocity_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) +static int velocity_set_settings(struct net_device *dev, +				 struct ethtool_cmd *cmd)  {  	struct velocity_info *vptr = netdev_priv(dev); +	u32 speed = ethtool_cmd_speed(cmd);  	u32 curr_status;  	u32 new_status = 0;  	int ret = 0; @@ -3258,9 +3263,9 @@ static int velocity_set_settings(struct net_device *dev, struct ethtool_cmd *cmd  	curr_status &= (~VELOCITY_LINK_FAIL);  	new_status |= ((cmd->autoneg) ? VELOCITY_AUTONEG_ENABLE : 0); -	new_status |= ((cmd->speed == SPEED_1000) ? VELOCITY_SPEED_1000 : 0); -	new_status |= ((cmd->speed == SPEED_100) ? VELOCITY_SPEED_100 : 0); -	new_status |= ((cmd->speed == SPEED_10) ? VELOCITY_SPEED_10 : 0); +	new_status |= ((speed == SPEED_1000) ? VELOCITY_SPEED_1000 : 0); +	new_status |= ((speed == SPEED_100) ? VELOCITY_SPEED_100 : 0); +	new_status |= ((speed == SPEED_10) ? VELOCITY_SPEED_10 : 0);  	new_status |= ((cmd->duplex == DUPLEX_FULL) ? VELOCITY_DUPLEX_FULL : 0);  	if ((new_status & VELOCITY_AUTONEG_ENABLE) && @@ -3457,13 +3462,10 @@ static const struct ethtool_ops velocity_ethtool_ops = {  	.get_settings	=	velocity_get_settings,  	.set_settings	=	velocity_set_settings,  	.get_drvinfo	=	velocity_get_drvinfo, -	.set_tx_csum	=	ethtool_op_set_tx_csum, -	.get_tx_csum	=	ethtool_op_get_tx_csum,  	.get_wol	=	velocity_ethtool_get_wol,  	.set_wol	=	velocity_ethtool_set_wol,  	.get_msglevel	=	velocity_get_msglevel,  	.set_msglevel	=	velocity_set_msglevel, -	.set_sg 	=	ethtool_op_set_sg,  	.get_link	=	velocity_get_link,  	.get_coalesce	=	velocity_get_coalesce,  	.set_coalesce	=	velocity_set_coalesce,  |