diff options
Diffstat (limited to 'drivers/net/b44.c')
-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 c4e12b5cbb92..a67d537ccf49 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) | |||
410 | 410 | ||
411 | static void b44_set_flow_ctrl(struct b44 *bp, u32 local, u32 remote) | 411 | static void b44_set_flow_ctrl(struct b44 *bp, u32 local, u32 remote) |
412 | { | 412 | { |
413 | u32 pause_enab = bp->flags & (B44_FLAG_TX_PAUSE | | 413 | u32 pause_enab = 0; |
414 | B44_FLAG_RX_PAUSE); | 414 | |
415 | 415 | /* The driver supports only rx pause by default because | |
416 | if (local & ADVERTISE_PAUSE_CAP) { | 416 | the b44 mac tx pause mechanism generates excessive |
417 | if (local & ADVERTISE_PAUSE_ASYM) { | 417 | pause frames. |
418 | if (remote & LPA_PAUSE_CAP) | 418 | Use ethtool to turn on b44 tx pause if necessary. |
419 | pause_enab |= (B44_FLAG_TX_PAUSE | | 419 | */ |
420 | B44_FLAG_RX_PAUSE); | 420 | if ((local & ADVERTISE_PAUSE_CAP) && |
421 | else if (remote & LPA_PAUSE_ASYM) | 421 | (local & ADVERTISE_PAUSE_ASYM)){ |
422 | pause_enab |= B44_FLAG_RX_PAUSE; | 422 | if ((remote & LPA_PAUSE_ASYM) && |
423 | } else { | 423 | !(remote & LPA_PAUSE_CAP)) |
424 | if (remote & LPA_PAUSE_CAP) | 424 | pause_enab |= B44_FLAG_RX_PAUSE; |
425 | pause_enab |= (B44_FLAG_TX_PAUSE | | ||
426 | B44_FLAG_RX_PAUSE); | ||
427 | } | ||
428 | } else if (local & ADVERTISE_PAUSE_ASYM) { | ||
429 | if ((remote & LPA_PAUSE_CAP) && | ||
430 | (remote & LPA_PAUSE_ASYM)) | ||
431 | pause_enab |= B44_FLAG_TX_PAUSE; | ||
432 | } | 425 | } |
433 | 426 | ||
434 | __b44_set_flow_ctrl(bp, pause_enab); | 427 | __b44_set_flow_ctrl(bp, pause_enab); |