Tue May 21 09:58:15 2019 UTC ()
- I think it's not required to test "#if defined(IFM_ETHER)" now.
- Fix compile error. It seems no one use this file. Is it OK to remove this
  file?


(msaitoh)
diff -r1.159 -r1.160 src/sys/dev/pci/if_de.c

cvs diff -r1.159 -r1.160 src/sys/dev/pci/Attic/if_de.c (expand / switch to unified diff)

--- src/sys/dev/pci/Attic/if_de.c 2019/04/24 08:54:35 1.159
+++ src/sys/dev/pci/Attic/if_de.c 2019/05/21 09:58:15 1.160
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: if_de.c,v 1.159 2019/04/24 08:54:35 msaitoh Exp $ */ 1/* $NetBSD: if_de.c,v 1.160 2019/05/21 09:58:15 msaitoh Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 1994-1997 Matt Thomas (matt@3am-software.com) 4 * Copyright (c) 1994-1997 Matt Thomas (matt@3am-software.com)
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * Redistribution and use in source and binary forms, with or without 7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions 8 * modification, are permitted provided that the following conditions
9 * are met: 9 * are met:
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer. 11 * notice, this list of conditions and the following disclaimer.
12 * 2. The name of the author may not be used to endorse or promote products 12 * 2. The name of the author may not be used to endorse or promote products
13 * derived from this software without specific prior written permission 13 * derived from this software without specific prior written permission
14 * 14 *
@@ -27,27 +27,27 @@ @@ -27,27 +27,27 @@
27 * 27 *
28 */ 28 */
29 29
30/* 30/*
31 * DEC 21040 PCI Ethernet Controller 31 * DEC 21040 PCI Ethernet Controller
32 * 32 *
33 * Written by Matt Thomas 33 * Written by Matt Thomas
34 * BPF support code stolen directly from if_ec.c 34 * BPF support code stolen directly from if_ec.c
35 * 35 *
36 * This driver supports the DEC DE435 or any other PCI 36 * This driver supports the DEC DE435 or any other PCI
37 * board which support 21040, 21041, or 21140 (mostly). 37 * board which support 21040, 21041, or 21140 (mostly).
38 */ 38 */
39#include <sys/cdefs.h> 39#include <sys/cdefs.h>
40__KERNEL_RCSID(0, "$NetBSD: if_de.c,v 1.159 2019/04/24 08:54:35 msaitoh Exp $"); 40__KERNEL_RCSID(0, "$NetBSD: if_de.c,v 1.160 2019/05/21 09:58:15 msaitoh Exp $");
41 41
42#define TULIP_HDR_DATA 42#define TULIP_HDR_DATA
43 43
44#ifdef __NetBSD__ 44#ifdef __NetBSD__
45#include "opt_inet.h" 45#include "opt_inet.h"
46#endif 46#endif
47 47
48#include <sys/param.h> 48#include <sys/param.h>
49#include <sys/systm.h> 49#include <sys/systm.h>
50#include <sys/callout.h> 50#include <sys/callout.h>
51#include <sys/mbuf.h> 51#include <sys/mbuf.h>
52#include <sys/protosw.h> 52#include <sys/protosw.h>
53#include <sys/socket.h> 53#include <sys/socket.h>
@@ -176,31 +176,29 @@ static ifnet_ret_t tulip_ifstart_one(str @@ -176,31 +176,29 @@ static ifnet_ret_t tulip_ifstart_one(str
176static ifnet_ret_t tulip_ifstart(struct ifnet *ifp); 176static ifnet_ret_t tulip_ifstart(struct ifnet *ifp);
177static struct mbuf *tulip_txput(tulip_softc_t * const sc, struct mbuf *m); 177static struct mbuf *tulip_txput(tulip_softc_t * const sc, struct mbuf *m);
178static void tulip_txput_setup(tulip_softc_t * const sc); 178static void tulip_txput_setup(tulip_softc_t * const sc);
179static void tulip_rx_intr(tulip_softc_t * const sc); 179static void tulip_rx_intr(tulip_softc_t * const sc);
180static void tulip_addr_filter(tulip_softc_t * const sc); 180static void tulip_addr_filter(tulip_softc_t * const sc);
181static unsigned tulip_mii_readreg(tulip_softc_t * const sc, unsigned devaddr, 181static unsigned tulip_mii_readreg(tulip_softc_t * const sc, unsigned devaddr,
182 unsigned regno); 182 unsigned regno);
183static void tulip_mii_writereg(tulip_softc_t * const sc, unsigned devaddr, 183static void tulip_mii_writereg(tulip_softc_t * const sc, unsigned devaddr,
184 unsigned regno, unsigned data); 184 unsigned regno, unsigned data);
185static int tulip_mii_map_abilities(tulip_softc_t * const sc, 185static int tulip_mii_map_abilities(tulip_softc_t * const sc,
186 unsigned abilities); 186 unsigned abilities);
187static tulip_media_t tulip_mii_phy_readspecific(tulip_softc_t * const sc); 187static tulip_media_t tulip_mii_phy_readspecific(tulip_softc_t * const sc);
188static int tulip_srom_decode(tulip_softc_t * const sc); 188static int tulip_srom_decode(tulip_softc_t * const sc);
189#if defined(IFM_ETHER) 
190static int tulip_ifmedia_change(struct ifnet * const ifp); 189static int tulip_ifmedia_change(struct ifnet * const ifp);
191static void tulip_ifmedia_status(struct ifnet * const ifp, 190static void tulip_ifmedia_status(struct ifnet * const ifp,
192 struct ifmediareq *req); 191 struct ifmediareq *req);
193#endif 
194/* static void tulip_21140_map_media(tulip_softc_t *sc); */ 192/* static void tulip_21140_map_media(tulip_softc_t *sc); */
195  193
196 194
197static bus_dmamap_t 195static bus_dmamap_t
198tulip_alloc_rxmap(tulip_softc_t *sc) 196tulip_alloc_rxmap(tulip_softc_t *sc)
199{ 197{
200 return (sc->tulip_free_rxmaps[--sc->tulip_num_free_rxmaps]); 198 return (sc->tulip_free_rxmaps[--sc->tulip_num_free_rxmaps]);
201} 199}
202 200
203static void 201static void
204tulip_free_rxmap(tulip_softc_t *sc, bus_dmamap_t map) 202tulip_free_rxmap(tulip_softc_t *sc, bus_dmamap_t map)
205{ 203{
206 sc->tulip_free_rxmaps[sc->tulip_num_free_rxmaps++] = map; 204 sc->tulip_free_rxmaps[sc->tulip_num_free_rxmaps++] = map;
@@ -1479,26 +1477,27 @@ tulip_mii_map_abilities(tulip_softc_t *  @@ -1479,26 +1477,27 @@ tulip_mii_map_abilities(tulip_softc_t *
1479static void 1477static void
1480tulip_mii_autonegotiate(tulip_softc_t * const sc, const unsigned phyaddr) 1478tulip_mii_autonegotiate(tulip_softc_t * const sc, const unsigned phyaddr)
1481{ 1479{
1482 switch (sc->tulip_probe_state) { 1480 switch (sc->tulip_probe_state) {
1483 case TULIP_PROBE_MEDIATEST: 1481 case TULIP_PROBE_MEDIATEST:
1484 case TULIP_PROBE_INACTIVE: 1482 case TULIP_PROBE_INACTIVE:
1485 sc->tulip_flags |= TULIP_DIDNWAY; 1483 sc->tulip_flags |= TULIP_DIDNWAY;
1486 tulip_mii_writereg(sc, phyaddr, PHYREG_CONTROL, PHYCTL_RESET); 1484 tulip_mii_writereg(sc, phyaddr, PHYREG_CONTROL, PHYCTL_RESET);
1487 sc->tulip_probe_timeout = 3000; 1485 sc->tulip_probe_timeout = 3000;
1488 sc->tulip_intrmask |= TULIP_STS_ABNRMLINTR|TULIP_STS_NORMALINTR; 1486 sc->tulip_intrmask |= TULIP_STS_ABNRMLINTR|TULIP_STS_NORMALINTR;
1489 sc->tulip_probe_state = TULIP_PROBE_PHYRESET; 1487 sc->tulip_probe_state = TULIP_PROBE_PHYRESET;
1490 /* FALL THROUGH */ 1488 /* FALL THROUGH */
1491 case TULIP_PROBE_PHYRESET: 1489 case TULIP_PROBE_PHYRESET:
 1490 {
1492 uint32_t status; 1491 uint32_t status;
1493 uint32_t data = tulip_mii_readreg(sc, phyaddr, PHYREG_CONTROL); 1492 uint32_t data = tulip_mii_readreg(sc, phyaddr, PHYREG_CONTROL);
1494 if (data & PHYCTL_RESET) { 1493 if (data & PHYCTL_RESET) {
1495 if (sc->tulip_probe_timeout > 0) { 1494 if (sc->tulip_probe_timeout > 0) {
1496 tulip_timeout(sc); 1495 tulip_timeout(sc);
1497 return; 1496 return;
1498 } 1497 }
1499 printf(TULIP_PRINTF_FMT 1498 printf(TULIP_PRINTF_FMT
1500 "(phy%d): error: reset of PHY never completed!\n", 1499 "(phy%d): error: reset of PHY never completed!\n",
1501 TULIP_PRINTF_ARGS, phyaddr); 1500 TULIP_PRINTF_ARGS, phyaddr);
1502 sc->tulip_flags &= ~TULIP_TXPROBE_ACTIVE; 1501 sc->tulip_flags &= ~TULIP_TXPROBE_ACTIVE;
1503 sc->tulip_probe_state = TULIP_PROBE_FAILED; 1502 sc->tulip_probe_state = TULIP_PROBE_FAILED;
1504 sc->tulip_if.if_flags &= ~(IFF_UP|IFF_RUNNING); 1503 sc->tulip_if.if_flags &= ~(IFF_UP|IFF_RUNNING);
@@ -1525,28 +1524,30 @@ tulip_mii_autonegotiate(tulip_softc_t *  @@ -1525,28 +1524,30 @@ tulip_mii_autonegotiate(tulip_softc_t *
1525 loudprintf(TULIP_PRINTF_FMT "(phy%d): oops: " 1524 loudprintf(TULIP_PRINTF_FMT "(phy%d): oops: "
1526 "enable autonegotiation failed: 0x%04x\n", 1525 "enable autonegotiation failed: 0x%04x\n",
1527 TULIP_PRINTF_ARGS, phyaddr, data); 1526 TULIP_PRINTF_ARGS, phyaddr, data);
1528 else 1527 else
1529 loudprintf(TULIP_PRINTF_FMT "(phy%d): " 1528 loudprintf(TULIP_PRINTF_FMT "(phy%d): "
1530 "autonegotiation restarted: 0x%04x (ad=0x%04x)\n", 1529 "autonegotiation restarted: 0x%04x (ad=0x%04x)\n",
1531 TULIP_PRINTF_ARGS, phyaddr, data, 1530 TULIP_PRINTF_ARGS, phyaddr, data,
1532 tulip_mii_readreg(sc, phyaddr, 1531 tulip_mii_readreg(sc, phyaddr,
1533 PHYREG_AUTONEG_ADVERTISEMENT)); 1532 PHYREG_AUTONEG_ADVERTISEMENT));
1534 sc->tulip_dbg.dbg_nway_starts++; 1533 sc->tulip_dbg.dbg_nway_starts++;
1535#endif 1534#endif
1536 sc->tulip_probe_state = TULIP_PROBE_PHYAUTONEG; 1535 sc->tulip_probe_state = TULIP_PROBE_PHYAUTONEG;
1537 sc->tulip_probe_timeout = 3000; 1536 sc->tulip_probe_timeout = 3000;
1538 /* FALL THROUGH */ 1537 }
 1538 /* FALLTHROUGH */
1539 case TULIP_PROBE_PHYAUTONEG: 1539 case TULIP_PROBE_PHYAUTONEG:
 1540 {
1540 uint32_t status = tulip_mii_readreg(sc, phyaddr, PHYREG_STATUS) 1541 uint32_t status = tulip_mii_readreg(sc, phyaddr, PHYREG_STATUS)
1541 | tulip_mii_readreg(sc, phyaddr, PHYREG_STATUS); 1542 | tulip_mii_readreg(sc, phyaddr, PHYREG_STATUS);
1542 uint32_t data; 1543 uint32_t data;
1543 if ((status & PHYSTS_AUTONEG_DONE) == 0) { 1544 if ((status & PHYSTS_AUTONEG_DONE) == 0) {
1544 if (sc->tulip_probe_timeout > 0) { 1545 if (sc->tulip_probe_timeout > 0) {
1545 tulip_timeout(sc); 1546 tulip_timeout(sc);
1546 return; 1547 return;
1547 } 1548 }
1548#if defined(TULIP_DEBUG) 1549#if defined(TULIP_DEBUG)
1549 loudprintf(TULIP_PRINTF_FMT "(phy%d): autonegotiation" 1550 loudprintf(TULIP_PRINTF_FMT "(phy%d): autonegotiation"
1550 " timeout: sts=0x%04x, ctl=0x%04x\n", 1551 " timeout: sts=0x%04x, ctl=0x%04x\n",
1551 TULIP_PRINTF_ARGS, phyaddr, status, 1552 TULIP_PRINTF_ARGS, phyaddr, status,
1552 tulip_mii_readreg(sc, phyaddr, PHYREG_CONTROL)); 1553 tulip_mii_readreg(sc, phyaddr, PHYREG_CONTROL));
@@ -1556,26 +1557,27 @@ tulip_mii_autonegotiate(tulip_softc_t *  @@ -1556,26 +1557,27 @@ tulip_mii_autonegotiate(tulip_softc_t *
1556 return; 1557 return;
1557 } 1558 }
1558 data = tulip_mii_readreg(sc, phyaddr, PHYREG_AUTONEG_ABILITIES) 1559 data = tulip_mii_readreg(sc, phyaddr, PHYREG_AUTONEG_ABILITIES)
1559 | tulip_mii_readreg(sc, phyaddr, PHYREG_AUTONEG_ABILITIES); 1560 | tulip_mii_readreg(sc, phyaddr, PHYREG_AUTONEG_ABILITIES);
1560#if defined(TULIP_DEBUG) 1561#if defined(TULIP_DEBUG)
1561 loudprintf(TULIP_PRINTF_FMT "(phy%d): " 1562 loudprintf(TULIP_PRINTF_FMT "(phy%d): "
1562 "autonegotiation complete: 0x%04x (sts=0x%04x)\n", 1563 "autonegotiation complete: 0x%04x (sts=0x%04x)\n",
1563 TULIP_PRINTF_ARGS, phyaddr, data, status); 1564 TULIP_PRINTF_ARGS, phyaddr, data, status);
1564#endif 1565#endif
1565 data = (data << 6) & status; 1566 data = (data << 6) & status;
1566 if (!tulip_mii_map_abilities(sc, data)) 1567 if (!tulip_mii_map_abilities(sc, data))
1567 sc->tulip_flags &= ~TULIP_DIDNWAY; 1568 sc->tulip_flags &= ~TULIP_DIDNWAY;
1568 return; 1569 return;
 1570 }
1569 default: 1571 default:
1570#if defined(DIAGNOSTIC) 1572#if defined(DIAGNOSTIC)
1571 panic("tulip_media_poll: botch at line %d", __LINE__); 1573 panic("tulip_media_poll: botch at line %d", __LINE__);
1572#endif 1574#endif
1573 break; 1575 break;
1574 } 1576 }
1575#if defined(TULIP_DEBUG) 1577#if defined(TULIP_DEBUG)
1576 loudprintf(TULIP_PRINTF_FMT 1578 loudprintf(TULIP_PRINTF_FMT
1577 "(phy%d): autonegotiation failure: state = %d\n", 1579 "(phy%d): autonegotiation failure: state = %d\n",
1578 TULIP_PRINTF_ARGS, phyaddr, sc->tulip_probe_state); 1580 TULIP_PRINTF_ARGS, phyaddr, sc->tulip_probe_state);
1579 sc->tulip_dbg.dbg_nway_failures++; 1581 sc->tulip_dbg.dbg_nway_failures++;
1580#endif 1582#endif
1581} 1583}
@@ -2477,27 +2479,27 @@ tulip_identify_compex_nic(tulip_softc_t  @@ -2477,27 +2479,27 @@ tulip_identify_compex_nic(tulip_softc_t
2477 root_unit--) { 2479 root_unit--) {
2478 root_sc = TULIP_UNIT_TO_SOFTC(root_unit); 2480 root_sc = TULIP_UNIT_TO_SOFTC(root_unit);
2479 if (root_sc == NULL 2481 if (root_sc == NULL
2480 || !(root_sc->tulip_features & TULIP_HAVE_SLAVEDINTR)) 2482 || !(root_sc->tulip_features & TULIP_HAVE_SLAVEDINTR))
2481 break; 2483 break;
2482 root_sc = NULL; 2484 root_sc = NULL;
2483 } 2485 }
2484 if (root_sc != NULL 2486 if (root_sc != NULL
2485 && root_sc->tulip_chipid == sc->tulip_chipid 2487 && root_sc->tulip_chipid == sc->tulip_chipid
2486 && root_sc->tulip_pci_busno == sc->tulip_pci_busno) { 2488 && root_sc->tulip_pci_busno == sc->tulip_pci_busno) {
2487 sc->tulip_features |= TULIP_HAVE_SLAVEDINTR; 2489 sc->tulip_features |= TULIP_HAVE_SLAVEDINTR;
2488 sc->tulip_slaves = root_sc->tulip_slaves; 2490 sc->tulip_slaves = root_sc->tulip_slaves;
2489 root_sc->tulip_slaves = sc; 2491 root_sc->tulip_slaves = sc;
2490 } else if(sc->tulip_features & TULIP_HAVE_SLAVEDINTR) { 2492 } else if (sc->tulip_features & TULIP_HAVE_SLAVEDINTR) {
2491 printf("\nCannot find master device for de%d interrupts", 2493 printf("\nCannot find master device for de%d interrupts",
2492 tulip_unit(sc)); 2494 tulip_unit(sc));
2493 } 2495 }
2494 } else 2496 } else
2495 strlcat(sc->tulip_boardid, "unknown ", 2497 strlcat(sc->tulip_boardid, "unknown ",
2496 sizeof(sc->tulip_boardid)); 2498 sizeof(sc->tulip_boardid));
2497 /* sc->tulip_boardsw = &tulip_21140_eb_boardsw; */ 2499 /* sc->tulip_boardsw = &tulip_21140_eb_boardsw; */
2498 return; 2500 return;
2499} 2501}
2500  2502
2501static int 2503static int
2502tulip_srom_decode(tulip_softc_t * const sc) 2504tulip_srom_decode(tulip_softc_t * const sc)
2503{ 2505{
@@ -2613,27 +2615,27 @@ tulip_srom_decode(tulip_softc_t * const  @@ -2613,27 +2615,27 @@ tulip_srom_decode(tulip_softc_t * const
2613 sc->tulip_gpinit = *dp++; 2615 sc->tulip_gpinit = *dp++;
2614 blocks = *dp++; 2616 blocks = *dp++;
2615 for (idx2 = 0; idx2 < blocks; idx2++) { 2617 for (idx2 = 0; idx2 < blocks; idx2++) {
2616 const uint8_t *ep; 2618 const uint8_t *ep;
2617 if ((*dp & 0x80) == 0) { 2619 if ((*dp & 0x80) == 0) {
2618 length = 4; 2620 length = 4;
2619 type = 0; 2621 type = 0;
2620 } else { 2622 } else {
2621 length = (*dp++ & 0x7f) - 1; 2623 length = (*dp++ & 0x7f) - 1;
2622 type = *dp++ & 0x3f; 2624 type = *dp++ & 0x3f;
2623 } 2625 }
2624 ep = dp + length; 2626 ep = dp + length;
2625 switch (type & 0x3f) { 2627 switch (type & 0x3f) {
2626 case 0: /* 21140[A] GPR block */ 2628 case 0: { /* 21140[A] GPR block */
2627 tulip_media_t media; 2629 tulip_media_t media;
2628 srom_media = (tulip_srom_media_t)(dp[0] & 0x3f); 2630 srom_media = (tulip_srom_media_t)(dp[0] & 0x3f);
2629 for (idx3 = 0; tulip_srom_mediums[idx3].sm_type != TULIP_MEDIA_UNKNOWN; idx3++) { 2631 for (idx3 = 0; tulip_srom_mediums[idx3].sm_type != TULIP_MEDIA_UNKNOWN; idx3++) {
2630 if (tulip_srom_mediums[idx3].sm_srom_type == srom_media) 2632 if (tulip_srom_mediums[idx3].sm_srom_type == srom_media)
2631 break; 2633 break;
2632 } 2634 }
2633 media = tulip_srom_mediums[idx3].sm_type; 2635 media = tulip_srom_mediums[idx3].sm_type;
2634 if (media == TULIP_MEDIA_UNKNOWN) 2636 if (media == TULIP_MEDIA_UNKNOWN)
2635 break; 2637 break;
2636 mi->mi_type = TULIP_MEDIAINFO_GPR; 2638 mi->mi_type = TULIP_MEDIAINFO_GPR;
2637 sc->tulip_mediums[media] = mi; 2639 sc->tulip_mediums[media] = mi;
2638 mi->mi_gpdata = dp[1]; 2640 mi->mi_gpdata = dp[1];
2639 if (media > gp_media && !TULIP_IS_MEDIA_FD(media)) { 2641 if (media > gp_media && !TULIP_IS_MEDIA_FD(media)) {
@@ -2643,27 +2645,28 @@ tulip_srom_decode(tulip_softc_t * const  @@ -2643,27 +2645,28 @@ tulip_srom_decode(tulip_softc_t * const
2643 data = dp[2] + dp[3] * 256; 2645 data = dp[2] + dp[3] * 256;
2644 mi->mi_cmdmode = TULIP_SROM_2114X_CMDBITS(data); 2646 mi->mi_cmdmode = TULIP_SROM_2114X_CMDBITS(data);
2645 if (data & TULIP_SROM_2114X_NOINDICATOR) { 2647 if (data & TULIP_SROM_2114X_NOINDICATOR) {
2646 mi->mi_actmask = 0; 2648 mi->mi_actmask = 0;
2647 } else { 2649 } else {
2648#if 0 2650#if 0
2649 mi->mi_default = (data & TULIP_SROM_2114X_DEFAULT) != 0; 2651 mi->mi_default = (data & TULIP_SROM_2114X_DEFAULT) != 0;
2650#endif 2652#endif
2651 mi->mi_actmask = TULIP_SROM_2114X_BITPOS(data); 2653 mi->mi_actmask = TULIP_SROM_2114X_BITPOS(data);
2652 mi->mi_actdata = (data & TULIP_SROM_2114X_POLARITY) ? 0 : mi->mi_actmask; 2654 mi->mi_actdata = (data & TULIP_SROM_2114X_POLARITY) ? 0 : mi->mi_actmask;
2653 } 2655 }
2654 mi++; 2656 mi++;
2655 break; 2657 break;
2656 case 1: /* 21140[A] MII block */ 2658 }
 2659 case 1: { /* 21140[A] MII block */
2657 const unsigned phyno = *dp++; 2660 const unsigned phyno = *dp++;
2658 mi->mi_type = TULIP_MEDIAINFO_MII; 2661 mi->mi_type = TULIP_MEDIAINFO_MII;
2659 mi->mi_gpr_length = *dp++; 2662 mi->mi_gpr_length = *dp++;
2660 mi->mi_gpr_offset = dp - sc->tulip_rombuf; 2663 mi->mi_gpr_offset = dp - sc->tulip_rombuf;
2661 dp += mi->mi_gpr_length; 2664 dp += mi->mi_gpr_length;
2662 mi->mi_reset_length = *dp++; 2665 mi->mi_reset_length = *dp++;
2663 mi->mi_reset_offset = dp - sc->tulip_rombuf; 2666 mi->mi_reset_offset = dp - sc->tulip_rombuf;
2664 dp += mi->mi_reset_length; 2667 dp += mi->mi_reset_length;
2665 2668
2666 /* 2669 /*
2667 * Before we probe for a PHY, use the GPR 2670 * Before we probe for a PHY, use the GPR
2668 * information to select it. If we don't, it 2671 * information to select it. If we don't, it
2669 * may be inaccessible. 2672 * may be inaccessible.
@@ -2701,27 +2704,28 @@ tulip_srom_decode(tulip_softc_t * const  @@ -2701,27 +2704,28 @@ tulip_srom_decode(tulip_softc_t * const
2701 mi->mi_capabilities = dp[0] + dp[1] * 256; dp += 2; 2704 mi->mi_capabilities = dp[0] + dp[1] * 256; dp += 2;
2702 mi->mi_advertisement = dp[0] + dp[1] * 256; dp += 2; 2705 mi->mi_advertisement = dp[0] + dp[1] * 256; dp += 2;
2703 mi->mi_full_duplex = dp[0] + dp[1] * 256; dp += 2; 2706 mi->mi_full_duplex = dp[0] + dp[1] * 256; dp += 2;
2704 mi->mi_tx_threshold = dp[0] + dp[1] * 256; dp += 2; 2707 mi->mi_tx_threshold = dp[0] + dp[1] * 256; dp += 2;
2705 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASETX_FD); 2708 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASETX_FD);
2706 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASETX); 2709 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASETX);
2707 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASET4); 2710 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASET4);
2708 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 10BASET_FD); 2711 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 10BASET_FD);
2709 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 10BASET); 2712 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 10BASET);
2710 mi->mi_phyid = (tulip_mii_readreg(sc, mi->mi_phyaddr, PHYREG_IDLOW) << 16) | 2713 mi->mi_phyid = (tulip_mii_readreg(sc, mi->mi_phyaddr, PHYREG_IDLOW) << 16) |
2711 tulip_mii_readreg(sc, mi->mi_phyaddr, PHYREG_IDHIGH); 2714 tulip_mii_readreg(sc, mi->mi_phyaddr, PHYREG_IDHIGH);
2712 mi++; 2715 mi++;
2713 break; 2716 break;
2714 case 2: /* 2114[23] SIA block */ 2717 }
 2718 case 2: { /* 2114[23] SIA block */
2715 tulip_media_t media; 2719 tulip_media_t media;
2716 srom_media = (tulip_srom_media_t)(dp[0] & 0x3f); 2720 srom_media = (tulip_srom_media_t)(dp[0] & 0x3f);
2717 for (idx3 = 0; tulip_srom_mediums[idx3].sm_type != TULIP_MEDIA_UNKNOWN; idx3++) { 2721 for (idx3 = 0; tulip_srom_mediums[idx3].sm_type != TULIP_MEDIA_UNKNOWN; idx3++) {
2718 if (tulip_srom_mediums[idx3].sm_srom_type == srom_media) 2722 if (tulip_srom_mediums[idx3].sm_srom_type == srom_media)
2719 break; 2723 break;
2720 } 2724 }
2721 media = tulip_srom_mediums[idx3].sm_type; 2725 media = tulip_srom_mediums[idx3].sm_type;
2722 if (media == TULIP_MEDIA_UNKNOWN) 2726 if (media == TULIP_MEDIA_UNKNOWN)
2723 break; 2727 break;
2724 mi->mi_type = TULIP_MEDIAINFO_SIA; 2728 mi->mi_type = TULIP_MEDIAINFO_SIA;
2725 sc->tulip_mediums[media] = mi; 2729 sc->tulip_mediums[media] = mi;
2726 if (dp[0] & 0x40) { 2730 if (dp[0] & 0x40) {
2727 mi->mi_sia_connectivity = dp[1] + dp[2] * 256; 2731 mi->mi_sia_connectivity = dp[1] + dp[2] * 256;
@@ -2743,27 +2747,28 @@ tulip_srom_decode(tulip_softc_t * const  @@ -2743,27 +2747,28 @@ tulip_srom_decode(tulip_softc_t * const
2743 case TULIP_MEDIA_10BASET_FD: 2747 case TULIP_MEDIA_10BASET_FD:
2744 TULIP_MEDIAINFO_SIA_INIT(sc, mi, 21142, 10BASET_FD); 2748 TULIP_MEDIAINFO_SIA_INIT(sc, mi, 21142, 10BASET_FD);
2745 sc->tulip_intrmask |= TULIP_STS_LINKPASS|TULIP_STS_LINKFAIL; 2749 sc->tulip_intrmask |= TULIP_STS_LINKPASS|TULIP_STS_LINKFAIL;
2746 break; 2750 break;
2747 default: 2751 default:
2748 goto bad_media; 2752 goto bad_media;
2749 } 2753 }
2750 } 2754 }
2751 mi->mi_sia_gp_control = (dp[1] + dp[2] * 256) << 16; 2755 mi->mi_sia_gp_control = (dp[1] + dp[2] * 256) << 16;
2752 mi->mi_sia_gp_data = (dp[3] + dp[4] * 256) << 16; 2756 mi->mi_sia_gp_data = (dp[3] + dp[4] * 256) << 16;
2753 mi++; 2757 mi++;
2754 bad_media: 2758 bad_media:
2755 break; 2759 break;
2756 case 3: /* 2114[23] MII PHY block */ 2760 }
 2761 case 3: { /* 2114[23] MII PHY block */
2757 const unsigned phyno = *dp++; 2762 const unsigned phyno = *dp++;
2758 const uint8_t *dp0; 2763 const uint8_t *dp0;
2759 mi->mi_type = TULIP_MEDIAINFO_MII; 2764 mi->mi_type = TULIP_MEDIAINFO_MII;
2760 mi->mi_gpr_length = *dp++; 2765 mi->mi_gpr_length = *dp++;
2761 mi->mi_gpr_offset = dp - sc->tulip_rombuf; 2766 mi->mi_gpr_offset = dp - sc->tulip_rombuf;
2762 dp += 2 * mi->mi_gpr_length; 2767 dp += 2 * mi->mi_gpr_length;
2763 mi->mi_reset_length = *dp++; 2768 mi->mi_reset_length = *dp++;
2764 mi->mi_reset_offset = dp - sc->tulip_rombuf; 2769 mi->mi_reset_offset = dp - sc->tulip_rombuf;
2765 dp += 2 * mi->mi_reset_length; 2770 dp += 2 * mi->mi_reset_length;
2766 2771
2767 dp0 = &sc->tulip_rombuf[mi->mi_reset_offset]; 2772 dp0 = &sc->tulip_rombuf[mi->mi_reset_offset];
2768 for (idx3 = 0; idx3 < mi->mi_reset_length; idx3++, dp0 += 2) { 2773 for (idx3 = 0; idx3 < mi->mi_reset_length; idx3++, dp0 += 2) {
2769 DELAY(10); 2774 DELAY(10);
@@ -2797,63 +2802,66 @@ tulip_srom_decode(tulip_softc_t * const  @@ -2797,63 +2802,66 @@ tulip_srom_decode(tulip_softc_t * const
2797 mi->mi_advertisement = dp[0] + dp[1] * 256; dp += 2; 2802 mi->mi_advertisement = dp[0] + dp[1] * 256; dp += 2;
2798 mi->mi_full_duplex = dp[0] + dp[1] * 256; dp += 2; 2803 mi->mi_full_duplex = dp[0] + dp[1] * 256; dp += 2;
2799 mi->mi_tx_threshold = dp[0] + dp[1] * 256; dp += 2; 2804 mi->mi_tx_threshold = dp[0] + dp[1] * 256; dp += 2;
2800 mi->mi_mii_interrupt = dp[0] + dp[1] * 256; dp += 2; 2805 mi->mi_mii_interrupt = dp[0] + dp[1] * 256; dp += 2;
2801 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASETX_FD); 2806 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASETX_FD);
2802 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASETX); 2807 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASETX);
2803 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASET4); 2808 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 100BASET4);
2804 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 10BASET_FD); 2809 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 10BASET_FD);
2805 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 10BASET); 2810 TULIP_MEDIAINFO_ADD_CAPABILITY(sc, mi, 10BASET);
2806 mi->mi_phyid = (tulip_mii_readreg(sc, mi->mi_phyaddr, PHYREG_IDLOW) << 16) | 2811 mi->mi_phyid = (tulip_mii_readreg(sc, mi->mi_phyaddr, PHYREG_IDLOW) << 16) |
2807 tulip_mii_readreg(sc, mi->mi_phyaddr, PHYREG_IDHIGH); 2812 tulip_mii_readreg(sc, mi->mi_phyaddr, PHYREG_IDHIGH);
2808 mi++; 2813 mi++;
2809 break; 2814 break;
2810 case 4: /* 21143 SYM block */ 2815 }
 2816 case 4: { /* 21143 SYM block */
2811 tulip_media_t media; 2817 tulip_media_t media;
2812 srom_media = (tulip_srom_media_t) dp[0]; 2818 srom_media = (tulip_srom_media_t) dp[0];
2813 for (idx3 = 0; tulip_srom_mediums[idx3].sm_type != TULIP_MEDIA_UNKNOWN; idx3++) { 2819 for (idx3 = 0; tulip_srom_mediums[idx3].sm_type != TULIP_MEDIA_UNKNOWN; idx3++) {
2814 if (tulip_srom_mediums[idx3].sm_srom_type == srom_media) 2820 if (tulip_srom_mediums[idx3].sm_srom_type == srom_media)
2815 break; 2821 break;
2816 } 2822 }
2817 media = tulip_srom_mediums[idx3].sm_type; 2823 media = tulip_srom_mediums[idx3].sm_type;
2818 if (media == TULIP_MEDIA_UNKNOWN) 2824 if (media == TULIP_MEDIA_UNKNOWN)
2819 break; 2825 break;
2820 mi->mi_type = TULIP_MEDIAINFO_SYM; 2826 mi->mi_type = TULIP_MEDIAINFO_SYM;
2821 sc->tulip_mediums[media] = mi; 2827 sc->tulip_mediums[media] = mi;
2822 mi->mi_gpcontrol = (dp[1] + dp[2] * 256) << 16; 2828 mi->mi_gpcontrol = (dp[1] + dp[2] * 256) << 16;
2823 mi->mi_gpdata = (dp[3] + dp[4] * 256) << 16; 2829 mi->mi_gpdata = (dp[3] + dp[4] * 256) << 16;
2824 data = dp[5] + dp[6] * 256; 2830 data = dp[5] + dp[6] * 256;
2825 mi->mi_cmdmode = TULIP_SROM_2114X_CMDBITS(data); 2831 mi->mi_cmdmode = TULIP_SROM_2114X_CMDBITS(data);
2826 if (data & TULIP_SROM_2114X_NOINDICATOR) 2832 if (data & TULIP_SROM_2114X_NOINDICATOR)
2827 mi->mi_actmask = 0; 2833 mi->mi_actmask = 0;
2828 else { 2834 else {
2829 mi->mi_default = (data & TULIP_SROM_2114X_DEFAULT) != 0; 2835 mi->mi_default = (data & TULIP_SROM_2114X_DEFAULT) != 0;
2830 mi->mi_actmask = TULIP_SROM_2114X_BITPOS(data); 2836 mi->mi_actmask = TULIP_SROM_2114X_BITPOS(data);
2831 mi->mi_actdata = (data & TULIP_SROM_2114X_POLARITY) ? 0 : mi->mi_actmask; 2837 mi->mi_actdata = (data & TULIP_SROM_2114X_POLARITY) ? 0 : mi->mi_actmask;
2832 } 2838 }
2833 if (TULIP_IS_MEDIA_TP(media)) 2839 if (TULIP_IS_MEDIA_TP(media))
2834 sc->tulip_intrmask |= TULIP_STS_LINKPASS|TULIP_STS_LINKFAIL; 2840 sc->tulip_intrmask |= TULIP_STS_LINKPASS|TULIP_STS_LINKFAIL;
2835 mi++; 2841 mi++;
2836 break; 2842 break;
 2843 }
2837#if 0 2844#if 0
2838 case 5: /* 21143 Reset block */ 2845 case 5: /* 21143 Reset block */
2839 mi->mi_type = TULIP_MEDIAINFO_RESET; 2846 mi->mi_type = TULIP_MEDIAINFO_RESET;
2840 mi->mi_reset_length = *dp++; 2847 mi->mi_reset_length = *dp++;
2841 mi->mi_reset_offset = dp - sc->tulip_rombuf; 2848 mi->mi_reset_offset = dp - sc->tulip_rombuf;
2842 dp += 2 * mi->mi_reset_length; 2849 dp += 2 * mi->mi_reset_length;
2843 mi++; 2850 mi++;
2844 break; 2851 break;
2845#endif 2852#endif
2846 default: 2853 default:
 2854 break;
2847 } 2855 }
2848 dp = ep; 2856 dp = ep;
2849 } 2857 }
2850 } 2858 }
2851 return mi - sc->tulip_mediainfo; 2859 return mi - sc->tulip_mediainfo;
2852} 2860}
2853  2861
2854static const struct { 2862static const struct {
2855 void (*vendor_identify_nic)(tulip_softc_t * const sc); 2863 void (*vendor_identify_nic)(tulip_softc_t * const sc);
2856 unsigned char vendor_oui[3]; 2864 unsigned char vendor_oui[3];
2857} tulip_vendors[] = { 2865} tulip_vendors[] = {
2858 { tulip_identify_dec_nic, { 0x08, 0x00, 0x2B } }, 2866 { tulip_identify_dec_nic, { 0x08, 0x00, 0x2B } },
2859 { tulip_identify_dec_nic, { 0x00, 0x00, 0xF8 } }, 2867 { tulip_identify_dec_nic, { 0x00, 0x00, 0xF8 } },
@@ -3082,27 +3090,26 @@ check_oui: @@ -3082,27 +3090,26 @@ check_oui:
3082 */ 3090 */
3083 for (idx = 0; tulip_vendors[idx].vendor_identify_nic != NULL; idx++) { 3091 for (idx = 0; tulip_vendors[idx].vendor_identify_nic != NULL; idx++) {
3084 if (memcmp((void *) sc->tulip_enaddr, 3092 if (memcmp((void *) sc->tulip_enaddr,
3085 tulip_vendors[idx].vendor_oui, 3) == 0) { 3093 tulip_vendors[idx].vendor_oui, 3) == 0) {
3086 (*tulip_vendors[idx].vendor_identify_nic)(sc); 3094 (*tulip_vendors[idx].vendor_identify_nic)(sc);
3087 break; 3095 break;
3088 } 3096 }
3089 } 3097 }
3090 3098
3091 sc->tulip_features |= TULIP_HAVE_OKROM; 3099 sc->tulip_features |= TULIP_HAVE_OKROM;
3092 return 0; 3100 return 0;
3093} 3101}
3094  3102
3095#if defined(IFM_ETHER) 
3096static void 3103static void
3097tulip_ifmedia_add(tulip_softc_t * const sc) 3104tulip_ifmedia_add(tulip_softc_t * const sc)
3098{ 3105{
3099 tulip_media_t media; 3106 tulip_media_t media;
3100 int medias = 0; 3107 int medias = 0;
3101 3108
3102 for (media = TULIP_MEDIA_UNKNOWN; media < TULIP_MEDIA_MAX; media++) { 3109 for (media = TULIP_MEDIA_UNKNOWN; media < TULIP_MEDIA_MAX; media++) {
3103 if (sc->tulip_mediums[media] != NULL) { 3110 if (sc->tulip_mediums[media] != NULL) {
3104 ifmedia_add(&sc->tulip_ifmedia, tulip_media_to_ifmedia[media], 3111 ifmedia_add(&sc->tulip_ifmedia, tulip_media_to_ifmedia[media],
3105 0, 0); 3112 0, 0);
3106 medias++; 3113 medias++;
3107 } 3114 }
3108 } 3115 }
@@ -3163,27 +3170,26 @@ tulip_ifmedia_status(struct ifnet * cons @@ -3163,27 +3170,26 @@ tulip_ifmedia_status(struct ifnet * cons
3163 req->ifm_status = sc->tulip_mii.mii_media_status; 3170 req->ifm_status = sc->tulip_mii.mii_media_status;
3164 return; 3171 return;
3165 } 3172 }
3166#endif 3173#endif
3167 if (sc->tulip_media == TULIP_MEDIA_UNKNOWN) 3174 if (sc->tulip_media == TULIP_MEDIA_UNKNOWN)
3168 return; 3175 return;
3169 3176
3170 req->ifm_status = IFM_AVALID; 3177 req->ifm_status = IFM_AVALID;
3171 if (sc->tulip_flags & TULIP_LINKUP) 3178 if (sc->tulip_flags & TULIP_LINKUP)
3172 req->ifm_status |= IFM_ACTIVE; 3179 req->ifm_status |= IFM_ACTIVE;
3173 3180
3174 req->ifm_active = tulip_media_to_ifmedia[sc->tulip_media]; 3181 req->ifm_active = tulip_media_to_ifmedia[sc->tulip_media];
3175} 3182}
3176#endif 
3177  3183
3178static void 3184static void
3179tulip_addr_filter(tulip_softc_t * const sc) 3185tulip_addr_filter(tulip_softc_t * const sc)
3180{ 3186{
3181 struct ether_multistep step; 3187 struct ether_multistep step;
3182 struct ether_multi *enm; 3188 struct ether_multi *enm;
3183 3189
3184 sc->tulip_flags &= ~(TULIP_WANTHASHPERFECT|TULIP_WANTHASHONLY|TULIP_ALLMULTI); 3190 sc->tulip_flags &= ~(TULIP_WANTHASHPERFECT|TULIP_WANTHASHONLY|TULIP_ALLMULTI);
3185 sc->tulip_flags |= TULIP_WANTSETUP|TULIP_WANTTXSTART; 3191 sc->tulip_flags |= TULIP_WANTSETUP|TULIP_WANTTXSTART;
3186 sc->tulip_cmdmode &= ~TULIP_CMD_RXRUN; 3192 sc->tulip_cmdmode &= ~TULIP_CMD_RXRUN;
3187 sc->tulip_intrmask &= ~TULIP_STS_RXSTOPPED; 3193 sc->tulip_intrmask &= ~TULIP_STS_RXSTOPPED;
3188#if defined(IFF_ALLMULTI) 3194#if defined(IFF_ALLMULTI)
3189 sc->tulip_if.if_flags &= ~IFF_ALLMULTI; 3195 sc->tulip_if.if_flags &= ~IFF_ALLMULTI;
@@ -4757,53 +4763,26 @@ tulip_ifioctl(struct ifnet *ifp, unsigne @@ -4757,53 +4763,26 @@ tulip_ifioctl(struct ifnet *ifp, unsigne
4757 switch (ifa->ifa_addr->sa_family) { 4763 switch (ifa->ifa_addr->sa_family) {
4758#ifdef INET 4764#ifdef INET
4759 case AF_INET: 4765 case AF_INET:
4760 TULIP_ARP_IFINIT(sc, ifa); 4766 TULIP_ARP_IFINIT(sc, ifa);
4761 break; 4767 break;
4762#endif /* INET */ 4768#endif /* INET */
4763 default: 4769 default:
4764 break; 4770 break;
4765 } 4771 }
4766 break; 4772 break;
4767 case SIOCSIFFLAGS: 4773 case SIOCSIFFLAGS:
4768 if ((error = ifioctl_common(ifp, cmd, data)) != 0) 4774 if ((error = ifioctl_common(ifp, cmd, data)) != 0)
4769 break; 4775 break;
4770#if !defined(IFM_ETHER) 
4771 int flags = 0; 
4772 if (ifp->if_flags & IFF_LINK0) flags |= 1; 
4773 if (ifp->if_flags & IFF_LINK1) flags |= 2; 
4774 if (ifp->if_flags & IFF_LINK2) flags |= 4; 
4775 if (flags == 7) { 
4776 ifp->if_flags &= ~(IFF_LINK0|IFF_LINK1|IFF_LINK2); 
4777 sc->tulip_media = TULIP_MEDIA_UNKNOWN; 
4778 sc->tulip_probe_state = TULIP_PROBE_INACTIVE; 
4779 sc->tulip_flags &= ~(TULIP_WANTRXACT|TULIP_LINKUP|TULIP_NOAUTOSENSE); 
4780 tulip_reset(sc); 
4781 } else if (flags) { 
4782 tulip_media_t media; 
4783 for (media = TULIP_MEDIA_UNKNOWN; media < TULIP_MEDIA_MAX; media++) { 
4784 if (sc->tulip_mediums[media] != NULL && --flags == 0) { 
4785 sc->tulip_flags |= TULIP_NOAUTOSENSE; 
4786 if (sc->tulip_media != media || (sc->tulip_flags & TULIP_DIDNWAY)) { 
4787 sc->tulip_flags &= ~TULIP_DIDNWAY; 
4788 tulip_linkup(sc, media); 
4789 } 
4790 break; 
4791 } 
4792 } 
4793 if (flags) 
4794 printf(TULIP_PRINTF_FMT ": ignored invalid media request\n", TULIP_PRINTF_ARGS); 
4795 } 
4796#endif 
4797 tulip_init(sc); 4776 tulip_init(sc);
4798 break; 4777 break;
4799 case SIOCSIFMEDIA: 4778 case SIOCSIFMEDIA:
4800 case SIOCGIFMEDIA: 4779 case SIOCGIFMEDIA:
4801 error = ifmedia_ioctl(ifp, ifr, &sc->tulip_ifmedia, cmd); 4780 error = ifmedia_ioctl(ifp, ifr, &sc->tulip_ifmedia, cmd);
4802 break; 4781 break;
4803 4782
4804 case SIOCADDMULTI: 4783 case SIOCADDMULTI:
4805 case SIOCDELMULTI: 4784 case SIOCDELMULTI:
4806 /* 4785 /*
4807 * Update multicast listeners 4786 * Update multicast listeners
4808 */ 4787 */
4809 if ((error = ether_ioctl(ifp, cmd, data)) == ENETRESET) { 4788 if ((error = ether_ioctl(ifp, cmd, data)) == ENETRESET) {
@@ -5052,52 +5031,30 @@ tulip_attach(tulip_softc_t * const sc) @@ -5052,52 +5031,30 @@ tulip_attach(tulip_softc_t * const sc)
5052 TULIP_EADDR_ARGS(sc->tulip_enaddr)); 5031 TULIP_EADDR_ARGS(sc->tulip_enaddr));
5053#endif 5032#endif
5054 5033
5055#if defined(__alpha__) 5034#if defined(__alpha__)
5056 /* 5035 /*
5057 * In case the SRM console told us about a bogus media, 5036 * In case the SRM console told us about a bogus media,
5058 * we need to check to be safe. 5037 * we need to check to be safe.
5059 */ 5038 */
5060 if (sc->tulip_mediums[sc->tulip_media] == NULL) 5039 if (sc->tulip_mediums[sc->tulip_media] == NULL)
5061 sc->tulip_media = TULIP_MEDIA_UNKNOWN; 5040 sc->tulip_media = TULIP_MEDIA_UNKNOWN;
5062#endif 5041#endif
5063 5042
5064 (*sc->tulip_boardsw->bd_media_probe)(sc); 5043 (*sc->tulip_boardsw->bd_media_probe)(sc);
5065#if defined(IFM_ETHER) 
5066 ifmedia_init(&sc->tulip_ifmedia, 0, 5044 ifmedia_init(&sc->tulip_ifmedia, 0,
5067 tulip_ifmedia_change, 5045 tulip_ifmedia_change, tulip_ifmedia_status);
5068 tulip_ifmedia_status); 
5069#else 
5070 { 
5071 tulip_media_t media; 
5072 int cnt; 
5073 printf(TULIP_PRINTF_FMT ": media:", TULIP_PRINTF_ARGS); 
5074 for (media = TULIP_MEDIA_UNKNOWN, cnt = 1; cnt < 7 && media < TULIP_MEDIA_MAX; media++) { 
5075 if (sc->tulip_mediums[media] != NULL) { 
5076 printf(" %d=\"%s\"", cnt, tulip_mediums[media]); 
5077 cnt++; 
5078 } 
5079 } 
5080 if (cnt == 1) { 
5081 sc->tulip_features |= TULIP_HAVE_NOMEDIA; 
5082 printf(" none\n"); 
5083 } else 
5084 printf("\n"); 
5085 } 
5086#endif 
5087 sc->tulip_flags &= ~TULIP_DEVICEPROBE; 5046 sc->tulip_flags &= ~TULIP_DEVICEPROBE;
5088#if defined(IFM_ETHER) 
5089 tulip_ifmedia_add(sc); 5047 tulip_ifmedia_add(sc);
5090#endif 
5091 5048
5092 tulip_reset(sc); 5049 tulip_reset(sc);
5093 5050
5094#if defined(__bsdi__) && _BSDI_VERSION >= 199510 5051#if defined(__bsdi__) && _BSDI_VERSION >= 199510
5095 sc->tulip_pf = printf; 5052 sc->tulip_pf = printf;
5096 TULIP_ETHER_IFATTACH(sc); 5053 TULIP_ETHER_IFATTACH(sc);
5097#else 5054#else
5098 if_attach(ifp); 5055 if_attach(ifp);
5099 if_deferred_start_init(ifp, NULL); 5056 if_deferred_start_init(ifp, NULL);
5100#if defined(__NetBSD__) || (defined(__FreeBSD__) && BSD >= 199506) 5057#if defined(__NetBSD__) || (defined(__FreeBSD__) && BSD >= 199506)
5101 TULIP_ETHER_IFATTACH(sc); 5058 TULIP_ETHER_IFATTACH(sc);
5102#endif 5059#endif
5103#endif /* __bsdi__ */ 5060#endif /* __bsdi__ */