diff options
author | yongari <yongari@FreeBSD.org> | 2009-06-21 06:27:35 +0000 |
---|---|---|
committer | yongari <yongari@FreeBSD.org> | 2009-06-21 06:27:35 +0000 |
commit | b8c10ee72ca8de1ab11e13f66c671183cf52e46b (patch) | |
tree | c9253f963a5a99a21fe210b8c6a9e9fd5426c246 /sys/dev/fxp | |
parent | 0e5575121cc2631be70948b1ee62e3357f36c014 (diff) | |
download | FreeBSD-src-b8c10ee72ca8de1ab11e13f66c671183cf52e46b.zip FreeBSD-src-b8c10ee72ca8de1ab11e13f66c671183cf52e46b.tar.gz |
Don't blindly enable Rx lock-up workaround. Newer chips do not need
the Rx lock-up workaround.
Obtained from: NetBSD
Diffstat (limited to 'sys/dev/fxp')
-rw-r--r-- | sys/dev/fxp/if_fxp.c | 9 | ||||
-rw-r--r-- | sys/dev/fxp/if_fxpvar.h | 1 |
2 files changed, 9 insertions, 1 deletions
diff --git a/sys/dev/fxp/if_fxp.c b/sys/dev/fxp/if_fxp.c index b2ef0ef..5c25553 100644 --- a/sys/dev/fxp/if_fxp.c +++ b/sys/dev/fxp/if_fxp.c @@ -500,6 +500,13 @@ fxp_attach(device_t dev) sc->flags |= FXP_FLAG_WOLCAP; } + /* Receiver lock-up workaround detection. */ + fxp_read_eeprom(sc, &data, 3, 1); + if ((data & 0x03) != 0x03) { + sc->flags |= FXP_FLAG_RXBUG; + device_printf(dev, "Enabling Rx lock-up workaround\n"); + } + /* * Determine whether we must use the 503 serial interface. */ @@ -2021,7 +2028,7 @@ fxp_tick(void *xsc) if (sp->rx_good) { ifp->if_ipackets += le32toh(sp->rx_good); sc->rx_idle_secs = 0; - } else { + } else if (sc->flags & FXP_FLAG_RXBUG) { /* * Receiver's been idle for another second. */ diff --git a/sys/dev/fxp/if_fxpvar.h b/sys/dev/fxp/if_fxpvar.h index 77797f3..9bef242 100644 --- a/sys/dev/fxp/if_fxpvar.h +++ b/sys/dev/fxp/if_fxpvar.h @@ -204,6 +204,7 @@ struct fxp_softc { #define FXP_FLAG_82559_RXCSUM 0x1000 /* 82559 compatible RX checksum */ #define FXP_FLAG_WOLCAP 0x2000 /* WOL capability */ #define FXP_FLAG_WOL 0x4000 /* WOL active */ +#define FXP_FLAG_RXBUG 0x8000 /* Rx lock-up bug */ /* Macros to ease CSR access. */ #define CSR_READ_1(sc, reg) bus_read_1(sc->fxp_res[0], reg) |