diff options
author | Peter Wemm <peter@FreeBSD.org> | 1997-10-18 13:23:35 +0000 |
---|---|---|
committer | Peter Wemm <peter@FreeBSD.org> | 1997-10-18 13:23:35 +0000 |
commit | 48cbe2deae4dad62e8cc473524d2c060cc2e8b61 (patch) | |
tree | 122281febfadaf8aec94ed4e78f000cfe3cded7e | |
parent | f15d3ed0f21dfecfec1a4b396b0d3d446a7ce455 (diff) |
Import Matt's current de driver... He appears to be maintaining it in
the NetBSD source tree now. This is slightly newer than the updated
.tar.gz on the 3am-software web site.
Notes
Notes:
svn path=/vendor/NetBSD/dist/; revision=30549
-rw-r--r-- | sys/pci/dc21040reg.h | 34 | ||||
-rw-r--r-- | sys/pci/if_de.c | 219 | ||||
-rw-r--r-- | sys/pci/if_devar.h | 18 |
3 files changed, 219 insertions, 52 deletions
diff --git a/sys/pci/dc21040reg.h b/sys/pci/dc21040reg.h index ec274709ccaf..8ac2761009b5 100644 --- a/sys/pci/dc21040reg.h +++ b/sys/pci/dc21040reg.h @@ -1,3 +1,5 @@ +/* $NetBSD: dc21040reg.h,v 1.13 1997/10/17 09:26:58 matt Exp $ */ + /*- * Copyright (c) 1994, 1995, 1996 Matt Thomas <matt@3am-software.com> * All rights reserved. @@ -21,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: dc21040reg.h,v 1.24 1997/05/16 19:47:09 thomas Exp $ + * Id: dc21040reg.h,v 1.24 1997/05/16 19:47:09 thomas Exp */ #if !defined(_DC21040_H) @@ -199,6 +201,7 @@ typedef struct { #define TULIP_SIASTS_OTHERRXACTIVITY 0x00000200L #define TULIP_SIASTS_RXACTIVITY 0x00000100L #define TULIP_SIASTS_LINKFAIL 0x00000004L +#define TULIP_SIASTS_LINK100FAIL 0x00000002L #define TULIP_SIACONN_RESET 0x00000000L /* @@ -271,19 +274,19 @@ typedef struct { #define TULIP_21142_PROBE_AUIBNC_TIMEOUT 300 #define TULIP_21142_SIACONN_10BASET 0x00000001L -#define TULIP_21142_SIATXRX_10BASET 0x0000F3FFL -#define TULIP_21142_SIAGEN_10BASET 0x00000000L +#define TULIP_21142_SIATXRX_10BASET 0x00007F3FL +#define TULIP_21142_SIAGEN_10BASET 0x00000008L #define TULIP_21142_SIACONN_10BASET_FD 0x00000001L -#define TULIP_21142_SIATXRX_10BASET_FD 0x0000F3FDL -#define TULIP_21142_SIAGEN_10BASET_FD 0x00000000L +#define TULIP_21142_SIATXRX_10BASET_FD 0x00007F3DL +#define TULIP_21142_SIAGEN_10BASET_FD 0x00000008L #define TULIP_21142_SIACONN_AUI 0x00000009L -#define TULIP_21142_SIATXRX_AUI 0x0000F3FDL +#define TULIP_21142_SIATXRX_AUI 0x00000705L #define TULIP_21142_SIAGEN_AUI 0x0000000EL #define TULIP_21142_SIACONN_BNC 0x00000009L -#define TULIP_21142_SIATXRX_BNC 0x0000F3FDL +#define TULIP_21142_SIATXRX_BNC 0x00000705L #define TULIP_21142_SIAGEN_BNC 0x00000006L @@ -433,6 +436,23 @@ typedef struct { #define TULIP_GP_ASANTE_PHYRESET 0x00000008 /* Reset PHY */ /* + * ACCTON EN1207 specialties + */ + +#define TULIP_OUI_EN1207_0 0x00 +#define TULIP_OUI_EN1207_1 0x00 +#define TULIP_OUI_EN1207_2 0xE8 + +#define TULIP_CSR8_EN1207 0x08 +#define TULIP_CSR9_EN1207 0x00 +#define TULIP_CSR10_EN1207 0x03 +#define TULIP_CSR11_EN1207 0x1F + +#define TULIP_GP_EN1207_BNC_INIT 0x0000011B +#define TULIP_GP_EN1207_UTP_INIT 0x9E00000B +#define TULIP_GP_EN1207_100_INIT 0x6D00031B + +/* * SROM definitions for the 21140 and 21041. */ #define SROMXREG 0x0400 diff --git a/sys/pci/if_de.c b/sys/pci/if_de.c index 239febcc274e..86dc829bf5e6 100644 --- a/sys/pci/if_de.c +++ b/sys/pci/if_de.c @@ -1,3 +1,5 @@ +/* $NetBSD: if_de.c,v 1.55 1997/10/16 22:02:27 matt Exp $ */ + /*- * Copyright (c) 1994-1997 Matt Thomas (matt@3am-software.com) * All rights reserved. @@ -21,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_de.c,v 1.94 1997/07/03 16:55:07 thomas Exp $ + * Id: if_de.c,v 1.94 1997/07/03 16:55:07 thomas Exp * */ @@ -52,6 +54,13 @@ #include <sys/device.h> #endif +#if defined(__NetBSD__) +#include "rnd.h" +#if NRND > 0 +#include <sys/rnd.h> +#endif +#endif + #include <net/if.h> #if defined(SIOCSIFMEDIA) && !defined(TULIP_NOIFMEDIA) #include <net/if_media.h> @@ -304,6 +313,7 @@ tulip_media_set( TULIP_CSR_WRITE(sc, csr_sia_tx_rx, mi->mi_sia_tx_rx); if (sc->tulip_features & TULIP_HAVE_SIAGP) { TULIP_CSR_WRITE(sc, csr_sia_general, mi->mi_sia_gp_control|mi->mi_sia_general|TULIP_SIAGEN_WATCHDOG); + DELAY(50); TULIP_CSR_WRITE(sc, csr_sia_general, mi->mi_sia_gp_data|mi->mi_sia_general|TULIP_SIAGEN_WATCHDOG); } else { TULIP_CSR_WRITE(sc, csr_sia_general, mi->mi_sia_general|TULIP_SIAGEN_WATCHDOG); @@ -422,7 +432,10 @@ tulip_linkup( sc->tulip_flags &= ~(TULIP_TXPROBE_ACTIVE|TULIP_TRYNWAY); if (sc->tulip_flags & TULIP_INRESET) { tulip_media_set(sc, sc->tulip_media); - } else { + } else if (sc->tulip_probe_media != sc->tulip_media) { + /* + * No reason to change media if we have the right media. + */ tulip_reset(sc); tulip_init(sc); } @@ -591,6 +604,10 @@ tulip_media_link_monitor( return TULIP_LINK_UNKNOWN; if ((TULIP_CSR_READ(sc, csr_sia_status) & TULIP_SIASTS_LINKFAIL) == 0) linkup = TULIP_LINK_UP; +#if defined(TULIP_DEBUG) + if (sc->tulip_probe_timeout <= 0) + printf(TULIP_PRINTF_FMT ": sia status = 0x%08x\n", TULIP_PRINTF_ARGS, TULIP_CSR_READ(sc, csr_sia_status)); +#endif } else if (mi->mi_type == TULIP_MEDIAINFO_SYM) { return TULIP_LINK_UNKNOWN; } @@ -888,6 +905,7 @@ tulip_media_poll( } case TULIP_MEDIAINFO_RESET: case TULIP_MEDIAINFO_SYM: + case TULIP_MEDIAINFO_NONE: case TULIP_MEDIAINFO_GPR: { break; } @@ -1477,7 +1495,7 @@ tulip_2114x_media_preset( sc->tulip_cmdmode &= ~TULIP_CMD_PORTSELECT; sc->tulip_flags &= ~TULIP_SQETEST; - if (media != TULIP_MEDIA_UNKNOWN) { + if (media != TULIP_MEDIA_UNKNOWN && media != TULIP_MEDIA_MAX) { #if defined(TULIP_DEBUG) if (media < TULIP_MEDIA_MAX && sc->tulip_mediums[media] != NULL) { #endif @@ -1614,6 +1632,60 @@ static const tulip_boardsw_t tulip_21140_eb_boardsw = { }; static void +tulip_21140_accton_media_probe( + tulip_softc_t * const sc) +{ + tulip_media_info_t *mip = sc->tulip_mediainfo; + unsigned gpdata; + + sc->tulip_gpinit = TULIP_GP_EB_PINS; + sc->tulip_gpdata = TULIP_GP_EB_INIT; + TULIP_CSR_WRITE(sc, csr_gp, TULIP_GP_EB_PINS); + TULIP_CSR_WRITE(sc, csr_gp, TULIP_GP_EB_INIT); + TULIP_CSR_WRITE(sc, csr_command, + TULIP_CSR_READ(sc, csr_command) | TULIP_CMD_PORTSELECT | + TULIP_CMD_PCSFUNCTION | TULIP_CMD_SCRAMBLER | TULIP_CMD_MUSTBEONE); + TULIP_CSR_WRITE(sc, csr_command, + TULIP_CSR_READ(sc, csr_command) & ~TULIP_CMD_TXTHRSHLDCTL); + DELAY(1000000); + gpdata = TULIP_CSR_READ(sc, csr_gp); + if ((gpdata & TULIP_GP_EN1207_UTP_INIT) == 0) { + sc->tulip_media = TULIP_MEDIA_10BASET; + } else { + if ((gpdata & TULIP_GP_EN1207_BNC_INIT) == 0) { + sc->tulip_media = TULIP_MEDIA_BNC; + } else { + sc->tulip_media = TULIP_MEDIA_100BASETX; + } + } + tulip_21140_mediainit(sc, mip++, TULIP_MEDIA_BNC, + TULIP_GP_EN1207_BNC_INIT, + TULIP_CMD_TXTHRSHLDCTL); + tulip_21140_mediainit(sc, mip++, TULIP_MEDIA_10BASET, + TULIP_GP_EN1207_UTP_INIT, + TULIP_CMD_TXTHRSHLDCTL); + tulip_21140_mediainit(sc, mip++, TULIP_MEDIA_10BASET_FD, + TULIP_GP_EN1207_UTP_INIT, + TULIP_CMD_TXTHRSHLDCTL|TULIP_CMD_FULLDUPLEX); + tulip_21140_mediainit(sc, mip++, TULIP_MEDIA_100BASETX, + TULIP_GP_EN1207_100_INIT, + TULIP_CMD_PORTSELECT|TULIP_CMD_PCSFUNCTION + |TULIP_CMD_SCRAMBLER); + tulip_21140_mediainit(sc, mip++, TULIP_MEDIA_100BASETX_FD, + TULIP_GP_EN1207_100_INIT, + TULIP_CMD_PORTSELECT|TULIP_CMD_PCSFUNCTION + |TULIP_CMD_SCRAMBLER|TULIP_CMD_FULLDUPLEX); +} + +static const tulip_boardsw_t tulip_21140_accton_boardsw = { + TULIP_21140_EN1207, + tulip_21140_accton_media_probe, + tulip_media_select, + tulip_null_media_poll, + tulip_2114x_media_preset, +}; + +static void tulip_21140_smc9332_media_probe( tulip_softc_t * const sc) { @@ -2195,6 +2267,34 @@ tulip_identify_cogent_nic( } static void +tulip_identify_accton_nic( + tulip_softc_t * const sc) +{ + strcpy(sc->tulip_boardid, "ACCTON "); + switch (sc->tulip_chipid) { + case TULIP_21140A: + strcat(sc->tulip_boardid, "EN1207 "); + sc->tulip_boardsw = &tulip_21140_accton_boardsw; + break; + case TULIP_21140: + strcat(sc->tulip_boardid, "EN1207TX "); + sc->tulip_boardsw = &tulip_21140_eb_boardsw; + break; + case TULIP_21040: + strcat(sc->tulip_boardid, "EN1203 "); + sc->tulip_boardsw = &tulip_21040_boardsw; + break; + case TULIP_21041: + strcat(sc->tulip_boardid, "EN1203 "); + sc->tulip_boardsw = &tulip_21041_boardsw; + break; + default: + sc->tulip_boardsw = &tulip_2114x_isv_boardsw; + break; + } +} + +static void tulip_identify_asante_nic( tulip_softc_t * const sc) { @@ -2615,6 +2715,7 @@ static const struct { { tulip_identify_znyx_nic, { 0x00, 0xC0, 0x95 } }, { tulip_identify_cogent_nic, { 0x00, 0x00, 0x92 } }, { tulip_identify_asante_nic, { 0x00, 0x00, 0x94 } }, + { tulip_identify_accton_nic, { 0x00, 0x00, 0xE8 } }, { NULL } }; @@ -3469,11 +3570,17 @@ tulip_tx_intr( } else { const u_int32_t d_status = ri->ri_nextin->d_status; IF_DEQUEUE(&sc->tulip_txq, m); + if (m != NULL) { #if NBPFILTER > 0 - if (sc->tulip_bpf != NULL) - TULIP_BPF_MTAP(sc, m); + if (sc->tulip_bpf != NULL) + TULIP_BPF_MTAP(sc, m); #endif - m_freem(m); + m_freem(m); +#if defined(TULIP_DEBUG) + } else { + printf(TULIP_PRINTF_FMT ": tx_intr: failed to dequeue mbuf?!?\n", TULIP_PRINTF_ARGS); +#endif + } if (sc->tulip_flags & TULIP_TXPROBE_ACTIVE) { tulip_mediapoll_event_t event = TULIP_MEDIAPOLL_TXPROBE_OK; if (d_status & (TULIP_DSTS_TxNOCARR|TULIP_DSTS_TxEXCCOLL)) { @@ -3588,8 +3695,22 @@ tulip_intr_handler( { TULIP_PERFSTART(intr) u_int32_t csr; +#if defined(__NetBSD__) && !defined(TULIP_USE_SOFTINTR) + int only_once; + + only_once = 1; +#endif while ((csr = TULIP_CSR_READ(sc, csr_status)) & sc->tulip_intrmask) { +#if defined(__NetBSD__) && !defined(TULIP_USE_SOFTINTR) + if (only_once == 1) { +#if NRND > 0 + rnd_add_uint32(&sc->tulip_rndsource, csr); +#endif + only_once = 0; + } +#endif + *progress_p = 1; TULIP_CSR_WRITE(sc, csr_status, csr); @@ -3712,6 +3833,15 @@ tulip_hardintr_handler( * mark it as needing a software interrupt */ tulip_softintr_mask |= (1U << sc->tulip_unit); + +#if defined(__NetBSD__) && NRND > 0 + /* + * This isn't all that random (the value we feed in) but it is + * better than a constant probably. It isn't used in entropy + * calculation anyway, just to add something to the pool. + */ + rnd_add_uint32(&sc->tulip_rndsource, sc->tulip_flags); +#endif } static void @@ -3781,10 +3911,10 @@ static tulip_intrfunc_t tulip_intr_shared( void *arg) { - tulip_softc_t * sc; + tulip_softc_t * sc = arg; int progress = 0; - for (sc = (tulip_softc_t *) arg; sc != NULL; sc = sc->tulip_slaves) { + for (; sc != NULL; sc = sc->tulip_slaves) { #if defined(TULIP_DEBUG) sc->tulip_dbg.dbg_intrs++; #endif @@ -4579,6 +4709,11 @@ tulip_attach( #if NBPFILTER > 0 TULIP_BPF_ATTACH(sc); #endif + +#if defined(__NetBSD__) && NRND > 0 + rnd_attach_source(&sc->tulip_rndsource, sc->tulip_dev.dv_xname, + RND_TYPE_NET); +#endif } static void @@ -4934,6 +5069,9 @@ tulip_pci_attach( (sc)->tulip_pci_devno = pa->pa_device; \ } while (0) #endif /* __NetBSD__ */ +#if defined(__alpha__) + tulip_media_t media = TULIP_MEDIA_UNKNOWN; +#endif int retval, idx; u_int32_t revinfo, cfdainfo, id; #if !defined(TULIP_IOMAPPED) && defined(__FreeBSD__) @@ -5026,6 +5164,8 @@ tulip_pci_attach( sc->tulip_features |= TULIP_HAVE_SIANWAY; if (chipid != TULIP_21041) sc->tulip_features |= TULIP_HAVE_SIAGP|TULIP_HAVE_RXBADOVRFLW|TULIP_HAVE_STOREFWD; + if (chipid != TULIP_21041 && sc->tulip_revinfo >= 0x20) + sc->tulip_features |= TULIP_HAVE_SIA100; } if (sc->tulip_features & TULIP_HAVE_POWERMGMT @@ -5034,7 +5174,7 @@ tulip_pci_attach( PCI_CONF_WRITE(PCI_CFDA, cfdainfo); DELAY(11*1000); } -#if defined(__alpha__) +#if defined(__alpha__) && defined(__NetBSD__) /* * The Alpha SRM console encodes a console set media in the driver * part of the CFDA register. Note that the Multia presents a @@ -5042,12 +5182,14 @@ tulip_pci_attach( * force a probe. */ switch ((cfdainfo >> 8) & 0xff) { - case 1: sc->tulip_media = chipid > TULIP_DE425 ? TULIP_MEDIA_AUI : TULIP_MEDIA_AUIBNC; - case 2: sc->tulip_media = chipid > TULIP_DE425 ? TULIP_MEDIA_BNC : TULIP_MEDIA_UNKNOWN; - case 3: sc->tulip_media = TULIP_MEDIA_10BASET; - case 4: sc->tulip_media = TULIP_MEDIA_10BASET_FD; - case 5: sc->tulip_media = TULIP_MEDIA_100BASETX; - case 6: sc->tulip_media = TULIP_MEDIA_100BASETX_FD; + case 1: media = chipid > TULIP_DE425 ? + TULIP_MEDIA_AUI : TULIP_MEDIA_AUIBNC; break; + case 2: media = chipid > TULIP_DE425 ? + TULIP_MEDIA_BNC : TULIP_MEDIA_UNKNOWN; break; + case 3: media = TULIP_MEDIA_10BASET; break; + case 4: media = TULIP_MEDIA_10BASET_FD; break; + case 5: media = TULIP_MEDIA_100BASETX; break; + case 6: media = TULIP_MEDIA_100BASETX_FD; break; } #endif @@ -5090,37 +5232,24 @@ tulip_pci_attach( { bus_space_tag_t iot, memt; bus_space_handle_t ioh, memh; - u_int32_t cfcs = PCI_CONF_READ(PCI_CFCS); - - cfcs &= ~(PCI_COMMAND_IO_ENABLE||PCI_COMMAND_IO_ENABLE); - if (!pci_mapreg_map(pa, PCI_CBIO, PCI_MAPREG_TYPE_IO, 0, - &iot, &ioh, NULL, NULL)) { - cfcs |= PCI_COMMAND_IO_ENABLE; - } - if (!pci_mapreg_map(pa, PCI_CBMA, - PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_32BIT, - 0, &memt, &memh, NULL, NULL) == 0) { - cfcs |= PCI_COMMAND_MEM_ENABLE; - } - if ((cfcs & (PCI_COMMAND_IO_ENABLE||PCI_COMMAND_IO_ENABLE)) == 0) { + int ioh_valid, memh_valid; + + ioh_valid = (pci_mapreg_map(pa, PCI_CBIO, PCI_MAPREG_TYPE_IO, 0, + &iot, &ioh, NULL, NULL) == 0); + memh_valid = (pci_mapreg_map(pa, PCI_CBMA, + PCI_MAPREG_TYPE_MEM | + PCI_MAPREG_MEM_TYPE_32BIT, + 0, &memt, &memh, NULL, NULL) == 0); + if (memh_valid) { + sc->tulip_bustag = memt; + sc->tulip_bushandle = memh; + } else if (ioh_valid) { + sc->tulip_bustag = iot; + sc->tulip_bushandle = ioh; + } else { printf(": unable to map device registers\n"); return; } - cfcs |= PCI_COMMAND_MASTER_ENABLE; - PCI_CONF_WRITE(PCI_CFCS, cfcs); -#if defined(PCI_PREFER_IOSPACE) - if (cfcs & PCI_COMMAND_IO_ENABLE) { - sc->tulip_bustag = iot, sc->tulip_bushandle = ioh; - } else { - sc->tulip_bustag = memt, sc->tulip_bushandle = memh; - } -#else - if (cfcs & PCI_COMMAND_MEM_ENABLE) { - sc->tulip_bustag = memt, sc->tulip_bushandle = memh; - } else { - sc->tulip_bustag = iot, sc->tulip_bushandle = ioh; - } -#endif /* PCI_PREFER_IOSPACE */ } #endif /* __NetBSD__ */ @@ -5215,6 +5344,10 @@ tulip_pci_attach( s = TULIP_RAISESPL(); tulip_reset(sc); tulip_attach(sc); +#if defined(__alpha__) && defined(__NetBSD__) + if (media != TULIP_MEDIA_UNKNOWN) + tulip_linkup(sc, media); +#endif TULIP_RESTORESPL(s); } } diff --git a/sys/pci/if_devar.h b/sys/pci/if_devar.h index 68fbc7b45d77..84cd82a26d0d 100644 --- a/sys/pci/if_devar.h +++ b/sys/pci/if_devar.h @@ -1,3 +1,5 @@ +/* $NetBSD: if_devar.h,v 1.21 1997/10/16 22:02:32 matt Exp $ */ + /*- * Copyright (c) 1994-1997 Matt Thomas (matt@3am-software.com) * All rights reserved. @@ -21,13 +23,19 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: if_devar.h,v 1.28 1997/07/03 16:55:07 thomas Exp $ + * Id: if_devar.h,v 1.28 1997/07/03 16:55:07 thomas Exp */ #if !defined(_DEVAR_H) #define _DEVAR_H #if defined(__NetBSD__) + +#include "rnd.h" +#if NRND > 0 +#include <sys/rnd.h> +#endif + typedef bus_addr_t tulip_csrptr_t; #define TULIP_CSR_READ(sc, csr) \ @@ -158,7 +166,7 @@ typedef struct { #define TULIP_TXTIMER 4 #define TULIP_RXDESCS 48 -#define TULIP_TXDESCS 128 +#define TULIP_TXDESCS 32 #define TULIP_RXQ_TARGET 32 #if TULIP_RXQ_TARGET >= TULIP_RXDESCS #error TULIP_RXQ_TARGET must be less than TULIP_RXDESCS @@ -233,6 +241,7 @@ typedef enum { typedef struct { enum { + TULIP_MEDIAINFO_NONE, TULIP_MEDIAINFO_SIA, TULIP_MEDIAINFO_GPR, TULIP_MEDIAINFO_MII, @@ -332,6 +341,7 @@ typedef enum { TULIP_21140_COGENT_EM100, /* Cogent EM100 100 only */ TULIP_21140_ZNYX_ZX34X, /* ZNYX ZX342 10/100 */ TULIP_21140_ASANTE, /* AsanteFast 10/100 */ + TULIP_21140_EN1207, /* Accton EN2107 10/100 BNC */ TULIP_21041_GENERIC /* Generic 21041 card */ } tulip_board_t; @@ -540,6 +550,7 @@ struct _tulip_softc_t { #define TULIP_HAVE_OKROM 0x00002000 /* ROM was recognized */ #define TULIP_HAVE_NOMEDIA 0x00004000 /* did not detect any media */ #define TULIP_HAVE_STOREFWD 0x00008000 /* have CMD_STOREFWD */ +#define TULIP_HAVE_SIA100 0x00010000 /* has LS100 in SIA status */ u_int32_t tulip_intrmask; /* our copy of csr_intr */ u_int32_t tulip_cmdmode; /* our copy of csr_cmdmode */ u_int32_t tulip_last_system_error : 3; /* last system error (only value is TULIP_SYSTEMERROR is also set) */ @@ -657,6 +668,9 @@ struct _tulip_softc_t { tulip_srom_connection_t tulip_conntype; tulip_desc_t tulip_rxdescs[TULIP_RXDESCS]; tulip_desc_t tulip_txdescs[TULIP_TXDESCS]; +#if defined(__NetBSD__) && NRND > 0 + rndsource_element_t tulip_rndsource; +#endif }; #if defined(IFM_ETHER) |