summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/dpa/dpa-ethtool.c
diff options
context:
space:
mode:
authorCristian Bercaru <cristian.bercaru@freescale.com>2013-04-18 16:08:33 (GMT)
committerFleming Andrew-AFLEMING <AFLEMING@freescale.com>2013-04-19 22:34:00 (GMT)
commit3308f15e4a74e33e8ccf7237b7842fdaf1b320ad (patch)
treeda3e742bec1bcc7700f44676f116b94a533a4325 /drivers/net/ethernet/freescale/dpa/dpa-ethtool.c
parent6c53cea1d6b8be0d68e10ac1fb7bd1383da24c40 (diff)
downloadlinux-fsl-qoriq-3308f15e4a74e33e8ccf7237b7842fdaf1b320ad.tar.xz
dpaa_eth: add ethtool PAUSE frame support
Change-Id: I52222f0bf60bb073bb3b77bf935a31e84b4939c0 Reviewed-on: http://git.am.freescale.net:8181/1545 Reviewed-by: Bucur Madalin-Cristian-B32716 <madalin.bucur@freescale.com> Reviewed-by: Sovaiala Cristian-Constantin-B39531 <Cristian.Sovaiala@freescale.com> Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com> Tested-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Diffstat (limited to 'drivers/net/ethernet/freescale/dpa/dpa-ethtool.c')
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpa-ethtool.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/dpa-ethtool.c b/drivers/net/ethernet/freescale/dpa/dpa-ethtool.c
index 1bdd8d2..2ba6966 100644
--- a/drivers/net/ethernet/freescale/dpa/dpa-ethtool.c
+++ b/drivers/net/ethernet/freescale/dpa/dpa-ethtool.c
@@ -168,12 +168,16 @@ void __cold dpa_get_pauseparam(struct net_device *net_dev, struct ethtool_pausep
return;
}
- et_pauseparam->autoneg = priv->mac_dev->phy_dev->autoneg;
+ et_pauseparam->autoneg = priv->mac_dev->autoneg_pause;
+ et_pauseparam->rx_pause = priv->mac_dev->rx_pause;
+ et_pauseparam->tx_pause = priv->mac_dev->tx_pause;
}
int __cold dpa_set_pauseparam(struct net_device *net_dev, struct ethtool_pauseparam *et_pauseparam)
{
struct dpa_priv_s *priv;
+ int _errno;
+ bool en;
priv = netdev_priv(net_dev);
@@ -186,7 +190,23 @@ int __cold dpa_set_pauseparam(struct net_device *net_dev, struct ethtool_pausepa
return -ENODEV;
}
- priv->mac_dev->phy_dev->autoneg = et_pauseparam->autoneg;
+ en = et_pauseparam->rx_pause ? true : false;
+ _errno = priv->mac_dev->set_rx_pause(priv->mac_dev, en);
+ if (unlikely(_errno < 0)) {
+ netdev_err(net_dev, "set_rx_pause() = %d\n", _errno);
+ return _errno;
+ }
+
+ en = et_pauseparam->tx_pause ? true : false;
+ _errno = priv->mac_dev->set_tx_pause(priv->mac_dev, en);
+ if (unlikely(_errno < 0)) {
+ netdev_err(net_dev, "set_tx_pause() = %d\n", _errno);
+ return _errno;
+ }
+
+ priv->mac_dev->autoneg_pause = et_pauseparam->autoneg;
+ priv->mac_dev->rx_pause = et_pauseparam->rx_pause;
+ priv->mac_dev->tx_pause = et_pauseparam->tx_pause;
return 0;
}