summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/alpha/conf/GENERIC3
-rw-r--r--sys/arch/alpha/conf/RAMDISKBIG3
-rw-r--r--sys/arch/i386/conf/GENERIC4
-rw-r--r--sys/arch/i386/conf/RAMDISK4
-rw-r--r--sys/arch/i386/conf/RAMDISKB4
-rw-r--r--sys/arch/i386/conf/RAMDISKC4
-rw-r--r--sys/arch/i386/conf/RAMDISK_CD4
-rw-r--r--sys/conf/files12
-rw-r--r--sys/dev/eisa/files.eisa7
-rw-r--r--sys/dev/eisa/if_fea.c239
-rw-r--r--sys/dev/ic/pdq.c1555
-rw-r--r--sys/dev/ic/pdq_ifsubr.c349
-rw-r--r--sys/dev/ic/pdqreg.h1085
-rw-r--r--sys/dev/ic/pdqvar.h351
-rw-r--r--sys/dev/pci/files.pci7
-rw-r--r--sys/dev/pci/if_fpa.c181
-rw-r--r--sys/dev/tc/files.tc7
-rw-r--r--sys/dev/tc/if_fta.c126
-rw-r--r--sys/net/if_fddi.h81
-rw-r--r--sys/net/if_fddisubr.c461
-rw-r--r--sys/netinet/if_ether.c33
-rw-r--r--sys/netinet/ip_carp.c6
-rw-r--r--sys/netinet6/nd6.c14
23 files changed, 18 insertions, 4522 deletions
diff --git a/sys/arch/alpha/conf/GENERIC b/sys/arch/alpha/conf/GENERIC
index 839d409072c..4543e9c349d 100644
--- a/sys/arch/alpha/conf/GENERIC
+++ b/sys/arch/alpha/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.232 2013/09/05 19:42:06 sasano Exp $
+# $OpenBSD: GENERIC,v 1.233 2013/10/28 12:33:32 mpi Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -167,7 +167,6 @@ asc* at tc?
#cfb* at tc?
#sfb* at tc?
le* at tc?
-fta* at tc? # DEC DEFTA FDDI cards
# PCI host bus adapter support
apecs* at mainbus?
diff --git a/sys/arch/alpha/conf/RAMDISKBIG b/sys/arch/alpha/conf/RAMDISKBIG
index b825e4c1dde..a27b64b6afc 100644
--- a/sys/arch/alpha/conf/RAMDISKBIG
+++ b/sys/arch/alpha/conf/RAMDISKBIG
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISKBIG,v 1.87 2012/12/10 04:30:56 brad Exp $
+# $OpenBSD: RAMDISKBIG,v 1.88 2013/10/28 12:33:32 mpi Exp $
# $NetBSD: GENERIC,v 1.31 1996/12/03 17:25:29 cgd Exp $
#
# Generic Alpha kernel. Enough to get booted, etc., but not much more.
@@ -130,7 +130,6 @@ asc* at tc?
#cfb* at tc?
#sfb* at tc?
le* at tc?
-fta* at tc? # DEC DEFTA FDDI cards
# PCI host bus adapter support
apecs* at mainbus?
diff --git a/sys/arch/i386/conf/GENERIC b/sys/arch/i386/conf/GENERIC
index 07e4e3a1f12..29a848477ea 100644
--- a/sys/arch/i386/conf/GENERIC
+++ b/sys/arch/i386/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.757 2013/10/21 05:52:15 dlg Exp $
+# $OpenBSD: GENERIC,v 1.758 2013/10/28 12:33:32 mpi Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -524,7 +524,6 @@ le0 at isa? port 0x360 irq 15 drq 6 # IsoLan, NE2100, and DEPCA
ex0 at isa? port 0x320 irq 5 # Intel EtherExpress PRO/10
sm0 at isa? port 0x300 irq 10 # SMC 91cxx-based ethernet
ep* at eisa? # 3C579 ethernet
-fea* at eisa? # DEC DEFEA FDDI
lmc* at pci? # Lan Media Corp SSI/T3/HSSI
san* at pci? # Sangoma PCI AFT card
le* at isapnp?
@@ -538,7 +537,6 @@ ne* at pcmcia? # PCMCIA based NE2000 ethernet
ep* at pcmcia? # PCMCIA based 3C5xx ethernet
sm* at pcmcia? # PCMCIA based sm ethernet
xe* at pcmcia? # Xircom ethernet
-fpa* at pci? # DEC DEFPA FDDI
xl* at pci? # 3C9xx ethernet
xl* at cardbus? # 3C575/3C656 ethernet
rl* at pci? # RealTek 81[23]9 ethernet
diff --git a/sys/arch/i386/conf/RAMDISK b/sys/arch/i386/conf/RAMDISK
index 8bce1d4eb32..d87c8ced2a7 100644
--- a/sys/arch/i386/conf/RAMDISK
+++ b/sys/arch/i386/conf/RAMDISK
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK,v 1.182 2013/10/05 17:05:15 deraadt Exp $
+# $OpenBSD: RAMDISK,v 1.183 2013/10/28 12:33:32 mpi Exp $
machine i386 # architecture, used by config; REQUIRED
@@ -196,7 +196,6 @@ ep* at isa? # 3C509 ethernet cards
le0 at isa? port 0x360 irq 15 drq 6 # IsoLan, NE2100, and DEPCA
#ex0 at isa? port 0x320 irq 5 # Intel EtherExpress PRO/10
#ep* at eisa? # 3C579 ethernet cards
-#fea* at eisa? # DEC DEFEA FDDI cards
ep* at isapnp? # 3C509 PnP ethernet cards
le* at isapnp?
de* at pci? # DC21X4X-based ethernet cards
@@ -207,7 +206,6 @@ ne* at pcmcia? # PCMCIA based NE2000 cards
ep* at pcmcia? # PCMCIA based 3c5xx cards
#sm* at pcmcia? # PCMCIA based sm cards
#xe* at pcmcia? # Xircom ethernet
-#fpa* at pci? # DEC DEFPA FDDI cards
xl* at pci? # 3C9xx ethernet cards
rl* at pci? # RealTek 81[23]9 ethernet
#epic* at pci? # SMC EPIC/100 ethernet
diff --git a/sys/arch/i386/conf/RAMDISKB b/sys/arch/i386/conf/RAMDISKB
index 4c9c2508b95..32858956200 100644
--- a/sys/arch/i386/conf/RAMDISKB
+++ b/sys/arch/i386/conf/RAMDISKB
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISKB,v 1.125 2013/10/18 21:57:55 miod Exp $
+# $OpenBSD: RAMDISKB,v 1.126 2013/10/28 12:33:32 mpi Exp $
machine i386 # architecture, used by config; REQUIRED
@@ -209,7 +209,6 @@ atapiscsi* at pciide?
#le0 at isa? port 0x360 irq 15 drq 6 # IsoLan, NE2100, and DEPCA
#ex0 at isa? port 0x320 irq 5 # Intel EtherExpress PRO/10
#ep* at eisa? # 3C579 ethernet cards
-#fea* at eisa? # DEC DEFEA FDDI cards
#ep* at isapnp? # 3C509 PnP ethernet cards
#le* at isapnp?
de* at pci? # DC21X4X-based ethernet cards
@@ -220,7 +219,6 @@ ep* at pci? # 3C59x ethernet cards
#ep* at pcmcia? # PCMCIA based 3c5xx cards
#sm* at pcmcia? # PCMCIA based sm cards
#xe* at pcmcia? # Xircom ethernet
-#fpa* at pci? # DEC DEFPA FDDI cards
#xl* at pci? # 3C9xx ethernet cards
#rl* at pci? # RealTek 81[23]9 ethernet
#epic* at pci? # SMC EPIC/100 ethernet
diff --git a/sys/arch/i386/conf/RAMDISKC b/sys/arch/i386/conf/RAMDISKC
index 9e4e7c5ce13..87e970d848f 100644
--- a/sys/arch/i386/conf/RAMDISKC
+++ b/sys/arch/i386/conf/RAMDISKC
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISKC,v 1.106 2013/10/18 21:57:55 miod Exp $
+# $OpenBSD: RAMDISKC,v 1.107 2013/10/28 12:33:32 mpi Exp $
machine i386 # architecture, used by config; REQUIRED
@@ -230,7 +230,6 @@ atapiscsi* at pciide?
#le0 at isa? port 0x360 irq 15 drq 6 # IsoLan, NE2100, and DEPCA
#ex0 at isa? port 0x320 irq 5 # Intel EtherExpress PRO/10
#ep* at eisa? # 3C579 ethernet
-#fea* at eisa? # DEC DEFEA FDDI
#ep* at isapnp? # 3C509 PnP ethernet
#le* at isapnp?
#de* at pci? # DC21X4X-based ethernet
@@ -242,7 +241,6 @@ atapiscsi* at pciide?
#ep* at pcmcia? # PCMCIA based 3C5xx
#sm* at pcmcia? # PCMCIA based sm
#xe* at pcmcia? # Xircom ethernet
-#fpa* at pci? # DEC DEFPA FDDI
#xl* at pci? # 3C9xx ethernet
#xl* at cardbus? # 3C575 ethernet
#rl* at pci? # RealTek 81[23]9 ethernet
diff --git a/sys/arch/i386/conf/RAMDISK_CD b/sys/arch/i386/conf/RAMDISK_CD
index 29b73da41fc..1af8c6e6626 100644
--- a/sys/arch/i386/conf/RAMDISK_CD
+++ b/sys/arch/i386/conf/RAMDISK_CD
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK_CD,v 1.203 2013/10/21 05:52:15 dlg Exp $
+# $OpenBSD: RAMDISK_CD,v 1.204 2013/10/28 12:33:32 mpi Exp $
machine i386 # architecture, used by config; REQUIRED
@@ -285,7 +285,6 @@ le0 at isa? port 0x360 irq 15 drq 6 # IsoLan, NE2100, and DEPCA
ex0 at isa? port 0x320 irq 5 # Intel EtherExpress PRO/10
ep* at eisa? # 3C579 ethernet
ef* at isapnp? # 3C515 ethernet
-#fea* at eisa? # DEC DEFEA FDDI
le* at isapnp?
pcn* at pci? # AMD PCnet-PCI Ethernet
de* at pci? # DC21X4X-based ethernet
@@ -297,7 +296,6 @@ ne* at pcmcia? # PCMCIA based NE2000 ethernet
ep* at pcmcia? # PCMCIA based 3C5xx ethernet
sm* at pcmcia? # PCMCIA based sm ethernet
xe* at pcmcia? # Xircom ethernet
-fpa* at pci? # DEC DEFPA FDDI
xl* at pci? # 3C9xx ethernet
xl* at cardbus? # 3C575 ethernet
rl* at pci? # RealTek 81[23]9 ethernet
diff --git a/sys/conf/files b/sys/conf/files
index 7033ce0761c..01618e112c9 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1,4 +1,4 @@
-# $OpenBSD: files,v 1.559 2013/10/20 21:16:35 miod Exp $
+# $OpenBSD: files,v 1.560 2013/10/28 12:33:32 mpi Exp $
# $NetBSD: files,v 1.87 1996/05/19 17:17:50 jonathan Exp $
# @(#)files.newconf 7.5 (Berkeley) 5/10/93
@@ -61,12 +61,10 @@ define i2c_bitbang
# 1-Wire bus bit-banging
define onewire_bitbang
-# net device attributes - we have generic code for ether(net),
-# and fddi.
+# net device attributes - we have generic code for ether(net)
define crypto
define systrace
define ether
-define fddi
define sppp
define wlan
define bluetooth
@@ -75,7 +73,6 @@ define bluetooth
# of device drivers.
define ncr5380sbc # NCR 5380 SCSI Bus Controller
define ncr53c7xx # NCR 53c7xx SCSI Bus Controller
-define pdq # DEC FDDI chipset
define dp8390nic # 8390-family Ethernet controllers
define rtl80x9 # RealTek 8019/8029 NE2000-compatible
define dl10019 # DL10019/10022-family Ethernet controllers
@@ -624,8 +621,6 @@ file dev/firmload.c firmload
file dev/flash.c flash needs-flag
file dev/ic/ncr5380sbc.c ncr5380sbc
file dev/ic/ncr53c7xx.c ncr53c7xx
-file dev/ic/pdq.c pdq
-file dev/ic/pdq_ifsubr.c pdq
file dev/ic/dp8390.c dp8390nic
file dev/ic/rtl80x9.c rtl80x9
file dev/ic/tea5757.c tea5757
@@ -771,8 +766,7 @@ file tmpfs/tmpfs_fifoops.c tmpfs & fifo
file net/bpf.c bpfilter needs-count
file net/bpf_filter.c bpfilter
file net/if.c
-file net/if_ethersubr.c ether | inet | fddi needs-flag
-file net/if_fddisubr.c fddi
+file net/if_ethersubr.c ether | inet needs-flag
file net/if_spppsubr.c sppp
file net/if_loop.c loop
file net/if_media.c ifmedia
diff --git a/sys/dev/eisa/files.eisa b/sys/dev/eisa/files.eisa
index ba9447b47c6..4ab6dc1d8e0 100644
--- a/sys/dev/eisa/files.eisa
+++ b/sys/dev/eisa/files.eisa
@@ -1,4 +1,4 @@
-# $OpenBSD: files.eisa,v 1.10 2000/12/17 21:35:03 mickey Exp $
+# $OpenBSD: files.eisa,v 1.11 2013/10/28 12:33:32 mpi Exp $
# $NetBSD: files.eisa,v 1.12 1996/09/01 00:10:55 mycroft Exp $
#
# Config.new file and device description for machine-independent EISA code.
@@ -42,8 +42,3 @@ file dev/eisa/cac_eisa.c cac_eisa
# device declaration in sys/conf/files
attach ep at eisa with ep_eisa
file dev/eisa/if_ep_eisa.c ep_eisa
-
-# DEC DEFEA EISA FDDI Controller
-device fea: pdq, fddi, ifnet
-attach fea at eisa
-file dev/eisa/if_fea.c fea
diff --git a/sys/dev/eisa/if_fea.c b/sys/dev/eisa/if_fea.c
deleted file mode 100644
index 380d1ff00c9..00000000000
--- a/sys/dev/eisa/if_fea.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/* $OpenBSD: if_fea.c,v 1.21 2013/08/07 01:06:27 bluhm Exp $ */
-/* $NetBSD: if_fea.c,v 1.9 1996/10/21 22:31:05 thorpej Exp $ */
-
-/*-
- * Copyright (c) 1995, 1996 Matt Thomas <matt@3am-software.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (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_fea.c,v 1.6 1996/06/07 20:02:25 thomas Exp
- */
-
-/*
- * DEC PDQ FDDI Controller
- *
- * This module support the DEFEA EISA FDDI Controller.
- */
-
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/mbuf.h>
-#include <sys/protosw.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/errno.h>
-#include <sys/malloc.h>
-#include <sys/device.h>
-
-#include <net/if.h>
-#include <net/if_types.h>
-#include <net/if_dl.h>
-#include <net/route.h>
-
-#include "bpfilter.h"
-#if NBPFILTER > 0
-#include <net/bpf.h>
-#endif
-
-#ifdef INET
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <netinet/if_ether.h>
-#endif
-
-#include <net/if_fddi.h>
-
-#include <machine/cpu.h>
-#include <machine/bus.h>
-
-#include <dev/ic/pdqvar.h>
-#include <dev/ic/pdqreg.h>
-
-#include <dev/eisa/eisareg.h>
-#include <dev/eisa/eisavar.h>
-#include <dev/eisa/eisadevs.h>
-
-/*
- *
- */
-
-void pdq_eisa_subprobe(bus_space_tag_t, bus_space_handle_t,
- u_int32_t *, u_int32_t *, u_int32_t *);
-void pdq_eisa_devinit(pdq_softc_t *);
-int pdq_eisa_match(struct device *, void *, void *);
-void pdq_eisa_attach(struct device *, struct device *, void *);
-
-#define DEFEA_INTRENABLE 0x8 /* level interrupt */
-static int pdq_eisa_irqs[4] = { 9, 10, 11, 15 };
-
-void
-pdq_eisa_subprobe(bc, iobase, maddr, msize, irq)
- bus_space_tag_t bc;
- bus_space_handle_t iobase;
- u_int32_t *maddr;
- u_int32_t *msize;
- u_int32_t *irq;
-{
- if (irq != NULL)
- *irq = pdq_eisa_irqs[PDQ_OS_IORD_8(bc, iobase,
- PDQ_EISA_IO_CONFIG_STAT_0) & 3];
-
- *maddr = (PDQ_OS_IORD_8(bc, iobase, PDQ_EISA_MEM_ADD_CMP_0) << 8)
- | (PDQ_OS_IORD_8(bc, iobase, PDQ_EISA_MEM_ADD_CMP_1) << 16);
- *msize = (PDQ_OS_IORD_8(bc, iobase, PDQ_EISA_MEM_ADD_MASK_0) + 4) << 8;
-}
-
-void
-pdq_eisa_devinit(sc)
- pdq_softc_t *sc;
-{
- u_int8_t data;
- bus_space_tag_t tag;
-
- tag = sc->sc_bc;
-
- /*
- * Do the standard initialization for the DEFEA registers.
- */
- PDQ_OS_IOWR_8(tag, sc->sc_iobase, PDQ_EISA_FUNCTION_CTRL, 0x23);
- PDQ_OS_IOWR_8(tag, sc->sc_iobase, PDQ_EISA_IO_CMP_1_1,
- (sc->sc_iobase >> 8) & 0xF0);
- PDQ_OS_IOWR_8(tag, sc->sc_iobase, PDQ_EISA_IO_CMP_0_1,
- (sc->sc_iobase >> 8) & 0xF0);
- PDQ_OS_IOWR_8(tag, sc->sc_iobase, PDQ_EISA_SLOT_CTRL, 0x01);
- data = PDQ_OS_IORD_8(tag, sc->sc_iobase, PDQ_EISA_BURST_HOLDOFF);
-#if defined(PDQ_IOMAPPED)
- PDQ_OS_IOWR_8(tag, sc->sc_iobase, PDQ_EISA_BURST_HOLDOFF, data & ~1);
-#else
- PDQ_OS_IOWR_8(tag, sc->sc_iobase, PDQ_EISA_BURST_HOLDOFF, data | 1);
-#endif
- data = PDQ_OS_IORD_8(tag, sc->sc_iobase, PDQ_EISA_IO_CONFIG_STAT_0);
- PDQ_OS_IOWR_8(tag, sc->sc_iobase, PDQ_EISA_IO_CONFIG_STAT_0,
- data | DEFEA_INTRENABLE);
-}
-
-int
-pdq_eisa_match(parent, match, aux)
- struct device *parent;
- void *match;
- void *aux;
-{
- struct eisa_attach_args *ea = (struct eisa_attach_args *) aux;
-
- if (strncmp(ea->ea_idstring, "DEC300", 6) == 0)
- return (1);
- return (0);
-}
-
-void
-pdq_eisa_attach(parent, self, aux)
- struct device *parent;
- struct device *self;
- void *aux;
-{
- pdq_softc_t *sc = (pdq_softc_t *) self;
- struct eisa_attach_args *ea = (struct eisa_attach_args *) aux;
- u_int32_t irq, maddr, msize;
- eisa_intr_handle_t ih;
- const char *intrstr;
-
- sc->sc_iotag = ea->ea_iot;
- bcopy(sc->sc_dev.dv_xname, sc->sc_if.if_xname, IFNAMSIZ);
- sc->sc_if.if_flags = 0;
- sc->sc_if.if_softc = sc;
-
- /*
- * NOTE: sc_bc is an alias for sc_csrtag and sc_membase is
- * an alias for sc_csrhandle. sc_iobase is used here to
- * check the card's configuration.
- */
-
- if (bus_space_map(sc->sc_iotag, EISA_SLOT_ADDR(ea->ea_slot),
- EISA_SLOT_SIZE, 0, &sc->sc_iobase)) {
- printf("\n%s: failed to map I/O!\n", sc->sc_dev.dv_xname);
- return;
- }
-
- pdq_eisa_subprobe(sc->sc_iotag, sc->sc_iobase, &maddr, &msize, &irq);
-
-#if defined(PDQ_IOMAPPED)
- sc->sc_csrtag = sc->sc_iotag;
- sc->sc_csrhandle = sc->sc_iobase;
-#else
- if (maddr == 0 || msize == 0) {
- printf("\n%s: error: memory not enabled! ECU reconfiguration"
- " required\n", sc->sc_dev.dv_xname);
- return;
- }
-
- if (bus_space_map(sc->sc_csrtag, maddr, msize, 0, &sc->sc_csrhandle)) {
- bus_space_unmap(sc->sc_iotag, sc->sc_iobase, EISA_SLOT_SIZE);
- printf("\n%s: can't map mem space (0x%x-0x%x)!\n",
- sc->sc_dev.dv_xname, maddr, maddr + msize - 1);
- return;
- }
-#endif
- pdq_eisa_devinit(sc);
- sc->sc_pdq = pdq_initialize(sc->sc_bc, sc->sc_membase,
- sc->sc_if.if_xname, 0, (void *) sc, PDQ_DEFEA);
- if (sc->sc_pdq == NULL) {
- printf("%s: initialization failed\n", sc->sc_dev.dv_xname);
- return;
- }
-
- if (eisa_intr_map(ea->ea_ec, irq, &ih)) {
- printf("%s: can't map interrupt (%d)\n",
- sc->sc_dev.dv_xname, irq);
- return;
- }
- intrstr = eisa_intr_string(ea->ea_ec, ih);
- sc->sc_ih = eisa_intr_establish(ea->ea_ec, ih, IST_LEVEL, IPL_NET,
- (int (*)(void *)) pdq_interrupt, sc->sc_pdq, sc->sc_dev.dv_xname);
- if (sc->sc_ih == NULL) {
- printf("%s: can't establish interrupt", sc->sc_dev.dv_xname);
- if (intrstr != NULL)
- printf(" at %s", intrstr);
- printf("\n");
- return;
- }
- if (intrstr != NULL)
- printf(": interrupting at %s\n", intrstr);
-
- bcopy((caddr_t) sc->sc_pdq->pdq_hwaddr.lanaddr_bytes,
- sc->sc_arpcom.ac_enaddr, 6);
-
- pdq_ifattach(sc, NULL);
-
-#if !defined(PDQ_IOMAPPED)
- printf("%s: using iomem 0x%x-0x%x\n", sc->sc_dev.dv_xname, maddr,
- maddr + msize - 1);
-#endif
-}
-
-struct cfattach fea_ca = {
- sizeof(pdq_softc_t), pdq_eisa_match, pdq_eisa_attach
-};
-
-struct cfdriver fea_cd = {
- NULL, "fea", DV_IFNET
-};
diff --git a/sys/dev/ic/pdq.c b/sys/dev/ic/pdq.c
deleted file mode 100644
index 0bfcfa3ed0b..00000000000
--- a/sys/dev/ic/pdq.c
+++ /dev/null
@@ -1,1555 +0,0 @@
-/* $OpenBSD: pdq.c,v 1.15 2011/04/05 19:54:35 jasper Exp $ */
-/* $NetBSD: pdq.c,v 1.9 1996/10/13 01:37:26 christos Exp $ */
-
-/*-
- * Copyright (c) 1995,1996 Matt Thomas <matt@3am-software.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (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: pdq.c,v 1.27 1996/06/07 20:02:25 thomas Exp
- *
- */
-
-/*
- * DEC PDQ FDDI Controller O/S independent code
- *
- * This module should work any PDQ based board. Note that changes for
- * MIPS and Alpha architectures (or any other architecture which requires
- * a flushing of memory or write buffers and/or has incoherent caches)
- * have yet to be made.
- *
- * However, it is expected that the PDQ_CSR_WRITE macro will cause a
- * flushing of the write buffers.
- */
-
-#define PDQ_HWSUPPORT /* for pdq.h */
-
-#include "pdqvar.h"
-#include "pdqreg.h"
-
-#define PDQ_ROUNDUP(n, x) (((n) + ((x) - 1)) & ~((x) - 1))
-#define PDQ_CMD_RX_ALIGNMENT 16
-
-#if (defined(PDQTEST) && !defined(PDQ_NOPRINTF)) || defined(PDQVERBOSE)
-#define PDQ_PRINTF(x) printf x
-#else
-#define PDQ_PRINTF(x) do { } while (0)
-#endif
-
-static const char * const pdq_halt_codes[] = {
- "Selftest Timeout", "Host Bus Parity Error", "Host Directed Fault",
- "Software Fault", "Hardware Fault", "PC Trace Path Test",
- "DMA Error", "Image CRC Error", "Adapter Processer Error"
-};
-
-static const char * const pdq_adapter_states[] = {
- "Reset", "Upgrade", "DMA Unavailable", "DMA Available",
- "Link Available", "Link Unavailable", "Halted", "Ring Member"
-};
-
-/*
- * The following are used in conjunction with
- * unsolicited events
- */
-static const char * const pdq_entities[] = {
- "Station", "Link", "Phy Port"
-};
-
-static const char * const pdq_station_events[] = {
- "Trace Received"
-};
-
-static const char * const pdq_station_arguments[] = {
- "Reason"
-};
-
-static const char * const pdq_link_events[] = {
- "Transmit Underrun",
- "Transmit Failed",
- "Block Check Error (CRC)",
- "Frame Status Error",
- "PDU Length Error",
- NULL,
- NULL,
- "Receive Data Overrun",
- NULL,
- "No User Buffer",
- "Ring Initialization Initiated",
- "Ring Initialization Received",
- "Ring Beacon Initiated",
- "Duplicate Address Failure",
- "Duplicate Token Detected",
- "Ring Purger Error",
- "FCI Strip Error",
- "Trace Initiated",
- "Directed Beacon Received",
-};
-
-static const char * const pdq_link_arguments[] = {
- "Reason",
- "Data Link Header",
- "Source",
- "Upstream Neighbor"
-};
-
-static const char * const pdq_phy_events[] = {
- "LEM Error Monitor Reject",
- "Elasticy Buffer Error",
- "Link Confidence Test Reject"
-};
-
-static const char * const pdq_phy_arguments[] = {
- "Direction"
-};
-
-static const char * const * const pdq_event_arguments[] = {
- pdq_station_arguments,
- pdq_link_arguments,
- pdq_phy_arguments
-};
-
-static const char * const * const pdq_event_codes[] = {
- pdq_station_events,
- pdq_link_events,
- pdq_phy_events
-};
-
-static const char * const pdq_station_types[] = {
- "SAS", "DAC", "SAC", "NAC", "DAS"
-};
-
-static const char * const pdq_smt_versions[] = { "", "V6.2", "V7.2", "V7.3" };
-
-static const char pdq_phy_types[] = "ABSM";
-
-static const char * const pdq_pmd_types0[] = {
- "ANSI Multi-Mode", "ANSI Single-Mode Type 1", "ANSI Single-Mode Type 2",
- "ANSI Sonet"
-};
-
-static const char * const pdq_pmd_types100[] = {
- "Low Power", "Thin Wire", "Shielded Twisted Pair",
- "Unshielded Twisted Pair"
-};
-
-static const char * const * const pdq_pmd_types[] = {
- pdq_pmd_types0, pdq_pmd_types100
-};
-
-static const char * const pdq_descriptions[] = {
- "DEFPA PCI",
- "DEFEA EISA",
- "DEFTA TC",
- "DEFAA Futurebus",
- "DEFQA Q-bus",
-};
-
-static void
-pdq_print_fddi_chars(
- pdq_t *pdq,
- const pdq_response_status_chars_get_t *rsp)
-{
- const char hexchars[] = "0123456789abcdef";
-
- printf(PDQ_OS_PREFIX "DEC %s FDDI %s Controller\n",
- PDQ_OS_PREFIX_ARGS, pdq_descriptions[pdq->pdq_type],
- pdq_station_types[rsp->status_chars_get.station_type]);
-
- printf(PDQ_OS_PREFIX "FDDI address %c%c:%c%c:%c%c:%c%c:%c%c:%c%c, FW=%c%c%c%c, HW=%c",
- PDQ_OS_PREFIX_ARGS,
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[0] >> 4],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[0] & 0x0F],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[1] >> 4],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[1] & 0x0F],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[2] >> 4],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[2] & 0x0F],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[3] >> 4],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[3] & 0x0F],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[4] >> 4],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[4] & 0x0F],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[5] >> 4],
- hexchars[pdq->pdq_hwaddr.lanaddr_bytes[5] & 0x0F],
- pdq->pdq_fwrev.fwrev_bytes[0], pdq->pdq_fwrev.fwrev_bytes[1],
- pdq->pdq_fwrev.fwrev_bytes[2], pdq->pdq_fwrev.fwrev_bytes[3],
- rsp->status_chars_get.module_rev.fwrev_bytes[0]);
-
- if (rsp->status_chars_get.smt_version_id < PDQ_ARRAY_SIZE(pdq_smt_versions)) {
- printf(", SMT %s\n", pdq_smt_versions[rsp->status_chars_get.smt_version_id]);
- }
-
- printf(PDQ_OS_PREFIX "FDDI Port%s = %c (PMD = %s)",
- PDQ_OS_PREFIX_ARGS,
- rsp->status_chars_get.station_type == PDQ_STATION_TYPE_DAS ? "[A]" : "",
- pdq_phy_types[rsp->status_chars_get.phy_type[0]],
- pdq_pmd_types[rsp->status_chars_get.pmd_type[0] / 100][rsp->status_chars_get.pmd_type[0] % 100]);
-
- if (rsp->status_chars_get.station_type == PDQ_STATION_TYPE_DAS)
- printf(", FDDI Port[B] = %c (PMD = %s)",
- pdq_phy_types[rsp->status_chars_get.phy_type[1]],
- pdq_pmd_types[rsp->status_chars_get.pmd_type[1] / 100][rsp->status_chars_get.pmd_type[1] % 100]);
-
- printf("\n");
-}
-
-static void
-pdq_init_csrs(
- pdq_csrs_t *csrs,
- pdq_bus_t bus,
- pdq_bus_memaddr_t csr_base,
- size_t csrsize)
-{
- csrs->csr_bus = bus;
- csrs->csr_base = csr_base;
- csrs->csr_port_reset = PDQ_CSR_OFFSET(csr_base, 0 * csrsize);
- csrs->csr_host_data = PDQ_CSR_OFFSET(csr_base, 1 * csrsize);
- csrs->csr_port_control = PDQ_CSR_OFFSET(csr_base, 2 * csrsize);
- csrs->csr_port_data_a = PDQ_CSR_OFFSET(csr_base, 3 * csrsize);
- csrs->csr_port_data_b = PDQ_CSR_OFFSET(csr_base, 4 * csrsize);
- csrs->csr_port_status = PDQ_CSR_OFFSET(csr_base, 5 * csrsize);
- csrs->csr_host_int_type_0 = PDQ_CSR_OFFSET(csr_base, 6 * csrsize);
- csrs->csr_host_int_enable = PDQ_CSR_OFFSET(csr_base, 7 * csrsize);
- csrs->csr_type_2_producer = PDQ_CSR_OFFSET(csr_base, 8 * csrsize);
- csrs->csr_cmd_response_producer = PDQ_CSR_OFFSET(csr_base, 10 * csrsize);
- csrs->csr_cmd_request_producer = PDQ_CSR_OFFSET(csr_base, 11 * csrsize);
- csrs->csr_host_smt_producer = PDQ_CSR_OFFSET(csr_base, 12 * csrsize);
- csrs->csr_unsolicited_producer = PDQ_CSR_OFFSET(csr_base, 13 * csrsize);
-}
-
-static void
-pdq_init_pci_csrs(
- pdq_pci_csrs_t *csrs,
- pdq_bus_t bus,
- pdq_bus_memaddr_t csr_base,
- size_t csrsize)
-{
- csrs->csr_bus = bus;
- csrs->csr_base = csr_base;
- csrs->csr_pfi_mode_control = PDQ_CSR_OFFSET(csr_base, 16 * csrsize);
- csrs->csr_pfi_status = PDQ_CSR_OFFSET(csr_base, 17 * csrsize);
- csrs->csr_fifo_write = PDQ_CSR_OFFSET(csr_base, 18 * csrsize);
- csrs->csr_fifo_read = PDQ_CSR_OFFSET(csr_base, 19 * csrsize);
-}
-
-static void
-pdq_flush_databuf_queue(
- pdq_databuf_queue_t *q)
-{
- PDQ_OS_DATABUF_T *pdu;
- for (;;) {
- PDQ_OS_DATABUF_DEQUEUE(q, pdu);
- if (pdu == NULL)
- return;
- PDQ_OS_DATABUF_FREE(pdu);
- }
-}
-
-static pdq_boolean_t
-pdq_do_port_control(
- const pdq_csrs_t * const csrs,
- pdq_uint32_t cmd)
-{
- int cnt = 0;
- PDQ_CSR_WRITE(csrs, csr_host_int_type_0, PDQ_HOST_INT_CSR_CMD_DONE);
- PDQ_CSR_WRITE(csrs, csr_port_control, PDQ_PCTL_CMD_ERROR | cmd);
- while ((PDQ_CSR_READ(csrs, csr_host_int_type_0) & PDQ_HOST_INT_CSR_CMD_DONE) == 0 && cnt < 33000000)
- cnt++;
- PDQ_PRINTF(("CSR cmd spun %d times\n", cnt));
- if (PDQ_CSR_READ(csrs, csr_host_int_type_0) & PDQ_HOST_INT_CSR_CMD_DONE) {
- PDQ_CSR_WRITE(csrs, csr_host_int_type_0, PDQ_HOST_INT_CSR_CMD_DONE);
- return (PDQ_CSR_READ(csrs, csr_port_control) & PDQ_PCTL_CMD_ERROR) ? PDQ_FALSE : PDQ_TRUE;
- }
- /* adapter failure */
- PDQ_ASSERT(0);
- return PDQ_FALSE;
-}
-
-static void
-pdq_read_mla(
- const pdq_csrs_t * const csrs,
- pdq_lanaddr_t *hwaddr)
-{
- pdq_uint32_t data;
-
- PDQ_CSR_WRITE(csrs, csr_port_data_a, 0);
- pdq_do_port_control(csrs, PDQ_PCTL_MLA_READ);
- data = PDQ_CSR_READ(csrs, csr_host_data);
-
- hwaddr->lanaddr_bytes[0] = (data >> 0) & 0xFF;
- hwaddr->lanaddr_bytes[1] = (data >> 8) & 0xFF;
- hwaddr->lanaddr_bytes[2] = (data >> 16) & 0xFF;
- hwaddr->lanaddr_bytes[3] = (data >> 24) & 0xFF;
-
- PDQ_CSR_WRITE(csrs, csr_port_data_a, 1);
- pdq_do_port_control(csrs, PDQ_PCTL_MLA_READ);
- data = PDQ_CSR_READ(csrs, csr_host_data);
-
- hwaddr->lanaddr_bytes[4] = (data >> 0) & 0xFF;
- hwaddr->lanaddr_bytes[5] = (data >> 8) & 0xFF;
-}
-
-static void
-pdq_read_fwrev(
- const pdq_csrs_t * const csrs,
- pdq_fwrev_t *fwrev)
-{
- pdq_uint32_t data;
-
- pdq_do_port_control(csrs, PDQ_PCTL_FW_REV_READ);
- data = PDQ_CSR_READ(csrs, csr_host_data);
-
- fwrev->fwrev_bytes[3] = (data >> 0) & 0xFF;
- fwrev->fwrev_bytes[2] = (data >> 8) & 0xFF;
- fwrev->fwrev_bytes[1] = (data >> 16) & 0xFF;
- fwrev->fwrev_bytes[0] = (data >> 24) & 0xFF;
-}
-
-static pdq_boolean_t
-pdq_read_error_log(
- pdq_t *pdq,
- pdq_response_error_log_get_t *log_entry)
-{
- const pdq_csrs_t * const csrs = &pdq->pdq_csrs;
- pdq_uint32_t *ptr = (pdq_uint32_t *) log_entry;
-
- pdq_do_port_control(csrs, PDQ_PCTL_ERROR_LOG_START);
-
- while (pdq_do_port_control(csrs, PDQ_PCTL_FW_REV_READ) == PDQ_TRUE) {
- *ptr++ = PDQ_CSR_READ(csrs, csr_host_data);
- if ((pdq_uint8_t *) ptr - (pdq_uint8_t *) log_entry == sizeof(*log_entry))
- break;
- }
- return (ptr == (pdq_uint32_t *) log_entry) ? PDQ_FALSE : PDQ_TRUE;
-}
-
-static pdq_chip_rev_t
-pdq_read_chiprev(
- const pdq_csrs_t * const csrs)
-{
- pdq_uint32_t data;
-
- PDQ_CSR_WRITE(csrs, csr_port_data_a, PDQ_SUB_CMD_PDQ_REV_GET);
- pdq_do_port_control(csrs, PDQ_PCTL_SUB_CMD);
- data = PDQ_CSR_READ(csrs, csr_host_data);
-
- return (pdq_chip_rev_t) data;
-}
-
-static const struct {
- size_t cmd_len;
- size_t rsp_len;
- const char *cmd_name;
-} pdq_cmd_info[] = {
-#define YES(cmd, rsp, name) { sizeof(cmd), sizeof(rsp), name }
-#define NO(cmd, rsp, name) { 0, 0, name }
- YES(pdq_cmd_generic_t, /* 0 - PDQC_START */
- pdq_response_generic_t,
- "Start"),
- YES(pdq_cmd_filter_set_t, /* 1 - PDQC_FILTER_SET */
- pdq_response_generic_t,
- "Filter Set"),
- YES(pdq_cmd_generic_t, /* 2 - PDQC_FILTER_GET */
- pdq_response_filter_get_t,
- "Filter Get"),
- YES(pdq_cmd_chars_set_t, /* 3 - PDQC_CHARS_SET */
- pdq_response_generic_t,
- "Chars Set"),
- YES(pdq_cmd_generic_t, /* 4 - PDQC_STATUS_CHARS_GET */
- pdq_response_status_chars_get_t,
- "Status Chars Get"),
- NO(pdq_cmd_generic_t, /* 5 - PDQC_COUNTERS_GET */
- pdq_response_counters_get_t,
- "Counters Get"),
- NO(pdq_cmd_counters_set_t, /* 6 - PDQC_COUNTERS_SET */
- pdq_response_generic_t,
- "Counters Set"),
- YES(pdq_cmd_addr_filter_set_t, /* 7 - PDQC_ADDR_FILTER_SET */
- pdq_response_generic_t,
- "Addr Filter Set"),
- YES(pdq_cmd_generic_t, /* 8 - PDQC_ADDR_FILTER_GET */
- pdq_response_addr_filter_get_t,
- "Addr Filter Get"),
- NO(pdq_cmd_generic_t, /* 9 - PDQC_ERROR_LOG_CLEAR */
- pdq_response_generic_t,
- "Error Log Clear"),
- NO(pdq_cmd_generic_t, /* 10 - PDQC_ERROR_LOG_SET */
- pdq_response_generic_t,
- "Error Log Set"),
- NO(pdq_cmd_generic_t, /* 11 - PDQC_FDDI_MIB_GET */
- pdq_response_generic_t,
- "FDDI MIB Get"),
- NO(pdq_cmd_generic_t, /* 12 - PDQC_DEC_EXT_MIB_GET */
- pdq_response_generic_t,
- "DEC Ext MIB Get"),
- NO(pdq_cmd_generic_t, /* 13 - PDQC_DEC_SPECIFIC_GET */
- pdq_response_generic_t,
- "DEC Specific Get"),
- NO(pdq_cmd_generic_t, /* 14 - PDQC_SNMP_SET */
- pdq_response_generic_t,
- "SNMP Set"),
- NO(XXX, XXX, "N/A"), /* 15 - XXX */
- NO(pdq_cmd_generic_t, /* 16 - PDQC_SMT_MIB_GET */
- pdq_response_generic_t,
- "SMT MIB Get"),
- NO(pdq_cmd_generic_t, /* 17 - PDQC_SMT_MIB_SET */
- pdq_response_generic_t,
- "SMT MIB Set"),
-};
-
-static void
-pdq_queue_commands(
- pdq_t *pdq)
-{
- const pdq_csrs_t * const csrs = &pdq->pdq_csrs;
- pdq_command_info_t * const ci = &pdq->pdq_command_info;
- pdq_descriptor_block_t * const dbp = pdq->pdq_dbp;
- pdq_cmd_code_t op;
- pdq_uint32_t cmdlen, rsplen, mask;
-
- /*
- * If there are commands or responses active or there aren't
- * any pending commands, then don't queue any more.
- */
- if (ci->ci_command_active || ci->ci_pending_commands == 0)
- return;
-
- /*
- * Determine which command needs to be queued.
- */
- op = PDQC_SMT_MIB_SET;
- for (mask = 1 << ((int) op); (mask & ci->ci_pending_commands) == 0; mask >>= 1)
- op = (pdq_cmd_code_t) ((int) op - 1);
- /*
- * Obtain the sizes needed for the command and response.
- * Round up to PDQ_CMD_RX_ALIGNMENT so the receive buffer is
- * always properly aligned.
- */
- cmdlen = PDQ_ROUNDUP(pdq_cmd_info[op].cmd_len, PDQ_CMD_RX_ALIGNMENT);
- rsplen = PDQ_ROUNDUP(pdq_cmd_info[op].rsp_len, PDQ_CMD_RX_ALIGNMENT);
- if (cmdlen < rsplen)
- cmdlen = rsplen;
- /*
- * Since only one command at a time will be queued, there will always
- * be enough space.
- */
-
- /*
- * Obtain and fill in the descriptor for the command (descriptor is
- * pre-initialized)
- */
- dbp->pdqdb_command_requests[ci->ci_request_producer].txd_seg_len = cmdlen;
- PDQ_ADVANCE(ci->ci_request_producer, 1, PDQ_RING_MASK(dbp->pdqdb_command_requests));
-
- /*
- * Obtain and fill in the descriptor for the response (descriptor is
- * pre-initialized)
- */
- dbp->pdqdb_command_responses[ci->ci_response_producer].rxd_seg_len_hi = cmdlen / 16;
- PDQ_ADVANCE(ci->ci_response_producer, 1, PDQ_RING_MASK(dbp->pdqdb_command_responses));
-
- /*
- * Clear the command area, set the opcode, and the command from the pending
- * mask.
- */
-
- PDQ_OS_MEMZERO(ci->ci_bufstart, cmdlen);
- *(pdq_cmd_code_t *) ci->ci_bufstart = op;
- ci->ci_pending_commands &= ~mask;
-
- /*
- * Fill in the command area, if needed.
- */
- switch (op) {
- case PDQC_FILTER_SET: {
- pdq_cmd_filter_set_t *filter_set = (pdq_cmd_filter_set_t *) ci->ci_bufstart;
- unsigned idx = 0;
- filter_set->filter_set_items[idx].item_code = PDQI_IND_GROUP_PROM;
- filter_set->filter_set_items[idx].filter_state = (pdq->pdq_flags & PDQ_PROMISC ? PDQ_FILTER_PASS : PDQ_FILTER_BLOCK);
- idx++;
- filter_set->filter_set_items[idx].item_code = PDQI_GROUP_PROM;
- filter_set->filter_set_items[idx].filter_state = (pdq->pdq_flags & PDQ_ALLMULTI ? PDQ_FILTER_PASS : PDQ_FILTER_BLOCK);
- idx++;
- filter_set->filter_set_items[idx].item_code = PDQI_SMT_PROM;
- filter_set->filter_set_items[idx].filter_state = ((pdq->pdq_flags & (PDQ_PROMISC|PDQ_PASS_SMT)) == (PDQ_PROMISC|PDQ_PASS_SMT) ? PDQ_FILTER_PASS : PDQ_FILTER_BLOCK);
- idx++;
- filter_set->filter_set_items[idx].item_code = PDQI_SMT_USER;
- filter_set->filter_set_items[idx].filter_state = (pdq->pdq_flags & PDQ_PASS_SMT ? PDQ_FILTER_PASS : PDQ_FILTER_BLOCK);
- idx++;
- filter_set->filter_set_items[idx].item_code = PDQI_EOL;
- break;
- }
- case PDQC_ADDR_FILTER_SET: {
- pdq_cmd_addr_filter_set_t *addr_filter_set = (pdq_cmd_addr_filter_set_t *) ci->ci_bufstart;
- pdq_lanaddr_t *addr = addr_filter_set->addr_filter_set_addresses;
- addr->lanaddr_bytes[0] = 0xFF;
- addr->lanaddr_bytes[1] = 0xFF;
- addr->lanaddr_bytes[2] = 0xFF;
- addr->lanaddr_bytes[3] = 0xFF;
- addr->lanaddr_bytes[4] = 0xFF;
- addr->lanaddr_bytes[5] = 0xFF;
- addr++;
- pdq_os_addr_fill(pdq, addr, 61);
- break;
- }
- default:
- break;
- }
- /*
- * At this point the command is done. All that needs to be done is to
- * produce it to the PDQ.
- */
- PDQ_PRINTF(("PDQ Queue Command Request: %s queued\n",
- pdq_cmd_info[op].cmd_name));
-
- ci->ci_command_active++;
- PDQ_CSR_WRITE(csrs, csr_cmd_response_producer, ci->ci_response_producer | (ci->ci_response_completion << 8));
- PDQ_CSR_WRITE(csrs, csr_cmd_request_producer, ci->ci_request_producer | (ci->ci_request_completion << 8));
-}
-
-static void
-pdq_process_command_responses(
- pdq_t * const pdq)
-{
- const pdq_csrs_t * const csrs = &pdq->pdq_csrs;
- pdq_command_info_t * const ci = &pdq->pdq_command_info;
- volatile const pdq_consumer_block_t * const cbp = pdq->pdq_cbp;
- pdq_descriptor_block_t * const dbp = pdq->pdq_dbp;
- const pdq_response_generic_t *rspgen;
-
- /*
- * We have to process the command and response in tandem so
- * just wait for the response to be consumed. If it has been
- * consumed then the command must have been as well.
- */
-
- if (cbp->pdqcb_command_response == ci->ci_response_completion)
- return;
-
- PDQ_ASSERT(cbp->pdqcb_command_request != ci->ci_request_completion);
-
- rspgen = (const pdq_response_generic_t *) ci->ci_bufstart;
- PDQ_ASSERT(rspgen->generic_status == PDQR_SUCCESS);
- PDQ_PRINTF(("PDQ Process Command Response: %s completed (status=%d)\n",
- pdq_cmd_info[rspgen->generic_op].cmd_name,
- rspgen->generic_status));
-
- if (rspgen->generic_op == PDQC_STATUS_CHARS_GET && (pdq->pdq_flags & PDQ_PRINTCHARS)) {
- pdq->pdq_flags &= ~PDQ_PRINTCHARS;
- pdq_print_fddi_chars(pdq, (const pdq_response_status_chars_get_t *) rspgen);
- }
-
- PDQ_ADVANCE(ci->ci_request_completion, 1, PDQ_RING_MASK(dbp->pdqdb_command_requests));
- PDQ_ADVANCE(ci->ci_response_completion, 1, PDQ_RING_MASK(dbp->pdqdb_command_responses));
- ci->ci_command_active = 0;
-
- if (ci->ci_pending_commands != 0) {
- pdq_queue_commands(pdq);
- } else {
- PDQ_CSR_WRITE(csrs, csr_cmd_response_producer,
- ci->ci_response_producer | (ci->ci_response_completion << 8));
- PDQ_CSR_WRITE(csrs, csr_cmd_request_producer,
- ci->ci_request_producer | (ci->ci_request_completion << 8));
- }
-}
-
-/*
- * This following routine processes unsolicited events.
- * In addition, it also fills the unsolicited queue with
- * event buffers so it can be used to initialize the queue
- * as well.
- */
-static void
-pdq_process_unsolicited_events(
- pdq_t *pdq)
-{
- const pdq_csrs_t * const csrs = &pdq->pdq_csrs;
- pdq_unsolicited_info_t *ui = &pdq->pdq_unsolicited_info;
- volatile const pdq_consumer_block_t *cbp = pdq->pdq_cbp;
- pdq_descriptor_block_t *dbp = pdq->pdq_dbp;
- const pdq_unsolicited_event_t *event;
- pdq_rxdesc_t *rxd;
-
- /*
- * Process each unsolicited event (if any).
- */
-
- while (cbp->pdqcb_unsolicited_event != ui->ui_completion) {
- rxd = &dbp->pdqdb_unsolicited_events[ui->ui_completion];
- event = &ui->ui_events[ui->ui_completion & (PDQ_NUM_UNSOLICITED_EVENTS-1)];
-
- switch (event->event_type) {
- case PDQ_UNSOLICITED_EVENT: {
- printf(PDQ_OS_PREFIX "Unsolicited Event: %s: %s",
- PDQ_OS_PREFIX_ARGS,
- pdq_entities[event->event_entity],
- pdq_event_codes[event->event_entity][event->event_code.value]);
- if (event->event_entity == PDQ_ENTITY_PHY_PORT)
- printf("[%d]", event->event_index);
- printf("\n");
- break;
- }
- case PDQ_UNSOLICITED_COUNTERS: {
- break;
- }
- }
- PDQ_ADVANCE(ui->ui_completion, 1, PDQ_RING_MASK(dbp->pdqdb_unsolicited_events));
- ui->ui_free++;
- }
-
- /*
- * Now give back the event buffers back to the PDQ.
- */
- PDQ_ADVANCE(ui->ui_producer, ui->ui_free, PDQ_RING_MASK(dbp->pdqdb_unsolicited_events));
- ui->ui_free = 0;
-
- PDQ_CSR_WRITE(csrs, csr_unsolicited_producer,
- ui->ui_producer | (ui->ui_completion << 8));
-}
-
-static void
-pdq_process_received_data(
- pdq_t *pdq,
- pdq_rx_info_t *rx,
- pdq_rxdesc_t *receives,
- pdq_uint32_t completion_goal,
- pdq_uint32_t ring_mask)
-{
- pdq_uint32_t completion = rx->rx_completion;
- pdq_uint32_t producer = rx->rx_producer;
- PDQ_OS_DATABUF_T **buffers = (PDQ_OS_DATABUF_T **) rx->rx_buffers;
- pdq_rxdesc_t *rxd;
- pdq_uint32_t idx;
-
- while (completion != completion_goal) {
- PDQ_OS_DATABUF_T *fpdu, *lpdu, *npdu;
- pdq_uint8_t *dataptr;
- pdq_uint32_t fc, datalen, pdulen, segcnt;
- pdq_rxstatus_t status;
-
- fpdu = lpdu = buffers[completion];
- PDQ_ASSERT(fpdu != NULL);
-
- dataptr = PDQ_OS_DATABUF_PTR(fpdu);
- status = *(pdq_rxstatus_t *) dataptr;
- if ((status.rxs_status & 0x200000) == 0) {
- datalen = status.rxs_status & 0x1FFF;
- fc = dataptr[PDQ_RX_FC_OFFSET];
- switch (fc & (PDQ_FDDIFC_C|PDQ_FDDIFC_L|PDQ_FDDIFC_F)) {
- case PDQ_FDDI_LLC_ASYNC:
- case PDQ_FDDI_LLC_SYNC:
- case PDQ_FDDI_IMP_ASYNC:
- case PDQ_FDDI_IMP_SYNC: {
- if (datalen > PDQ_FDDI_MAX || datalen < PDQ_FDDI_LLC_MIN) {
- PDQ_PRINTF(("discard: bad length %d\n", datalen));
- goto discard_frame;
- }
- break;
- }
- case PDQ_FDDI_SMT: {
- if (datalen > PDQ_FDDI_MAX || datalen < PDQ_FDDI_SMT_MIN)
- goto discard_frame;
- break;
- }
- default: {
- PDQ_PRINTF(("discard: bad fc 0x%x\n", fc));
- goto discard_frame;
- }
- }
- /*
- * Update the lengths of the data buffers now that we know
- * the real length.
- */
- pdulen = datalen - 4 /* CRC */;
- segcnt = (pdulen + PDQ_RX_FC_OFFSET + PDQ_OS_DATABUF_SIZE - 1) / PDQ_OS_DATABUF_SIZE;
- PDQ_OS_DATABUF_ALLOC(npdu);
- if (npdu == NULL) {
- PDQ_PRINTF(("discard: no databuf #0\n"));
- goto discard_frame;
- }
- buffers[completion] = npdu;
- for (idx = 1; idx < segcnt; idx++) {
- PDQ_OS_DATABUF_ALLOC(npdu);
- if (npdu == NULL) {
- PDQ_OS_DATABUF_NEXT_SET(lpdu, NULL);
- PDQ_OS_DATABUF_FREE(fpdu);
- goto discard_frame;
- }
- PDQ_OS_DATABUF_NEXT_SET(lpdu, buffers[(completion + idx) & ring_mask]);
- lpdu = PDQ_OS_DATABUF_NEXT(lpdu);
- buffers[(completion + idx) & ring_mask] = npdu;
- }
- PDQ_OS_DATABUF_NEXT_SET(lpdu, NULL);
- for (idx = 0; idx < PDQ_RX_SEGCNT; idx++) {
- buffers[(producer + idx) & ring_mask] =
- buffers[(completion + idx) & ring_mask];
- buffers[(completion + idx) & ring_mask] = NULL;
- }
- PDQ_OS_DATABUF_ADJ(fpdu, PDQ_RX_FC_OFFSET);
- if (segcnt == 1) {
- PDQ_OS_DATABUF_LEN_SET(fpdu, pdulen);
- } else {
- PDQ_OS_DATABUF_LEN_SET(lpdu, pdulen + PDQ_RX_FC_OFFSET - (segcnt - 1) * PDQ_OS_DATABUF_SIZE);
- }
- pdq_os_receive_pdu(pdq, fpdu, pdulen);
- rx->rx_free += PDQ_RX_SEGCNT;
- PDQ_ADVANCE(producer, PDQ_RX_SEGCNT, ring_mask);
- PDQ_ADVANCE(completion, PDQ_RX_SEGCNT, ring_mask);
- continue;
- } else {
- PDQ_PRINTF(("discard: bad pdu 0x%x(%d.%d.%d.%d.%d)\n", status.rxs_status,
- status.rxs_rcc_badpdu, status.rxs_rcc_badcrc,
- status.rxs_rcc_reason, status.rxs_fsc, status.rxs_fsb_e));
- if (status.rxs_rcc_reason == 7)
- goto discard_frame;
- if (status.rxs_rcc_reason != 0) {
- /* hardware fault */
- }
- if (status.rxs_rcc_badcrc) {
- printf(PDQ_OS_PREFIX " MAC CRC error (source=%x-%x-%x-%x-%x-%x)\n",
- PDQ_OS_PREFIX_ARGS,
- dataptr[PDQ_RX_FC_OFFSET+1],
- dataptr[PDQ_RX_FC_OFFSET+2],
- dataptr[PDQ_RX_FC_OFFSET+3],
- dataptr[PDQ_RX_FC_OFFSET+4],
- dataptr[PDQ_RX_FC_OFFSET+5],
- dataptr[PDQ_RX_FC_OFFSET+6]);
- /* rx->rx_badcrc++; */
- } else if (status.rxs_fsc == 0 || status.rxs_fsb_e == 1) {
- /* rx->rx_frame_status_errors++; */
- } else {
- /* hardware fault */
- }
- }
- discard_frame:
- /*
- * Discarded frames go right back on the queue; therefore
- * ring entries were freed.
- */
- for (idx = 0; idx < PDQ_RX_SEGCNT; idx++) {
- buffers[producer] = buffers[completion];
- buffers[completion] = NULL;
- rxd = &receives[rx->rx_producer];
- if (idx == 0) {
- rxd->rxd_sop = 1; rxd->rxd_seg_cnt = PDQ_RX_SEGCNT - 1;
- } else {
- rxd->rxd_sop = 0; rxd->rxd_seg_cnt = 0;
- }
- rxd->rxd_pa_hi = 0;
- rxd->rxd_seg_len_hi = PDQ_OS_DATABUF_SIZE / 16;
- rxd->rxd_pa_lo = PDQ_OS_VA_TO_PA(pdq, PDQ_OS_DATABUF_PTR(buffers[rx->rx_producer]));
- PDQ_ADVANCE(rx->rx_producer, 1, ring_mask);
- PDQ_ADVANCE(producer, 1, ring_mask);
- PDQ_ADVANCE(completion, 1, ring_mask);
- }
- }
- rx->rx_completion = completion;
-
- while (rx->rx_free > PDQ_RX_SEGCNT && rx->rx_free > rx->rx_target) {
- PDQ_OS_DATABUF_T *pdu;
- /*
- * Allocate the needed number of data buffers.
- * Try to obtain them from our free queue before
- * asking the system for more.
- */
- for (idx = 0; idx < PDQ_RX_SEGCNT; idx++) {
- if ((pdu = buffers[(rx->rx_producer + idx) & ring_mask]) == NULL) {
- PDQ_OS_DATABUF_ALLOC(pdu);
- if (pdu == NULL)
- break;
- buffers[(rx->rx_producer + idx) & ring_mask] = pdu;
- }
- rxd = &receives[(rx->rx_producer + idx) & ring_mask];
- if (idx == 0) {
- rxd->rxd_sop = 1; rxd->rxd_seg_cnt = PDQ_RX_SEGCNT - 1;
- } else {
- rxd->rxd_sop = 0; rxd->rxd_seg_cnt = 0;
- }
- rxd->rxd_pa_hi = 0;
- rxd->rxd_seg_len_hi = PDQ_OS_DATABUF_SIZE / 16;
- rxd->rxd_pa_lo = PDQ_OS_VA_TO_PA(pdq, PDQ_OS_DATABUF_PTR(pdu));
- }
- if (idx < PDQ_RX_SEGCNT) {
- /*
- * We didn't get all databufs required to complete a new
- * receive buffer. Keep the ones we got and retry a bit
- * later for the rest.
- */
- break;
- }
- PDQ_ADVANCE(rx->rx_producer, PDQ_RX_SEGCNT, ring_mask);
- rx->rx_free -= PDQ_RX_SEGCNT;
- }
-}
-
-pdq_boolean_t
-pdq_queue_transmit_data(
- pdq_t *pdq,
- PDQ_OS_DATABUF_T *pdu)
-{
- pdq_tx_info_t *tx = &pdq->pdq_tx_info;
- pdq_descriptor_block_t *dbp = pdq->pdq_dbp;
- pdq_uint32_t producer = tx->tx_producer;
- pdq_txdesc_t *eop = NULL;
- PDQ_OS_DATABUF_T *pdu0;
- pdq_uint32_t freecnt;
-
- if (tx->tx_free < 1)
- return PDQ_FALSE;
-
- dbp->pdqdb_transmits[producer] = tx->tx_hdrdesc;
- PDQ_ADVANCE(producer, 1, PDQ_RING_MASK(dbp->pdqdb_transmits));
-
- for (freecnt = tx->tx_free - 1, pdu0 = pdu; pdu0 != NULL && freecnt > 0;) {
- pdq_uint32_t fraglen, datalen = PDQ_OS_DATABUF_LEN(pdu0);
- const pdq_uint8_t *dataptr = PDQ_OS_DATABUF_PTR(pdu0);
-
- /*
- * The first segment is limited to the space remaining in
- * page. All segments after that can be up to a full page
- * in size.
- */
- fraglen = PDQ_OS_PAGESIZE - ((dataptr - (pdq_uint8_t *) NULL) & (PDQ_OS_PAGESIZE-1));
- while (datalen > 0 && freecnt > 0) {
- pdq_uint32_t seglen = (fraglen < datalen ? fraglen : datalen);
-
- /*
- * Initialize the transmit descriptor
- */
- eop = &dbp->pdqdb_transmits[producer];
- eop->txd_seg_len = seglen;
- eop->txd_pa_lo = PDQ_OS_VA_TO_PA(pdq, dataptr);
- eop->txd_sop = eop->txd_eop = eop->txd_pa_hi = 0;
-
- datalen -= seglen;
- dataptr += seglen;
- fraglen = PDQ_OS_PAGESIZE;
- freecnt--;
- PDQ_ADVANCE(producer, 1, PDQ_RING_MASK(dbp->pdqdb_transmits));
- }
- pdu0 = PDQ_OS_DATABUF_NEXT(pdu0);
- }
- if (pdu0 != NULL) {
- PDQ_ASSERT(freecnt == 0);
- /*
- * If we still have data to process then the ring was too full
- * to store the PDU. Return FALSE so the caller will requeue
- * the PDU for later.
- */
- return PDQ_FALSE;
- }
- /*
- * Everything went fine. Finish it up.
- */
- tx->tx_descriptor_count[tx->tx_producer] = tx->tx_free - freecnt;
- eop->txd_eop = 1;
- PDQ_OS_DATABUF_ENQUEUE(&tx->tx_txq, pdu);
- tx->tx_producer = producer;
- tx->tx_free = freecnt;
- PDQ_DO_TYPE2_PRODUCER(pdq);
- return PDQ_TRUE;
-}
-
-static void
-pdq_process_transmitted_data(
- pdq_t *pdq)
-{
- pdq_tx_info_t *tx = &pdq->pdq_tx_info;
- volatile const pdq_consumer_block_t *cbp = pdq->pdq_cbp;
- pdq_descriptor_block_t *dbp = pdq->pdq_dbp;
- pdq_uint32_t completion = tx->tx_completion;
-
- while (completion != cbp->pdqcb_transmits) {
- PDQ_OS_DATABUF_T *pdu;
- pdq_uint32_t descriptor_count = tx->tx_descriptor_count[completion];
- PDQ_ASSERT(dbp->pdqdb_transmits[completion].txd_sop == 1);
- PDQ_ASSERT(dbp->pdqdb_transmits[(completion + descriptor_count - 1) & PDQ_RING_MASK(dbp->pdqdb_transmits)].txd_eop == 1);
- PDQ_OS_DATABUF_DEQUEUE(&tx->tx_txq, pdu);
- pdq_os_transmit_done(pdq, pdu);
- tx->tx_free += descriptor_count;
-
- PDQ_ADVANCE(completion, descriptor_count, PDQ_RING_MASK(dbp->pdqdb_transmits));
- }
- if (tx->tx_completion != completion) {
- tx->tx_completion = completion;
- pdq_os_restart_transmitter(pdq);
- }
- PDQ_DO_TYPE2_PRODUCER(pdq);
-}
-
-void
-pdq_flush_transmitter(
- pdq_t *pdq)
-{
- volatile pdq_consumer_block_t *cbp = pdq->pdq_cbp;
- pdq_tx_info_t *tx = &pdq->pdq_tx_info;
-
- for (;;) {
- PDQ_OS_DATABUF_T *pdu;
- PDQ_OS_DATABUF_DEQUEUE(&tx->tx_txq, pdu);
- if (pdu == NULL)
- break;
- /*
- * Don't call transmit done since the packet never made it
- * out on the wire.
- */
- PDQ_OS_DATABUF_FREE(pdu);
- }
-
- tx->tx_free = PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_transmits);
- tx->tx_completion = cbp->pdqcb_transmits = tx->tx_producer;
-
- PDQ_DO_TYPE2_PRODUCER(pdq);
-}
-
-void
-pdq_hwreset(
- pdq_t *pdq)
-{
- const pdq_csrs_t * const csrs = &pdq->pdq_csrs;
- pdq_state_t state;
- int cnt;
-
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- if (state == PDQS_DMA_UNAVAILABLE)
- return;
- PDQ_CSR_WRITE(csrs, csr_port_data_a,
- (state == PDQS_HALTED) ? 0 : PDQ_PRESET_SKIP_SELFTEST);
- PDQ_CSR_WRITE(csrs, csr_port_reset, 1);
- PDQ_OS_USEC_DELAY(100);
- PDQ_CSR_WRITE(csrs, csr_port_reset, 0);
- for (cnt = 45000;;cnt--) {
- PDQ_OS_USEC_DELAY(1000);
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- if (state == PDQS_DMA_UNAVAILABLE || cnt == 0)
- break;
- }
- PDQ_PRINTF(("PDQ Reset spun %d cycles\n", 45000 - cnt));
- PDQ_OS_USEC_DELAY(10000);
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- PDQ_ASSERT(state == PDQS_DMA_UNAVAILABLE);
- PDQ_ASSERT(cnt > 0);
-}
-
-/*
- * The following routine brings the PDQ from whatever state it is
- * in to DMA_UNAVAILABLE (ie. like a RESET but without doing a RESET).
- */
-pdq_state_t
-pdq_stop(
- pdq_t *pdq)
-{
- pdq_state_t state;
- const pdq_csrs_t * const csrs = &pdq->pdq_csrs;
- int cnt, pass = 0, idx;
- PDQ_OS_DATABUF_T **buffers;
-
- restart:
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- if (state != PDQS_DMA_UNAVAILABLE) {
- pdq_hwreset(pdq);
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- PDQ_ASSERT(state == PDQS_DMA_UNAVAILABLE);
- }
-#if 0
- switch (state) {
- case PDQS_RING_MEMBER:
- case PDQS_LINK_UNAVAILABLE:
- case PDQS_LINK_AVAILABLE: {
- PDQ_CSR_WRITE(csrs, csr_port_data_a, PDQ_SUB_CMD_LINK_UNINIT);
- PDQ_CSR_WRITE(csrs, csr_port_data_b, 0);
- pdq_do_port_control(csrs, PDQ_PCTL_SUB_CMD);
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- PDQ_ASSERT(state == PDQS_DMA_AVAILABLE);
- /* FALLTHROUGH */
- }
- case PDQS_DMA_AVAILABLE: {
- PDQ_CSR_WRITE(csrs, csr_port_data_a, 0);
- PDQ_CSR_WRITE(csrs, csr_port_data_b, 0);
- pdq_do_port_control(csrs, PDQ_PCTL_DMA_UNINIT);
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- PDQ_ASSERT(state == PDQS_DMA_UNAVAILABLE);
- /* FALLTHROUGH */
- }
- case PDQS_DMA_UNAVAILABLE: {
- break;
- }
- }
-#endif
- /*
- * Now we should be in DMA_UNAVAILABLE. So bring the PDQ into
- * DMA_AVAILABLE.
- */
-
- /*
- * Obtain the hardware address and firmware revisions
- * (MLA = my long address which is FDDI speak for hardware address)
- */
- pdq_read_mla(&pdq->pdq_csrs, &pdq->pdq_hwaddr);
- pdq_read_fwrev(&pdq->pdq_csrs, &pdq->pdq_fwrev);
- pdq->pdq_chip_rev = pdq_read_chiprev(&pdq->pdq_csrs);
-
- if (pdq->pdq_type == PDQ_DEFPA) {
- /*
- * Disable interrupts and DMA.
- */
- PDQ_CSR_WRITE(&pdq->pdq_pci_csrs, csr_pfi_mode_control, 0);
- PDQ_CSR_WRITE(&pdq->pdq_pci_csrs, csr_pfi_status, 0x10);
- }
-
- /*
- * Flush all the databuf queues.
- */
- pdq_flush_databuf_queue(&pdq->pdq_tx_info.tx_txq);
- pdq->pdq_flags &= ~PDQ_TXOK;
- buffers = (PDQ_OS_DATABUF_T **) pdq->pdq_rx_info.rx_buffers;
- for (idx = 0; idx < PDQ_RING_SIZE(pdq->pdq_dbp->pdqdb_receives); idx++) {
- if (buffers[idx] != NULL) {
- PDQ_OS_DATABUF_FREE(buffers[idx]);
- buffers[idx] = NULL;
- }
- }
- pdq->pdq_rx_info.rx_free = PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_receives);
- buffers = (PDQ_OS_DATABUF_T **) pdq->pdq_host_smt_info.rx_buffers;
- for (idx = 0; idx < PDQ_RING_SIZE(pdq->pdq_dbp->pdqdb_host_smt); idx++) {
- if (buffers[idx] != NULL) {
- PDQ_OS_DATABUF_FREE(buffers[idx]);
- buffers[idx] = NULL;
- }
- }
- pdq->pdq_host_smt_info.rx_free = PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_host_smt);
-
- /*
- * Reset the consumer indexes to 0.
- */
- pdq->pdq_cbp->pdqcb_receives = 0;
- pdq->pdq_cbp->pdqcb_transmits = 0;
- pdq->pdq_cbp->pdqcb_host_smt = 0;
- pdq->pdq_cbp->pdqcb_unsolicited_event = 0;
- pdq->pdq_cbp->pdqcb_command_response = 0;
- pdq->pdq_cbp->pdqcb_command_request = 0;
-
- /*
- * Reset the producer and completion indexes to 0.
- */
- pdq->pdq_command_info.ci_request_producer = 0;
- pdq->pdq_command_info.ci_response_producer = 0;
- pdq->pdq_command_info.ci_request_completion = 0;
- pdq->pdq_command_info.ci_response_completion = 0;
- pdq->pdq_unsolicited_info.ui_producer = 0;
- pdq->pdq_unsolicited_info.ui_completion = 0;
- pdq->pdq_rx_info.rx_producer = 0;
- pdq->pdq_rx_info.rx_completion = 0;
- pdq->pdq_tx_info.tx_producer = 0;
- pdq->pdq_tx_info.tx_completion = 0;
- pdq->pdq_host_smt_info.rx_producer = 0;
- pdq->pdq_host_smt_info.rx_completion = 0;
-
- pdq->pdq_command_info.ci_command_active = 0;
- pdq->pdq_unsolicited_info.ui_free = PDQ_NUM_UNSOLICITED_EVENTS;
- pdq->pdq_tx_info.tx_free = PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_transmits);
-
- /*
- * Allow the DEFPA to do DMA. Then program the physical
- * addresses of the consumer and descriptor blocks.
- */
- if (pdq->pdq_type == PDQ_DEFPA) {
-#ifdef PDQTEST
- PDQ_CSR_WRITE(&pdq->pdq_pci_csrs, csr_pfi_mode_control,
- PDQ_PFI_MODE_DMA_ENABLE);
-#else
- PDQ_CSR_WRITE(&pdq->pdq_pci_csrs, csr_pfi_mode_control,
- PDQ_PFI_MODE_DMA_ENABLE
- /*|PDQ_PFI_MODE_PFI_PCI_INTR*/|PDQ_PFI_MODE_PDQ_PCI_INTR);
-#endif
- }
-
- /*
- * Make sure the unsolicited queue has events ...
- */
- pdq_process_unsolicited_events(pdq);
-
- if (pdq->pdq_type == PDQ_DEFEA && pdq->pdq_chip_rev == PDQ_CHIP_REV_E)
- PDQ_CSR_WRITE(csrs, csr_port_data_b, PDQ_DMA_BURST_16LW);
- else
- PDQ_CSR_WRITE(csrs, csr_port_data_b, PDQ_DMA_BURST_8LW);
- PDQ_CSR_WRITE(csrs, csr_port_data_a, PDQ_SUB_CMD_DMA_BURST_SIZE_SET);
- pdq_do_port_control(csrs, PDQ_PCTL_SUB_CMD);
-
- PDQ_CSR_WRITE(csrs, csr_port_data_b, 0);
- PDQ_CSR_WRITE(csrs, csr_port_data_a, PDQ_OS_VA_TO_PA(pdq, pdq->pdq_cbp));
- pdq_do_port_control(csrs, PDQ_PCTL_CONSUMER_BLOCK);
-
- PDQ_CSR_WRITE(csrs, csr_port_data_b, 0);
- PDQ_CSR_WRITE(csrs, csr_port_data_a,
- PDQ_OS_VA_TO_PA(pdq, pdq->pdq_dbp) | PDQ_DMA_INIT_LW_BSWAP_DATA);
- pdq_do_port_control(csrs, PDQ_PCTL_DMA_INIT);
-
- for (cnt = 0; cnt < 1000; cnt++) {
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- if (state == PDQS_HALTED) {
- if (pass > 0)
- return PDQS_HALTED;
- pass = 1;
- goto restart;
- }
- if (state == PDQS_DMA_AVAILABLE) {
- PDQ_PRINTF(("Transition to DMA Available took %d spins\n", cnt));
- break;
- }
- PDQ_OS_USEC_DELAY(1000);
- }
- PDQ_ASSERT(state == PDQS_DMA_AVAILABLE);
-
- PDQ_CSR_WRITE(csrs, csr_host_int_type_0, 0xFF);
- PDQ_CSR_WRITE(csrs, csr_host_int_enable, 0) /* PDQ_HOST_INT_STATE_CHANGE
- |PDQ_HOST_INT_FATAL_ERROR|PDQ_HOST_INT_CMD_RSP_ENABLE
- |PDQ_HOST_INT_UNSOL_ENABLE */;
-
- /*
- * Any other command but START should be valid.
- */
- pdq->pdq_command_info.ci_pending_commands &= ~(PDQ_BITMASK(PDQC_START));
- if (pdq->pdq_flags & PDQ_PRINTCHARS)
- pdq->pdq_command_info.ci_pending_commands |= PDQ_BITMASK(PDQC_STATUS_CHARS_GET);
- pdq_queue_commands(pdq);
-
- if (pdq->pdq_flags & PDQ_PRINTCHARS) {
- /*
- * Now wait (up to 100ms) for the command(s) to finish.
- */
- for (cnt = 0; cnt < 1000; cnt++) {
- pdq_process_command_responses(pdq);
- if (pdq->pdq_command_info.ci_response_producer == pdq->pdq_command_info.ci_response_completion)
- break;
- PDQ_OS_USEC_DELAY(1000);
- }
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- }
-
- return state;
-}
-
-void
-pdq_run(
- pdq_t *pdq)
-{
- const pdq_csrs_t * const csrs = &pdq->pdq_csrs;
- pdq_state_t state;
-
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- PDQ_ASSERT(state != PDQS_DMA_UNAVAILABLE);
- PDQ_ASSERT(state != PDQS_RESET);
- PDQ_ASSERT(state != PDQS_HALTED);
- PDQ_ASSERT(state != PDQS_UPGRADE);
- PDQ_ASSERT(state != PDQS_RING_MEMBER);
- switch (state) {
- case PDQS_DMA_AVAILABLE: {
- /*
- * The PDQ after being reset screws up some of its state.
- * So we need to clear all the errors/interrupts so the real
- * ones will get through.
- */
- PDQ_CSR_WRITE(csrs, csr_host_int_type_0, 0xFF);
- PDQ_CSR_WRITE(csrs, csr_host_int_enable, PDQ_HOST_INT_STATE_CHANGE|PDQ_HOST_INT_XMT_DATA_FLUSH
- |PDQ_HOST_INT_FATAL_ERROR|PDQ_HOST_INT_CMD_RSP_ENABLE|PDQ_HOST_INT_UNSOL_ENABLE
- |PDQ_HOST_INT_RX_ENABLE|PDQ_HOST_INT_TX_ENABLE|PDQ_HOST_INT_HOST_SMT_ENABLE);
- /*
- * Set the MAC and address filters and start up the PDQ.
- */
- pdq_process_unsolicited_events(pdq);
- pdq_process_received_data(pdq, &pdq->pdq_rx_info,
- pdq->pdq_dbp->pdqdb_receives,
- pdq->pdq_cbp->pdqcb_receives,
- PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_receives));
- PDQ_DO_TYPE2_PRODUCER(pdq);
- if (pdq->pdq_flags & PDQ_PASS_SMT) {
- pdq_process_received_data(pdq, &pdq->pdq_host_smt_info,
- pdq->pdq_dbp->pdqdb_host_smt,
- pdq->pdq_cbp->pdqcb_host_smt,
- PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_host_smt));
- PDQ_CSR_WRITE(csrs, csr_host_smt_producer,
- pdq->pdq_host_smt_info.rx_producer
- | (pdq->pdq_host_smt_info.rx_completion << 8));
- }
- pdq->pdq_command_info.ci_pending_commands = PDQ_BITMASK(PDQC_FILTER_SET)
- | PDQ_BITMASK(PDQC_ADDR_FILTER_SET) | PDQ_BITMASK(PDQC_START);
- if (pdq->pdq_flags & PDQ_PRINTCHARS)
- pdq->pdq_command_info.ci_pending_commands |= PDQ_BITMASK(PDQC_STATUS_CHARS_GET);
- pdq_queue_commands(pdq);
- break;
- }
- case PDQS_LINK_UNAVAILABLE:
- case PDQS_LINK_AVAILABLE: {
- pdq->pdq_command_info.ci_pending_commands = PDQ_BITMASK(PDQC_FILTER_SET)
- | PDQ_BITMASK(PDQC_ADDR_FILTER_SET);
- if (pdq->pdq_flags & PDQ_PRINTCHARS)
- pdq->pdq_command_info.ci_pending_commands |= PDQ_BITMASK(PDQC_STATUS_CHARS_GET);
- if (pdq->pdq_flags & PDQ_PASS_SMT) {
- pdq_process_received_data(pdq, &pdq->pdq_host_smt_info,
- pdq->pdq_dbp->pdqdb_host_smt,
- pdq->pdq_cbp->pdqcb_host_smt,
- PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_host_smt));
- PDQ_CSR_WRITE(csrs, csr_host_smt_producer,
- pdq->pdq_host_smt_info.rx_producer
- | (pdq->pdq_host_smt_info.rx_completion << 8));
- }
- pdq_process_unsolicited_events(pdq);
- pdq_queue_commands(pdq);
- break;
- }
- case PDQS_RING_MEMBER: {
- }
- default:
- break;
- }
-}
-
-int
-pdq_interrupt(
- pdq_t *pdq)
-{
- const pdq_csrs_t * const csrs = &pdq->pdq_csrs;
- pdq_uint32_t data;
- int progress = 0;
-
- if (pdq->pdq_type == PDQ_DEFPA)
- PDQ_CSR_WRITE(&pdq->pdq_pci_csrs, csr_pfi_status, 0x18);
-
- while ((data = PDQ_CSR_READ(csrs, csr_port_status)) & PDQ_PSTS_INTR_PENDING) {
- progress = 1;
- PDQ_PRINTF(("PDQ Interrupt: Status = 0x%08x\n", data));
- if (data & PDQ_PSTS_RCV_DATA_PENDING) {
- pdq_process_received_data(pdq, &pdq->pdq_rx_info,
- pdq->pdq_dbp->pdqdb_receives,
- pdq->pdq_cbp->pdqcb_receives,
- PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_receives));
- PDQ_DO_TYPE2_PRODUCER(pdq);
- }
- if (data & PDQ_PSTS_HOST_SMT_PENDING) {
- pdq_process_received_data(pdq, &pdq->pdq_host_smt_info,
- pdq->pdq_dbp->pdqdb_host_smt,
- pdq->pdq_cbp->pdqcb_host_smt,
- PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_host_smt));
- PDQ_DO_HOST_SMT_PRODUCER(pdq);
- }
- if (data & PDQ_PSTS_XMT_DATA_PENDING)
- pdq_process_transmitted_data(pdq);
- if (data & PDQ_PSTS_UNSOL_PENDING)
- pdq_process_unsolicited_events(pdq);
- if (data & PDQ_PSTS_CMD_RSP_PENDING)
- pdq_process_command_responses(pdq);
- if (data & PDQ_PSTS_TYPE_0_PENDING) {
- data = PDQ_CSR_READ(csrs, csr_host_int_type_0);
- if (data & PDQ_HOST_INT_STATE_CHANGE) {
- pdq_state_t state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(csrs, csr_port_status));
- printf(PDQ_OS_PREFIX "%s", PDQ_OS_PREFIX_ARGS, pdq_adapter_states[state]);
- if (state == PDQS_LINK_UNAVAILABLE) {
- pdq->pdq_flags &= ~PDQ_TXOK;
- } else if (state == PDQS_LINK_AVAILABLE) {
- pdq->pdq_flags |= PDQ_TXOK;
- pdq_os_restart_transmitter(pdq);
- } else if (state == PDQS_HALTED) {
- pdq_response_error_log_get_t log_entry;
- pdq_halt_code_t halt_code = PDQ_PSTS_HALT_ID(PDQ_CSR_READ(csrs, csr_port_status));
- printf(": halt code = %d (%s)\n",
- halt_code, pdq_halt_codes[halt_code]);
- if (halt_code == PDQH_DMA_ERROR && pdq->pdq_type == PDQ_DEFPA) {
- PDQ_PRINTF(("\tPFI status = 0x%x, Host 0 Fatal Interrupt = 0x%x\n",
- PDQ_CSR_READ(&pdq->pdq_pci_csrs, csr_pfi_status),
- data & PDQ_HOST_INT_FATAL_ERROR));
- }
- pdq_read_error_log(pdq, &log_entry);
- pdq_stop(pdq);
- if (pdq->pdq_flags & PDQ_RUNNING)
- pdq_run(pdq);
- return 1;
- }
- printf("\n");
- PDQ_CSR_WRITE(csrs, csr_host_int_type_0, PDQ_HOST_INT_STATE_CHANGE);
- }
- if (data & PDQ_HOST_INT_FATAL_ERROR) {
- pdq_stop(pdq);
- if (pdq->pdq_flags & PDQ_RUNNING)
- pdq_run(pdq);
- return 1;
- }
- if (data & PDQ_HOST_INT_XMT_DATA_FLUSH) {
- printf(PDQ_OS_PREFIX "Flushing transmit queue\n", PDQ_OS_PREFIX_ARGS);
- pdq->pdq_flags &= ~PDQ_TXOK;
- pdq_flush_transmitter(pdq);
- pdq_do_port_control(csrs, PDQ_PCTL_XMT_DATA_FLUSH_DONE);
- PDQ_CSR_WRITE(csrs, csr_host_int_type_0, PDQ_HOST_INT_XMT_DATA_FLUSH);
- }
- }
- if (pdq->pdq_type == PDQ_DEFPA)
- PDQ_CSR_WRITE(&pdq->pdq_pci_csrs, csr_pfi_status, 0x18);
- }
- return progress;
-}
-
-pdq_t *
-pdq_initialize(
- pdq_bus_t bus,
- pdq_bus_memaddr_t csr_base,
- const char *name,
- int unit,
- void *ctx,
- pdq_type_t type)
-{
- pdq_t *pdq;
- pdq_state_t state;
- const pdq_uint32_t contig_bytes = (sizeof(pdq_descriptor_block_t) * 2) - PDQ_OS_PAGESIZE;
- pdq_uint8_t *p;
- int idx;
-
- PDQ_ASSERT(sizeof(pdq_descriptor_block_t) == 8192);
- PDQ_ASSERT(sizeof(pdq_consumer_block_t) == 64);
- PDQ_ASSERT(sizeof(pdq_response_filter_get_t) == PDQ_SIZE_RESPONSE_FILTER_GET);
- PDQ_ASSERT(sizeof(pdq_cmd_addr_filter_set_t) == PDQ_SIZE_CMD_ADDR_FILTER_SET);
- PDQ_ASSERT(sizeof(pdq_response_addr_filter_get_t) == PDQ_SIZE_RESPONSE_ADDR_FILTER_GET);
- PDQ_ASSERT(sizeof(pdq_response_status_chars_get_t) == PDQ_SIZE_RESPONSE_STATUS_CHARS_GET);
- PDQ_ASSERT(sizeof(pdq_response_fddi_mib_get_t) == PDQ_SIZE_RESPONSE_FDDI_MIB_GET);
- PDQ_ASSERT(sizeof(pdq_response_dec_ext_mib_get_t) == PDQ_SIZE_RESPONSE_DEC_EXT_MIB_GET);
- PDQ_ASSERT(sizeof(pdq_unsolicited_event_t) == 512);
-
- pdq = (pdq_t *) PDQ_OS_MEMALLOC(sizeof(pdq_t));
- if (pdq == NULL) {
- PDQ_PRINTF(("malloc(%d) failed\n", sizeof(*pdq)));
- return NULL;
- }
- PDQ_OS_MEMZERO(pdq, sizeof(pdq_t));
- pdq->pdq_type = type;
- pdq->pdq_unit = unit;
- pdq->pdq_os_ctx = (void *) ctx;
- pdq->pdq_os_name = name;
- pdq->pdq_flags = PDQ_PRINTCHARS;
- /*
- * Allocate the additional data structures required by
- * the PDQ driver. Allocate a contiguous region of memory
- * for the descriptor block. We need to allocated enough
- * to guarantee that we will a get 8KB block of memory aligned
- * on a 8KB boundary. This turns to require that we allocate
- * (N*2 - 1 page) pages of memory. On machine with less than
- * a 8KB page size, it mean we will allocate more memory than
- * we need. The extra will be used for the unsolicited event
- * buffers (though on machines with 8KB pages we will to allocate
- * them separately since there will be nothing left overs.)
- */
- p = (pdq_uint8_t *) PDQ_OS_MEMALLOC_CONTIG(contig_bytes);
- if (p != NULL) {
- pdq_physaddr_t physaddr = PDQ_OS_VA_TO_PA(pdq, p);
- /*
- * Assert that we really got contiguous memory. This isn't really
- * needed on systems that actually have physical contiguous allocation
- * routines, but on those systems that don't ...
- */
- for (idx = PDQ_OS_PAGESIZE; idx < 0x2000; idx += PDQ_OS_PAGESIZE) {
- if (PDQ_OS_VA_TO_PA(pdq, p + idx) - physaddr != idx)
- goto cleanup_and_return;
- }
- physaddr &= 0x1FFF;
- if (physaddr) {
- pdq->pdq_unsolicited_info.ui_events = (pdq_unsolicited_event_t *) p;
- pdq->pdq_dbp = (pdq_descriptor_block_t *) &p[0x2000 - physaddr];
- } else {
- pdq->pdq_dbp = (pdq_descriptor_block_t *) p;
- pdq->pdq_unsolicited_info.ui_events = (pdq_unsolicited_event_t *) &p[0x2000];
- }
- }
- if (contig_bytes == sizeof(pdq_descriptor_block_t)) {
- pdq->pdq_unsolicited_info.ui_events =
- (pdq_unsolicited_event_t *) PDQ_OS_MEMALLOC(
- PDQ_NUM_UNSOLICITED_EVENTS * sizeof(pdq_unsolicited_event_t));
- }
-
- /*
- * Make sure everything got allocated. If not, free what did
- * get allocated and return.
- */
- if (pdq->pdq_dbp == NULL || pdq->pdq_unsolicited_info.ui_events == NULL) {
- cleanup_and_return:
- if (p /* pdq->pdq_dbp */ != NULL)
- PDQ_OS_MEMFREE_CONTIG(p /* pdq->pdq_dbp */, contig_bytes);
- if (contig_bytes == sizeof(pdq_descriptor_block_t) && pdq->pdq_unsolicited_info.ui_events != NULL)
- PDQ_OS_MEMFREE(pdq->pdq_unsolicited_info.ui_events,
- PDQ_NUM_UNSOLICITED_EVENTS * sizeof(pdq_unsolicited_event_t));
- PDQ_OS_MEMFREE(pdq, sizeof(pdq_t));
- return NULL;
- }
-
- pdq->pdq_cbp = (volatile pdq_consumer_block_t *) &pdq->pdq_dbp->pdqdb_consumer;
- pdq->pdq_command_info.ci_bufstart = (pdq_uint8_t *) pdq->pdq_dbp->pdqdb_command_pool;
- pdq->pdq_rx_info.rx_buffers = (void *) pdq->pdq_dbp->pdqdb_receive_buffers;
-
- pdq->pdq_host_smt_info.rx_buffers = (void *) pdq->pdq_dbp->pdqdb_host_smt_buffers;
-
- PDQ_PRINTF(("\nPDQ Descriptor Block = " PDQ_OS_PTR_FMT "\n", pdq->pdq_dbp));
- PDQ_PRINTF((" Receive Queue = " PDQ_OS_PTR_FMT "\n", pdq->pdq_dbp->pdqdb_receives));
- PDQ_PRINTF((" Transmit Queue = " PDQ_OS_PTR_FMT "\n", pdq->pdq_dbp->pdqdb_transmits));
- PDQ_PRINTF((" Host SMT Queue = " PDQ_OS_PTR_FMT "\n", pdq->pdq_dbp->pdqdb_host_smt));
- PDQ_PRINTF((" Command Response Queue = " PDQ_OS_PTR_FMT "\n", pdq->pdq_dbp->pdqdb_command_responses));
- PDQ_PRINTF((" Command Request Queue = " PDQ_OS_PTR_FMT "\n", pdq->pdq_dbp->pdqdb_command_requests));
- PDQ_PRINTF(("PDQ Consumer Block = " PDQ_OS_PTR_FMT "\n", pdq->pdq_cbp));
-
- /*
- * Zero out the descriptor block. Not really required but
- * it pays to be neat. This will also zero out the consumer
- * block, command pool, and buffer pointers for the receive
- * host_smt rings.
- */
- PDQ_OS_MEMZERO(pdq->pdq_dbp, sizeof(*pdq->pdq_dbp));
-
- /*
- * Initialize the CSR references.
- * the DEFAA (FutureBus+) skips a longword between registers
- */
- pdq_init_csrs(&pdq->pdq_csrs, bus, csr_base, pdq->pdq_type == PDQ_DEFAA ? 2 : 1);
- if (pdq->pdq_type == PDQ_DEFPA)
- pdq_init_pci_csrs(&pdq->pdq_pci_csrs, bus, csr_base, 1);
-
- PDQ_PRINTF(("PDQ CSRs: BASE = " PDQ_OS_PTR_FMT "\n", pdq->pdq_csrs.csr_base));
- PDQ_PRINTF((" Port Reset = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_port_reset, PDQ_CSR_READ(&pdq->pdq_csrs, csr_port_reset)));
- PDQ_PRINTF((" Host Data = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_host_data, PDQ_CSR_READ(&pdq->pdq_csrs, csr_host_data)));
- PDQ_PRINTF((" Port Control = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_port_control, PDQ_CSR_READ(&pdq->pdq_csrs, csr_port_control)));
- PDQ_PRINTF((" Port Data A = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_port_data_a, PDQ_CSR_READ(&pdq->pdq_csrs, csr_port_data_a)));
- PDQ_PRINTF((" Port Data B = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_port_data_b, PDQ_CSR_READ(&pdq->pdq_csrs, csr_port_data_b)));
- PDQ_PRINTF((" Port Status = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_port_status, PDQ_CSR_READ(&pdq->pdq_csrs, csr_port_status)));
- PDQ_PRINTF((" Host Int Type 0 = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_host_int_type_0, PDQ_CSR_READ(&pdq->pdq_csrs, csr_host_int_type_0)));
- PDQ_PRINTF((" Host Int Enable = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_host_int_enable, PDQ_CSR_READ(&pdq->pdq_csrs, csr_host_int_enable)));
- PDQ_PRINTF((" Type 2 Producer = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_type_2_producer, PDQ_CSR_READ(&pdq->pdq_csrs, csr_type_2_producer)));
- PDQ_PRINTF((" Command Response Producer = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_cmd_response_producer, PDQ_CSR_READ(&pdq->pdq_csrs, csr_cmd_response_producer)));
- PDQ_PRINTF((" Command Request Producer = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_cmd_request_producer, PDQ_CSR_READ(&pdq->pdq_csrs, csr_cmd_request_producer)));
- PDQ_PRINTF((" Host SMT Producer = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_host_smt_producer, PDQ_CSR_READ(&pdq->pdq_csrs, csr_host_smt_producer)));
- PDQ_PRINTF((" Unsolicited Producer = " PDQ_OS_PTR_FMT " [0x%08x]\n",
- pdq->pdq_csrs.csr_unsolicited_producer, PDQ_CSR_READ(&pdq->pdq_csrs, csr_unsolicited_producer)));
-
- /*
- * Initialize the command information block
- */
- pdq->pdq_command_info.ci_pa_bufstart = PDQ_OS_VA_TO_PA(pdq, pdq->pdq_command_info.ci_bufstart);
- for (idx = 0; idx < nitems(pdq->pdq_dbp->pdqdb_command_requests); idx++) {
- pdq_txdesc_t *txd = &pdq->pdq_dbp->pdqdb_command_requests[idx];
-
- txd->txd_pa_lo = pdq->pdq_command_info.ci_pa_bufstart;
- txd->txd_eop = txd->txd_sop = 1;
- txd->txd_pa_hi = 0;
- }
- for (idx = 0; idx < nitems(pdq->pdq_dbp->pdqdb_command_responses); idx++) {
- pdq_rxdesc_t *rxd = &pdq->pdq_dbp->pdqdb_command_responses[idx];
-
- rxd->rxd_pa_lo = pdq->pdq_command_info.ci_pa_bufstart;
- rxd->rxd_sop = 1;
- rxd->rxd_seg_cnt = 0;
- rxd->rxd_seg_len_lo = 0;
- }
-
- /*
- * Initialize the unsolicited event information block
- */
- pdq->pdq_unsolicited_info.ui_free = PDQ_NUM_UNSOLICITED_EVENTS;
- pdq->pdq_unsolicited_info.ui_pa_bufstart = PDQ_OS_VA_TO_PA(pdq, pdq->pdq_unsolicited_info.ui_events);
- for (idx = 0; idx < nitems(pdq->pdq_dbp->pdqdb_unsolicited_events); idx++) {
- pdq_rxdesc_t *rxd = &pdq->pdq_dbp->pdqdb_unsolicited_events[idx];
- pdq_unsolicited_event_t *event = &pdq->pdq_unsolicited_info.ui_events[idx & (PDQ_NUM_UNSOLICITED_EVENTS-1)];
-
- rxd->rxd_sop = 1;
- rxd->rxd_seg_cnt = 0;
- rxd->rxd_seg_len_hi = sizeof(pdq_unsolicited_event_t) / 16;
- rxd->rxd_pa_lo = pdq->pdq_unsolicited_info.ui_pa_bufstart + (const pdq_uint8_t *) event
- - (const pdq_uint8_t *) pdq->pdq_unsolicited_info.ui_events;
- rxd->rxd_pa_hi = 0;
- }
- /*
- * Initialize the receive information blocks (normal and SMT).
- */
- pdq->pdq_rx_info.rx_free = PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_receives);
- pdq->pdq_rx_info.rx_target = pdq->pdq_rx_info.rx_free - PDQ_RX_SEGCNT * 8;
-
- pdq->pdq_host_smt_info.rx_free = PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_host_smt);
- pdq->pdq_host_smt_info.rx_target = pdq->pdq_host_smt_info.rx_free - PDQ_RX_SEGCNT * 3;
-
- /*
- * Initialize the transmit information block.
- */
- pdq->pdq_tx_hdr[0] = PDQ_FDDI_PH0;
- pdq->pdq_tx_hdr[1] = PDQ_FDDI_PH1;
- pdq->pdq_tx_hdr[2] = PDQ_FDDI_PH2;
- pdq->pdq_tx_info.tx_free = PDQ_RING_MASK(pdq->pdq_dbp->pdqdb_transmits);
- pdq->pdq_tx_info.tx_hdrdesc.txd_seg_len = sizeof(pdq->pdq_tx_hdr);
- pdq->pdq_tx_info.tx_hdrdesc.txd_sop = 1;
- pdq->pdq_tx_info.tx_hdrdesc.txd_pa_lo = PDQ_OS_VA_TO_PA(pdq, pdq->pdq_tx_hdr);
-
- state = PDQ_PSTS_ADAPTER_STATE(PDQ_CSR_READ(&pdq->pdq_csrs, csr_port_status));
- PDQ_PRINTF(("PDQ Adapter State = %s\n", pdq_adapter_states[state]));
-
- /*
- * Stop the PDQ if it is running and put it into a known state.
- */
- state = pdq_stop(pdq);
-
- PDQ_PRINTF(("PDQ Adapter State = %s\n", pdq_adapter_states[state]));
- PDQ_ASSERT(state == PDQS_DMA_AVAILABLE);
- /*
- * If the adapter is not the state we expect, then the initialization
- * failed. Cleanup and exit.
- */
-#if defined(PDQVERBOSE)
- if (state == PDQS_HALTED) {
- pdq_halt_code_t halt_code = PDQ_PSTS_HALT_ID(PDQ_CSR_READ(&pdq->pdq_csrs, csr_port_status));
- printf("Halt code = %d (%s)\n", halt_code, pdq_halt_codes[halt_code]);
- if (halt_code == PDQH_DMA_ERROR && pdq->pdq_type == PDQ_DEFPA)
- PDQ_PRINTF(("PFI status = 0x%x, Host 0 Fatal Interrupt = 0x%x\n",
- PDQ_CSR_READ(&pdq->pdq_pci_csrs, csr_pfi_status),
- PDQ_CSR_READ(&pdq->pdq_csrs, csr_host_int_type_0) & PDQ_HOST_INT_FATAL_ERROR));
- }
-#endif
- if (state == PDQS_RESET || state == PDQS_HALTED || state == PDQS_UPGRADE)
- goto cleanup_and_return;
-
- PDQ_PRINTF(("PDQ Hardware Address = %02x-%02x-%02x-%02x-%02x-%02x\n",
- pdq->pdq_hwaddr.lanaddr_bytes[0], pdq->pdq_hwaddr.lanaddr_bytes[1],
- pdq->pdq_hwaddr.lanaddr_bytes[2], pdq->pdq_hwaddr.lanaddr_bytes[3],
- pdq->pdq_hwaddr.lanaddr_bytes[4], pdq->pdq_hwaddr.lanaddr_bytes[5]));
- PDQ_PRINTF(("PDQ Firmware Revision = %c%c%c%c\n",
- pdq->pdq_fwrev.fwrev_bytes[0], pdq->pdq_fwrev.fwrev_bytes[1],
- pdq->pdq_fwrev.fwrev_bytes[2], pdq->pdq_fwrev.fwrev_bytes[3]));
- PDQ_PRINTF(("PDQ Chip Revision = "));
- switch (pdq->pdq_chip_rev) {
- case PDQ_CHIP_REV_A_B_OR_C: PDQ_PRINTF(("Rev C or below")); break;
- case PDQ_CHIP_REV_D: PDQ_PRINTF(("Rev D")); break;
- case PDQ_CHIP_REV_E: PDQ_PRINTF(("Rev E")); break;
- default: PDQ_PRINTF(("Unknown Rev %d", (int) pdq->pdq_chip_rev));
- }
- PDQ_PRINTF(("\n"));
-
- return pdq;
-}
diff --git a/sys/dev/ic/pdq_ifsubr.c b/sys/dev/ic/pdq_ifsubr.c
deleted file mode 100644
index ab59ac8948c..00000000000
--- a/sys/dev/ic/pdq_ifsubr.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/* $OpenBSD: pdq_ifsubr.c,v 1.20 2013/08/07 01:06:30 bluhm Exp $ */
-/* $NetBSD: pdq_ifsubr.c,v 1.5 1996/05/20 00:26:21 thorpej Exp $ */
-
-/*-
- * Copyright (c) 1995, 1996 Matt Thomas <matt@3am-software.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (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: pdq_ifsubr.c,v 1.6 1996/05/16 14:25:26 thomas Exp
- *
- */
-
-/*
- * DEC PDQ FDDI Controller; code for BSD derived operating systems
- *
- * This module provide bus independent BSD specific O/S functions.
- * (ie. it provides an ifnet interface to the rest of the system)
- */
-
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/mbuf.h>
-#include <sys/protosw.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/errno.h>
-#include <sys/malloc.h>
-#if defined(__FreeBSD__)
-#include <sys/devconf.h>
-#elif defined(__NetBSD__) || defined(__OpenBSD__)
-#include <sys/device.h>
-#endif
-
-#include <net/if.h>
-#include <net/if_types.h>
-#include <net/if_dl.h>
-#include <net/route.h>
-
-#include "bpfilter.h"
-#if NBPFILTER > 0
-#include <net/bpf.h>
-#endif
-
-#ifdef INET
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <netinet/if_ether.h>
-#endif
-#if defined(__FreeBSD__)
-#include <netinet/if_fddi.h>
-#else
-#include <net/if_fddi.h>
-#endif
-
-#include <uvm/uvm_extern.h>
-
-#include "pdqvar.h"
-#include "pdqreg.h"
-
-void
-pdq_ifinit(
- pdq_softc_t *sc)
-{
- if (sc->sc_if.if_flags & IFF_UP) {
- sc->sc_if.if_flags |= IFF_RUNNING;
- if (sc->sc_if.if_flags & IFF_PROMISC) {
- sc->sc_pdq->pdq_flags |= PDQ_PROMISC;
- } else {
- sc->sc_pdq->pdq_flags &= ~PDQ_PROMISC;
- }
- if (sc->sc_if.if_flags & IFF_ALLMULTI) {
- sc->sc_pdq->pdq_flags |= PDQ_ALLMULTI;
- } else {
- sc->sc_pdq->pdq_flags &= ~PDQ_ALLMULTI;
- }
- if (sc->sc_if.if_flags & IFF_LINK1) {
- sc->sc_pdq->pdq_flags |= PDQ_PASS_SMT;
- } else {
- sc->sc_pdq->pdq_flags &= ~PDQ_PASS_SMT;
- }
- sc->sc_pdq->pdq_flags |= PDQ_RUNNING;
- pdq_run(sc->sc_pdq);
- } else {
- sc->sc_if.if_flags &= ~IFF_RUNNING;
- sc->sc_pdq->pdq_flags &= ~PDQ_RUNNING;
- pdq_stop(sc->sc_pdq);
- }
-}
-
-void
-pdq_ifwatchdog(
- struct ifnet *ifp)
-{
- /*
- * No progress was made on the transmit queue for PDQ_OS_TX_TRANSMIT
- * seconds. Remove all queued packets.
- */
-
- ifp->if_flags &= ~IFF_OACTIVE;
- ifp->if_timer = 0;
- IFQ_PURGE(&ifp->if_snd);
-}
-
-ifnet_ret_t
-pdq_ifstart(
- struct ifnet *ifp)
-{
- pdq_softc_t *sc = (pdq_softc_t *) ((caddr_t) ifp - offsetof(pdq_softc_t, sc_arpcom.ac_if));
- struct mbuf *m;
- int tx = 0;
-
- if ((ifp->if_flags & IFF_RUNNING) == 0)
- return;
-
- if (sc->sc_if.if_timer == 0)
- sc->sc_if.if_timer = PDQ_OS_TX_TIMEOUT;
-
- if ((sc->sc_pdq->pdq_flags & PDQ_TXOK) == 0) {
- sc->sc_if.if_flags |= IFF_OACTIVE;
- return;
- }
- for (;; tx = 1) {
- IFQ_POLL(&ifp->if_snd, m);
- if (m == NULL)
- break;
-
- if (pdq_queue_transmit_data(sc->sc_pdq, m) == PDQ_FALSE) {
- ifp->if_flags |= IFF_OACTIVE;
- break;
- }
-
- IFQ_DEQUEUE(&ifp->if_snd, m);
- }
- if (tx)
- PDQ_DO_TYPE2_PRODUCER(sc->sc_pdq);
-}
-
-void
-pdq_os_receive_pdu(
- pdq_t *pdq,
- struct mbuf *m,
- size_t pktlen)
-{
- pdq_softc_t *sc = (pdq_softc_t *) pdq->pdq_os_ctx;
- struct fddi_header *fh = mtod(m, struct fddi_header *);
-
- sc->sc_if.if_ipackets++;
-#if NBPFILTER > 0
- if (sc->sc_bpf != NULL)
- PDQ_BPF_MTAP(sc, m, BPF_DIRECTION_IN);
- if ((fh->fddi_fc & (FDDIFC_L|FDDIFC_F)) != FDDIFC_LLC_ASYNC) {
- m_freem(m);
- return;
- }
-#endif
-
- m->m_data += sizeof(struct fddi_header);
- m->m_len -= sizeof(struct fddi_header);
- m->m_pkthdr.len = pktlen - sizeof(struct fddi_header);
- m->m_pkthdr.rcvif = &sc->sc_if;
- fddi_input(&sc->sc_if, fh, m);
-}
-
-void
-pdq_os_restart_transmitter(
- pdq_t *pdq)
-{
- pdq_softc_t *sc = (pdq_softc_t *) pdq->pdq_os_ctx;
- sc->sc_if.if_flags &= ~IFF_OACTIVE;
- if (!IFQ_IS_EMPTY(&sc->sc_if.if_snd)) {
- sc->sc_if.if_timer = PDQ_OS_TX_TIMEOUT;
- pdq_ifstart(&sc->sc_if);
- } else {
- sc->sc_if.if_timer = 0;
- }
-}
-
-void
-pdq_os_transmit_done(
- pdq_t *pdq,
- struct mbuf *m)
-{
- pdq_softc_t *sc = (pdq_softc_t *) pdq->pdq_os_ctx;
-#if NBPFILTER > 0
- if (sc->sc_bpf != NULL)
- PDQ_BPF_MTAP(sc, m, BPF_DIRECTION_OUT);
-#endif
- m_freem(m);
- sc->sc_if.if_opackets++;
-}
-
-void
-pdq_os_addr_fill(
- pdq_t *pdq,
- pdq_lanaddr_t *addr,
- size_t num_addrs)
-{
- pdq_softc_t *sc = (pdq_softc_t *) pdq->pdq_os_ctx;
- struct ether_multistep step;
- struct ether_multi *enm;
-
- ETHER_FIRST_MULTI(step, &sc->sc_arpcom, enm);
- while (enm != NULL && num_addrs > 0) {
- ((u_short *) addr->lanaddr_bytes)[0] = ((u_short *) enm->enm_addrlo)[0];
- ((u_short *) addr->lanaddr_bytes)[1] = ((u_short *) enm->enm_addrlo)[1];
- ((u_short *) addr->lanaddr_bytes)[2] = ((u_short *) enm->enm_addrlo)[2];
- ETHER_NEXT_MULTI(step, enm);
- addr++;
- num_addrs--;
- }
-}
-
-int
-pdq_ifioctl(
- struct ifnet *ifp,
- ioctl_cmd_t cmd,
- caddr_t data)
-{
- pdq_softc_t *sc = (pdq_softc_t *) ((caddr_t) ifp - offsetof(pdq_softc_t, sc_arpcom.ac_if));
- int s, error = 0;
-
- s = splnet();
-
- switch (cmd) {
- case SIOCSIFADDR: {
- struct ifaddr *ifa = (struct ifaddr *)data;
-
- ifp->if_flags |= IFF_UP;
- switch(ifa->ifa_addr->sa_family) {
-#if defined(INET)
- case AF_INET: {
- pdq_ifinit(sc);
- arp_ifinit(&sc->sc_arpcom, ifa);
- break;
- }
-#endif /* INET */
-
-#if defined(NS)
- /* This magic copied from if_is.c; I don't use XNS,
- * so I have no way of telling if this actually
- * works or not.
- */
- case AF_NS: {
- struct ns_addr *ina = &(IA_SNS(ifa)->sns_addr);
- if (ns_nullhost(*ina)) {
- ina->x_host = *(union ns_host *)(sc->sc_arpcom.ac_enaddr);
- } else {
- ifp->if_flags &= ~IFF_RUNNING;
- bcopy((caddr_t)ina->x_host.c_host,
- (caddr_t)sc->sc_arpcom.ac_enaddr,
- sizeof sc->sc_arpcom.ac_enaddr);
- }
-
- pdq_ifinit(sc);
- break;
- }
-#endif /* NS */
-
- default: {
- pdq_ifinit(sc);
- break;
- }
- }
- break;
- }
-
- case SIOCSIFFLAGS: {
- pdq_ifinit(sc);
- break;
- }
-
- case SIOCADDMULTI:
- case SIOCDELMULTI: {
- /*
- * Update multicast listeners
- */
- if (cmd == SIOCADDMULTI)
- error = ether_addmulti((struct ifreq *)data, &sc->sc_arpcom);
- else
- error = ether_delmulti((struct ifreq *)data, &sc->sc_arpcom);
-
- if (error == ENETRESET) {
- if (sc->sc_if.if_flags & IFF_RUNNING)
- pdq_run(sc->sc_pdq);
- error = 0;
- }
- break;
- }
-
- default: {
- error = EINVAL;
- break;
- }
- }
-
- splx(s);
- return error;
-}
-
-#ifndef IFF_NOTRAILERS
-#define IFF_NOTRAILERS 0
-#endif
-
-void
-pdq_ifattach(
- pdq_softc_t *sc,
- ifnet_ret_t (*ifwatchdog)(int unit))
-{
- struct ifnet *ifp = &sc->sc_if;
-
- ifp->if_flags = IFF_BROADCAST|IFF_SIMPLEX|IFF_NOTRAILERS|IFF_MULTICAST;
-
-#if (defined(__FreeBSD__) && BSD >= 199506) || defined(__NetBSD__) || \
- defined(__OpenBSD__)
- ifp->if_watchdog = pdq_ifwatchdog;
-#else
- ifp->if_watchdog = ifwatchdog;
-#endif
-
- ifp->if_ioctl = pdq_ifioctl;
- ifp->if_start = pdq_ifstart;
- IFQ_SET_READY(&ifp->if_snd);
-
- if_attach(ifp);
- fddi_ifattach(ifp);
-#if NBPFILTER > 0
- PDQ_BPFATTACH(sc, DLT_FDDI, sizeof(struct fddi_header));
-#endif
-}
diff --git a/sys/dev/ic/pdqreg.h b/sys/dev/ic/pdqreg.h
deleted file mode 100644
index 2fe19c1ac3a..00000000000
--- a/sys/dev/ic/pdqreg.h
+++ /dev/null
@@ -1,1085 +0,0 @@
-/* $OpenBSD: pdqreg.h,v 1.10 2009/06/06 19:21:33 jasper Exp $ */
-/* $NetBSD: pdqreg.h,v 1.6 1996/08/28 16:01:29 cgd Exp $ */
-
-/*-
- * Copyright (c) 1995, 1996 Matt Thomas <matt@3am-software.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (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: pdqreg.h,v 1.9 1996/05/16 14:25:26 thomas Exp
- *
- */
-
-/*
- * DEC PDQ FDDI Controller; PDQ port driver definitions
- *
- */
-
-#ifndef _PDQREG_H
-#define _PDQREG_H
-
-#if !defined(__NetBSD__) && !defined(__OpenBSD__)
-#include <stddef.h>
-#if defined(PDQTEST) && !defined(PDQ_NDEBUG)
-#include <assert.h>
-#define PDQ_ASSERT assert
-#else
-#define PDQ_ASSERT(x) do { } while(0)
-#endif
-#else /* __NetBSD__ || __OpenBSD__*/
-
-/*
- * Can't directly use "assert", because apparently cpp won't expand it
- * unless it has an argument, which loses.
- */
-#ifdef PDQ_NDEBUG
-#define PDQ_ASSERT(e) ((void)0)
-#else
-#ifdef __STDC__
-#define PDQ_ASSERT(e) KASSERT(e)
-#else
-#define PDQ_ASSERT(e) KASSERT(e)
-#endif
-#endif
-#endif /* __NetBSD__ || __OpenBSD__ */
-
-#define PDQ_RING_SIZE(array) ((sizeof(array) / sizeof(array[0])))
-#define PDQ_ARRAY_SIZE(array) ((sizeof(array) / sizeof(array[0])))
-#define PDQ_RING_MASK(array) (PDQ_RING_SIZE(array) - 1)
-#define PDQ_BITMASK(n) (1L << (pdq_uint32_t) (n))
-
-#define PDQ_FDDI_MAX 4495
-#define PDQ_FDDI_LLC_MIN 20
-#define PDQ_FDDI_SMT_MIN 37
-
-#define PDQ_FDDI_SMT 0x40
-#define PDQ_FDDI_LLC_ASYNC 0x50
-#define PDQ_FDDI_LLC_SYNC 0xD0
-#define PDQ_FDDI_IMP_ASYNC 0x60
-#define PDQ_FDDI_IMP_SYNC 0xE0
-
-#define PDQ_FDDIFC_C 0x80
-#define PDQ_FDDIFC_L 0x40
-#define PDQ_FDDIFC_F 0x30
-#define PDQ_FDDIFC_Z 0x0F
-
-#define PDQ_FDDI_PH0 0x20
-#define PDQ_FDDI_PH1 0x38
-#define PDQ_FDDI_PH2 0x00
-
-typedef pdq_uint32_t pdq_physaddr_t;
-
-struct _pdq_lanaddr_t {
- pdq_uint8_t lanaddr_bytes[8];
-};
-
-typedef struct {
- pdq_uint8_t fwrev_bytes[4];
-} pdq_fwrev_t;
-
-enum _pdq_state_t {
- PDQS_RESET=0,
- PDQS_UPGRADE=1,
- PDQS_DMA_UNAVAILABLE=2,
- PDQS_DMA_AVAILABLE=3,
- PDQS_LINK_AVAILABLE=4,
- PDQS_LINK_UNAVAILABLE=5,
- PDQS_HALTED=6,
- PDQS_RING_MEMBER=7
-};
-
-struct _pdq_csrs_t {
- pdq_bus_memoffset_t csr_port_reset; /* 0x00 [RW] */
- pdq_bus_memoffset_t csr_host_data; /* 0x04 [R] */
- pdq_bus_memoffset_t csr_port_control; /* 0x08 [RW] */
- pdq_bus_memoffset_t csr_port_data_a; /* 0x0C [RW] */
- pdq_bus_memoffset_t csr_port_data_b; /* 0x10 [RW] */
- pdq_bus_memoffset_t csr_port_status; /* 0x14 [R] */
- pdq_bus_memoffset_t csr_host_int_type_0; /* 0x18 [RW] */
- pdq_bus_memoffset_t csr_host_int_enable; /* 0x1C [RW] */
- pdq_bus_memoffset_t csr_type_2_producer; /* 0x20 [RW] */
- pdq_bus_memoffset_t csr_cmd_response_producer; /* 0x28 [RW] */
- pdq_bus_memoffset_t csr_cmd_request_producer; /* 0x2C [RW] */
- pdq_bus_memoffset_t csr_host_smt_producer; /* 0x30 [RW] */
- pdq_bus_memoffset_t csr_unsolicited_producer; /* 0x34 [RW] */
- pdq_bus_t csr_bus;
- pdq_bus_memaddr_t csr_base;
-};
-
-struct _pdq_pci_csrs_t {
- pdq_bus_memoffset_t csr_pfi_mode_control; /* 0x40 [RW] */
- pdq_bus_memoffset_t csr_pfi_status; /* 0x44 [RW] */
- pdq_bus_memoffset_t csr_fifo_write; /* 0x48 [RW] */
- pdq_bus_memoffset_t csr_fifo_read; /* 0x4C [RW] */
- pdq_bus_t csr_bus;
- pdq_bus_memaddr_t csr_base;
-};
-
-#define PDQ_PFI_MODE_DMA_ENABLE 0x01 /* DMA Enable */
-#define PDQ_PFI_MODE_PFI_PCI_INTR 0x02 /* PFI-to-PCI Int Enable */
-#define PDQ_PFI_MODE_PDQ_PCI_INTR 0x04 /* PDQ-to-PCI Int Enable */
-
-#define PDQ_PFI_STATUS_PDQ_INTR 0x10 /* PDQ Int received */
-#define PDQ_PFI_STATUS_DMA_ABORT 0x08 /* PDQ DMA Abort asserted */
-
-#define PDQ_EISA_BURST_HOLDOFF 0x0040
-#define PDQ_EISA_SLOT_ID 0x0C80
-#define PDQ_EISA_SLOT_CTRL 0x0C84
-#define PDQ_EISA_MEM_ADD_CMP_0 0x0C85
-#define PDQ_EISA_MEM_ADD_CMP_1 0x0C86
-#define PDQ_EISA_MEM_ADD_CMP_2 0x0C87
-#define PDQ_EISA_MEM_ADD_HI_CMP_0 0x0C88
-#define PDQ_EISA_MEM_ADD_HI_CMP_1 0x0C89
-#define PDQ_EISA_MEM_ADD_HI_CMP_2 0x0C8A
-#define PDQ_EISA_MEM_ADD_MASK_0 0x0C8B
-#define PDQ_EISA_MEM_ADD_MASK_1 0x0C8C
-#define PDQ_EISA_MEM_ADD_MASK_2 0x0C8D
-#define PDQ_EISA_MEM_ADD_LO_CMP_0 0x0C8E
-#define PDQ_EISA_MEM_ADD_LO_CMP_1 0x0C8F
-#define PDQ_EISA_MEM_ADD_LO_CMP_2 0x0C90
-#define PDQ_EISA_IO_CMP_0_0 0x0C91
-#define PDQ_EISA_IO_CMP_0_1 0x0C92
-#define PDQ_EISA_IO_CMP_1_0 0x0C93
-#define PDQ_EISA_IO_CMP_1_1 0x0C94
-#define PDQ_EISA_IO_CMP_2_0 0x0C95
-#define PDQ_EISA_IO_CMP_2_1 0x0C96
-#define PDQ_EISA_IO_CMP_3_0 0x0C97
-#define PDQ_EISA_IO_CMP_3_1 0x0C98
-#define PDQ_EISA_IO_ADD_MASK_0_0 0x0C99
-#define PDQ_EISA_IO_ADD_MASK_0_1 0x0C9A
-#define PDQ_EISA_IO_ADD_MASK_1_0 0x0C9B
-#define PDQ_EISA_IO_ADD_MASK_1_1 0x0C9C
-#define PDQ_EISA_IO_ADD_MASK_2_0 0x0C9D
-#define PDQ_EISA_IO_ADD_MASK_2_1 0x0C9E
-#define PDQ_EISA_IO_ADD_MASK_3_0 0x0C9F
-#define PDQ_EISA_IO_ADD_MASK_3_1 0x0CA0
-#define PDQ_EISA_MOD_CONFIG_1 0x0CA1
-#define PDQ_EISA_MOD_CONFIG_2 0x0CA2
-#define PDQ_EISA_MOD_CONFIG_3 0x0CA3
-#define PDQ_EISA_MOD_CONFIG_4 0x0CA4
-#define PDQ_EISA_MOD_CONFIG_5 0x0CA5
-#define PDQ_EISA_MOD_CONFIG_6 0x0CA6
-#define PDQ_EISA_MOD_CONFIG_7 0x0CA7
-#define PDQ_EISA_DIP_SWITCH 0x0CA8
-#define PDQ_EISA_IO_CONFIG_STAT_0 0x0CA9
-#define PDQ_EISA_IO_CONFIG_STAT_1 0x0CAA
-#define PDQ_EISA_DMA_CONFIG 0x0CAB
-#define PDQ_EISA_INPUT_PORT 0x0CAC
-#define PDQ_EISA_OUTPUT_PORT 0x0CAD
-#define PDQ_EISA_FUNCTION_CTRL 0x0CAE
-
-#define PDQ_TC_CSR_OFFSET 0x00100000
-#define PDQ_TC_CSR_SPACE 0x0040
-#define PDQ_FBUS_CSR_OFFSET 0x00200000
-#define PDQ_FBUS_CSR_SPACE 0x0080
-
-/*
- * Port Reset Data A Definitions
- */
-#define PDQ_PRESET_SKIP_SELFTEST 0x0004
-#define PDQ_PRESET_SOFT_RESET 0x0002
-#define PDQ_PRESET_UPGRADE 0x0001
-/*
- * Port Control Register Definitions
- */
-#define PDQ_PCTL_CMD_ERROR 0x8000
-#define PDQ_PCTL_FLASH_BLAST 0x4000
-#define PDQ_PCTL_HALT 0x2000
-#define PDQ_PCTL_COPY_DATA 0x1000
-#define PDQ_PCTL_ERROR_LOG_START 0x0800
-#define PDQ_PCTL_ERROR_LOG_READ 0x0400
-#define PDQ_PCTL_XMT_DATA_FLUSH_DONE 0x0200
-#define PDQ_PCTL_DMA_INIT 0x0100
-#define PDQ_DMA_INIT_LW_BSWAP_DATA 0x02
-#define PDQ_DMA_INIT_LW_BSWAP_LITERAL 0x01
-#define PDQ_PCTL_INIT_START 0x0080
-#define PDQ_PCTL_CONSUMER_BLOCK 0x0040
-#define PDQ_PCTL_DMA_UNINIT 0x0020
-#define PDQ_PCTL_RING_MEMBER 0x0010
-#define PDQ_PCTL_MLA_READ 0x0008
-#define PDQ_PCTL_FW_REV_READ 0x0004
-#define PDQ_PCTL_DEVICE_SPECIFIC 0x0002
-#define PDQ_PCTL_SUB_CMD 0x0001
-
-typedef enum {
- PDQ_SUB_CMD_LINK_UNINIT=1,
- PDQ_SUB_CMD_DMA_BURST_SIZE_SET=2,
- PDQ_SUB_CMD_PDQ_REV_GET=4
-} pdq_sub_cmd_t;
-
-typedef enum {
- PDQ_DMA_BURST_4LW=0,
- PDQ_DMA_BURST_8LW=1,
- PDQ_DMA_BURST_16LW=2,
- PDQ_DMA_BURST_32LW=3
-} pdq_dma_burst_size_t;
-
-typedef enum {
- PDQ_CHIP_REV_A_B_OR_C=0,
- PDQ_CHIP_REV_D=2,
- PDQ_CHIP_REV_E=4
-} pdq_chip_rev_t;
-/*
- * Port Status Register Definitions
- */
-#define PDQ_PSTS_RCV_DATA_PENDING 0x80000000ul
-#define PDQ_PSTS_XMT_DATA_PENDING 0x40000000ul
-#define PDQ_PSTS_HOST_SMT_PENDING 0x20000000ul
-#define PDQ_PSTS_UNSOL_PENDING 0x10000000ul
-#define PDQ_PSTS_CMD_RSP_PENDING 0x08000000ul
-#define PDQ_PSTS_CMD_REQ_PENDING 0x04000000ul
-#define PDQ_PSTS_TYPE_0_PENDING 0x02000000ul
-#define PDQ_PSTS_INTR_PENDING 0xFE000000ul
-#define PDQ_PSTS_ADAPTER_STATE(sts) ((pdq_state_t) (((sts) >> 8) & 0x07))
-#define PDQ_PSTS_HALT_ID(sts) ((pdq_halt_code_t) ((sts) & 0xFF))
-/*
- * Host Interrupt Register Definitions
- */
-#define PDQ_HOST_INT_TX_ENABLE 0x80000000ul
-#define PDQ_HOST_INT_RX_ENABLE 0x40000000ul
-#define PDQ_HOST_INT_UNSOL_ENABLE 0x20000000ul
-#define PDQ_HOST_INT_HOST_SMT_ENABLE 0x10000000ul
-#define PDQ_HOST_INT_CMD_RSP_ENABLE 0x08000000ul
-#define PDQ_HOST_INT_CMD_RQST_ENABLE 0x04000000ul
-
-#define PDQ_HOST_INT_1MS 0x80
-#define PDQ_HOST_INT_20MS 0x40
-#define PDQ_HOST_INT_CSR_CMD_DONE 0x20
-#define PDQ_HOST_INT_STATE_CHANGE 0x10
-#define PDQ_HOST_INT_XMT_DATA_FLUSH 0x08
-#define PDQ_HOST_INT_NXM 0x04
-#define PDQ_HOST_INT_PM_PARITY_ERROR 0x02
-#define PDQ_HOST_INT_HOST_BUS_PARITY_ERROR 0x01
-#define PDQ_HOST_INT_FATAL_ERROR 0x07
-
-typedef enum {
- PDQH_SELFTEST_TIMEOUT=0,
- PDQH_HOST_BUS_PARITY_ERROR=1,
- PDQH_HOST_DIRECTED_HALT=2,
- PDQH_SOFTWARE_FAULT=3,
- PDQH_HARDWARE_FAULT=4,
- PDQH_PC_TRACE_PATH_TEST=5,
- PDQH_DMA_ERROR=6,
- PDQH_IMAGE_CRC_ERROR=7,
- PDQH_ADAPTER_PROCESSOR_ERROR=8,
- PDQH_MAX=9
-} pdq_halt_code_t;
-
-typedef struct {
- pdq_uint16_t pdqcb_receives;
- pdq_uint16_t pdqcb_transmits;
- pdq_uint32_t pdqcb__filler1;
- pdq_uint32_t pdqcb_host_smt;
- pdq_uint32_t pdqcb__filler2;
- pdq_uint32_t pdqcb_unsolicited_event;
- pdq_uint32_t pdqcb__filler3;
- pdq_uint32_t pdqcb_command_response;
- pdq_uint32_t pdqcb__filler4;
- pdq_uint32_t pdqcb_command_request;
- pdq_uint32_t pdqcb__filler5[7];
-} pdq_consumer_block_t;
-
-#if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN
-#define PDQ_BITFIELD2(a, b) b, a
-#define PDQ_BITFIELD3(a, b, c) c, b, a
-#define PDQ_BITFIELD4(a, b, c, d) d, c, b, a
-#define PDQ_BITFIELD5(a, b, c, d, e) e, d, c, b, a
-#define PDQ_BITFIELD12(a, b, c, d, e, f, g, h, i, j, k, l) \
- l, k, j, i, h, g, f, e, d, c, b, a
-#else
-#define PDQ_BITFIELD2(a, b) a, b
-#define PDQ_BITFIELD3(a, b, c) a, b, c
-#define PDQ_BITFIELD4(a, b, c, d) a, b, c, d
-#define PDQ_BITFIELD5(a, b, c, d, e) a, b, c, d, e
-#define PDQ_BITFIELD12(a, b, c, d, e, f, g, h, i, j, k, l) \
- a, b, c, d, e, f, g, h, i, j, k, l
-#endif
-
-typedef struct {
- pdq_uint32_t PDQ_BITFIELD5(rxd_pa_hi : 16,
- rxd_seg_cnt : 4,
- rxd_seg_len_hi : 9,
- rxd_seg_len_lo : 2,
- rxd_sop : 1);
- pdq_uint32_t rxd_pa_lo;
-} pdq_rxdesc_t;
-
-typedef union {
- pdq_uint32_t rxs_status;
- pdq_uint32_t PDQ_BITFIELD12(rxs_len : 13,
- rxs_rcc_ss : 2,
- rxs_rcc_dd : 2,
- rxs_rcc_reason : 3,
- rxs_rcc_badcrc : 1,
- rxs_rcc_badpdu : 1,
- rxs_fsb__reserved : 2,
- rxs_fsb_c : 1,
- rxs_fsb_a : 1,
- rxs_fsb_e : 1,
- rxs_fsc : 3,
- rxs__reserved : 2);
-} pdq_rxstatus_t;
-
-typedef struct {
- pdq_uint32_t PDQ_BITFIELD5(txd_pa_hi : 16,
- txd_seg_len : 13,
- txd_mbz : 1,
- txd_eop : 1,
- txd_sop : 1);
- pdq_uint32_t txd_pa_lo;
-} pdq_txdesc_t;
-
-typedef struct {
- pdq_rxdesc_t pdqdb_receives[256]; /* 2048; 0x0000..0x07FF */
- pdq_txdesc_t pdqdb_transmits[256]; /* 2048; 0x0800..0x0FFF */
- pdq_rxdesc_t pdqdb_host_smt[64]; /* 512; 0x1000..0x11FF */
- pdq_rxdesc_t pdqdb_unsolicited_events[16]; /* 128; 0x1200..0x127F */
- pdq_rxdesc_t pdqdb_command_responses[16]; /* 128; 0x1280..0x12FF */
- pdq_txdesc_t pdqdb_command_requests[16]; /* 128; 0x1300..0x137F */
- /*
- * The rest of the descriptor block is unused.
- * As such we could use it for other things.
- */
- pdq_consumer_block_t pdqdb_consumer; /* 64; 0x1380..0x13BF */
- void *pdqdb_receive_buffers[256]; /* 1024/2048; 0x13C0..0x17BF 0x13C0..0x1BBF */
- void *pdqdb_host_smt_buffers[64]; /* 256/ 512; 0x17C0..0x18BF 0x1BC0..0x1DBF */
- /*
- * The maximum command size is 512 so as long as thes
- * command is at least that long all will be fine.
- */
-#if defined(__alpha) || defined(__alpha__)
- pdq_uint32_t pdqdb_command_pool[144];
-#else
- pdq_uint32_t pdqdb_command_pool[464];
-#endif
-} pdq_descriptor_block_t;
-
-typedef struct {
- /*
- * These value manage the available space in command/response
- * buffer area.
- */
- pdq_physaddr_t ci_pa_bufstart;
- pdq_uint8_t *ci_bufstart;
- /*
- * Bitmask of commands to sent to the PDQ
- */
- pdq_uint32_t ci_pending_commands;
- /*
- * Variables to maintain the PDQ queues.
- */
- pdq_uint32_t ci_command_active;
- pdq_uint32_t ci_request_producer;
- pdq_uint32_t ci_response_producer;
- pdq_uint32_t ci_request_completion;
- pdq_uint32_t ci_response_completion;
-} pdq_command_info_t;
-
-#define PDQ_SIZE_UNSOLICITED_EVENT 512
-#define PDQ_NUM_UNSOLICITED_EVENTS (PDQ_OS_PAGESIZE / PDQ_SIZE_UNSOLICITED_EVENT)
-
-typedef struct _pdq_unsolicited_event_t pdq_unsolicited_event_t;
-
-typedef struct {
- pdq_physaddr_t ui_pa_bufstart;
- pdq_unsolicited_event_t *ui_events;
-
- pdq_uint32_t ui_free;
- pdq_uint32_t ui_producer;
- pdq_uint32_t ui_completion;
-} pdq_unsolicited_info_t;
-
-#define PDQ_RX_FC_OFFSET (sizeof(pdq_rxstatus_t) + 3)
-#define PDQ_RX_SEGCNT ((PDQ_FDDI_MAX + PDQ_OS_DATABUF_SIZE - 1) / PDQ_OS_DATABUF_SIZE)
-#define PDQ_DO_TYPE2_PRODUCER(pdq) \
- PDQ_CSR_WRITE(&(pdq)->pdq_csrs, csr_type_2_producer, \
- ((pdq)->pdq_rx_info.rx_producer << 0) \
- | ((pdq)->pdq_tx_info.tx_producer << 8) \
- | ((pdq)->pdq_rx_info.rx_completion << 16) \
- | ((pdq)->pdq_tx_info.tx_completion << 24))
-
-#define PDQ_DO_HOST_SMT_PRODUCER(pdq) \
- PDQ_CSR_WRITE(&(pdq)->pdq_csrs, csr_host_smt_producer, \
- ((pdq)->pdq_host_smt_info.rx_producer << 0) \
- | ((pdq)->pdq_host_smt_info.rx_completion << 8))\
-
-#define PDQ_ADVANCE(n, a, m) ((n) = ((n) + (a)) & (m))
-
-typedef struct {
- void *q_head;
- void *q_tail;
-} pdq_databuf_queue_t;
-
-typedef struct {
- void *rx_buffers;
-
- pdq_uint32_t rx_target;
- pdq_uint32_t rx_free;
- pdq_uint32_t rx_producer;
- pdq_uint32_t rx_completion;
-} pdq_rx_info_t;
-
-typedef struct {
- pdq_databuf_queue_t tx_txq;
- pdq_txdesc_t tx_hdrdesc;
- pdq_uint8_t tx_descriptor_count[256];
-
- pdq_uint32_t tx_free;
- pdq_uint32_t tx_producer;
- pdq_uint32_t tx_completion;
-} pdq_tx_info_t;
-
-struct _pdq_t {
- pdq_csrs_t pdq_csrs;
- pdq_pci_csrs_t pdq_pci_csrs;
- pdq_type_t pdq_type;
- pdq_chip_rev_t pdq_chip_rev;
- pdq_lanaddr_t pdq_hwaddr;
- pdq_fwrev_t pdq_fwrev;
- pdq_descriptor_block_t *pdq_dbp;
- volatile pdq_consumer_block_t *pdq_cbp;
- pdq_uint32_t pdq_flags;
-#define PDQ_PROMISC 0x0001
-#define PDQ_ALLMULTI 0x0002
-#define PDQ_PASS_SMT 0x0004
-#define PDQ_RUNNING 0x0008
-#define PDQ_PRINTCHARS 0x0010
-#define PDQ_TXOK 0x0020
- const char *pdq_os_name;
- void *pdq_os_ctx;
- pdq_uint32_t pdq_unit;
- pdq_command_info_t pdq_command_info;
- pdq_unsolicited_info_t pdq_unsolicited_info;
- pdq_tx_info_t pdq_tx_info;
- pdq_rx_info_t pdq_rx_info;
- pdq_rx_info_t pdq_host_smt_info;
- pdq_uint8_t pdq_tx_hdr[3];
-};
-
-typedef enum {
- PDQC_START=0,
- PDQC_FILTER_SET=1,
- PDQC_FILTER_GET=2,
- PDQC_CHARS_SET=3,
- PDQC_STATUS_CHARS_GET=4,
- PDQC_COUNTERS_GET=5,
- PDQC_COUNTERS_SET=6,
- PDQC_ADDR_FILTER_SET=7,
- PDQC_ADDR_FILTER_GET=8,
- PDQC_ERROR_LOG_CLEAR=9,
- PDQC_ERROR_LOG_GET=10,
- PDQC_FDDI_MIB_GET=11,
- PDQC_DEC_EXT_MIB_GET=12,
- PDQC_DEV_SPECIFIC_GET=13,
- PDQC_SNMP_SET=14,
- PDQC_SMT_MIB_GET=16,
- PDQC_SMT_MIB_SET=17
-} pdq_cmd_code_t;
-
-typedef enum {
- PDQR_SUCCESS=0,
- PDQR_FAILURE=1,
- PDQR_WARNING=2,
- PDQR_LOOP_MODE_BAD=3,
- PDQR_ITEM_CODE_BAD=4,
- PDQR_TVX_BAD=5,
- PDQR_TREQ_BAD=6,
- PDQR_RESTRICTED_TOKEN_BAD=7,
- PDQR_NO_EOL=12,
- PDQR_FILTER_STATE_BAD=13,
- PDQR_CMD_TYPE_BAD=14,
- PDQR_ADAPTER_STATE_BAD=15,
- PDQR_RING_PURGER_BAD=16,
- PDQR_LEM_THRESHOLD_BAD=17,
- PDQR_LOOP_NOT_SUPPORTED=18,
- PDQR_FLUSH_TIME_BAD=19,
- PDQR_NOT_YET_IMPLEMENTED=20,
- PDQR_CONFIG_POLICY_BAD=21,
- PDQR_STATION_ACTION_BAD=22,
- PDQR_MAC_ACTION_BAD=23,
- PDQR_CON_POLICIES_BAD=24,
- PDQR_MAC_LOOP_TIME_BAD=25,
- PDQR_TB_MAX_BAD=26,
- PDQR_LER_CUTOFF_BAD=27,
- PDQR_LER_ALARM_BAD=28,
- PDQR_MAC_PATHS_REQ_BAD=29,
- PDQR_MAC_T_REQ_BAD=30,
- PDQR_EMAC_RING_PURGER_BAD=31,
- PDQR_EMAC_RTOKEN_TIMOUT_AD=32,
- PDQR_NO_SUCH_ENTRY=33,
- PDQR_T_NOTIFY_BAD=34,
- PDQR_TR_MAX_EXP_BAD=35,
- PDQR_FRAME_ERR_THRESHOLD_BAD=36,
- PDQR_MAX_TREQ_BAD=37,
- PDQR_FULL_DUPLEX_ENABLE_BAD=38,
- PDQR_ITEM_INDEX_BAD=39
-} pdq_response_code_t;
-
-typedef enum {
- PDQI_EOL=0,
- PDQI_T_REQ=1,
- PDQI_TVX=2,
- PDQI_RESTRICTED_TOKEN=3,
- PDQI_LEM_THRESHOLD=4,
- PDQI_RING_PURGER=5,
- PDQI_COUNTER_INTERVAL=6,
- PDQI_IND_GROUP_PROM=7,
- PDQI_GROUP_PROM=8,
- PDQI_BROADCAST=9,
- PDQI_SMT_PROM=10,
- PDQI_SMT_USER=11,
- PDQI_RESERVED=12,
- PDQI_IMPLEMENTOR=13,
- PDQI_LOOPBACK_MODE=14,
- PDQI_SMT_CONFIG_POLICY=16,
- PDQI_SMT_CONNECTION_POLICY=17,
- PDQI_SMT_T_NOTIFY=18,
- PDQI_SMT_STATION_ACTION=19,
- PDQI_MAC_PATHS_REQUESTED=21,
- PDQI_MAC_ACTION=23,
- PDQI_PORT_CONNECTION_POLICIES=24,
- PDQI_PORT_PATHS_REQUESTED=25,
- PDQI_PORT_MAC_LOOP_TIME=26,
- PDQI_PORT_TB_MAX=27,
- PDQI_PORT_LER_CUTOFF=28,
- PDQI_PORT_LER_ALARM=29,
- PDQI_PORT_ACTION=30,
- PDQI_FLUSH_TIME=32,
- PDQI_SMT_USER_DATA=33,
- PDQI_SMT_STATUS_REPORT_POLICY=34,
- PDQI_SMT_TRACE_MAX_EXPIRATION=35,
- PDQI_MAC_FRAME_ERR_THRESHOLD=36,
- PDQI_MAC_UNIT_DATA_ENABLE=37,
- PDQI_PATH_TVX_LOWER_BOUND=38,
- PDQI_PATH_TMAX_LOWER_BOUND=39,
- PDQI_PATH_MAX_TREQ=40,
- PDQI_MAC_TREQ=41,
- PDQI_EMAC_RING_PURGER=42,
- PDQI_EMAC_RTOKEN_TIMEOUT=43,
- PDQI_FULL_DUPLEX_ENABLE=44
-} pdq_item_code_t;
-
-enum _pdq_boolean_t {
- PDQ_FALSE=0,
- PDQ_TRUE=1
-};
-
-typedef enum {
- PDQ_FILTER_BLOCK=0,
- PDQ_FILTER_PASS=1
-} pdq_filter_state_t;
-
-typedef enum {
- PDQ_STATION_TYPE_SAS=0,
- PDQ_STATION_TYPE_DAC=1,
- PDQ_STATION_TYPE_SAC=2,
- PDQ_STATION_TYPE_NAC=3,
- PDQ_STATION_TYPE_DAS=4
-} pdq_station_type_t;
-
-typedef enum {
- PDQ_STATION_STATE_OFF=0,
- PDQ_STATION_STATE_ON=1,
- PDQ_STATION_STATE_LOOPBACK=2
-} pdq_station_state_t;
-
-typedef enum {
- PDQ_LINK_STATE_OFF_READY=1,
- PDQ_LINK_STATE_OFF_FAULT_RECOVERY=2,
- PDQ_LINK_STATE_ON_RING_INIT=3,
- PDQ_LINK_STATE_ON_RING_RUN=4,
- PDQ_LINK_STATE_BROKEN=5
-} pdq_link_state_t;
-
-typedef enum {
- PDQ_DA_TEST_STATE_UNKNOWN=0,
- PDQ_DA_TEST_STATE_SUCCESS=1,
- PDQ_DA_TEST_STATE_DUPLICATE=2
-} pdq_da_test_state_t;
-
-typedef enum {
- PDQ_RING_PURGER_STATE_OFF=0,
- PDQ_RING_PURGER_STATE_CANDIDATE=1,
- PDQ_RING_PURGER_STATE_NON_PURGER=2,
- PDQ_RING_PURGER_STATE_PURGER=3
-} pdq_ring_purger_state_t;
-
-typedef enum {
- PDQ_FRAME_STRING_MODE_SA_MATCH=0,
- PDQ_FRAME_STRING_MODE_FCI_STRIP=1
-} pdq_frame_strip_mode_t;
-
-typedef enum {
- PDQ_RING_ERROR_REASON_NO_ERROR=0,
- PDQ_RING_ERROR_REASON_RING_INIT_INITIATED=5,
- PDQ_RING_ERROR_REASON_RING_INIT_RECEIVED=6,
- PDQ_RING_ERROR_REASON_RING_BEACONING_INITIATED=7,
- PDQ_RING_ERROR_REASON_DUPLICATE_ADDRESS_DETECTED=8,
- PDQ_RING_ERROR_REASON_DUPLICATE_TOKEN_DETECTED=9,
- PDQ_RING_ERROR_REASON_RING_PURGER_ERROR=10,
- PDQ_RING_ERROR_REASON_FCI_STRIP_ERROR=11,
- PDQ_RING_ERROR_REASON_RING_OP_OSCILLATION=12,
- PDQ_RING_ERROR_REASON_DIRECTED_BEACON_RECEVIED=13,
- PDQ_RING_ERROR_REASON_PC_TRACE_INITIATED=14,
- PDQ_RING_ERROR_REASON_PC_TRACE_RECEVIED=15
-} pdq_ring_error_reason_t;
-
-typedef enum {
- PDQ_STATION_MODE_NORMAL=0,
- PDQ_STATION_MODE_INTERNAL_LOOPBACK=1
-} pdq_station_mode_t;
-
-typedef enum {
- PDQ_PHY_TYPE_A=0,
- PDQ_PHY_TYPE_B=1,
- PDQ_PHY_TYPE_S=2,
- PDQ_PHY_TYPE_M=3,
- PDQ_PHY_TYPE_UNKNOWN=4
-} pdq_phy_type_t;
-
-typedef enum {
- PDQ_PMD_TYPE_ANSI_MUTLI_MODE=0,
- PDQ_PMD_TYPE_ANSI_SINGLE_MODE_TYPE_1=1,
- PDQ_PMD_TYPE_ANSI_SIGNLE_MODE_TYPE_2=2,
- PDQ_PMD_TYPE_ANSI_SONET=3,
- PDQ_PMD_TYPE_LOW_POWER=100,
- PDQ_PMD_TYPE_THINWIRE=101,
- PDQ_PMD_TYPE_SHIELDED_TWISTED_PAIR=102,
- PDQ_PMD_TYPE_UNSHIELDED_TWISTED_PAIR=103
-} pdq_pmd_type_t;
-
-typedef enum {
- PDQ_PMD_CLASS_ANSI_MULTI_MODE=0,
- PDQ_PMD_CLASS_SINGLE_MODE_TYPE_1=1,
- PDQ_PMD_CLASS_SINGLE_MODE_TYPE_2=2,
- PDQ_PMD_CLASS_SONET=3,
- PDQ_PMD_CLASS_LOW_COST_POWER_FIBER=4,
- PDQ_PMD_CLASS_TWISTED_PAIR=5,
- PDQ_PMD_CLASS_UNKNOWN=6,
- PDQ_PMD_CLASS_UNSPECIFIED=7
-} pdq_pmd_class_t;
-
-typedef enum {
- PDQ_PHY_STATE_INTERNAL_LOOPBACK=0,
- PDQ_PHY_STATE_BROKEN=1,
- PDQ_PHY_STATE_OFF_READY=2,
- PDQ_PHY_STATE_WAITING=3,
- PDQ_PHY_STATE_STARTING=4,
- PDQ_PHY_STATE_FAILED=5,
- PDQ_PHY_STATE_WATCH=6,
- PDQ_PHY_STATE_INUSE=7
-} pdq_phy_state_t;
-
-typedef enum {
- PDQ_REJECT_REASON_NONE=0,
- PDQ_REJECT_REASON_LOCAL_LCT=1,
- PDQ_REJECT_REASON_REMOTE_LCT=2,
- PDQ_REJECT_REASON_LCT_BOTH_SIDES=3,
- PDQ_REJECT_REASON_LEM_REJECT=4,
- PDQ_REJECT_REASON_TOPOLOGY_ERROR=5,
- PDQ_REJECT_REASON_NOISE_REJECT=6,
- PDQ_REJECT_REASON_REMOTE_REJECT=7,
- PDQ_REJECT_REASON_TRACE_IN_PROGRESS=8,
- PDQ_REJECT_REASON_TRACE_RECEIVED_DISABLED=9,
- PDQ_REJECT_REASON_STANDBY=10,
- PDQ_REJECT_REASON_LCT_PROTOCOL_ERROR=11
-} pdq_reject_reason_t;
-
-typedef enum {
- PDQ_BROKEN_REASON_NONE=0
-} pdq_broken_reason_t;
-
-typedef enum {
- PDQ_RI_REASON_TVX_EXPIRED=0,
- PDQ_RI_REASON_TRT_EXPIRED=1,
- PDQ_RI_REASON_RING_PURGER_ELECTION_ATTEMPT_LIMIT_EXCEEDED=2,
- PDQ_RI_REASON_PURGE_ERROR_LIMIT_EXCEEDED=3,
- PDQ_RI_REASON_RESTRICTED_TOKEN_TIMEOUT=4
-} pdq_ri_reason_t;
-
-typedef enum {
- PDQ_LCT_DIRECTION_LOCAL_LCT=0,
- PDQ_LCT_DIRECTION_REMOTE_LCT=1,
- PDQ_LCT_DIRECTION_LCT_BOTH_SIDES=2
-} pdq_lct_direction_t;
-
-typedef enum {
- PDQ_PORT_A=0,
- PDQ_PORT_B=1
-} pdq_port_type_t;
-
-typedef struct {
- pdq_uint8_t station_id_bytes[8];
-} pdq_station_id_t;
-
-typedef pdq_uint32_t pdq_fdditimer_t;
-/*
- * Command format for Start, Filter_Get, ... commands
- */
-typedef struct {
- pdq_cmd_code_t generic_op;
-} pdq_cmd_generic_t;
-
-/*
- * Response format for Start, Filter_Set, ... commands
- */
-typedef struct {
- pdq_uint32_t generic_reserved;
- pdq_cmd_code_t generic_op;
- pdq_response_code_t generic_status;
-} pdq_response_generic_t;
-
-/*
- * Command format for Filter_Set command
- */
-typedef struct {
- pdq_cmd_code_t filter_set_op;
- struct {
- pdq_item_code_t item_code;
- pdq_filter_state_t filter_state;
- } filter_set_items[7];
- pdq_item_code_t filter_set_eol_item_code;
-} pdq_cmd_filter_set_t;
-
-/*
- * Response format for Filter_Get command.
- */
-typedef struct {
- pdq_uint32_t filter_get_reserved;
- pdq_cmd_code_t filter_get_op;
- pdq_response_code_t filter_get_status;
- pdq_filter_state_t filter_get_ind_group_prom;
- pdq_filter_state_t filter_get_group_prom;
- pdq_filter_state_t filter_get_broadcast_all;
- pdq_filter_state_t filter_get_smt_prom;
- pdq_filter_state_t filter_get_smt_user;
- pdq_filter_state_t filter_get_reserved_all;
- pdq_filter_state_t filter_get_implementor_all;
-} pdq_response_filter_get_t;
-
-#define PDQ_SIZE_RESPONSE_FILTER_GET 0x28
-
-typedef struct {
- pdq_cmd_code_t chars_set_op;
- struct {
- pdq_item_code_t item_code;
- pdq_uint32_t item_value;
- pdq_port_type_t item_port;
- } chars_set_items[1];
- pdq_item_code_t chars_set_eol_item_code;
-} pdq_cmd_chars_set_t;
-
-typedef struct {
- pdq_cmd_code_t addr_filter_set_op;
- pdq_lanaddr_t addr_filter_set_addresses[62];
-} pdq_cmd_addr_filter_set_t;
-
-#define PDQ_SIZE_CMD_ADDR_FILTER_SET 0x1F4
-
-typedef struct {
- pdq_uint32_t addr_filter_get_reserved;
- pdq_cmd_code_t addr_filter_get_op;
- pdq_response_code_t addr_filter_get_status;
- pdq_lanaddr_t addr_filter_get_addresses[62];
-} pdq_response_addr_filter_get_t;
-
-#define PDQ_SIZE_RESPONSE_ADDR_FILTER_GET 0x1FC
-
-typedef struct {
- pdq_uint32_t status_chars_get_reserved;
- pdq_cmd_code_t status_chars_get_op;
- pdq_response_code_t status_chars_get_status;
- struct {
- /* Station Characteristic Attributes */
- pdq_station_id_t station_id;
- pdq_station_type_t station_type;
- pdq_uint32_t smt_version_id;
- pdq_uint32_t smt_max_version_id;
- pdq_uint32_t smt_min_version_id;
- /* Station Status Attributes */
- pdq_station_state_t station_state;
- /* Link Characteristic Attributes */
- pdq_lanaddr_t link_address;
- pdq_fdditimer_t t_req;
- pdq_fdditimer_t tvx;
- pdq_fdditimer_t restricted_token_timeout;
- pdq_boolean_t ring_purger_enable;
- pdq_link_state_t link_state;
- pdq_fdditimer_t negotiated_trt;
- pdq_da_test_state_t dup_addr_flag;
- /* Link Status Attributes */
- pdq_lanaddr_t upstream_neighbor;
- pdq_lanaddr_t old_upstream_neighbor;
- pdq_boolean_t upstream_neighbor_dup_addr_flag;
- pdq_lanaddr_t downstream_neighbor;
- pdq_lanaddr_t old_downstream_neighbor;
- pdq_ring_purger_state_t ring_purger_state;
- pdq_frame_strip_mode_t frame_strip_mode;
- pdq_ring_error_reason_t ring_error_reason;
- pdq_boolean_t loopback;
- pdq_fdditimer_t ring_latency;
- pdq_lanaddr_t last_dir_beacon_sa;
- pdq_lanaddr_t last_dir_beacon_una;
- /* Phy Characteristic Attributes */
- pdq_phy_type_t phy_type[2];
- pdq_pmd_type_t pmd_type[2];
- pdq_uint32_t lem_threshold[2];
- /* Phy Status Attributes */
- pdq_phy_state_t phy_state[2];
- pdq_phy_type_t neighbor_phy_type[2];
- pdq_uint32_t link_error_estimate[2];
- pdq_broken_reason_t broken_reason[2];
- pdq_reject_reason_t reject_reason[2];
- /* Miscellaneous */
- pdq_uint32_t counter_interval;
- pdq_fwrev_t module_rev;
- pdq_fwrev_t firmware_rev;
- pdq_uint32_t mop_device_type;
- pdq_uint32_t fddi_led[2];
- pdq_uint32_t flush;
- } status_chars_get;
-} pdq_response_status_chars_get_t;
-
-#define PDQ_SIZE_RESPONSE_STATUS_CHARS_GET 0xF0
-
-typedef struct {
- pdq_uint32_t fddi_mib_get_reserved;
- pdq_cmd_code_t fddi_mib_get_op;
- pdq_response_code_t fddi_mib_get_status;
- struct {
- /* SMT Objects */
- pdq_station_id_t smt_station_id;
- pdq_uint32_t smt_op_version_id;
- pdq_uint32_t smt_hi_version_id;
- pdq_uint32_t smt_lo_version_id;
- pdq_uint32_t smt_mac_ct;
- pdq_uint32_t smt_non_master_ct;
- pdq_uint32_t smt_master_ct;
- pdq_uint32_t smt_paths_available;
- pdq_uint32_t smt_config_capabilities;
- pdq_uint32_t smt_config_policy;
- pdq_uint32_t smt_connection_policy;
- pdq_uint32_t smt_t_notify;
- pdq_uint32_t smt_status_reporting;
- pdq_uint32_t smt_ecm_state;
- pdq_uint32_t smt_cf_state;
- pdq_uint32_t smt_hold_state;
- pdq_uint32_t smt_remote_disconnect_flag;
- pdq_uint32_t smt_station_action;
- /* MAC Objects */
- pdq_uint32_t mac_frame_status_capabilities;
- pdq_uint32_t mac_t_max_greatest_lower_bound;
- pdq_uint32_t mac_tvx_greatest_lower_bound;
- pdq_uint32_t mac_paths_available;
- pdq_uint32_t mac_current_path;
- pdq_lanaddr_t mac_upstream_neighbor;
- pdq_lanaddr_t mac_old_upstream_neighbor;
- pdq_uint32_t mac_dup_addr_test;
- pdq_uint32_t mac_paths_requested;
- pdq_uint32_t mac_downstream_port_type;
- pdq_lanaddr_t mac_smt_address;
- pdq_uint32_t mac_t_req;
- pdq_uint32_t mac_t_neg;
- pdq_uint32_t mac_t_max;
- pdq_uint32_t mac_tvx_value;
- pdq_uint32_t mac_t_min;
- pdq_uint32_t mac_current_frame_status;
- pdq_uint32_t mac_frame_error_threshold;
- pdq_uint32_t mac_frame_error_ratio;
- pdq_uint32_t mac_rmt_state;
- pdq_uint32_t mac_da_flag;
- pdq_uint32_t mac_una_da_flag;
- pdq_uint32_t mac_frame_condition;
- pdq_uint32_t mac_chip_set;
- pdq_uint32_t mac_action;
- /* Port Objects */
- pdq_uint32_t port_pc_type[2];
- pdq_uint32_t port_pc_neighbor[2];
- pdq_uint32_t port_connection_policies[2];
- pdq_uint32_t port_remote_mac_indicated[2];
- pdq_uint32_t port_ce_state[2];
- pdq_uint32_t port_paths_requested[2];
- pdq_uint32_t port_mac_placement[2];
- pdq_uint32_t port_available_paths[2];
- pdq_uint32_t port_mac_loop_time[2];
- pdq_uint32_t port_tb_max[2];
- pdq_uint32_t port_bs_flag[2];
- pdq_uint32_t port_ler_estimate[2];
- pdq_uint32_t port_ler_cutoff[2];
- pdq_uint32_t port_ler_alarm[2];
- pdq_uint32_t port_connect_state[2];
- pdq_uint32_t port_pcm_state[2];
- pdq_uint32_t port_pc_withhold[2];
- pdq_uint32_t port_ler_condition[2];
- pdq_uint32_t port_chip_set[2];
- pdq_uint32_t port_action[2];
- /* Attachment Objects */
- pdq_uint32_t attachment_class;
- pdq_uint32_t attachment_optical_bypass_present;
- pdq_uint32_t attachment_imax_expiration;
- pdq_uint32_t attachment_inserted_status;
- pdq_uint32_t attachment_insert_policy;
- } fddi_mib_get;
-} pdq_response_fddi_mib_get_t;
-
-#define PDQ_SIZE_RESPONSE_FDDI_MIB_GET 0x17C
-
-typedef enum {
- PDQ_FDX_STATE_IDLE=0,
- PDQ_FDX_STATE_REQUEST=1,
- PDQ_FDX_STATE_CONFIRM=2,
- PDQ_FDX_STATE_OPERATION=3
-} pdq_fdx_state_t;
-
-typedef struct {
- pdq_uint32_t dec_ext_mib_get_reserved;
- pdq_cmd_code_t dec_ext_mib_get_op;
- pdq_response_code_t dec_ext_mib_get_response;
- struct {
- /* SMT Objects */
- pdq_uint32_t esmt_station_type;
- /* MAC Objects */
- pdq_uint32_t emac_link_state;
- pdq_uint32_t emac_ring_purger_state;
- pdq_uint32_t emac_ring_purger_enable;
- pdq_uint32_t emac_frame_strip_mode;
- pdq_uint32_t emac_ring_error_reason;
- pdq_uint32_t emac_upstream_nbr_dupl_address_flag;
- pdq_uint32_t emac_restricted_token_timeout;
- /* Port Objects */
- pdq_uint32_t eport_pmd_type[2];
- pdq_uint32_t eport_phy_state[2];
- pdq_uint32_t eport_reject_reason[2];
- /* Full Duplex Objects */
- pdq_boolean_t fdx_enable;
- pdq_boolean_t fdx_operational;
- pdq_fdx_state_t fdx_state;
- } dec_ext_mib_get;
-} pdq_response_dec_ext_mib_get_t;
-
-#define PDQ_SIZE_RESPONSE_DEC_EXT_MIB_GET 0x50
-
-typedef enum {
- PDQ_CALLER_ID_NONE=0,
- PDQ_CALLER_ID_SELFTEST=1,
- PDQ_CALLER_ID_MFG=2,
- PDQ_CALLER_ID_FIRMWARE=5,
- PDQ_CALLER_ID_CONSOLE=8
-} pdq_caller_id_t;
-
-typedef struct {
- pdq_uint32_t error_log_get__reserved;
- pdq_cmd_code_t error_log_get_op;
- pdq_response_code_t error_log_get_status;
- /* Error Header */
- pdq_uint32_t error_log_get_event_status;
- /* Event Information Block */
- pdq_caller_id_t error_log_get_caller_id;
- pdq_uint32_t error_log_get_timestamp[2];
- pdq_uint32_t error_log_get_write_count;
- /* Diagnostic Information */
- pdq_uint32_t error_log_get_fru_implication_mask;
- pdq_uint32_t error_log_get_test_id;
- pdq_uint32_t error_log_get_diag_reserved[6];
- /* Firmware Information */
- pdq_uint32_t error_log_get_fw_reserved[112];
-} pdq_response_error_log_get_t;
-
-
-/*
- * Definitions for the Unsolicited Event Queue.
- */
-typedef enum {
- PDQ_UNSOLICITED_EVENT=0,
- PDQ_UNSOLICITED_COUNTERS=1
-} pdq_event_t;
-
-typedef enum {
- PDQ_ENTITY_STATION=0,
- PDQ_ENTITY_LINK=1,
- PDQ_ENTITY_PHY_PORT=2
-} pdq_entity_t;
-
-typedef enum {
- PDQ_STATION_EVENT_TRACE_RECEIVED=1
-} pdq_station_event_t;
-
-typedef enum {
- PDQ_STATION_EVENT_ARGUMENT_REASON=0, /* pdq_uint32_t */
- PDQ_STATION_EVENT_ARGUMENT_EOL=0xFF
-} pdq_station_event_argument_t;
-
-typedef enum {
- PDQ_LINK_EVENT_TRANSMIT_UNDERRUN=0,
- PDQ_LINK_EVENT_TRANSMIT_FAILED=1,
- PDQ_LINK_EVENT_BLOCK_CHECK_ERROR=2,
- PDQ_LINK_EVENT_FRAME_STATUS_ERROR=3,
- PDQ_LINK_EVENT_PDU_LENGTH_ERROR=4,
- PDQ_LINK_EVENT_RECEIVE_DATA_OVERRUN=7,
- PDQ_LINK_EVENT_NO_USER_BUFFER=9,
- PDQ_LINK_EVENT_RING_INITIALIZATION_INITIATED=10,
- PDQ_LINK_EVENT_RING_INITIALIZATION_RECEIVED=11,
- PDQ_LINK_EVENT_RING_BEACON_INITIATED=12,
- PDQ_LINK_EVENT_DUPLICATE_ADDRESS_FAILURE=13,
- PDQ_LINK_EVENT_DUPLICATE_TOKEN_DETECTED=14,
- PDQ_LINK_EVENT_RING_PURGE_ERROR=15,
- PDQ_LINK_EVENT_FCI_STRIP_ERROR=16,
- PDQ_LINK_EVENT_TRACE_INITIATED=17,
- PDQ_LINK_EVENT_DIRECTED_BEACON_RECEIVED=18
-} pdq_link_event_t;
-
-typedef enum {
- PDQ_LINK_EVENT_ARGUMENT_REASON=0, /* pdq_rireason_t */
- PDQ_LINK_EVENT_ARGUMENT_DATA_LINK_HEADER=1, /* pdq_dlhdr_t */
- PDQ_LINK_EVENT_ARGUMENT_SOURCE=2, /* pdq_lanaddr_t */
- PDQ_LINK_EVENT_ARGUMENT_UPSTREAM_NEIGHBOR=3,/* pdq_lanaddr_t */
- PDQ_LINK_EVENT_ARGUMENT_EOL=0xFF
-} pdq_link_event_argument_t;
-
-typedef enum {
- PDQ_PHY_EVENT_LEM_ERROR_MONITOR_REJECT=0,
- PDQ_PHY_EVENT_ELASTICITY_BUFFER_ERROR=1,
- PDQ_PHY_EVENT_LINK_CONFIDENCE_TEST_REJECT=2
-} pdq_phy_event_t;
-
-typedef enum {
- PDQ_PHY_EVENT_ARGUMENT_DIRECTION=0, /* pdq_lct_direction_t */
- PDQ_PHY_EVENT_ARGUMENT_EOL=0xFF
-} pdq_phy_event_arguments;
-
-struct _pdq_unsolicited_event_t {
- pdq_uint32_t rvent_reserved;
- pdq_event_t event_type;
- pdq_entity_t event_entity;
- pdq_uint32_t event_index;
- union {
- pdq_station_event_t station_event;
- pdq_link_event_t link_event;
- pdq_phy_event_t phy_event;
- pdq_uint32_t value;
- } event_code;
- /*
- * The remainder of this event is an argument list.
- */
- pdq_uint32_t event__filler[123];
-};
-
-#endif /* _PDQREG_H */
diff --git a/sys/dev/ic/pdqvar.h b/sys/dev/ic/pdqvar.h
deleted file mode 100644
index 0b1de57c2a9..00000000000
--- a/sys/dev/ic/pdqvar.h
+++ /dev/null
@@ -1,351 +0,0 @@
-/* $OpenBSD: pdqvar.h,v 1.19 2010/09/20 07:40:41 deraadt Exp $ */
-/* $NetBSD: pdqvar.h,v 1.11 1996/10/25 21:33:37 cgd Exp $ */
-
-/*-
- * Copyright (c) 1995, 1996 Matt Thomas <matt@3am-software.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (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: pdqvar.h,v 1.18 1996/06/07 20:02:25 thomas Exp
- *
- */
-
-/*
- * DEC PDQ FDDI Controller; PDQ O/S dependent definitions
- *
- * Written by Matt Thomas
- *
- */
-
-#ifndef _PDQ_OS_H
-#define _PDQ_OS_H
-
-#define PDQ_OS_TX_TIMEOUT 5 /* seconds */
-
-typedef struct _pdq_t pdq_t;
-typedef struct _pdq_csrs_t pdq_csrs_t;
-typedef struct _pdq_pci_csrs_t pdq_pci_csrs_t;
-typedef struct _pdq_lanaddr_t pdq_lanaddr_t;
-typedef unsigned int pdq_uint32_t;
-typedef unsigned short pdq_uint16_t;
-typedef unsigned char pdq_uint8_t;
-typedef enum _pdq_boolean_t pdq_boolean_t;
-typedef enum _pdq_type_t pdq_type_t;
-typedef enum _pdq_state_t pdq_state_t;
-
-enum _pdq_type_t {
- PDQ_DEFPA, /* PCI-bus */
- PDQ_DEFEA, /* EISA-bus */
- PDQ_DEFTA, /* TurboChannel */
- PDQ_DEFAA, /* FutureBus+ */
- PDQ_DEFQA /* Q-bus */
-};
-
-#if defined(PDQTEST)
-#include <pdq_os_test.h>
-#elif defined(__FreeBSD__) || defined(__bsdi__) || defined(__NetBSD__) \
- || defined(__OpenBSD__)
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#ifndef M_MCAST
-#include <sys/mbuf.h>
-#endif /* M_CAST */
-#include <sys/malloc.h>
-#include <uvm/uvm_extern.h>
-
-#define PDQ_USE_MBUFS
-#if defined(__NetBSD__) || defined(__OpenBSD__)
-#define PDQ_OS_PREFIX "%s: "
-#define PDQ_OS_PREFIX_ARGS pdq->pdq_os_name
-#else
-#define PDQ_OS_PREFIX "%s%d: "
-#define PDQ_OS_PREFIX_ARGS pdq->pdq_os_name, pdq->pdq_unit
-#endif
-#define PDQ_OS_PAGESIZE NBPG
-#define PDQ_OS_USEC_DELAY(n) DELAY(n)
-#define PDQ_OS_MEMZERO(p, n) bzero((caddr_t)(p), (n))
-#if (defined(__NetBSD__) || defined(__OpenBSD__)) && defined(__alpha__)
-#define PDQ_OS_VA_TO_PA(pdq, p) (alpha_XXX_dmamap((vaddr_t)p))
-#else
-#define PDQ_OS_VA_TO_PA(pdq, p) vtophys((vaddr_t)p)
-#endif
-#define PDQ_OS_MEMALLOC(n) malloc(n, M_DEVBUF, M_NOWAIT)
-#define PDQ_OS_MEMFREE(p, n) free((void *) p, M_DEVBUF)
-#ifdef __FreeBSD__
-#define PDQ_OS_MEMALLOC_CONTIG(n) vm_page_alloc_contig(n, 0, 0xffffffff, PAGE_SIZE)
-#define PDQ_OS_MEMFREE_CONTIG(p, n) kmem_free(kernel_map, (vm_offset_t) p, n)
-#else
-#define PDQ_OS_MEMALLOC_CONTIG(n) uvm_km_alloc(kernel_map, round_page(n))
-#define PDQ_OS_MEMFREE_CONTIG(p, n) uvm_km_free(kernel_map, (vaddr_t) p, n)
-#endif /* __FreeBSD__ */
-
-#if defined(__FreeBSD__)
-#include <vm/pmap.h>
-#include <vm/vm_extern.h>
-#include <machine/cpufunc.h>
-#include <machine/clock.h>
-typedef void ifnet_ret_t;
-typedef int ioctl_cmd_t;
-typedef enum { PDQ_BUS_EISA, PDQ_BUS_PCI } pdq_bus_t;
-typedef u_int16_t pdq_bus_ioport_t;
-typedef volatile pdq_uint32_t *pdq_bus_memaddr_t;
-typedef pdq_bus_memaddr_t pdq_bus_memoffset_t;
-#if BSD >= 199506 /* __FreeBSD__ */
-#define PDQ_BPF_MTAP(sc, m, dir) bpf_mtap(&(sc)->sc_if, m, dir)
-#define PDQ_BPFATTACH(sc, t, s) bpfattach(&(sc)->sc_if, t, s)
-#endif
-
-
-#elif defined(__bsdi__)
-#include <machine/inline.h>
-typedef int ifnet_ret_t;
-typedef int ioctl_cmd_t;
-typedef enum { PDQ_BUS_EISA, PDQ_BUS_PCI } pdq_bus_t;
-typedef u_int16_t pdq_bus_ioport_t;
-typedef volatile pdq_uint32_t *pdq_bus_memaddr_t;
-typedef pdq_bus_memaddr_t pdq_bus_memoffset_t;
-
-
-#elif defined(__NetBSD__) || defined(__OpenBSD__)
-#include <machine/bus.h>
-#include <machine/intr.h>
-#define PDQ_OS_PTR_FMT "%p"
-typedef void ifnet_ret_t;
-typedef u_long ioctl_cmd_t;
-typedef bus_space_tag_t pdq_bus_t;
-typedef bus_space_handle_t pdq_bus_ioport_t;
-typedef bus_space_handle_t pdq_bus_memaddr_t;
-typedef pdq_uint32_t pdq_bus_memoffset_t;
-#define PDQ_OS_IOMEM
-#define PDQ_OS_IORD_32(t, base, offset) bus_space_read_4 (t, base, offset)
-#define PDQ_OS_IOWR_32(t, base, offset, data) bus_space_write_4 (t, base, offset, data)
-#define PDQ_OS_IORD_8(t, base, offset) bus_space_read_1 (t, base, offset)
-#define PDQ_OS_IOWR_8(t, base, offset, data) bus_space_write_1 (t, base, offset, data)
-#define PDQ_OS_MEMRD_32(t, base, offset) bus_space_read_4(t, base, offset)
-#define PDQ_OS_MEMWR_32(t, base, offset, data) bus_space_write_4(t, base, offset, data)
-#define PDQ_CSR_OFFSET(base, offset) (0 + (offset)*sizeof(pdq_uint32_t))
-
-#if defined(PDQ_IOMAPPED)
-#define PDQ_CSR_WRITE(csr, name, data) PDQ_OS_IOWR_32((csr)->csr_bus, (csr)->csr_base, (csr)->name, data)
-#define PDQ_CSR_READ(csr, name) PDQ_OS_IORD_32((csr)->csr_bus, (csr)->csr_base, (csr)->name)
-#else
-#define PDQ_CSR_WRITE(csr, name, data) PDQ_OS_MEMWR_32((csr)->csr_bus, (csr)->csr_base, (csr)->name, data)
-#define PDQ_CSR_READ(csr, name) PDQ_OS_MEMRD_32((csr)->csr_bus, (csr)->csr_base, (csr)->name)
-#endif
-
-#endif
-
-#if !defined(PDQ_BPF_MTAP)
-#define PDQ_BPF_MTAP(sc, m, dir) bpf_mtap((sc)->sc_bpf, m, dir)
-#endif
-
-#if !defined(PDQ_BPFATTACH)
-#define PDQ_BPFATTACH(sc, t, s)bpfattach(&(sc)->sc_bpf, &(sc)->sc_if, t, s)
-#endif
-
-#if !defined(PDQ_OS_PTR_FMT)
-#define PDQ_OS_PTR_FMT "0x%x"
-#endif
-
-#if !defined(PDQ_OS_IOMEM)
-#define PDQ_OS_IORD_32(t, base, offset) inl((base) + (offset))
-#define PDQ_OS_IOWR_32(t, base, offset, data) outl((base) + (offset), data)
-#define PDQ_OS_IORD_8(t, base, offset) inb((base) + (offset))
-#define PDQ_OS_IOWR_8(t, base, offset, data) outb((base) + (offset), data)
-#define PDQ_OS_MEMRD_32(t, base, offset) (0 + *((base) + (offset)))
-#define PDQ_OS_MEMWR_32(t, base, offset, data) do *((base) + (offset)) = (data); while (0)
-#endif
-#ifndef PDQ_CSR_OFFSET
-#define PDQ_CSR_OFFSET(base, offset) (0 + (base) + (offset))
-#endif
-
-#ifndef PDQ_CSR_WRITE
-#define PDQ_CSR_WRITE(csr, name, data) PDQ_OS_MEMWR_32((csr)->csr_bus, (csr)->name, 0, data)
-#define PDQ_CSR_READ(csr, name) PDQ_OS_MEMRD_32((csr)->csr_bus, (csr)->name, 0)
-#endif
-
-#if !defined(PDQ_HWSUPPORT)
-
-typedef struct {
-#if defined(__bsdi__)
- struct device sc_dev; /* base device */
- struct isadev sc_id; /* ISA device */
- struct intrhand sc_ih; /* interrupt vectoring */
- struct atshutdown sc_ats; /* shutdown routine */
-#elif defined(__NetBSD__) || defined(__OpenBSD__)
- struct device sc_dev; /* base device */
- void *sc_ih; /* interrupt vectoring */
- bus_space_tag_t sc_csrtag; /* space tag for CSRs */
- bus_space_handle_t sc_csrhandle; /* space handle for CSRs */
-#define sc_bc sc_csrtag
-#define sc_membase sc_csrhandle
- bus_space_tag_t sc_iotag; /* i/o space tag */
- bus_space_handle_t sc_iobase; /* i/o space handle */
-#elif defined(__FreeBSD__)
- struct kern_devconf *sc_kdc; /* freebsd cruft */
-#endif
- struct arpcom sc_arpcom;
-#define sc_if sc_arpcom.ac_if
- pdq_t *sc_pdq;
-#if !defined(__NetBSD__) && !defined(__OpenBSD__)
- pdq_bus_ioport_t sc_iobase;
-#ifdef PDQ_IOMAPPED
-#define sc_membase sc_iobase
-#else
- pdq_bus_memaddr_t sc_membase;
-#endif
- pdq_bus_t sc_bc;
-#endif /* ! __NetBSD__ && ! __OpenBSD__ */
-#if !defined(__bsdi__) || _BSDI_VERSION >= 199401
-#define sc_bpf sc_if.if_bpf
-#else
- caddr_t sc_bpf;
-#endif
-} pdq_softc_t;
-
-
-extern void pdq_ifreset(pdq_softc_t *sc);
-extern void pdq_ifinit(pdq_softc_t *sc);
-extern void pdq_ifwatchdog(struct ifnet *ifp);
-extern ifnet_ret_t pdq_ifstart(struct ifnet *ifp);
-extern int pdq_ifioctl(struct ifnet *ifp, ioctl_cmd_t cmd, caddr_t data);
-extern void pdq_ifattach(pdq_softc_t *sc, ifnet_ret_t (*ifwatchdog)(int unit));
-#endif /* !PDQ_HWSUPPORT */
-
-
-#elif defined(DLPI_PDQ)
-#include <sys/param.h>
-#include <sys/kmem.h>
-#include <sys/ddi.h>
-#include <sys/stream.h>
-
-#define PDQ_USE_STREAMS
-#define PDQ_OS_PREFIX "%s board %d "
-#define PDQ_OS_PREFIX_ARGS pdq->pdq_os_name, pdq->pdq_unit
-
-#define PDQ_OS_PAGESIZE PAGESIZE
-#define PDQ_OS_USEC_DELAY(n) drv_usecwait(n)
-#define PDQ_OS_MEMZERO(p, n) bzero((caddr_t)(p), (n))
-#define PDQ_OS_VA_TO_PA(pdq, p) vtop((caddr_t)p, NULL)
-#define PDQ_OS_MEMALLOC(n) kmem_zalloc(n, KM_NOSLEEP)
-#define PDQ_OS_MEMFREE(p, n) kmem_free((caddr_t) p, n)
-#define PDQ_OS_MEMALLOC_CONTIG(n) kmem_zalloc_physreq(n, decfddiphysreq_db, KM_NOSLEEP)
-#define PDQ_OS_MEMFREE_CONTIG(p, n) PDQ_OS_MEMFREE(p, n)
-
-extern physreq_t *decfddiphysreq_db;
-extern physreq_t *decfddiphysreq_mblk;
-
-#define PDQ_OS_DATABUF_ALLOC(b) ((void) (((b) = allocb_physreq(PDQ_OS_DATABUF_SIZE, BPRI_MED, decfddiphysreq_mblk)) && ((b)->b_wptr = (b)->b_rptr + PDQ_OS_DATABUF_SIZE)))
-
-#define PDQ_OS_IORD_8(port) inb(port)
-#define PDQ_OS_IOWR_8(port, data) outb(port, data)
-#endif
-
-
-#ifdef PDQ_USE_MBUFS
-#define PDQ_OS_DATABUF_SIZE (MCLBYTES)
-#define PDQ_OS_DATABUF_FREE(b) (m_freem(b))
-#define PDQ_OS_DATABUF_NEXT(b) ((b)->m_next)
-#define PDQ_OS_DATABUF_NEXT_SET(b, b1) ((b)->m_next = (b1))
-#define PDQ_OS_DATABUF_NEXTPKT(b) ((b)->m_nextpkt)
-#define PDQ_OS_DATABUF_NEXTPKT_SET(b, b1) ((b)->m_nextpkt = (b1))
-#define PDQ_OS_DATABUF_LEN(b) ((b)->m_len)
-#define PDQ_OS_DATABUF_LEN_SET(b, n) ((b)->m_len = (n))
-/* #define PDQ_OS_DATABUF_LEN_ADJ(b, n) ((b)->m_len += (n)) */
-#define PDQ_OS_DATABUF_PTR(b) (mtod((b), pdq_uint8_t *))
-#define PDQ_OS_DATABUF_ADJ(b, n) ((b)->m_data += (n), (b)->m_len -= (n))
-typedef struct mbuf PDQ_OS_DATABUF_T;
-
-#define PDQ_OS_DATABUF_ALLOC(b) do { \
- PDQ_OS_DATABUF_T *x_m0; \
- MGETHDR(x_m0, M_DONTWAIT, MT_DATA); \
- if (x_m0 != NULL) { \
- MCLGET(x_m0, M_DONTWAIT); \
- if ((x_m0->m_flags & M_EXT) == 0) { \
- m_free(x_m0); \
- (b) = NULL; \
- } else { \
- (b) = x_m0; \
- x_m0->m_len = PDQ_OS_DATABUF_SIZE; \
- } \
- } else { \
- (b) = NULL; \
- } \
-} while (0)
-#define PDQ_OS_DATABUF_RESET(b) ((b)->m_data = (b)->m_ext.ext_buf, (b)->m_len = MCLBYTES)
-#endif /* PDQ_USE_MBUFS */
-
-#ifdef PDQ_USE_STREAMS
-#define PDQ_OS_DATABUF_SIZE (2048)
-#define PDQ_OS_DATABUF_FREE(b) (freemsg(b))
-#define PDQ_OS_DATABUF_NEXT(b) ((b)->b_cont)
-#define PDQ_OS_DATABUF_NEXT_SET(b, b1) ((b)->b_cont = (b1))
-#define PDQ_OS_DATABUF_NEXTPKT(b) ((b)->b_next)
-#define PDQ_OS_DATABUF_NEXTPKT_SET(b, b1) ((b)->b_next = (b1))
-#define PDQ_OS_DATABUF_LEN(b) ((b)->b_wptr - (b)->b_rptr)
-#define PDQ_OS_DATABUF_LEN_SET(b, n) ((b)->b_wptr = (b)->b_rptr + (n))
-/*#define PDQ_OS_DATABUF_LEN_ADJ(b, n) ((b)->b_wptr += (n))*/
-#define PDQ_OS_DATABUF_PTR(b) ((pdq_uint8_t *) (b)->b_rptr)
-#define PDQ_OS_DATABUF_ADJ(b, n) ((b)->b_rptr += (n))
-typedef mblk_t PDQ_OS_DATABUF_T;
-
-#ifndef PDQ_OS_DATABUF_ALLOC
-#define PDQ_OS_DATABUF_ALLOC(b) ((void) (((b) = allocb(PDQ_OS_DATABUF_SIZE, BPRI_MED)) && ((b)->b_wptr = (b)->b_rptr + PDQ_OS_DATABUF_SIZE)))
-#endif /* PDQ_OS_DATABUF_ALLOC */
-#endif /* PDQ_USE_STREAMS */
-
-#define PDQ_OS_TX_TRANSMIT 5
-
-#define PDQ_OS_DATABUF_ENQUEUE(q, b) do { \
- PDQ_OS_DATABUF_NEXTPKT_SET(b, NULL); \
- if ((q)->q_tail == NULL) \
- (q)->q_head = (b); \
- else \
- PDQ_OS_DATABUF_NEXTPKT_SET(((PDQ_OS_DATABUF_T *)(q)->q_tail), b); \
- (q)->q_tail = (b); \
-} while (0)
-
-#define PDQ_OS_DATABUF_DEQUEUE(q, b) do { \
- if (((b) = (PDQ_OS_DATABUF_T *) (q)->q_head) != NULL) { \
- if (((q)->q_head = PDQ_OS_DATABUF_NEXTPKT(b)) == NULL) \
- (q)->q_tail = NULL; \
- PDQ_OS_DATABUF_NEXTPKT_SET(b, NULL); \
- } \
-} while (0)
-
-extern void pdq_os_addr_fill(pdq_t *pdq, pdq_lanaddr_t *addrs, size_t numaddrs);
-extern void pdq_os_receive_pdu(pdq_t *, PDQ_OS_DATABUF_T *pdu, size_t pdulen);
-extern void pdq_os_restart_transmitter(pdq_t *pdq);
-extern void pdq_os_transmit_done(pdq_t *pdq, PDQ_OS_DATABUF_T *pdu);
-
-extern pdq_boolean_t pdq_queue_transmit_data(pdq_t *pdq, PDQ_OS_DATABUF_T *pdu);
-extern void pdq_flush_transmitter(pdq_t *pdq);
-
-extern void pdq_run(pdq_t *pdq);
-extern pdq_state_t pdq_stop(pdq_t *pdq);
-extern void pdq_hwreset(pdq_t *pdq);
-
-extern int pdq_interrupt(pdq_t *pdq);
-extern pdq_t *pdq_initialize(pdq_bus_t bus, pdq_bus_memaddr_t csr_va,
- const char *name, int unit,
- void *ctx, pdq_type_t type);
-#endif /* _PDQ_OS_H */
diff --git a/sys/dev/pci/files.pci b/sys/dev/pci/files.pci
index fadddcdff9b..3709413caaf 100644
--- a/sys/dev/pci/files.pci
+++ b/sys/dev/pci/files.pci
@@ -1,4 +1,4 @@
-# $OpenBSD: files.pci,v 1.297 2013/10/20 08:43:44 mlarkin Exp $
+# $OpenBSD: files.pci,v 1.298 2013/10/28 12:33:32 mpi Exp $
# $NetBSD: files.pci,v 1.20 1996/09/24 17:47:15 christos Exp $
#
# Config file and device description for machine-independent PCI code.
@@ -249,11 +249,6 @@ file dev/pci/if_de.c de
attach ep at pci with ep_pci
file dev/pci/if_ep_pci.c ep_pci
-# Digital DEFPA PCI FDDI Controller
-device fpa: pdq, fddi, ifnet
-attach fpa at pci
-file dev/pci/if_fpa.c fpa
-
# AMD PCnet-PCI Ethernet controller family
device pcn: ether, ifnet, ifmedia, mii
attach pcn at pci
diff --git a/sys/dev/pci/if_fpa.c b/sys/dev/pci/if_fpa.c
deleted file mode 100644
index 0a03f0b2510..00000000000
--- a/sys/dev/pci/if_fpa.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* $OpenBSD: if_fpa.c,v 1.27 2010/09/20 07:40:38 deraadt Exp $ */
-/* $NetBSD: if_fpa.c,v 1.15 1996/10/21 22:56:40 thorpej Exp $ */
-
-/*-
- * Copyright (c) 1995, 1996 Matt Thomas <matt@3am-software.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (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_fpa.c,v 1.8 1996/05/17 01:15:18 thomas Exp
- *
- */
-
-/*
- * DEC PDQ FDDI Controller; code for BSD derived operating systems
- *
- * This module supports the DEC DEFPA PCI FDDI Controller
- */
-
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/mbuf.h>
-#include <sys/protosw.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/errno.h>
-#include <sys/malloc.h>
-#include <sys/device.h>
-
-#include <net/if.h>
-#include <net/if_types.h>
-#include <net/if_dl.h>
-#include <net/route.h>
-
-#include "bpfilter.h"
-#if NBPFILTER > 0
-#include <net/bpf.h>
-#endif
-
-#ifdef INET
-#include <netinet/in.h>
-#include <netinet/if_ether.h>
-#endif
-#include <net/if_fddi.h>
-
-#include <dev/pci/pcidevs.h>
-#include <dev/pci/pcivar.h>
-#include <dev/ic/pdqvar.h>
-#include <dev/ic/pdqreg.h>
-
-#define DEFPA_LATENCY 0x88
-#define DEFPA_CBMA (PCI_MAPREG_START + 0) /* Config Base Memory Address */
-#define DEFPA_CBIO (PCI_MAPREG_START + 4) /* Config Base I/O Address */
-
-int pdq_pci_ifintr(void *);
-int pdq_pci_match(struct device *, void *, void *);
-void pdq_pci_attach(struct device *, struct device *, void *aux);
-
-int
-pdq_pci_ifintr(arg)
- void *arg;
-{
- pdq_softc_t *sc = (pdq_softc_t *)arg;
- (void) pdq_interrupt(sc->sc_pdq);
- return (1);
-}
-
-int
-pdq_pci_match(parent, match, aux)
- struct device *parent;
- void *match;
- void *aux;
-{
- struct pci_attach_args *pa = (struct pci_attach_args *)aux;
-
- if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_DEC &&
- PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_DEC_DEFPA)
- return (1);
- return (0);
-}
-
-void
-pdq_pci_attach(parent, self, aux)
- struct device *parent;
- struct device *self;
- void *aux;
-{
- pdq_softc_t *sc = (pdq_softc_t *)self;
- struct pci_attach_args *pa = (struct pci_attach_args *)aux;
- u_int32_t data;
- pci_intr_handle_t intrhandle;
- const char *intrstr;
- bus_size_t csrsize;
-
- data = pci_conf_read(pa->pa_pc, pa->pa_tag, PCI_BHLC_REG);
- if (PCI_LATTIMER(data) < DEFPA_LATENCY) {
- data &= ~(PCI_LATTIMER_MASK << PCI_LATTIMER_SHIFT);
- data |= (DEFPA_LATENCY & PCI_LATTIMER_MASK)
- << PCI_LATTIMER_SHIFT;
- pci_conf_write(pa->pa_pc, pa->pa_tag, PCI_BHLC_REG, data);
- }
-
- bcopy(sc->sc_dev.dv_xname, sc->sc_if.if_xname, IFNAMSIZ);
- sc->sc_if.if_flags = 0;
- sc->sc_if.if_softc = sc;
-
- /*
- * NOTE: sc_bc is an alias for sc_csrtag and sc_membase is an
- * alias for sc_csrhandle. sc_iobase is not used in this front-end.
- */
-#ifdef PDQ_IOMAPPED
- if (pci_mapreg_map(pa, DEFPA_CBIO, PCI_MAPREG_TYPE_IO, 0,
- &sc->sc_csrtag, &sc->sc_csrhandle, NULL, &csrsize, 0)) {
- printf(": can't map i/o space\n");
- return;
- }
-#else
- if (pci_mapreg_map(pa, DEFPA_CBMA, PCI_MAPREG_TYPE_MEM, 0,
- &sc->sc_csrtag, &sc->sc_csrhandle, NULL, &csrsize, 0)) {
- printf(": can't map mem space\n");
- return;
- }
-#endif
-
- if (pci_intr_map(pa, &intrhandle)) {
- printf(": couldn't map interrupt\n");
- bus_space_unmap(sc->sc_csrtag, sc->sc_csrhandle, csrsize);
- return;
- }
- intrstr = pci_intr_string(pa->pa_pc, intrhandle);
- sc->sc_ih = pci_intr_establish(pa->pa_pc, intrhandle, IPL_NET,
- pdq_pci_ifintr, sc, self->dv_xname);
- if (sc->sc_ih == NULL) {
- printf(": couldn't establish interrupt");
- if (intrstr != NULL)
- printf(" at %s", intrstr);
- printf("\n");
- bus_space_unmap(sc->sc_csrtag, sc->sc_csrhandle, csrsize);
- return;
- }
- if (intrstr != NULL)
- printf(": %s\n", intrstr);
-
- sc->sc_pdq = pdq_initialize(sc->sc_csrtag, sc->sc_csrhandle,
- sc->sc_if.if_xname, 0, (void *) sc, PDQ_DEFPA);
- if (sc->sc_pdq == NULL) {
- printf(": initialization failed\n");
- bus_space_unmap(sc->sc_csrtag, sc->sc_csrhandle, csrsize);
- return;
- }
-
- bcopy((caddr_t) sc->sc_pdq->pdq_hwaddr.lanaddr_bytes,
- sc->sc_arpcom.ac_enaddr, 6);
- pdq_ifattach(sc, NULL);
-}
-
-struct cfattach fpa_ca = {
- sizeof(pdq_softc_t), pdq_pci_match, pdq_pci_attach
-};
-
-struct cfdriver fpa_cd = {
- NULL, "fpa", DV_IFNET
-};
diff --git a/sys/dev/tc/files.tc b/sys/dev/tc/files.tc
index 4487b0db9f8..7abbfb13941 100644
--- a/sys/dev/tc/files.tc
+++ b/sys/dev/tc/files.tc
@@ -1,4 +1,4 @@
-# $OpenBSD: files.tc,v 1.10 2013/09/24 20:11:05 miod Exp $
+# $OpenBSD: files.tc,v 1.11 2013/10/28 12:33:32 mpi Exp $
# $NetBSD: files.tc,v 1.26 2001/11/28 10:21:24 lukem Exp $
#
# Config file and device description for machine-independent
@@ -28,11 +28,6 @@ device bba: audio, am7930, mulaw
attach bba at ioasic
file dev/tc/bba.c bba
-# DEFTA FDDI controller
-device fta: pdq, fddi, ifnet
-attach fta at tc
-file dev/tc/if_fta.c fta
-
# TCDS dual channel SCSI
device tcds {[chip = -1]}
attach tcds at tc
diff --git a/sys/dev/tc/if_fta.c b/sys/dev/tc/if_fta.c
deleted file mode 100644
index d0720800c2b..00000000000
--- a/sys/dev/tc/if_fta.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* $OpenBSD: if_fta.c,v 1.17 2010/09/20 07:40:42 deraadt Exp $ */
-/* $NetBSD: if_fta.c,v 1.7 1996/10/22 21:37:26 cgd Exp $ */
-
-/*-
- * Copyright (c) 1996 Matt Thomas <matt@3am-software.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (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_fta.c,v 1.3 1996/05/17 01:15:18 thomas Exp
- *
- */
-
-/*
- * DEC TurboChannel FDDI Controller; code for BSD derived operating systems
- *
- * Written by Matt Thomas
- *
- * This module supports the DEC DEFTA TurboChannel FDDI Controller
- */
-
-
-#include <sys/param.h>
-#include <sys/kernel.h>
-#include <sys/mbuf.h>
-#include <sys/protosw.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/errno.h>
-#include <sys/malloc.h>
-#include <sys/device.h>
-
-#include <net/if.h>
-#include <net/if_types.h>
-
-#ifdef INET
-#include <netinet/in.h>
-#include <netinet/if_ether.h>
-#endif
-#include <net/if_fddi.h>
-
-#include <uvm/uvm_extern.h>
-
-#include <dev/tc/tcvar.h>
-#include <dev/ic/pdqvar.h>
-#include <dev/ic/pdqreg.h>
-
-int pdq_tc_match(struct device *, void *, void *);
-void pdq_tc_attach(struct device *, struct device *, void *);
-
-int
-pdq_tc_match(parent, match, aux)
- struct device *parent;
- void *match;
- void *aux;
-{
- struct tc_attach_args *ta = (struct tc_attach_args *) aux;
-
- if (strncmp("PMAF-F", ta->ta_modname, 6) == 0)
- return (1);
- return (0);
-}
-
-void
-pdq_tc_attach(parent, self, aux)
- struct device *parent;
- struct device *self;
- void *aux;
-{
- pdq_softc_t * const sc = (pdq_softc_t *) self;
- struct tc_attach_args * const ta = (struct tc_attach_args *) aux;
-
- /*
- * NOTE: sc_bc is an alias for sc_csrtag and sc_membase is an
- * alias for sc_csrhandle. sc_iobase is not used in this front-end.
- */
- sc->sc_csrtag = ta->ta_memt;
- bcopy(sc->sc_dev.dv_xname, sc->sc_if.if_xname, IFNAMSIZ);
- sc->sc_if.if_flags = 0;
- sc->sc_if.if_softc = sc;
-
- if (bus_space_map(sc->sc_csrtag, ta->ta_addr + PDQ_TC_CSR_OFFSET,
- PDQ_TC_CSR_SPACE, 0, &sc->sc_csrhandle)) {
- printf("\n%s: can't map card memory!\n", sc->sc_dev.dv_xname);
- return;
- }
-
- printf("\n");
- sc->sc_pdq = pdq_initialize(sc->sc_csrtag, sc->sc_csrhandle,
- sc->sc_if.if_xname, 0, (void *) sc, PDQ_DEFTA);
- if (sc->sc_pdq == NULL) {
- printf("%s: initialization failed\n", sc->sc_dev.dv_xname);
- return;
- }
- bcopy((caddr_t) sc->sc_pdq->pdq_hwaddr.lanaddr_bytes,
- sc->sc_arpcom.ac_enaddr, 6);
- pdq_ifattach(sc, NULL);
-
- tc_intr_establish(parent, ta->ta_cookie, IPL_NET,
- (int (*)(void *)) pdq_interrupt, sc->sc_pdq, self->dv_xname);
-}
-
-struct cfattach fta_ca = {
- sizeof(pdq_softc_t), pdq_tc_match, pdq_tc_attach
-};
-
-struct cfdriver fta_cd = {
- NULL, "fta", DV_IFNET
-};
diff --git a/sys/net/if_fddi.h b/sys/net/if_fddi.h
deleted file mode 100644
index e1b3d8aab70..00000000000
--- a/sys/net/if_fddi.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* $OpenBSD: if_fddi.h,v 1.6 2003/06/02 23:28:12 millert Exp $ */
-/* $NetBSD: if_fddi.h,v 1.2 1995/08/19 04:35:28 cgd Exp $ */
-
-/*
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)if_fddi.h 8.1 (Berkeley) 6/10/93
- */
-
-#ifndef _NETINET_IF_FDDI_H_
-#define _NETINET_IF_FDDI_H_
-
-/*
- * Structure of an 100Mb/s FDDI header.
- */
-struct fddi_header {
- u_char fddi_fc;
- u_char fddi_dhost[6];
- u_char fddi_shost[6];
-};
-
-#define FDDIMTU 4470
-#define FDDIIPMTU 4352
-#define FDDIMIN 3
-
-#define FDDIFC_C 0x80 /* 0b10000000 */
-#define FDDIFC_L 0x40 /* 0b01000000 */
-#define FDDIFC_F 0x30 /* 0b00110000 */
-#define FDDIFC_Z 0x0F /* 0b00001111 */
-
-#define FDDIFC_LLC_ASYNC 0x50
-#define FDDIFC_LLC_PRIO0 0
-#define FDDIFC_LLC_PRIO1 1
-#define FDDIFC_LLC_PRIO2 2
-#define FDDIFC_LLC_PRIO3 3
-#define FDDIFC_LLC_PRIO4 4
-#define FDDIFC_LLC_PRIO5 5
-#define FDDIFC_LLC_PRIO6 6
-#define FDDIFC_LLC_PRIO7 7
-#define FDDIFC_LLC_SYNC 0xd0
-#define FDDIFC_SMT 0x40
-
-#if defined(_KERNEL)
-#define fddibroadcastaddr etherbroadcastaddr
-#define fddi_ipmulticast_min ether_ipmulticast_min
-#define fddi_ipmulticast_max ether_ipmulticast_max
-#define fddi_addmulti ether_addmulti
-#define fddi_delmulti ether_delmulti
-#define fddi_sprintf ether_sprintf
-
-void fddi_ifattach(struct ifnet *);
-void fddi_input(struct ifnet *, struct fddi_header *, struct mbuf *);
-int fddi_output(struct ifnet *,
- struct mbuf *, struct sockaddr *, struct rtentry *);
-#endif /* _KERNEL */
-#endif /* _NET_IF_FDDI_H_ */
diff --git a/sys/net/if_fddisubr.c b/sys/net/if_fddisubr.c
deleted file mode 100644
index 70f679d05f5..00000000000
--- a/sys/net/if_fddisubr.c
+++ /dev/null
@@ -1,461 +0,0 @@
-/* $OpenBSD: if_fddisubr.c,v 1.64 2013/10/23 19:24:59 deraadt Exp $ */
-/* $NetBSD: if_fddisubr.c,v 1.5 1996/05/07 23:20:21 christos Exp $ */
-
-/*
- * Copyright (c) 1995
- * Matt Thomas. All rights reserved.
- * Copyright (c) 1982, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)if_fddisubr.c 8.1 (Berkeley) 6/10/93
- */
-
-/*
- * @(#)COPYRIGHT 1.1 (NRL) January 1997
- *
- * NRL grants permission for redistribution and use in source and binary
- * forms, with or without modification, of the software and documentation
- * created at NRL provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgements:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * This product includes software developed at the Information
- * Technology Division, US Naval Research Laboratory.
- * 4. Neither the name of the NRL nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THE SOFTWARE PROVIDED BY NRL IS PROVIDED BY NRL AND CONTRIBUTORS ``AS
- * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NRL OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation
- * are those of the authors and should not be interpreted as representing
- * official policies, either expressed or implied, of the US Naval
- * Research Laboratory (NRL).
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/malloc.h>
-#include <sys/mbuf.h>
-#include <sys/protosw.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/errno.h>
-#include <sys/syslog.h>
-
-
-#include <net/if.h>
-#include <net/netisr.h>
-#include <net/route.h>
-#include <net/if_llc.h>
-#include <net/if_dl.h>
-#include <net/if_types.h>
-
-#ifdef INET
-#include <netinet/in.h>
-#endif
-#include <netinet/if_ether.h>
-#include <net/if_fddi.h>
-
-#ifdef INET6
-#ifndef INET
-#include <netinet/in.h>
-#endif
-#include <netinet6/in6_var.h>
-#include <netinet6/nd6.h>
-#endif
-
-#include "bpfilter.h"
-
-#include "carp.h"
-#if NCARP > 0
-#include <netinet/ip_carp.h>
-#endif
-
-#define senderr(e) { error = (e); goto bad;}
-
-/*
- * This really should be defined in if_llc.h but in case it isn't.
- */
-#ifndef llc_snap
-#define llc_snap llc_un.type_snap
-#endif
-
-/*
- * FDDI output routine.
- * Encapsulate a packet of type family for the local net.
- * Assumes that ifp is actually pointer to arpcom structure.
- */
-int
-fddi_output(ifp0, m0, dst, rt0)
- struct ifnet *ifp0;
- struct mbuf *m0;
- struct sockaddr *dst;
- struct rtentry *rt0;
-{
- u_int16_t type;
- int s, len, error = 0, hdrcmplt = 0;
- u_char edst[6], esrc[6];
- struct mbuf *m = m0;
- struct rtentry *rt;
- struct mbuf *mcopy = (struct mbuf *)0;
- struct fddi_header *fh;
- struct arpcom *ac = (struct arpcom *)ifp0;
- short mflags;
- struct ifnet *ifp = ifp0;
-
-#ifdef DIAGNOSTIC
- if (ifp->if_rdomain != rtable_l2(m->m_pkthdr.rdomain)) {
- printf("%s: trying to send packet on wrong domain. "
- "if %d vs. mbuf %d, AF %d\n", ifp->if_xname,
- ifp->if_rdomain, rtable_l2(m->m_pkthdr.rdomain),
- dst->sa_family);
- }
-#endif
-
-#if NCARP > 0
- if (ifp->if_type == IFT_CARP) {
- struct ifaddr *ifa;
-
- /* loop back if this is going to the carp interface */
- if (dst != NULL && LINK_STATE_IS_UP(ifp0->if_link_state) &&
- (ifa = ifa_ifwithaddr(dst, ifp->if_rdomain)) != NULL &&
- ifa->ifa_ifp == ifp0)
- return (looutput(ifp0, m, dst, rt0));
-
- ifp = ifp->if_carpdev;
- ac = (struct arpcom *)ifp;
-
- if ((ifp0->if_flags & (IFF_UP|IFF_RUNNING)) !=
- (IFF_UP|IFF_RUNNING))
- senderr(ENETDOWN);
- }
-#endif /* NCARP > 0 */
- if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING))
- senderr(ENETDOWN);
- if ((rt = rt0) != NULL) {
- if ((rt->rt_flags & RTF_UP) == 0) {
- if ((rt0 = rt = rtalloc1(dst, RT_REPORT,
- m->m_pkthdr.rdomain)) != NULL)
- rt->rt_refcnt--;
- else
- senderr(EHOSTUNREACH);
- }
- if (rt->rt_flags & RTF_GATEWAY) {
- if (rt->rt_gwroute == 0)
- goto lookup;
- if (((rt = rt->rt_gwroute)->rt_flags & RTF_UP) == 0) {
- rtfree(rt);
- rt = rt0;
- lookup:
- rt->rt_gwroute = rtalloc1(rt->rt_gateway,
- RT_REPORT, ifp->if_rdomain);
- if ((rt = rt->rt_gwroute) == NULL)
- senderr(EHOSTUNREACH);
- }
- }
- if (rt->rt_flags & RTF_REJECT)
- if (rt->rt_rmx.rmx_expire == 0 ||
- time_second < rt->rt_rmx.rmx_expire)
- senderr(rt == rt0 ? EHOSTDOWN : EHOSTUNREACH);
- }
-
- switch (dst->sa_family) {
-
-#ifdef INET
- case AF_INET:
- if (!arpresolve(ac, rt, m, dst, edst))
- return (0); /* if not yet resolved */
- /* If broadcasting on a simplex interface, loopback a copy */
- if ((m->m_flags & M_BCAST) && (ifp->if_flags & IFF_SIMPLEX) &&
- !m->m_pkthdr.pf.routed)
- mcopy = m_copy(m, 0, (int)M_COPYALL);
- type = htons(ETHERTYPE_IP);
- break;
-#endif
-#ifdef INET6
- case AF_INET6:
- if (!nd6_storelladdr(ifp, rt, m, dst, (u_char *)edst))
- return (0); /* if not yet resolved */
- type = htons(ETHERTYPE_IPV6);
- break;
-#endif
- case pseudo_AF_HDRCMPLT:
- fh = (struct fddi_header *)dst->sa_data;
- hdrcmplt = 1;
- bcopy((caddr_t)fh->fddi_shost, (caddr_t)esrc, sizeof (esrc));
- /* FALLTHROUGH */
-
- case AF_UNSPEC:
- {
- struct ether_header *eh;
- eh = (struct ether_header *)dst->sa_data;
- bcopy((caddr_t)eh->ether_dhost, (caddr_t)edst, sizeof (edst));
- if (*edst & 1)
- m->m_flags |= (M_BCAST|M_MCAST);
- type = eh->ether_type;
- break;
- }
-
-#if NBPFILTER > 0
- case AF_IMPLINK:
- {
- fh = mtod(m, struct fddi_header *);
- error = EPROTONOSUPPORT;
- switch (fh->fddi_fc & (FDDIFC_C|FDDIFC_L|FDDIFC_F)) {
- case FDDIFC_LLC_ASYNC: {
- /* legal priorities are 0 through 7 */
- if ((fh->fddi_fc & FDDIFC_Z) > 7)
- goto bad;
- break;
- }
- case FDDIFC_LLC_SYNC: {
- /* FDDIFC_Z bits reserved, must be zero */
- if (fh->fddi_fc & FDDIFC_Z)
- goto bad;
- break;
- }
- case FDDIFC_SMT: {
- /* FDDIFC_Z bits must be non zero */
- if ((fh->fddi_fc & FDDIFC_Z) == 0)
- goto bad;
- break;
- }
- default: {
- /* anything else is too dangerous */
- goto bad;
- }
- }
- error = 0;
- if (fh->fddi_dhost[0] & 1)
- m->m_flags |= (M_BCAST|M_MCAST);
- goto queue_it;
- }
-#endif
- default:
- printf("%s: can't handle af%d\n", ifp->if_xname,
- dst->sa_family);
- senderr(EAFNOSUPPORT);
- }
-
- if (mcopy)
- (void) looutput(ifp, mcopy, dst, rt);
-
- if (type != 0) {
- struct llc *l;
- M_PREPEND(m, sizeof (struct llc), M_DONTWAIT);
- if (m == 0)
- senderr(ENOBUFS);
- l = mtod(m, struct llc *);
- l->llc_control = LLC_UI;
- l->llc_dsap = l->llc_ssap = LLC_SNAP_LSAP;
- l->llc_snap.org_code[0] = l->llc_snap.org_code[1] = l->llc_snap.org_code[2] = 0;
- bcopy((caddr_t) &type, (caddr_t) &l->llc_snap.ether_type,
- sizeof(u_short));
- }
- /*
- * Add local net header. If no space in first mbuf,
- * allocate another.
- */
- M_PREPEND(m, sizeof (struct fddi_header), M_DONTWAIT);
- if (m == 0)
- senderr(ENOBUFS);
- fh = mtod(m, struct fddi_header *);
- fh->fddi_fc = FDDIFC_LLC_ASYNC|FDDIFC_LLC_PRIO4;
- bcopy((caddr_t)edst, (caddr_t)fh->fddi_dhost, sizeof (edst));
-#if NBPFILTER > 0
- queue_it:
-#endif
- if (hdrcmplt)
- bcopy((caddr_t)esrc, (caddr_t)fh->fddi_shost,
- sizeof(fh->fddi_shost));
- else
- bcopy((caddr_t)ac->ac_enaddr, (caddr_t)fh->fddi_shost,
- sizeof(fh->fddi_shost));
-#if NCARP > 0
- if (ifp0 != ifp && ifp0->if_type == IFT_CARP) {
- bcopy((caddr_t)((struct arpcom *)ifp0)->ac_enaddr,
- (caddr_t)fh->fddi_shost, sizeof(fh->fddi_shost));
- }
-#endif
- mflags = m->m_flags;
- len = m->m_pkthdr.len;
- s = splnet();
- /*
- * Queue message on interface, and start output if interface
- * not yet active.
- */
- IFQ_ENQUEUE(&ifp->if_snd, m, NULL, error);
- if (error) {
- /* mbuf is already freed */
- splx(s);
- return (error);
- }
- ifp->if_obytes += len;
-#if NCARP > 0
- if (ifp != ifp0)
- ifp0->if_obytes += len;
-#endif /* NCARP > 0 */
- if (mflags & M_MCAST)
- ifp->if_omcasts++;
- if_start(ifp);
- splx(s);
- return (error);
-
-bad:
- if (m)
- m_freem(m);
- return (error);
-}
-
-/*
- * Process a received FDDI packet;
- * the packet is in the mbuf chain m without
- * the fddi header, which is provided separately.
- */
-void
-fddi_input(ifp, fh, m)
- struct ifnet *ifp;
- struct fddi_header *fh;
- struct mbuf *m;
-{
- struct ifqueue *inq;
- struct llc *l;
- int s;
-
- if ((ifp->if_flags & IFF_UP) == 0) {
- m_freem(m);
- return;
- }
- /* mark incoming routing domain */
- m->m_pkthdr.rdomain = ifp->if_rdomain;
-
- ifp->if_ibytes += m->m_pkthdr.len + sizeof (*fh);
- if (bcmp((caddr_t)fddibroadcastaddr, (caddr_t)fh->fddi_dhost,
- sizeof(fddibroadcastaddr)) == 0)
- m->m_flags |= M_BCAST;
- else if (fh->fddi_dhost[0] & 1)
- m->m_flags |= M_MCAST;
- if (m->m_flags & (M_BCAST|M_MCAST))
- ifp->if_imcasts++;
-
- l = mtod(m, struct llc *);
- switch (l->llc_dsap) {
-#if defined(INET) || defined(INET6)
- case LLC_SNAP_LSAP:
- {
- u_int16_t etype;
- if (l->llc_control != LLC_UI || l->llc_ssap != LLC_SNAP_LSAP)
- goto dropanyway;
- if (l->llc_snap.org_code[0] != 0 || l->llc_snap.org_code[1] != 0|| l->llc_snap.org_code[2] != 0)
- goto dropanyway;
- etype = ntohs(l->llc_snap.ether_type);
- m_adj(m, LLC_SNAPFRAMELEN);
-
-#if NCARP > 0
- if (ifp->if_carp && ifp->if_type != IFT_CARP &&
- (carp_input(m, (u_int8_t *)&fh->fddi_shost,
- (u_int8_t *)&fh->fddi_dhost, l->llc_snap.ether_type) == 0))
- return;
-#endif
-
- switch (etype) {
-#ifdef INET
- case ETHERTYPE_IP:
- schednetisr(NETISR_IP);
- inq = &ipintrq;
- break;
-
- case ETHERTYPE_ARP:
- if (ifp->if_flags & IFF_NOARP)
- goto dropanyway;
- schednetisr(NETISR_ARP);
- inq = &arpintrq;
- break;
-#endif
-#ifdef INET6
- case ETHERTYPE_IPV6:
- schednetisr(NETISR_IPV6);
- inq = &ip6intrq;
- break;
-#endif /* INET6 */
- default:
- /* printf("fddi_input: unknown protocol 0x%x\n", etype); */
- ifp->if_noproto++;
- goto dropanyway;
- }
- break;
- }
-#endif /* INET || INET6 */
-
- default:
- /* printf("fddi_input: unknown dsap 0x%x\n", l->llc_dsap); */
- ifp->if_noproto++;
- dropanyway:
- m_freem(m);
- return;
- }
-
- s = splnet();
- IF_INPUT_ENQUEUE(inq, m);
- splx(s);
-}
-/*
- * Perform common duties while attaching to interface list
- */
-void
-fddi_ifattach(ifp)
- struct ifnet *ifp;
-{
-
- ifp->if_type = IFT_FDDI;
- ifp->if_addrlen = 6;
- ifp->if_hdrlen = 21;
- ifp->if_mtu = FDDIMTU;
- ifp->if_output = fddi_output;
- if_alloc_sadl(ifp);
- bcopy((caddr_t)((struct arpcom *)ifp)->ac_enaddr,
- LLADDR(ifp->if_sadl), ifp->if_addrlen);
-}
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index d5637bae8d5..c37a079de2d 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_ether.c,v 1.108 2013/10/14 16:06:33 bluhm Exp $ */
+/* $OpenBSD: if_ether.c,v 1.109 2013/10/28 12:33:32 mpi Exp $ */
/* $NetBSD: if_ether.c,v 1.31 1996/05/11 12:59:58 mycroft Exp $ */
/*
@@ -54,7 +54,6 @@
#include <net/if.h>
#include <net/if_dl.h>
#include <net/route.h>
-#include <net/if_fddi.h>
#include <net/if_types.h>
#include <netinet/in.h>
@@ -164,24 +163,8 @@ arp_rtrequest(int req, struct rtentry *rt)
timeout_add_sec(&arptimer_to, 1);
}
- if (rt->rt_flags & RTF_GATEWAY) {
- if (req != RTM_ADD)
- return;
-
- /*
- * linklayers with particular link MTU limitation. it is a bit
- * awkward to have FDDI handling here, we should split ARP from
- * netinet/if_ether.c like NetBSD does.
- */
- switch (rt->rt_ifp->if_type) {
- case IFT_FDDI:
- if (rt->rt_ifp->if_mtu > FDDIIPMTU)
- rt->rt_rmx.rmx_mtu = FDDIIPMTU;
- break;
- }
-
+ if (rt->rt_flags & RTF_GATEWAY)
return;
- }
switch (req) {
@@ -210,18 +193,6 @@ arp_rtrequest(int req, struct rtentry *rt)
* from it do not need their expiration time set.
*/
rt->rt_expire = time_second;
- /*
- * linklayers with particular link MTU limitation.
- */
- switch (rt->rt_ifp->if_type) {
- case IFT_FDDI:
- if ((rt->rt_rmx.rmx_locks & RTV_MTU) == 0 &&
- (rt->rt_rmx.rmx_mtu > FDDIIPMTU ||
- (rt->rt_rmx.rmx_mtu == 0 &&
- rt->rt_ifp->if_mtu > FDDIIPMTU)))
- rt->rt_rmx.rmx_mtu = FDDIIPMTU;
- break;
- }
break;
}
/* Announce a new entry if requested. */
diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c
index a967c29e4ff..702c2cb424f 100644
--- a/sys/netinet/ip_carp.c
+++ b/sys/netinet/ip_carp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_carp.c,v 1.214 2013/10/20 11:03:01 phessler Exp $ */
+/* $OpenBSD: ip_carp.c,v 1.215 2013/10/28 12:33:32 mpi Exp $ */
/*
* Copyright (c) 2002 Michael Shalayeff. All rights reserved.
@@ -58,10 +58,6 @@
/* for arc4random() */
#include <dev/rndvar.h>
-#if NFDDI > 0
-#include <net/if_fddi.h>
-#endif
-
#include <crypto/sha1.h>
#ifdef INET
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index 0675307b32d..fbc0a64bf36 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: nd6.c,v 1.103 2013/10/20 11:03:02 phessler Exp $ */
+/* $OpenBSD: nd6.c,v 1.104 2013/10/28 12:33:32 mpi Exp $ */
/* $KAME: nd6.c,v 1.280 2002/06/08 19:52:07 itojun Exp $ */
/*
@@ -49,7 +49,6 @@
#include <net/if.h>
#include <net/if_dl.h>
#include <net/if_types.h>
-#include <net/if_fddi.h>
#include <net/route.h>
#include <netinet/in.h>
@@ -188,11 +187,7 @@ nd6_setmtu0(struct ifnet *ifp, struct nd_ifinfo *ndi)
u_int32_t omaxmtu;
omaxmtu = ndi->maxmtu;
-
- if (ifp->if_type == IFT_FDDI)
- ndi->maxmtu = MIN(FDDIMTU, ifp->if_mtu);
- else
- ndi->maxmtu = ifp->if_mtu;
+ ndi->maxmtu = ifp->if_mtu;
/*
* Decreasing the interface MTU under IPV6 minimum MTU may cause
@@ -1809,15 +1804,11 @@ int
nd6_need_cache(struct ifnet *ifp)
{
/*
- * XXX: we currently do not make neighbor cache on any interface
- * other than Ethernet, FDDI and GIF.
- *
* RFC2893 says:
* - unidirectional tunnels needs no ND
*/
switch (ifp->if_type) {
case IFT_ETHER:
- case IFT_FDDI:
case IFT_IEEE1394:
case IFT_PROPVIRTUAL:
case IFT_L2VLAN:
@@ -1839,7 +1830,6 @@ nd6_storelladdr(struct ifnet *ifp, struct rtentry *rt, struct mbuf *m,
if (m->m_flags & M_MCAST) {
switch (ifp->if_type) {
case IFT_ETHER:
- case IFT_FDDI:
ETHER_MAP_IPV6_MULTICAST(&satosin6(dst)->sin6_addr,
desten);
return (1);