From 463e5b0b5f65fd2f4b28cb8353d5cfeeb297095e Mon Sep 17 00:00:00 2001 From: Jason Wright Date: Mon, 2 Dec 2002 22:04:40 +0000 Subject: - Remove a few magic constants - set baudrate for the non-mii modes --- sys/dev/ic/xl.c | 17 +++++++++++++---- sys/dev/ic/xlreg.h | 5 +++-- 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'sys') diff --git a/sys/dev/ic/xl.c b/sys/dev/ic/xl.c index 85e132e6f40..26174c92b9f 100644 --- a/sys/dev/ic/xl.c +++ b/sys/dev/ic/xl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: xl.c,v 1.46 2002/11/25 16:07:08 brad Exp $ */ +/* $OpenBSD: xl.c,v 1.47 2002/12/02 22:04:38 jason Exp $ */ /* * Copyright (c) 1997, 1998, 1999 @@ -551,6 +551,7 @@ int xl_read_eeprom(sc, dest, off, cnt, swap) int err = 0, i; u_int16_t word = 0, *ptr; #define EEPROM_5BIT_OFFSET(A) ((((A) << 2) & 0x7F00) | ((A) & 0x003F)) +#define EEPROM_8BIT_OFFSET(A) ((A) & 0x003F) /* WARNING! DANGER! * It's easy to accidentally overwrite the rom content! * Note: the 3c575 uses 8bit EEPROM offsets. @@ -565,7 +566,8 @@ int xl_read_eeprom(sc, dest, off, cnt, swap) for (i = 0; i < cnt; i++) { if (sc->xl_flags & XL_FLAG_8BITROM) - CSR_WRITE_2(sc, XL_W0_EE_CMD, (2<<8) | (off + i )); + CSR_WRITE_2(sc, XL_W0_EE_CMD, + XL_EE_8BIT_READ | EEPROM_8BIT_OFFSET(off + i)); else CSR_WRITE_2(sc, XL_W0_EE_CMD, XL_EE_READ | EEPROM_5BIT_OFFSET(off + i)); @@ -762,6 +764,7 @@ void xl_setmode(sc, media) struct xl_softc *sc; int media; { + struct ifnet *ifp = &sc->sc_arpcom.ac_if; u_int32_t icfg; u_int16_t mediastat; @@ -772,6 +775,7 @@ void xl_setmode(sc, media) if (sc->xl_media & XL_MEDIAOPT_BT) { if (IFM_SUBTYPE(media) == IFM_10_T) { + ifp->if_baudrate = IF_Mbps(10); sc->xl_xcvr = XL_XCVR_10BT; icfg &= ~XL_ICFG_CONNECTOR_MASK; icfg |= (XL_XCVR_10BT << XL_ICFG_CONNECTOR_BITS); @@ -783,6 +787,7 @@ void xl_setmode(sc, media) if (sc->xl_media & XL_MEDIAOPT_BFX) { if (IFM_SUBTYPE(media) == IFM_100_FX) { + ifp->if_baudrate = IF_Mbps(100); sc->xl_xcvr = XL_XCVR_100BFX; icfg &= ~XL_ICFG_CONNECTOR_MASK; icfg |= (XL_XCVR_100BFX << XL_ICFG_CONNECTOR_BITS); @@ -793,6 +798,7 @@ void xl_setmode(sc, media) if (sc->xl_media & (XL_MEDIAOPT_AUI|XL_MEDIAOPT_10FL)) { if (IFM_SUBTYPE(media) == IFM_10_5) { + ifp->if_baudrate = IF_Mbps(10); sc->xl_xcvr = XL_XCVR_AUI; icfg &= ~XL_ICFG_CONNECTOR_MASK; icfg |= (XL_XCVR_AUI << XL_ICFG_CONNECTOR_BITS); @@ -801,6 +807,7 @@ void xl_setmode(sc, media) mediastat |= ~XL_MEDIASTAT_SQEENB; } if (IFM_SUBTYPE(media) == IFM_10_FL) { + ifp->if_baudrate = IF_Mbps(10); sc->xl_xcvr = XL_XCVR_AUI; icfg &= ~XL_ICFG_CONNECTOR_MASK; icfg |= (XL_XCVR_AUI << XL_ICFG_CONNECTOR_BITS); @@ -812,6 +819,7 @@ void xl_setmode(sc, media) if (sc->xl_media & XL_MEDIAOPT_BNC) { if (IFM_SUBTYPE(media) == IFM_10_2) { + ifp->if_baudrate = IF_Mbps(10); sc->xl_xcvr = XL_XCVR_COAX; icfg &= ~XL_ICFG_CONNECTOR_MASK; icfg |= (XL_XCVR_COAX << XL_ICFG_CONNECTOR_BITS); @@ -1701,7 +1709,7 @@ reload: } } m_copydata(m_head, 0, m_head->m_pkthdr.len, - mtod(m_new, caddr_t)); + mtod(m_new, caddr_t)); m_new->m_pkthdr.len = m_new->m_len = m_head->m_pkthdr.len; m_freem(m_head); m_head = m_new; @@ -2705,7 +2713,8 @@ xl_attach(sc) if (sc->xl_flags & XL_FLAG_INVERT_MII_PWR) { XL_SEL_WIN(2); - CSR_WRITE_2(sc, 12, 0x4000 | CSR_READ_2(sc, 12)); + CSR_WRITE_2(sc, XL_W2_RESET_OPTIONS, XL_RESETOPT_INVMIIPWR | + CSR_READ_2(sc, XL_W2_RESET_OPTIONS)); } DELAY(100000); diff --git a/sys/dev/ic/xlreg.h b/sys/dev/ic/xlreg.h index 0ff0ea8120d..ae3f56a1aa0 100644 --- a/sys/dev/ic/xlreg.h +++ b/sys/dev/ic/xlreg.h @@ -1,4 +1,4 @@ -/* $OpenBSD: xlreg.h,v 1.14 2002/06/16 21:11:41 aaron Exp $ */ +/* $OpenBSD: xlreg.h,v 1.15 2002/12/02 22:04:39 jason Exp $ */ /* * Copyright (c) 1997, 1998 @@ -35,6 +35,7 @@ */ #define XL_EE_READ 0x0080 /* read, 5 bit address */ +#define XL_EE_8BIT_READ 0x0200 /* read, 8 bit address */ #define XL_EE_WRITE 0x0040 /* write, 5 bit address */ #define XL_EE_ERASE 0x00c0 /* erase, 5 bit address */ #define XL_EE_EWEN 0x0030 /* erase, no data needed */ @@ -249,7 +250,7 @@ #define XL_RESETOPT_TESTPDTPDR 0x0800 #define XL_RESETOPT_TEST100TX 0x1000 #define XL_RESETOPT_TEST100RX 0x2000 - +#define XL_RESETOPT_INVMIIPWR 0x4000 /* some 3c905Bs only */ /* * Window 3 (fifo management) */ -- cgit v1.2.3