Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 131ae329 authored by Michał Mirosław's avatar Michał Mirosław Committed by David S. Miller
Browse files

net: greth: convert to hw_features



Note: Driver modifies its struct net_device_ops. This will break if used for
multiple devices that are not all the same (if that HW config is possible).

Signed-off-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3cd8ef4b
Loading
Loading
Loading
Loading
+4 −42
Original line number Diff line number Diff line
@@ -901,7 +901,7 @@ static int greth_rx_gbit(struct net_device *dev, int limit)

				skb_put(skb, pkt_len);

				if (greth->flags & GRETH_FLAG_RX_CSUM && hw_checksummed(status))
				if (dev->features & NETIF_F_RXCSUM && hw_checksummed(status))
					skb->ip_summed = CHECKSUM_UNNECESSARY;
				else
					skb_checksum_none_assert(skb);
@@ -1142,41 +1142,6 @@ static void greth_get_regs(struct net_device *dev, struct ethtool_regs *regs, vo
		buff[i] = greth_read_bd(&greth_regs[i]);
}

static u32 greth_get_rx_csum(struct net_device *dev)
{
	struct greth_private *greth = netdev_priv(dev);
	return (greth->flags & GRETH_FLAG_RX_CSUM) != 0;
}

static int greth_set_rx_csum(struct net_device *dev, u32 data)
{
	struct greth_private *greth = netdev_priv(dev);

	spin_lock_bh(&greth->devlock);

	if (data)
		greth->flags |= GRETH_FLAG_RX_CSUM;
	else
		greth->flags &= ~GRETH_FLAG_RX_CSUM;

	spin_unlock_bh(&greth->devlock);

	return 0;
}

static u32 greth_get_tx_csum(struct net_device *dev)
{
	return (dev->features & NETIF_F_IP_CSUM) != 0;
}

static int greth_set_tx_csum(struct net_device *dev, u32 data)
{
	netif_tx_lock_bh(dev);
	ethtool_op_set_tx_csum(dev, data);
	netif_tx_unlock_bh(dev);
	return 0;
}

static const struct ethtool_ops greth_ethtool_ops = {
	.get_msglevel		= greth_get_msglevel,
	.set_msglevel		= greth_set_msglevel,
@@ -1185,10 +1150,6 @@ static const struct ethtool_ops greth_ethtool_ops = {
	.get_drvinfo		= greth_get_drvinfo,
	.get_regs_len           = greth_get_regs_len,
	.get_regs               = greth_get_regs,
	.get_rx_csum		= greth_get_rx_csum,
	.set_rx_csum		= greth_set_rx_csum,
	.get_tx_csum		= greth_get_tx_csum,
	.set_tx_csum		= greth_set_tx_csum,
	.get_link		= ethtool_op_get_link,
};

@@ -1570,9 +1531,10 @@ static int __devinit greth_of_probe(struct platform_device *ofdev)
	GRETH_REGSAVE(regs->status, 0xFF);

	if (greth->gbit_mac) {
		dev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_HIGHDMA;
		dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |
			NETIF_F_RXCSUM;
		dev->features = dev->hw_features | NETIF_F_HIGHDMA;
		greth_netdev_ops.ndo_start_xmit = greth_start_xmit_gbit;
		greth->flags = GRETH_FLAG_RX_CSUM;
	}

	if (greth->multicast) {
+0 −4
Original line number Diff line number Diff line
@@ -77,9 +77,6 @@
 */
#define MAX_FRAME_SIZE		1520

/* Flags */
#define GRETH_FLAG_RX_CSUM 0x1

/* GRETH APB registers */
struct greth_regs {
	u32 control;
@@ -133,7 +130,6 @@ struct greth_private {
	unsigned int duplex;

	u32 msg_enable;
	u32 flags;

	u8 phyaddr;
	u8 multicast;