diff options
author | Cristian Bercaru <cristian.bercaru@freescale.com> | 2013-04-18 16:08:33 (GMT) |
---|---|---|
committer | Fleming Andrew-AFLEMING <AFLEMING@freescale.com> | 2013-04-19 22:34:00 (GMT) |
commit | 3308f15e4a74e33e8ccf7237b7842fdaf1b320ad (patch) | |
tree | da3e742bec1bcc7700f44676f116b94a533a4325 /drivers/net/ethernet/freescale/dpa/dpa-ethtool.c | |
parent | 6c53cea1d6b8be0d68e10ac1fb7bd1383da24c40 (diff) | |
download | linux-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.c | 24 |
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; } |