net: mv643xx: convert to hw_features

Side effect: don't reenable RXCSUM on every ifdown/ifup.

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Michał Mirosław 2011-04-17 00:15:46 +00:00 committed by David S. Miller
parent eea3250b43
commit aad59c431b
1 changed files with 7 additions and 21 deletions

View File

@ -1575,18 +1575,12 @@ mv643xx_eth_set_ringparam(struct net_device *dev, struct ethtool_ringparam *er)
return 0; return 0;
} }
static u32
mv643xx_eth_get_rx_csum(struct net_device *dev)
{
struct mv643xx_eth_private *mp = netdev_priv(dev);
return !!(rdlp(mp, PORT_CONFIG) & 0x02000000);
}
static int static int
mv643xx_eth_set_rx_csum(struct net_device *dev, u32 rx_csum) mv643xx_eth_set_features(struct net_device *dev, u32 features)
{ {
struct mv643xx_eth_private *mp = netdev_priv(dev); struct mv643xx_eth_private *mp = netdev_priv(dev);
u32 rx_csum = features & NETIF_F_RXCSUM;
wrlp(mp, PORT_CONFIG, rx_csum ? 0x02000000 : 0x00000000); wrlp(mp, PORT_CONFIG, rx_csum ? 0x02000000 : 0x00000000);
@ -1634,11 +1628,6 @@ static void mv643xx_eth_get_ethtool_stats(struct net_device *dev,
} }
} }
static int mv643xx_eth_set_flags(struct net_device *dev, u32 data)
{
return ethtool_op_set_flags(dev, data, ETH_FLAG_LRO);
}
static int mv643xx_eth_get_sset_count(struct net_device *dev, int sset) static int mv643xx_eth_get_sset_count(struct net_device *dev, int sset)
{ {
if (sset == ETH_SS_STATS) if (sset == ETH_SS_STATS)
@ -1657,14 +1646,8 @@ static const struct ethtool_ops mv643xx_eth_ethtool_ops = {
.set_coalesce = mv643xx_eth_set_coalesce, .set_coalesce = mv643xx_eth_set_coalesce,
.get_ringparam = mv643xx_eth_get_ringparam, .get_ringparam = mv643xx_eth_get_ringparam,
.set_ringparam = mv643xx_eth_set_ringparam, .set_ringparam = mv643xx_eth_set_ringparam,
.get_rx_csum = mv643xx_eth_get_rx_csum,
.set_rx_csum = mv643xx_eth_set_rx_csum,
.set_tx_csum = ethtool_op_set_tx_csum,
.set_sg = ethtool_op_set_sg,
.get_strings = mv643xx_eth_get_strings, .get_strings = mv643xx_eth_get_strings,
.get_ethtool_stats = mv643xx_eth_get_ethtool_stats, .get_ethtool_stats = mv643xx_eth_get_ethtool_stats,
.get_flags = ethtool_op_get_flags,
.set_flags = mv643xx_eth_set_flags,
.get_sset_count = mv643xx_eth_get_sset_count, .get_sset_count = mv643xx_eth_get_sset_count,
}; };
@ -2264,7 +2247,7 @@ static void port_start(struct mv643xx_eth_private *mp)
* frames to RX queue #0, and include the pseudo-header when * frames to RX queue #0, and include the pseudo-header when
* calculating receive checksums. * calculating receive checksums.
*/ */
wrlp(mp, PORT_CONFIG, 0x02000000); mv643xx_eth_set_features(dev, dev->features);
/* /*
* Treat BPDUs as normal multicasts, and disable partition mode. * Treat BPDUs as normal multicasts, and disable partition mode.
@ -2848,6 +2831,7 @@ static const struct net_device_ops mv643xx_eth_netdev_ops = {
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
.ndo_do_ioctl = mv643xx_eth_ioctl, .ndo_do_ioctl = mv643xx_eth_ioctl,
.ndo_change_mtu = mv643xx_eth_change_mtu, .ndo_change_mtu = mv643xx_eth_change_mtu,
.ndo_set_features = mv643xx_eth_set_features,
.ndo_tx_timeout = mv643xx_eth_tx_timeout, .ndo_tx_timeout = mv643xx_eth_tx_timeout,
.ndo_get_stats = mv643xx_eth_get_stats, .ndo_get_stats = mv643xx_eth_get_stats,
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
@ -2930,7 +2914,9 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
dev->watchdog_timeo = 2 * HZ; dev->watchdog_timeo = 2 * HZ;
dev->base_addr = 0; dev->base_addr = 0;
dev->features = NETIF_F_SG | NETIF_F_IP_CSUM; dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |
NETIF_F_RXCSUM | NETIF_F_LRO;
dev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM; dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM;
SET_NETDEV_DEV(dev, &pdev->dev); SET_NETDEV_DEV(dev, &pdev->dev);