summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorwpaul <wpaul@FreeBSD.org>1999-02-11 23:59:29 +0000
committerwpaul <wpaul@FreeBSD.org>1999-02-11 23:59:29 +0000
commit959b4ace7e548ac9cbbda6d7f3c5fe8de9f88402 (patch)
treef2680ebf7e78f5e34312e3bc558e0a53f5e5ce5e /sys
parentdf54d1cb306b84e85e036f6aa85722108dee9fd3 (diff)
downloadFreeBSD-src-959b4ace7e548ac9cbbda6d7f3c5fe8de9f88402.zip
FreeBSD-src-959b4ace7e548ac9cbbda6d7f3c5fe8de9f88402.tar.gz
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.
Diffstat (limited to 'sys')
-rw-r--r--sys/pci/if_xl.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/pci/if_xl.c b/sys/pci/if_xl.c
index dd66eef..25475eb 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. */
OpenPOWER on IntegriCloud