From owner-freebsd-current Fri May 16 09:38:07 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.5/8.8.5) id JAA06898 for current-outgoing; Fri, 16 May 1997 09:38:07 -0700 (PDT) Received: from mhub1.tc.umn.edu (0@mhub1.tc.umn.edu [128.101.131.51]) by hub.freebsd.org (8.8.5/8.8.5) with SMTP id JAA06890 for ; Fri, 16 May 1997 09:38:04 -0700 (PDT) Received: from gold.tc.umn.edu by mhub1.tc.umn.edu; Fri, 16 May 97 11:37:54 -0500 Received: from pub-27-c-215.dialup.umn.edu by gold.tc.umn.edu; Fri, 16 May 97 11:37:53 -0500 Date: Fri, 16 May 1997 11:35:48 -0500 (CDT) From: dave adkins To: freebsd-current@freebsd.org Subject: if_de.c and Cogent EM100FX support Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-current@freebsd.org X-Loop: FreeBSD.org Precedence: bulk I'm including a patch of if_de.c and dc21040.h for Cogent EM100FX fiber support. The MIISYM interface does not support scrambler and it has a different value at srom[32]. I also enabled full duplex support. I'm currently running this patch in a system with an SMC9332 and an EM100FX. --cut here-- --- if_de.c Tue May 13 07:19:13 1997 +++ if_de.c Wed May 14 11:32:53 1997 @@ -1433,6 +1433,14 @@ TULIP_CSR_WRITE(sc, csr_command, sc->tulip_cmdmode); } +static void +tulip_21140_nomii_cogent100fxonly_media_preset( + tulip_softc_t * const sc) +{ + sc->tulip_cmdmode |= TULIP_CMD_PORTSELECT + |TULIP_CMD_PCSFUNCTION; + TULIP_CSR_WRITE(sc, csr_command, sc->tulip_cmdmode); +} static int tulip_21140_evalboard_media_probe( @@ -1606,6 +1614,49 @@ static int +tulip_21140_cogent_em100fx_media_probe( + tulip_softc_t * const sc) +{ + TULIP_CSR_WRITE(sc, csr_gp, TULIP_GP_EM100_PINS); + TULIP_CSR_WRITE(sc, csr_gp, TULIP_GP_EM100_INIT); + /* The big difference between tx and fx is no scrambler allowed */ + TULIP_CSR_WRITE(sc, csr_command, + (TULIP_CSR_READ(sc, csr_command) | TULIP_CMD_PORTSELECT | + TULIP_CMD_PCSFUNCTION | TULIP_CMD_MUSTBEONE) & ~TULIP_CMD_SCRAMBLER ); + TULIP_CSR_WRITE(sc, csr_command, + TULIP_CSR_READ(sc, csr_command) & ~TULIP_CMD_TXTHRSHLDCTL); + return 1; +} + +static void +tulip_21140_cogent_em100fx_media_select( + tulip_softc_t * const sc) +{ + sc->tulip_cmdmode |= TULIP_CMD_STOREFWD|TULIP_CMD_MUSTBEONE + |TULIP_CMD_BACKOFFCTR | TULIP_CMD_FULLDUPLEX; + sc->tulip_flags |= TULIP_LINKUP; + TULIP_CSR_WRITE(sc, csr_gp, TULIP_GP_EM100_PINS); + TULIP_CSR_WRITE(sc, csr_gp, TULIP_GP_EM100_INIT); + if ((sc->tulip_flags & TULIP_ALTPHYS) == 0) + sc->tulip_flags |= TULIP_PRINTMEDIA|TULIP_ALTPHYS; + sc->tulip_cmdmode &= ~TULIP_CMD_TXTHRSHLDCTL; + sc->tulip_media = TULIP_MEDIA_100BASETX; +#ifdef BIG_PACKET + if (sc->tulip_if.if_mtu > ETHERMTU) { + TULIP_CSR_WRITE(sc, csr_watchdog, TULIP_WATCHDOG_RXDISABLE|TULIP_WATCHDOG_TXDISABLE); + } +#endif +} +static const tulip_boardsw_t tulip_21140_cogent_em100fx_boardsw = { + TULIP_21140_COGENT_EM100, + "Cogent EM100FX ", + tulip_21140_cogent_em100fx_media_probe, + tulip_21140_cogent_em100fx_media_select, + tulip_21140_nomii_cogent100fxonly_media_preset +}; + + +static int tulip_21140_znyx_zx34x_media_probe( tulip_softc_t * const sc) { @@ -3276,6 +3327,8 @@ if (sc->tulip_chipid == TULIP_21140 || sc->tulip_chipid == TULIP_21140A) { if (sc->tulip_rombuf[32] == TULIP_COGENT_EM100_ID) sc->tulip_boardsw = &tulip_21140_cogent_em100_boardsw; + else if ( sc->tulip_rombuf[32] == TULIP_COGENT_EM100FX_ID) + sc->tulip_boardsw = &tulip_21140_cogent_em100fx_boardsw; } } else if (sc->tulip_hwaddr[0] == TULIP_OUI_ZNYX_0 && sc->tulip_hwaddr[1] == TULIP_OUI_ZNYX_1 --- dc21040.h Wed May 7 07:22:36 1997 +++ dc21040.h Wed May 14 09:55:32 1997 @@ -294,6 +294,7 @@ #define TULIP_OUI_COGENT_1 0x00 #define TULIP_OUI_COGENT_2 0x92 #define TULIP_COGENT_EM100_ID 0x12 +#define TULIP_COGENT_EM100FX_ID 0x15 /* 100BaseFX ID */ /* --cut-here-- dave adkins adkin003@gold.tc.umn.edu