Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/ic For the 21142/21143 internal Nway, only advertise...
details: https://anonhg.NetBSD.org/src/rev/5722c80c861c
branches: trunk
changeset: 536559:5722c80c861c
user: thorpej <thorpej%NetBSD.org@localhost>
date: Wed Sep 18 19:12:17 2002 +0000
description:
For the 21142/21143 internal Nway, only advertise/resolve media for
which we have SROM blocks.
diffstat:
sys/dev/ic/tulip.c | 59 ++++++++++++++++++++++++++++++++++++++------------
sys/dev/ic/tulipvar.h | 4 ++-
2 files changed, 47 insertions(+), 16 deletions(-)
diffs (203 lines):
diff -r 662711428691 -r 5722c80c861c sys/dev/ic/tulip.c
--- a/sys/dev/ic/tulip.c Wed Sep 18 18:42:06 2002 +0000
+++ b/sys/dev/ic/tulip.c Wed Sep 18 19:12:17 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: tulip.c,v 1.118 2002/07/14 21:02:41 chs Exp $ */
+/* $NetBSD: tulip.c,v 1.119 2002/09/18 19:12:17 thorpej Exp $ */
/*-
* Copyright (c) 1998, 1999, 2000, 2002 The NetBSD Foundation, Inc.
@@ -43,7 +43,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tulip.c,v 1.118 2002/07/14 21:02:41 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tulip.c,v 1.119 2002/09/18 19:12:17 thorpej Exp $");
#include "bpfilter.h"
@@ -3632,6 +3632,7 @@
{ TULIP_ROM_MB_MEDIA_TP, IFM_10_T, 0,
"10baseT",
OPMODE_TTM,
+ BMSR_10THDX,
{ SIACONN_21040_10BASET,
SIATXRX_21040_10BASET,
SIAGEN_21040_10BASET },
@@ -3647,6 +3648,7 @@
{ TULIP_ROM_MB_MEDIA_BNC, IFM_10_2, 0,
"10base2",
0,
+ 0,
{ 0,
0,
0 },
@@ -3662,6 +3664,7 @@
{ TULIP_ROM_MB_MEDIA_AUI, IFM_10_5, 0,
"10base5",
0,
+ 0,
{ SIACONN_21040_AUI,
SIATXRX_21040_AUI,
SIAGEN_21040_AUI },
@@ -3677,6 +3680,7 @@
{ TULIP_ROM_MB_MEDIA_100TX, IFM_100_TX, 0,
"100baseTX",
OPMODE_PS|OPMODE_PCS|OPMODE_SCR|OPMODE_HBD,
+ BMSR_100TXHDX,
{ 0,
0,
0 },
@@ -3692,6 +3696,7 @@
{ TULIP_ROM_MB_MEDIA_TP_FDX, IFM_10_T, IFM_FDX,
"10baseT-FDX",
OPMODE_TTM|OPMODE_FD|OPMODE_HBD,
+ BMSR_10TFDX,
{ SIACONN_21040_10BASET_FDX,
SIATXRX_21040_10BASET_FDX,
SIAGEN_21040_10BASET_FDX },
@@ -3707,6 +3712,7 @@
{ TULIP_ROM_MB_MEDIA_100TX_FDX, IFM_100_TX, IFM_FDX,
"100baseTX-FDX",
OPMODE_PS|OPMODE_PCS|OPMODE_SCR|OPMODE_FD|OPMODE_HBD,
+ BMSR_100TXFDX,
{ 0,
0,
0 },
@@ -3722,6 +3728,7 @@
{ TULIP_ROM_MB_MEDIA_100T4, IFM_100_T4, 0,
"100baseT4",
OPMODE_PS|OPMODE_PCS|OPMODE_SCR|OPMODE_HBD,
+ BMSR_100T4,
{ 0,
0,
0 },
@@ -3737,6 +3744,7 @@
{ TULIP_ROM_MB_MEDIA_100FX, IFM_100_FX, 0,
"100baseFX",
OPMODE_PS|OPMODE_PCS|OPMODE_HBD,
+ 0,
{ 0,
0,
0 },
@@ -3752,6 +3760,7 @@
{ TULIP_ROM_MB_MEDIA_100FX_FDX, IFM_100_FX, IFM_FDX,
"100baseFX-FDX",
OPMODE_PS|OPMODE_PCS|OPMODE_FD|OPMODE_HBD,
+ 0,
{ 0,
0,
0 },
@@ -3767,6 +3776,7 @@
{ 0, 0, 0,
NULL,
0,
+ 0,
{ 0,
0,
0 },
@@ -3815,6 +3825,8 @@
tm->tm_name = tsti->tsti_name;
tm->tm_opmode = tsti->tsti_opmode;
+ sc->sc_sia_cap |= tsti->tsti_sia_cap;
+
switch (sc->sc_chip) {
case TULIP_CHIP_DE425:
case TULIP_CHIP_21040:
@@ -5156,21 +5168,36 @@
tlp_2114x_nway_auto(sc)
struct tulip_softc *sc;
{
- uint32_t siastat;
+ uint32_t siastat, siatxrx;
tlp_idle(sc, OPMODE_ST|OPMODE_SR);
- sc->sc_opmode &= ~(OPMODE_PS|OPMODE_PCS|OPMODE_SCR);
- sc->sc_opmode |= OPMODE_TTM|OPMODE_FD|OPMODE_HBD;
+ sc->sc_opmode &= ~(OPMODE_PS|OPMODE_PCS|OPMODE_SCR|OPMODE_FD);
+ sc->sc_opmode |= OPMODE_TTM|OPMODE_HBD;
+ siatxrx = 0xffbf; /* XXX magic number */
+
+ /* Compute the link code word to advertise. */
+ if (sc->sc_sia_cap & BMSR_100T4)
+ siatxrx |= SIATXRX_T4;
+ if (sc->sc_sia_cap & BMSR_100TXFDX)
+ siatxrx |= SIATXRX_TXF;
+ if (sc->sc_sia_cap & BMSR_100TXHDX)
+ siatxrx |= SIATXRX_THX;
+ if (sc->sc_sia_cap & BMSR_10TFDX)
+ sc->sc_opmode |= OPMODE_FD;
+ if (sc->sc_sia_cap & BMSR_10THDX)
+ siatxrx |= SIATXRX_TH;
+
TULIP_WRITE(sc, CSR_OPMODE, sc->sc_opmode);
TULIP_WRITE(sc, CSR_SIACONN, 0);
delay(1000);
- TULIP_WRITE(sc, CSR_SIATXRX, 0x3ffff);
+ TULIP_WRITE(sc, CSR_SIATXRX, siatxrx);
TULIP_WRITE(sc, CSR_SIACONN, SIACONN_SRL);
siastat = TULIP_READ(sc, CSR_SIASTAT);
- siastat &= ~(SIASTAT_ANS|SIASTAT_LPC|SIASTAT_TRA|SIASTAT_ARA|SIASTAT_LS100|SIASTAT_LS10|SIASTAT_MRA);
+ siastat &= ~(SIASTAT_ANS|SIASTAT_LPC|SIASTAT_TRA|SIASTAT_ARA|
+ SIASTAT_LS100|SIASTAT_LS10|SIASTAT_MRA);
siastat |= SIASTAT_ANS_TXDIS;
TULIP_WRITE(sc, CSR_SIASTAT, siastat);
}
@@ -5203,18 +5230,20 @@
if (siastat & SIASTAT_LPN) {
anlpar = SIASTAT_GETLPC(siastat);
- if (anlpar & ANLPAR_T4 /* &&
- sc->mii_capabilities & BMSR_100TXHDX */)
+ if (anlpar & ANLPAR_T4 &&
+ sc->sc_sia_cap & BMSR_100T4)
mii->mii_media_active |= IFM_100_T4;
- else if (anlpar & ANLPAR_TX_FD /* &&
- sc->mii_capabilities & BMSR_100TXFDX */)
+ else if (anlpar & ANLPAR_TX_FD &&
+ sc->sc_sia_cap & BMSR_100TXFDX)
mii->mii_media_active |= IFM_100_TX|IFM_FDX;
- else if (anlpar & ANLPAR_TX /* &&
- sc->mii_capabilities & BMSR_100TXHDX */)
+ else if (anlpar & ANLPAR_TX &&
+ sc->sc_sia_cap & BMSR_100TXHDX)
mii->mii_media_active |= IFM_100_TX;
- else if (anlpar & ANLPAR_10_FD)
+ else if (anlpar & ANLPAR_10_FD &&
+ sc->sc_sia_cap & BMSR_10TFDX)
mii->mii_media_active |= IFM_10_T|IFM_FDX;
- else if (anlpar & ANLPAR_10)
+ else if (anlpar & ANLPAR_10 &&
+ sc->sc_sia_cap & BMSR_10THDX)
mii->mii_media_active |= IFM_10_T;
else
mii->mii_media_active |= IFM_NONE;
diff -r 662711428691 -r 5722c80c861c sys/dev/ic/tulipvar.h
--- a/sys/dev/ic/tulipvar.h Wed Sep 18 18:42:06 2002 +0000
+++ b/sys/dev/ic/tulipvar.h Wed Sep 18 19:12:17 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: tulipvar.h,v 1.47 2002/04/09 05:57:21 chs Exp $ */
+/* $NetBSD: tulipvar.h,v 1.48 2002/09/18 19:12:17 thorpej Exp $ */
/*-
* Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
@@ -310,6 +310,7 @@
const char *tsti_name; /* media name */
u_int32_t tsti_opmode; /* OPMODE bits for this media */
+ u_int32_t tsti_sia_cap; /* "MII" capabilities for this media */
/*
* Settings for 21040, 21041, and 21142/21143 SIA, in the event
@@ -381,6 +382,7 @@
u_int8_t sc_gp_dir; /* GPIO pin direction bits (21140) */
int sc_media_seen; /* ISV media block types seen */
int sc_tlp_minst; /* Tulip internal media instance */
+ u_int32_t sc_sia_cap; /* SIA media capabilities (21143) */
/* Reset function. */
void (*sc_reset) __P((struct tulip_softc *));
Home |
Main Index |
Thread Index |
Old Index