gianfar: Add flow control support
authorClaudiu Manoil <claudiu.manoil@freescale.com>
Mon, 12 Aug 2013 10:53:26 +0000 (13:53 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 13 Aug 2013 22:28:53 +0000 (15:28 -0700)
commit23402bddf9e56eecb27bbd1e5467b3b79b3dbe58
tree26dc3784f50481c3ac8457abccd54bd7aec1748a
parentebd8b934e23f45ad3fc8a5a28bc5a96741a6a106
gianfar: Add flow control support

eTSEC has Rx and Tx flow control capabilities that may be enabled
through MACCFG1[Rx_Flow, Tx_Flow] bits.  These bits must not be set
however when eTSEC is operated in Half-Duplex mode.  Unfortunately,
the driver currently sets these bits unconditionally.
This patch adds the proper handling of the PAUSE frame capability
register bits by implementing the ethtool -A interface.  When pause
autoneg is enabled, the controller uses the phy's capability to
negotiate PAUSE frame settings with the link partner and reconfigures
its Rx_Flow and Tx_Flow settings to match the capabilities of the
link partner.  If pause autoneg is off, the PAUSE frame generation
may be forced manually (ethtool -A).  Flow control is disabled by
default now.
This implementation is inspired by the tg3 driver.

Signed-off-by: Lutz Jaenicke <ljaenicke@innominate.com>
Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/gianfar.c
drivers/net/ethernet/freescale/gianfar.h
drivers/net/ethernet/freescale/gianfar_ethtool.c