diff options
author | Bill Paul <wpaul@FreeBSD.org> | 1999-02-11 23:59:29 +0000 |
---|---|---|
committer | Bill Paul <wpaul@FreeBSD.org> | 1999-02-11 23:59:29 +0000 |
commit | 021f8bcb89ad5839dc1e2d946f6cfd2df54443f7 (patch) | |
tree | ca3afac791eadae646818424fc2df3765667a9e5 /sys/pci/if_xl.c | |
parent | da15ec8bf74f3c7354d24a012e4849091f278644 (diff) | |
download | src-021f8bcb89ad5839dc1e2d946f6cfd2df54443f7.tar.gz src-021f8bcb89ad5839dc1e2d946f6cfd2df54443f7.zip |
Do not issue RX and TX reset commands in xl_stop() and xl_init(). On the
3c905B, the RX and TX reset commands also reset the cyclone chip's internal
PHY, which causes it to restart its autonegotiation session. This takes a
second or two to complete, which makes the interface seem to stop responding
for a few seconds every time you do something that reinitializes it.
Issuing the RX and TX resets on the older 3c905 boomerang adapters doesn't
cause any delay because the boomerang chip requires an external PHY.
This should fix the problem where people doing network installs via 3c905B
cards experience a delay after the interface is first initialized, among
other things.
Notes
Notes:
svn path=/head/; revision=43916
Diffstat (limited to 'sys/pci/if_xl.c')
-rw-r--r-- | sys/pci/if_xl.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/pci/if_xl.c b/sys/pci/if_xl.c index dd66eefc1739..25475ebab1e6 100644 --- a/sys/pci/if_xl.c +++ b/sys/pci/if_xl.c @@ -29,7 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_xl.c,v 1.22 1998/12/24 17:50:34 wpaul Exp $ + * $Id: if_xl.c,v 1.23 1999/02/01 21:25:52 wpaul Exp $ */ /* @@ -147,7 +147,7 @@ #if !defined(lint) static const char rcsid[] = - "$Id: if_xl.c,v 1.22 1998/12/24 17:50:34 wpaul Exp $"; + "$Id: if_xl.c,v 1.23 1999/02/01 21:25:52 wpaul Exp $"; #endif /* @@ -2363,11 +2363,13 @@ static void xl_init(xsc) for (i = 0; i < 3; i++) CSR_WRITE_2(sc, XL_W2_STATION_MASK_LO + (i * 2), 0); +#ifdef notdef /* Reset TX and RX. */ CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_RX_RESET); xl_wait(sc); CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_TX_RESET); xl_wait(sc); +#endif /* Init circular RX list. */ if (xl_list_rx_init(sc) == ENOBUFS) { @@ -2715,10 +2717,12 @@ static void xl_stop(sc) CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_TX_DISABLE); CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_COAX_STOP); DELAY(800); +#ifdef notdef CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_RX_RESET); xl_wait(sc); CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_TX_RESET); xl_wait(sc); +#endif CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_INTR_ACK|XL_STAT_INTLATCH); /* Stop the stats updater. */ |