diff options
author | shemminger@osdl.org <shemminger@osdl.org> | 2005-11-24 01:00:52 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-12-01 02:22:52 -0500 |
commit | 09f5a214389fe467c2ff15aa2b85349bbde15bce (patch) | |
tree | 3d7929315ebcc558d11fd312796a5c2e99731af3 /drivers/net/sk98lin/skethtool.c | |
parent | e9022ee6c348d41cb62c55e15a9711f7a96f2399 (diff) |
[PATCH] sk98lin: allow ethtool checksum on/off per port
Allow control of checksumming parameters via ethtool.
Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'drivers/net/sk98lin/skethtool.c')
-rw-r--r-- | drivers/net/sk98lin/skethtool.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/drivers/net/sk98lin/skethtool.c b/drivers/net/sk98lin/skethtool.c index b71769ae4603..4265ed91a9c4 100644 --- a/drivers/net/sk98lin/skethtool.c +++ b/drivers/net/sk98lin/skethtool.c | |||
@@ -539,6 +539,48 @@ static int setPauseParams(struct net_device *dev , struct ethtool_pauseparam *ep | |||
539 | return ret ? -EIO : 0; | 539 | return ret ? -EIO : 0; |
540 | } | 540 | } |
541 | 541 | ||
542 | /* Only Yukon supports checksum offload. */ | ||
543 | static int setScatterGather(struct net_device *dev, u32 data) | ||
544 | { | ||
545 | DEV_NET *pNet = netdev_priv(dev); | ||
546 | SK_AC *pAC = pNet->pAC; | ||
547 | |||
548 | if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) | ||
549 | return -EOPNOTSUPP; | ||
550 | return ethtool_op_set_sg(dev, data); | ||
551 | } | ||
552 | |||
553 | static int setTxCsum(struct net_device *dev, u32 data) | ||
554 | { | ||
555 | DEV_NET *pNet = netdev_priv(dev); | ||
556 | SK_AC *pAC = pNet->pAC; | ||
557 | |||
558 | if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) | ||
559 | return -EOPNOTSUPP; | ||
560 | |||
561 | return ethtool_op_set_tx_csum(dev, data); | ||
562 | } | ||
563 | |||
564 | static u32 getRxCsum(struct net_device *dev) | ||
565 | { | ||
566 | DEV_NET *pNet = netdev_priv(dev); | ||
567 | SK_AC *pAC = pNet->pAC; | ||
568 | |||
569 | return pAC->RxPort[pNet->PortNr].RxCsum; | ||
570 | } | ||
571 | |||
572 | static int setRxCsum(struct net_device *dev, u32 data) | ||
573 | { | ||
574 | DEV_NET *pNet = netdev_priv(dev); | ||
575 | SK_AC *pAC = pNet->pAC; | ||
576 | |||
577 | if (pAC->GIni.GIChipId == CHIP_ID_GENESIS) | ||
578 | return -EOPNOTSUPP; | ||
579 | |||
580 | pAC->RxPort[pNet->PortNr].RxCsum = data != 0; | ||
581 | return 0; | ||
582 | } | ||
583 | |||
542 | struct ethtool_ops SkGeEthtoolOps = { | 584 | struct ethtool_ops SkGeEthtoolOps = { |
543 | .get_settings = getSettings, | 585 | .get_settings = getSettings, |
544 | .set_settings = setSettings, | 586 | .set_settings = setSettings, |
@@ -551,4 +593,10 @@ struct ethtool_ops SkGeEthtoolOps = { | |||
551 | .set_pauseparam = setPauseParams, | 593 | .set_pauseparam = setPauseParams, |
552 | .get_link = ethtool_op_get_link, | 594 | .get_link = ethtool_op_get_link, |
553 | .get_perm_addr = ethtool_op_get_perm_addr, | 595 | .get_perm_addr = ethtool_op_get_perm_addr, |
596 | .get_sg = ethtool_op_get_sg, | ||
597 | .set_sg = setScatterGather, | ||
598 | .get_tx_csum = ethtool_op_get_tx_csum, | ||
599 | .set_tx_csum = setTxCsum, | ||
600 | .get_rx_csum = getRxCsum, | ||
601 | .set_rx_csum = setRxCsum, | ||
554 | }; | 602 | }; |