aboutsummaryrefslogtreecommitdiff
path: root/sys/pci/if_xl.c
diff options
context:
space:
mode:
authorBill Paul <wpaul@FreeBSD.org>1999-02-11 23:59:29 +0000
committerBill Paul <wpaul@FreeBSD.org>1999-02-11 23:59:29 +0000
commit021f8bcb89ad5839dc1e2d946f6cfd2df54443f7 (patch)
treeca3afac791eadae646818424fc2df3765667a9e5 /sys/pci/if_xl.c
parentda15ec8bf74f3c7354d24a012e4849091f278644 (diff)
downloadsrc-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.c8
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. */