diff options
author | Gary Zambrano <zambrano@broadcom.com> | 2006-04-10 12:02:21 -0700 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-04-12 18:04:03 -0400 |
commit | 2b474cf53870abf1bbad631c3368b9efc9b5ba9d (patch) | |
tree | 3dc14351bf455c345c463573c0cd7369e05f5631 | |
parent | 4be5de25259de21894df5e2fecc30da8252dee8c (diff) | |
download | op-kernel-dev-2b474cf53870abf1bbad631c3368b9efc9b5ba9d.zip op-kernel-dev-2b474cf53870abf1bbad631c3368b9efc9b5ba9d.tar.gz |
[PATCH] b44: disable default tx pause
Disable default tx pause frame support.
The b44 controller has a bug that generates excessive tx pause
frames.
Signed-off-by: Gary Zambrano <zambrano@broadcom.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r-- | drivers/net/b44.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/drivers/net/b44.c b/drivers/net/b44.c index c4e12b5..a67d537 100644 --- a/drivers/net/b44.c +++ b/drivers/net/b44.c @@ -410,25 +410,18 @@ static void __b44_set_flow_ctrl(struct b44 *bp, u32 pause_flags) static void b44_set_flow_ctrl(struct b44 *bp, u32 local, u32 remote) { - u32 pause_enab = bp->flags & (B44_FLAG_TX_PAUSE | - B44_FLAG_RX_PAUSE); - - if (local & ADVERTISE_PAUSE_CAP) { - if (local & ADVERTISE_PAUSE_ASYM) { - if (remote & LPA_PAUSE_CAP) - pause_enab |= (B44_FLAG_TX_PAUSE | - B44_FLAG_RX_PAUSE); - else if (remote & LPA_PAUSE_ASYM) - pause_enab |= B44_FLAG_RX_PAUSE; - } else { - if (remote & LPA_PAUSE_CAP) - pause_enab |= (B44_FLAG_TX_PAUSE | - B44_FLAG_RX_PAUSE); - } - } else if (local & ADVERTISE_PAUSE_ASYM) { - if ((remote & LPA_PAUSE_CAP) && - (remote & LPA_PAUSE_ASYM)) - pause_enab |= B44_FLAG_TX_PAUSE; + u32 pause_enab = 0; + + /* The driver supports only rx pause by default because + the b44 mac tx pause mechanism generates excessive + pause frames. + Use ethtool to turn on b44 tx pause if necessary. + */ + if ((local & ADVERTISE_PAUSE_CAP) && + (local & ADVERTISE_PAUSE_ASYM)){ + if ((remote & LPA_PAUSE_ASYM) && + !(remote & LPA_PAUSE_CAP)) + pause_enab |= B44_FLAG_RX_PAUSE; } __b44_set_flow_ctrl(bp, pause_enab); |