DORMANTno replies

[PATCH] (8/12) skge: only allow tx/rx csum on Yukon chipset

From: Stephen Hemminger <hidden>
Date: 2005-03-03 19:39:19

Only allow transmit and receive checksum to be set on Yukon chipsets
because the Genesis chipset support probably is broken based on the
comments in the sk98lin driver.

Signed-off-by: Stephen Hemminger <redacted>
--- skge-2.6.11/drivers/net/skge.c.orig	2005-03-03 09:42:33.000000000 -0800
+++ skge-2.6.11/drivers/net/skge.c	2005-03-03 09:51:52.000000000 -0800
@@ -480,6 +480,17 @@
 	return ethtool_op_set_sg(dev, data);
 }
 
+static int skge_set_tx_csum(struct net_device *dev, u32 data)
+{
+	struct skge_port *skge = netdev_priv(dev);
+	struct skge_hw *hw = skge->hw;
+
+	if (hw->chip_id == CHIP_ID_GENESIS && data)
+		return -EOPNOTSUPP;
+
+	return ethtool_op_set_tx_csum(dev, data);
+}
+
 static u32 skge_get_rx_csum(struct net_device *dev)
 {
 	struct skge_port *skge = netdev_priv(dev);
@@ -487,6 +498,7 @@
 	return skge->rx_csum;
 }
 
+/* Only Yukon supports checksum offload. */
 static int skge_set_rx_csum(struct net_device *dev, u32 data)
 {
 	struct skge_port *skge = netdev_priv(dev);
@@ -498,6 +510,7 @@
 	return 0;
 }
 
+/* Only Yukon II supports TSO (not implemented yet) */
 static int skge_set_tso(struct net_device *dev, u32 data)
 {
 	if (data)
@@ -750,7 +763,7 @@
 	.get_sg		= ethtool_op_get_sg,
 	.set_sg		= skge_set_sg,
 	.get_tx_csum	= ethtool_op_get_tx_csum,
-	.set_tx_csum	= ethtool_op_set_tx_csum,
+	.set_tx_csum	= skge_set_tx_csum,
 	.get_rx_csum	= skge_get_rx_csum,
 	.set_rx_csum	= skge_set_rx_csum,
 	.get_strings	= skge_get_strings,
@@ -3065,14 +3078,11 @@
 	dev->poll_controller = skge_netpoll;
 #endif
 	dev->irq = hw->pdev->irq;
-	if (hw->chip_id != CHIP_ID_GENESIS)
-		dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
 
 	skge = netdev_priv(dev);
 	skge->netdev = dev;
 	skge->hw = hw;
 	skge->msg_enable = netif_msg_init(debug, default_msg);
-	skge->rx_csum = 1;
 	skge->tx_ring.count = DEFAULT_TX_RING_SIZE;
 	skge->rx_ring.count = DEFAULT_RX_RING_SIZE;
 
@@ -3097,6 +3107,11 @@
 	skge->led_blink.function = skge_blink_timer;
 	skge->led_blink.data = (unsigned long) skge;
 
+	if (hw->chip_id != CHIP_ID_GENESIS) {
+		dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
+		skge->rx_csum = 1;
+	}
+
 	/* read the mac address */
 	memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port*8, ETH_ALEN);
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help