Subject: kern/1959: EISA autoconfiguration doesn't.
To: None <gnats-bugs@gnats.netbsd.org>
From: Chris G. Demetriou <cgd@NetBSD.ORG>
List: netbsd-bugs
Date: 01/18/1996 22:36:14
>Number: 1959
>Category: kern
>Synopsis: There is no EISA autoconf code. EISA device config sucks now
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: kern-bug-people (Kernel Bug People)
>State: open
>Class: change-request
>Submitter-Id: net
>Arrival-Date: Thu Jan 18 23:05:02 1996
>Last-Modified:
>Originator: Chris G. Demetriou
>Organization:
Kernel Hackers 'r' Us
>Release: NetBSD-current, January 18, 1996
>Environment:
System: NetBSD sun-lamp.pc.cs.cmu.edu 1.1A NetBSD 1.1A (SUN_LAMP) #34: Thu Jan 18 20:53:30 EST 1996 cgd@sun-lamp.pc.cs.cmu.edu:/usr/src/sys/arch/i386/compile/SUN_LAMP i386
>Description:
There is no proper EISA autconfiguration code. Because of
this, EISA device configuration sucks.
EISA device configuration sucks in a couple of ways:
(1) because EISA devices are configured in the
same way as ISA devices, they can't clone.
since EISA is a direct-config bus, they should
be able to.
(2) because there is no special, device-independent EISA
configuration code, each EISA device driver must duplicate
large chunks of what should be device-independent code,
to see what devices are around, and where.
>How-To-Repeat:
Look at various EISA device drivers. Note that they all contain
a loop looking through all EISA slots, for instances of themselves.
Specify an EISA device as "cloning," i.e. "starred," in your kernel
config file. Try 'ahb' for instance. Note than when you
boot, the kernel panics while trying to configure that device.
>Fix:
The following patch fixes all that.
It includes a machine-independent EISA bus device driver which:
(1) It makes the 'eisa' a first-class device, which finds and
attaches subdevices.
(2) it includes machinery for conversion of standard EISA
ID registers into representative strings.
(3) when devices are found on the EISA bus, but not configured
into the kernel, the EISA bus code prints out what it knows
about the device, and notes that it wasn't configured.
(4) if EISAVERBOSE is defined, code is included to try to
determine the real vendor & product name from the encoded
vendor & product IDs, using a table of known devices.
It updates all i386 configuration files to know about that driver,
as appropriate.
It updates the ahb driver (the only 'pure' EISA driver) to use the new
EISA autoconfiguration mechanism, and updates the i386 kernel config
files, as appropriate, to make it use the new configuration syntax
and to clone. (now, ahb specs look like: ahb* at eisa? slot ?.)
None of the other EISA drivers were updated, because they're not 'pure'
EISA drivers. However, because of the way EISA device configuration
used to work, they will continue working, without modification. (The
only side effect is that, for them, the EISA code will now note that
the device exists, but will call it "not configured.") Over time,
the remaining EISA drivers (which also support ISA bus devices), can
be converted to properly use the new, easier mechanism. New drivers
should be written to use the new mechanism.
Index: dev/eisa/Makefile
*** /dev/null Thu Jan 18 22:13:51 1996
--- dev/eisa/Makefile Thu Jan 18 18:20:09 1996
***************
*** 0 ****
--- 1,7 ----
+ # $NetBSD: Makefile,v 1.1 1995/06/18 01:07:04 cgd Exp $
+
+ AWK= awk
+
+ eisadevs.h eisadevs_data.h: eisadevs devlist2h.awk
+ /bin/rm -f eisadevs.h eisadevs_data.h
+ ${AWK} -f devlist2h.awk eisadevs
Index: dev/eisa/eisa.c
*** /dev/null Thu Jan 18 22:13:51 1996
--- dev/eisa/eisa.c Thu Jan 18 22:02:21 1996
***************
*** 0 ****
--- 1,244 ----
+ /* $NetBSD$ */
+
+ /*
+ * Copyright (c) 1995, 1996 Christopher G. Demetriou
+ * 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Christopher G. Demetriou
+ * for the NetBSD Project.
+ * 4. 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.
+ */
+
+ /*
+ * EISA Bus device
+ *
+ * Makes sure an EISA bus is present, and finds and attaches devices
+ * living on it.
+ */
+
+ #include <sys/param.h>
+ #include <sys/systm.h>
+ #include <sys/device.h>
+
+ #include <dev/eisa/eisareg.h>
+ #include <dev/eisa/eisavar.h>
+ #include <dev/eisa/eisadevs.h>
+
+ #include <machine/pio.h> /* XXX shouldn't use inb directly */
+
+ struct eisa_softc {
+ struct device sc_dev; /* this is it, for now */
+ };
+
+ int eisamatch __P((struct device *, void *, void *));
+ void eisaattach __P((struct device *, struct device *, void *));
+
+ struct cfdriver eisacd = {
+ NULL, "eisa", eisamatch, eisaattach, DV_DULL, sizeof(struct eisa_softc)
+ };
+
+ int eisasubmatch __P((struct device *, void *, void *));
+ int eisaprint __P((void *, char *));
+ void eisa_devinfo __P((const char *, char *));
+
+ int
+ eisamatch(parent, match, aux)
+ struct device *parent;
+ void *match, *aux;
+ {
+ struct cfdata *cf = match;
+ #if 0 /* XXX When eisa no longer attaches to 'root', something like this */
+ struct eisa_attach_args *ea = aux;
+
+ /*
+ * There are no locators. Assume the programmer who 'found'
+ * the device was not a moron. Only fail if they weren't
+ * looking for an EISA bus.
+ */
+ if (ea->ea_bus != BUS_EISA)
+ return (0);
+ #endif /* XXX */
+ return (1);
+ }
+
+ int
+ eisaprint(aux, eisa)
+ void *aux;
+ char *eisa;
+ {
+ register struct eisadev_attach_args *eda = aux;
+
+ printf(" slot %d", eda->eda_slot);
+ return (UNCONF);
+ }
+
+ int
+ eisasubmatch(parent, match, aux)
+ struct device *parent;
+ void *match, *aux;
+ {
+ struct cfdata *cf = match;
+ struct eisadev_attach_args *eda = aux;
+
+ if (cf->eisacf_slot != EISA_UNKNOWN_SLOT &&
+ cf->eisacf_slot != eda->eda_slot)
+ return 0;
+ return ((*cf->cf_driver->cd_match)(parent, match, aux));
+ }
+
+ void
+ eisaattach(parent, self, aux)
+ struct device *parent, *self;
+ void *aux;
+ {
+ #if 0 /* XXX */
+ struct eisa_attach_args *ea = aux;
+ #endif /* XXX */
+ struct eisa_softc *sc = (struct eisa_softc *)self;
+ int slot;
+
+ printf("\n");
+
+ /*
+ * Search for and attach subdevices.
+ *
+ * Slot 0 is the "motherboard" slot, and the code attaching
+ * the EISA bus should have already attached an ISA bus there.
+ */
+ for (slot = 1; slot < EISA_MAX_SLOT; slot++) {
+ struct eisadev_attach_args eda;
+ struct cfdata *cf;
+ u_int slotaddr;
+ int i;
+
+ eda.eda_slot = slot;
+ slotaddr = EISA_SLOT_ADDR(slot);
+ #if 0
+ printf("%s slot %d: at 0x%x\n", sc->sc_dev.dv_xname, slot,
+ slotaddr);
+ #endif
+
+ /* Get the vendor ID bytes */
+ for (i = 0; i < EISA_NVIDREGS; i++)
+ eda.eda_vid[i] = inb(slotaddr + EISA_SLOTOFF_VID + i);
+
+ /* Check for device existence */
+ if (EISA_VENDID_NODEV(eda.eda_vid)) {
+ #if 0
+ printf("%s slot %d: no device\n", sc->sc_dev.dv_xname,
+ slot);
+ printf("\t(0x%x, 0x%x)\n", eda.eda_vid[0],
+ eda.eda_vid[1]);
+ #endif
+ continue;
+ }
+
+ /* And check that the firmware didn't biff something badly */
+ if (EISA_VENDID_IDDELAY(eda.eda_vid)) {
+ printf("%s slot %d: slot not configured by BIOS?\n",
+ self->dv_xname, slot);
+ continue;
+ }
+
+ /* Get the product ID bytes */
+ for (i = 0; i < EISA_NPIDREGS; i++)
+ eda.eda_pid[i] = inb(slotaddr + EISA_SLOTOFF_PID + i);
+
+ /* Credate the ID string from the vendor and product IDs */
+ eda.eda_idstring[0] = EISA_VENDID_0(eda.eda_vid);
+ eda.eda_idstring[1] = EISA_VENDID_1(eda.eda_vid);
+ eda.eda_idstring[2] = EISA_VENDID_2(eda.eda_vid);
+ eda.eda_idstring[3] = EISA_PRODID_0(eda.eda_pid);
+ eda.eda_idstring[4] = EISA_PRODID_1(eda.eda_pid);
+ eda.eda_idstring[5] = EISA_PRODID_2(eda.eda_pid);
+ eda.eda_idstring[6] = EISA_PRODID_3(eda.eda_pid);
+ eda.eda_idstring[7] = '\0'; /* sanity */
+
+ /* Go hunt for devices that match. */
+ if ((cf = config_search(eisasubmatch, self, &eda)) != NULL)
+ config_attach(self, cf, &eda, eisaprint);
+ else {
+ char devinfo[256];
+
+ eisa_devinfo(eda.eda_idstring, devinfo);
+ printf("%s slot %d: %s not configured\n",
+ self->dv_xname, slot, devinfo);
+ }
+ }
+ }
+
+ #ifdef EISAVERBOSE
+ /*
+ * Descriptions of of known vendors and devices ("products").
+ */
+ struct eisa_knowndev {
+ int flags;
+ const char *id, *name;
+ };
+ #define EISA_KNOWNDEV_NOPROD 0x01 /* match on vendor only */
+
+ #include <dev/eisa/eisadevs_data.h>
+ #endif /* EISAVERBOSE */
+
+ void
+ eisa_devinfo(id, cp)
+ const char *id;
+ char *cp;
+ {
+ const char *name;
+ int onlyvendor;
+ #ifdef EISAVERBOSE
+ struct eisa_knowndev *edp;
+ int match;
+ #endif
+
+ onlyvendor = 0;
+ name = NULL;
+
+ #ifdef EISAVERBOSE
+ /* find the device in the table, if possible. */
+ edp = eisa_knowndevs;
+ while (edp->id != NULL) {
+ /* check this entry for a match */
+ if ((edp->flags & EISA_KNOWNDEV_NOPROD) != 0)
+ match = !strncmp(edp->id, id, 3);
+ else
+ match = !strcmp(edp->id, id);
+ if (match) {
+ name = edp->name;
+ onlyvendor = (edp->flags & EISA_KNOWNDEV_NOPROD) != 0;
+ break;
+ }
+ edp++;
+ }
+ #endif
+
+ if (name == NULL)
+ cp += sprintf(cp, "unknown device %s", id);
+ else if (onlyvendor)
+ cp += sprintf(cp, "unknown %s device %s", name, id);
+ else
+ cp += sprintf(cp, "%s", name);
+ }
Index: dev/eisa/eisadevs
*** /dev/null Thu Jan 18 22:13:51 1996
--- dev/eisa/eisadevs Thu Jan 18 18:40:59 1996
***************
*** 0 ****
--- 1,66 ----
+ $NetBSD$
+
+ /*
+ * Copyright (c) 1995, 1996 Christopher G. Demetriou
+ * 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Christopher G. Demetriou
+ * for the NetBSD Project.
+ * 4. 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.
+ */
+
+ /*
+ * List of known EISA vendors
+ */
+
+ vendor ADP Adaptec
+ vendor BUS BusLogic
+ vendor DEC Digital Equipment
+ vendor TCM 3Com
+
+ /*
+ * List of known products, grouped by vendor.
+ */
+
+ /* Adaptec products */
+ product ADP 0000 AHA-1740
+ product ADP 0001 AHA-1740A
+ product ADP 0002 AHA-1742A
+ product ADP 0400 AHA-1744
+ product ADP 7770 AIC-7770 (on motherboard)
+ product ADP 7771 AHA-274x
+ product ADP 7756 AHA-284x (BIOS enabled)
+ product ADP 7757 AHA-284x (BIOS disabled)
+
+ /* BusLogic products */
+ /* XXX */
+
+ /* Digital Equipment products */
+ product DEC 4250 DE425
+ /* ??? DEC DEFEA */
+
+ /* 3Com products */
+ product TCM 5092 3C579-TP
+ product TCM 5093 3C579
Index: dev/eisa/eisadevs.h
*** /dev/null Thu Jan 18 22:13:51 1996
--- dev/eisa/eisadevs.h Thu Jan 18 19:29:18 1996
***************
*** 0 ****
--- 1,62 ----
+ /*
+ * THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.
+ *
+ * generated from:
+ * NetBSD
+ */
+
+ /*
+ * Copyright (c) 1995, 1996 Christopher G. Demetriou
+ * 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Christopher G. Demetriou
+ * for the NetBSD Project.
+ * 4. 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.
+ */
+
+ /*
+ * List of known products, grouped by vendor.
+ */
+
+ /* Adaptec products */
+ #define EISA_PRODUCT_ADP0000 "Adaptec AHA-1740"
+ #define EISA_PRODUCT_ADP0001 "Adaptec AHA-1740A"
+ #define EISA_PRODUCT_ADP0002 "Adaptec AHA-1742A"
+ #define EISA_PRODUCT_ADP0400 "Adaptec AHA-1744"
+ #define EISA_PRODUCT_ADP7770 "Adaptec AIC-7770 (on motherboard)"
+ #define EISA_PRODUCT_ADP7771 "Adaptec AHA-274x"
+ #define EISA_PRODUCT_ADP7756 "Adaptec AHA-284x (BIOS enabled)"
+ #define EISA_PRODUCT_ADP7757 "Adaptec AHA-284x (BIOS disabled)"
+
+ /* BusLogic products */
+ /* XXX */
+
+ /* Digital Equipment products */
+ #define EISA_PRODUCT_DEC4250 "Digital Equipment DE425"
+ /* ??? DEC DEFEA */
+
+ /* 3Com products */
+ #define EISA_PRODUCT_TCM5092 "3Com 3C579-TP"
+ #define EISA_PRODUCT_TCM5093 "3Com 3C579"
Index: dev/eisa/eisadevs_data.h
*** /dev/null Thu Jan 18 22:13:51 1996
--- dev/eisa/eisadevs_data.h Thu Jan 18 19:29:18 1996
***************
*** 0 ****
--- 1,116 ----
+ /*
+ * THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.
+ *
+ * generated from:
+ * NetBSD
+ */
+
+ /*
+ * Copyright (c) 1995, 1996 Christopher G. Demetriou
+ * 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Christopher G. Demetriou
+ * for the NetBSD Project.
+ * 4. 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.
+ */
+
+ struct eisa_knowndev eisa_knowndevs[] = {
+ {
+ 0,
+ "ADP0000",
+ EISA_PRODUCT_ADP0000,
+ },
+ {
+ 0,
+ "ADP0001",
+ EISA_PRODUCT_ADP0001,
+ },
+ {
+ 0,
+ "ADP0002",
+ EISA_PRODUCT_ADP0002,
+ },
+ {
+ 0,
+ "ADP0400",
+ EISA_PRODUCT_ADP0400,
+ },
+ {
+ 0,
+ "ADP7770",
+ EISA_PRODUCT_ADP7770,
+ },
+ {
+ 0,
+ "ADP7771",
+ EISA_PRODUCT_ADP7771,
+ },
+ {
+ 0,
+ "ADP7756",
+ EISA_PRODUCT_ADP7756,
+ },
+ {
+ 0,
+ "ADP7757",
+ EISA_PRODUCT_ADP7757,
+ },
+ {
+ 0,
+ "DEC4250",
+ EISA_PRODUCT_DEC4250,
+ },
+ {
+ 0,
+ "TCM5092",
+ EISA_PRODUCT_TCM5092,
+ },
+ {
+ 0,
+ "TCM5093",
+ EISA_PRODUCT_TCM5093,
+ },
+ {
+ EISA_KNOWNDEV_NOPROD,
+ "ADP",
+ "Adaptec",
+ },
+ {
+ EISA_KNOWNDEV_NOPROD,
+ "BUS",
+ "BusLogic",
+ },
+ {
+ EISA_KNOWNDEV_NOPROD,
+ "DEC",
+ "Digital Equipment",
+ },
+ {
+ EISA_KNOWNDEV_NOPROD,
+ "TCM",
+ "3Com",
+ },
+ { 0, NULL, NULL, }
+ };
Index: dev/eisa/devlist2h.awk
*** /dev/null Thu Jan 18 22:13:51 1996
--- dev/eisa/devlist2h.awk Thu Jan 18 19:29:05 1996
***************
*** 0 ****
--- 1,189 ----
+ #! /usr/bin/awk -f
+ # $NetBSD: devlist2h.awk,v 1.1 1995/06/18 01:07:06 cgd Exp $
+ #
+ # Copyright (c) 1995, 1996 Christopher G. Demetriou
+ # 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. All advertising materials mentioning features or use of this software
+ # must display the following acknowledgement:
+ # This product includes software developed by Christopher G. Demetriou.
+ # 4. 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.
+ #
+ BEGIN {
+ nproducts = nvendors = 0
+ dfile="eisadevs_data.h"
+ hfile="eisadevs.h"
+ }
+ NR == 1 {
+ VERSION = $0
+ gsub("\\$", "", VERSION)
+
+ printf("/*\n") > dfile
+ printf(" * THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.\n") \
+ > dfile
+ printf(" *\n") > dfile
+ printf(" * generated from:\n") > dfile
+ printf(" *\t%s\n", VERSION) > dfile
+ printf(" */\n") > dfile
+
+ printf("/*\n") > hfile
+ printf(" * THIS FILE AUTOMATICALLY GENERATED. DO NOT EDIT.\n") \
+ > hfile
+ printf(" *\n") > hfile
+ printf(" * generated from:\n") > hfile
+ printf(" *\t%s\n", VERSION) > hfile
+ printf(" */\n") > hfile
+
+ next
+ }
+ $1 == "vendor" {
+ nvendors++
+
+ vendorindex[$2] = nvendors; # record index for this name, for later.
+ vendors[nvendors, 1] = $2; # name/ID
+ i = 2; f = 3;
+
+ # comments
+ ocomment = oparen = 0
+ if (f <= NF) {
+ ocomment = 1;
+ }
+ while (f <= NF) {
+ if ($f == "#") {
+ oparen = 1
+ f++
+ continue
+ }
+ if (oparen) {
+ f++
+ continue
+ }
+ vendors[nvendors, i] = $f
+ i++; f++;
+ }
+
+ next
+ }
+ $1 == "product" {
+ nproducts++
+
+ products[nproducts, 1] = $2; # vendor name
+ products[nproducts, 2] = $3; # product id
+ printf("#define\tEISA_PRODUCT_%s%s\t\"", products[nproducts, 1],
+ products[nproducts, 2]) > hfile
+
+ i = vendorindex[products[nproducts, 1]]; j = 2;
+ needspace = 0;
+ while (vendors[i, j] != "") {
+ if (needspace)
+ printf(" ") > hfile
+ printf("%s", vendors[i, j]) > hfile
+ needspace = 1
+ j++
+ }
+
+ if (needspace)
+ printf(" ") > hfile
+
+ i=3; f = 4;
+
+ # comments
+ ocomment = oparen = 0
+ if (f <= NF) {
+ ocomment = 1;
+ }
+ while (f <= NF) {
+ if ($f == "#") {
+ printf("(") > hfile
+ oparen = 1
+ f++
+ continue
+ }
+ if (oparen) {
+ printf("%s", $f) > hfile
+ if (f < NF)
+ printf(" ") > hfile
+ f++
+ continue
+ }
+ products[nproducts, i] = $f
+ printf("%s", products[nproducts, i]) > hfile
+ if (f < NF)
+ printf(" ") > hfile
+ i++; f++;
+ }
+ if (oparen)
+ printf(")") > hfile
+ if (ocomment)
+ printf("\"") > hfile
+ printf("\n") > hfile
+
+ next
+ }
+ {
+ if ($0 == "")
+ blanklines++
+ if (blanklines != 2 && blanklines != 3)
+ print $0 > hfile
+ if (blanklines < 2)
+ print $0 > dfile
+ }
+ END {
+ # print out the match tables
+
+ printf("\n") > dfile
+
+ printf("struct eisa_knowndev eisa_knowndevs[] = {\n") > dfile
+ for (i = 1; i <= nproducts; i++) {
+ printf("\t{\n") > dfile
+ printf("\t 0,\n") > dfile
+ printf("\t \"%s%s\",\n", products[i, 1], products[i, 2]) \
+ > dfile
+ printf("\t EISA_PRODUCT_%s%s,\n", \
+ products[i, 1], products[i, 2]) \
+ > dfile
+
+ printf("\t},\n") > dfile
+ }
+ for (i = 1; i <= nvendors; i++) {
+ printf("\t{\n") > dfile
+ printf("\t EISA_KNOWNDEV_NOPROD,\n") \
+ > dfile
+ printf("\t \"%s\",\n", vendors[i, 1]) \
+ > dfile
+ printf("\t \"") > dfile
+ j = 2;
+ needspace = 0;
+ while (vendors[i, j] != "") {
+ if (needspace)
+ printf(" ") > dfile
+ printf("%s", vendors[i, j]) > dfile
+ needspace = 1
+ j++
+ }
+ printf("\",\n") > dfile
+ printf("\t},\n") > dfile
+ }
+ printf("\t{ 0, NULL, NULL, }\n") > dfile
+ printf("};\n") > dfile
+ }
Index: dev/eisa/aha1742.c
===================================================================
RCS file: /a/cvsroot/src/sys/dev/eisa/aha1742.c,v
retrieving revision 1.53
diff -c -r1.53 aha1742.c
*** aha1742.c 1995/12/24 02:31:01 1.53
--- aha1742.c 1996/01/19 03:17:48
***************
*** 62,67 ****
--- 62,68 ----
#include <dev/eisa/eisareg.h>
#include <dev/eisa/eisavar.h>
+ #include <dev/eisa/eisadevs.h>
#include <scsi/scsi_all.h>
#include <scsi/scsiconf.h>
***************
*** 283,289 ****
void ahb_free_ecb __P((struct ahb_softc *, struct ahb_ecb *, int));
struct ahb_ecb *ahb_get_ecb __P((struct ahb_softc *, int));
struct ahb_ecb *ahb_ecb_phys_kv __P((struct ahb_softc *, physaddr));
! int ahb_find __P((struct ahb_softc *));
void ahb_init __P((struct ahb_softc *));
void ahbminphys __P((struct buf *));
int ahb_scsi_cmd __P((struct scsi_xfer *));
--- 284,290 ----
void ahb_free_ecb __P((struct ahb_softc *, struct ahb_ecb *, int));
struct ahb_ecb *ahb_get_ecb __P((struct ahb_softc *, int));
struct ahb_ecb *ahb_ecb_phys_kv __P((struct ahb_softc *, physaddr));
! int ahb_find __P((int, struct ahb_softc *));
void ahb_init __P((struct ahb_softc *));
void ahbminphys __P((struct buf *));
int ahb_scsi_cmd __P((struct scsi_xfer *));
***************
*** 314,325 ****
NULL, /* Use default 'done' routine */
};
! int ahbprobe();
! int ahbprobe1 __P((struct ahb_softc *, struct isa_attach_args *));
! void ahbattach();
struct cfdriver ahbcd = {
! NULL, "ahb", ahbprobe, ahbattach, DV_DULL, sizeof(struct ahb_softc)
};
/*
--- 315,325 ----
NULL, /* Use default 'done' routine */
};
! int ahbmatch();
! void ahbattach();
struct cfdriver ahbcd = {
! NULL, "ahb", ahbmatch, ahbattach, DV_DULL, sizeof(struct ahb_softc)
};
/*
***************
*** 412,497 ****
* the actual probe routine to check it out.
*/
int
! ahbprobe(parent, self, aux)
struct device *parent, *self;
void *aux;
{
struct ahb_softc *ahb = (void *)self;
! struct isa_attach_args *ia = aux;
! int iobase;
! u_short vendor, model;
! #ifdef NEWCONFIG
! if (ia->ia_iobase != IOBASEUNK)
! return ahbprobe1(ahb, ia);
! #endif
!
! while (ahb_slot < MAX_SLOTS) {
! ahb_slot++;
! iobase = 0x1000 * ahb_slot;
!
! vendor = htons(inw(iobase + EISA_VENDOR));
! if (vendor != 0x0490) /* `ADP' */
! continue;
!
! model = htons(inw(iobase + EISA_MODEL));
! if ((model & 0xfff0) != 0x0000 &&
! (model & 0xfff0) != 0x0100) {
! #ifndef trusted
! printf("ahbprobe: ignoring model %04x\n", model);
! #endif
! continue;
! }
#ifdef notyet
! outb(iobase + EISA_CONTROL, EISA_ENABLE | EISA_RESET);
! delay(10);
! outb(iobase + EISA_CONTROL, EISA_ENABLE);
! /* Wait for reset? */
! delay(1000);
#endif
! ia->ia_iobase = iobase;
! if (ahbprobe1(ahb, ia))
! return 1;
! }
!
! return 0;
! }
!
! /*
! * Check if the device can be found at the port given
! * and if so, set it up ready for further work
! * as an argument, takes the isa_device structure from
! * autoconf.c.
! */
! int
! ahbprobe1(ahb, ia)
! struct ahb_softc *ahb;
! struct isa_attach_args *ia;
! {
!
! ahb->sc_iobase = ia->ia_iobase;
!
! /*
! * Try initialise a unit at this location
! * sets up dma and bus speed, loads ahb->sc_irq
! */
! if (ahb_find(ahb) != 0)
! return 0;
!
! if (ia->ia_irq != IRQUNK) {
! if (ia->ia_irq != ahb->sc_irq) {
! printf("%s: irq mismatch; kernel configured %d != board configured %d\n",
! ahb->sc_dev.dv_xname, ia->ia_irq, ahb->sc_irq);
! return 0;
! }
! } else
! ia->ia_irq = ahb->sc_irq;
- ia->ia_drq = DRQUNK;
- ia->ia_msize = 0;
- ia->ia_iosize = 0x1000;
return 1;
}
--- 412,443 ----
* the actual probe routine to check it out.
*/
int
! ahbmatch(parent, self, aux)
struct device *parent, *self;
void *aux;
{
struct ahb_softc *ahb = (void *)self;
! struct eisadev_attach_args *eda = aux;
! /* must match one of our known ID strings */
! if (strcmp(eda->eda_idstring, "ADP0000") &&
! strcmp(eda->eda_idstring, "ADP0001") &&
! strcmp(eda->eda_idstring, "ADP0002") &&
! strcmp(eda->eda_idstring, "ADP0400"))
! return (0);
#ifdef notyet
! /* This won't compile as-is, anyway. */
! outb(iobase + EISA_CONTROL, EISA_ENABLE | EISA_RESET);
! delay(10);
! outb(iobase + EISA_CONTROL, EISA_ENABLE);
! /* Wait for reset? */
! delay(1000);
#endif
! if (ahb_find(eda->eda_slot, NULL))
! return (0);
return 1;
}
***************
*** 508,516 ****
struct device *parent, *self;
void *aux;
{
! struct isa_attach_args *ia = aux;
struct ahb_softc *ahb = (void *)self;
! u_short model;
ahb_init(ahb);
TAILQ_INIT(&ahb->free_ecb);
--- 454,466 ----
struct device *parent, *self;
void *aux;
{
! struct eisadev_attach_args *eda = aux;
struct ahb_softc *ahb = (void *)self;
! char *model;
!
! if (ahb_find(eda->eda_slot, ahb))
! panic("ahbattach: ahb_find failed!");
! ahb->sc_iobase = EISA_SLOT_ADDR(eda->eda_slot);
ahb_init(ahb);
TAILQ_INIT(&ahb->free_ecb);
***************
*** 524,545 ****
ahb->sc_link.device = &ahb_dev;
ahb->sc_link.openings = 2;
! printf(": ");
! model = htons(inw(ahb->sc_iobase + EISA_MODEL));
! switch (model & 0xfff0) {
! case 0x0000:
! printf("model 1740 or 1742");
! break;
! case 0x0100:
! printf("model 1744");
! break;
! }
! printf(", revision %d\n", model & 0x000f);
#ifdef NEWCONFIG
isa_establish(&ahb->sc_id, &ahb->sc_dev);
#endif
! ahb->sc_ih = eisa_intr_establish(ia->ia_irq, IST_LEVEL, IPL_BIO,
ahbintr, ahb);
/*
--- 474,495 ----
ahb->sc_link.device = &ahb_dev;
ahb->sc_link.openings = 2;
! if (!strcmp(eda->eda_idstring, "ADP0000"))
! model = EISA_PRODUCT_ADP0000;
! else if (!strcmp(eda->eda_idstring, "ADP0001"))
! model = EISA_PRODUCT_ADP0001;
! else if (!strcmp(eda->eda_idstring, "ADP0002"))
! model = EISA_PRODUCT_ADP0002;
! else if (!strcmp(eda->eda_idstring, "ADP0400"))
! model = EISA_PRODUCT_ADP0400;
! else
! model = "unknown model!";
! printf(" irq %d: %s\n", ahb->sc_irq, model);
#ifdef NEWCONFIG
isa_establish(&ahb->sc_id, &ahb->sc_dev);
#endif
! ahb->sc_ih = eisa_intr_establish(ahb->sc_irq, IST_LEVEL, IPL_BIO,
ahbintr, ahb);
/*
***************
*** 823,835 ****
* Start the board, ready for normal operation
*/
int
! ahb_find(ahb)
struct ahb_softc *ahb;
{
! int iobase = ahb->sc_iobase;
int stport = iobase + G2STAT;
u_char intdef;
! int i;
int wait = 1000; /* 1 sec enough? */
outb(iobase + PORTADDR, PORTADDR_ENHANCED);
--- 773,786 ----
* Start the board, ready for normal operation
*/
int
! ahb_find(slot, ahb)
! int slot;
struct ahb_softc *ahb;
{
! int iobase = EISA_SLOT_ADDR(slot);
int stport = iobase + G2STAT;
u_char intdef;
! int i, irq, busid;
int wait = 1000; /* 1 sec enough? */
outb(iobase + PORTADDR, PORTADDR_ENHANCED);
***************
*** 850,856 ****
delay(1000);
}
if (!wait) {
! #ifdef AHBDEBUG
if (ahb_debug & AHB_SHOWMISC)
printf("ahb_find: No answer from aha1742 board\n");
#endif /*AHBDEBUG */
--- 801,807 ----
delay(1000);
}
if (!wait) {
! #ifdef AHBDEBUG
if (ahb_debug & AHB_SHOWMISC)
printf("ahb_find: No answer from aha1742 board\n");
#endif /*AHBDEBUG */
***************
*** 875,896 ****
intdef = inb(iobase + INTDEF);
switch (intdef & 0x07) {
case INT9:
! ahb->sc_irq = 9;
break;
case INT10:
! ahb->sc_irq = 10;
break;
case INT11:
! ahb->sc_irq = 11;
break;
case INT12:
! ahb->sc_irq = 12;
break;
case INT14:
! ahb->sc_irq = 14;
break;
case INT15:
! ahb->sc_irq = 15;
break;
default:
printf("illegal int setting %x\n", intdef);
--- 826,847 ----
intdef = inb(iobase + INTDEF);
switch (intdef & 0x07) {
case INT9:
! irq = 9;
break;
case INT10:
! irq = 10;
break;
case INT11:
! irq = 11;
break;
case INT12:
! irq = 12;
break;
case INT14:
! irq = 14;
break;
case INT15:
! irq = 15;
break;
default:
printf("illegal int setting %x\n", intdef);
***************
*** 900,906 ****
outb(iobase + INTDEF, (intdef | INTEN)); /* make sure we can interrupt */
/* who are we on the scsi bus? */
! ahb->ahb_scsi_dev = (inb(iobase + SCSIDEF) & HSCSIID);
/*
* Note that we are going and return (to probe)
--- 851,863 ----
outb(iobase + INTDEF, (intdef | INTEN)); /* make sure we can interrupt */
/* who are we on the scsi bus? */
! busid = (inb(iobase + SCSIDEF) & HSCSIID);
!
! /* if we want to fill in softc, do so now */
! if (ahb != NULL) {
! ahb->sc_irq = irq;
! ahb->ahb_scsi_dev = busid;
! }
/*
* Note that we are going and return (to probe)
Index: dev/eisa/eisareg.h
===================================================================
RCS file: /a/cvsroot/src/sys/dev/eisa/eisareg.h,v
retrieving revision 1.1
diff -c -r1.1 eisareg.h
*** eisareg.h 1995/04/17 12:08:21 1.1
--- eisareg.h 1996/01/19 03:17:48
***************
*** 1,7 ****
/* $NetBSD: eisareg.h,v 1.1 1995/04/17 12:08:21 cgd Exp $ */
/*
! * Copyright (c) 1995 Christopher G. Demetriou
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
--- 1,7 ----
/* $NetBSD: eisareg.h,v 1.1 1995/04/17 12:08:21 cgd Exp $ */
/*
! * Copyright (c) 1995, 1996 Christopher G. Demetriou
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
***************
*** 31,36 ****
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
! * XXX something should go here. nothing does, yet.
*/
--- 31,105 ----
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+ #ifndef __DEV_EISA_EISAREG_H__
+ #define __DEV_EISA_EISAREG_H__
+
/*
! * Register (etc.) descriptions for the EISA bus.
!
! * Mostly culled from EISA chipset descriptions in:
! * Intel Peripheral Components Databook (1992)
*/
+
+ /*
+ * Max number of EISA slots in a machine. 64K I/O space total.
+ */
+ #define EISA_MAX_SLOT 16 /* number of slots. 0 -> 0xf */
+
+ /*
+ * Slot I/O space size, and I/O address of a given slot.
+ */
+ #define EISA_SLOT_SIZE 0x1000
+ #define EISA_SLOT_ADDR(s) ((s) * EISA_SLOT_SIZE)
+
+ /*
+ * Slot offsets for important/standard registers.
+ */
+ #define EISA_SLOTOFF_VID 0xc80 /* offset of vendor id regs */
+ #define EISA_NVIDREGS 2
+ #define EISA_SLOTOFF_PID 0xc82 /* offset of product id regs */
+ #define EISA_NPIDREGS 2
+
+
+ /*
+ * EISA ID functions, used to manipulate and decode EISA ID registers.
+ * ``Somebody was let out without adult supervision.''
+ */
+
+ #define EISA_IDSTRINGLEN 8 /* length of ID string, incl. NUL */
+
+ /*
+ * Vendor ID: three characters, encoded in 16 bits.
+ *
+ * EISA_VENDID_NODEV returns true if there's no device in the slot.
+ * EISA_VENDID_IDDELAY returns true if there's a device in the slot,
+ * but that device hasn't been configured by system firmware.
+ * EISA_VENDID_n returns the "n"th character of the vendor ID.
+ */
+ #define EISA_VENDID_NODEV(vid) \
+ (((vid)[0] & 0x80) != 0)
+ #define EISA_VENDID_IDDELAY(vid) \
+ (((vid)[0] & 0xf0) == 0x70)
+ #define EISA_VENDID_0(vid) \
+ ((((vid)[0] & 0x7c) >> 2) + '@')
+ #define EISA_VENDID_1(vid) \
+ (((((vid)[0] & 0x03) << 3) | (((vid)[1] & 0xe0) >> 5)) + '@')
+ #define EISA_VENDID_2(vid) \
+ (((vid)[1] & 0x1f) + '@')
+
+ /*
+ * Product ID: four hex digits, encoded in 16 bits (normal, sort of).
+ *
+ * EISA_PRIDID_n returns the "n"th hex digit of the product ID.
+ */
+ #define __EISA_HEX_MAP "0123456789ABCDEF"
+ #define EISA_PRODID_0(pid) \
+ (__EISA_HEX_MAP[(((pid)[0] >> 4) & 0xf)])
+ #define EISA_PRODID_1(pid) \
+ (__EISA_HEX_MAP[(((pid)[0] >> 0) & 0xf)])
+ #define EISA_PRODID_2(pid) \
+ (__EISA_HEX_MAP[(((pid)[1] >> 4) & 0xf)])
+ #define EISA_PRODID_3(pid) \
+ (__EISA_HEX_MAP[(((pid)[1] >> 0) & 0xf)])
+
+ #endif /* !__DEV_EISA_EISAREG_H__ */
Index: dev/eisa/eisavar.h
===================================================================
RCS file: /a/cvsroot/src/sys/dev/eisa/eisavar.h,v
retrieving revision 1.2
diff -c -r1.2 eisavar.h
*** eisavar.h 1995/12/24 02:31:02 1.2
--- eisavar.h 1996/01/19 03:17:49
***************
*** 1,7 ****
/* $NetBSD: eisavar.h,v 1.2 1995/12/24 02:31:02 mycroft Exp $ */
/*
! * Copyright (c) 1995 Christopher G. Demetriou
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
--- 1,7 ----
/* $NetBSD: eisavar.h,v 1.2 1995/12/24 02:31:02 mycroft Exp $ */
/*
! * Copyright (c) 1995, 1996 Christopher G. Demetriou
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
***************
*** 31,53 ****
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
! * XXX
! * XXX EISA AUTOCONFIG SHOULD BE SEPERATED FROM ISA AUTOCONFIG!!!
! * XXX
*/
/*
! * pull in the ISA definitions
*/
! #include <dev/isa/isavar.h>
/*
! * and bend them to our twisted ways:
! * map the functions, etc. that are used
*/
! #define eisa_attach_args isa_attach_args /* XXX */
! #define eisadev isadev /* XXX */
#define eisa_intr_establish isa_intr_establish /* XXX */
#define eisa_intr_disestablish isa_intr_disestablish /* XXX */
--- 31,94 ----
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+ #ifndef __DEV_EISA_EISAVAR_H__
+ #define __DEV_EISA_EISAVAR_H__
+
/*
! * Definitions for EISA autoconfiguration.
! *
! * This file describes types, constants, and functions which are used
! * for EISA autoconfiguration.
*/
+ #include <dev/eisa/eisareg.h> /* For ID register & string info. */
+
+
+ typedef int eisa_slot_t; /* really only needs to be 4 bits */
+
+
/*
! * EISA device attach arguments.
*/
!
! struct eisadev_attach_args {
! eisa_slot_t eda_slot;
! u_int8_t eda_vid[EISA_NVIDREGS];
! u_int8_t eda_pid[EISA_NPIDREGS];
! char eda_idstring[EISA_IDSTRINGLEN];
! };
!
/*
! * Easy to remember names for EISA device locators.
*/
! #define eisacf_slot cf_loc[0] /* slot */
!
!
! /*
! * EISA device locator values that mean "unknown" or "unspecified."
! * Note that not all are supplied by 'config' and should be filled
! * in by the device if appropriate.
! */
!
! #define EISA_UNKNOWN_SLOT ((eisa_slot_t)-1)
!
! /*
! * The EISA bus cfdriver, so that subdevices can more easily tell
! * what bus they're on.
! */
!
! extern struct cfdriver eisacd;
!
! /*
! * XXX interrupt attachment, etc., is done by using the ISA interfaces.
! * XXX THIS SHOULD CHANGE.
! */
!
! #include <dev/isa/isavar.h>
!
#define eisa_intr_establish isa_intr_establish /* XXX */
#define eisa_intr_disestablish isa_intr_disestablish /* XXX */
+
+ #endif /* !__DEV_EISA_EISAVAR_H__ */
Index: dev/eisa/files.eisa
===================================================================
RCS file: /a/cvsroot/src/sys/dev/eisa/files.eisa,v
retrieving revision 1.2
diff -c -r1.2 files.eisa
*** files.eisa 1995/04/17 17:54:15 1.2
--- files.eisa 1996/01/19 03:17:49
***************
*** 4,17 ****
# Included by ports that need it. Requires that the SCSI files be
# defined first.
! # XXX IN A PERFECT WORLD:
! # ports should define their own "device eisa" line (like the one below,
! # but with the correct bus attachment).
!
! # XXX there should be MI EISA configuration, but not yet.
! #device eisa at root {[slot = -1]}
! #file dev/eisa/eisa.c eisa
# Adaptec AHA-174x EISA SCSI Host Adapter family
! device ahb at isa: scsi # XXX should be at EISA
! file dev/eisa/aha1742.c ahb
--- 4,30 ----
# Included by ports that need it. Requires that the SCSI files be
# defined first.
! # The following 'device eisa at root' definition is commented out because
! # 'real' MI EISA attachment isn't ready yet. There should be:
! # (1) a MI "eisabus" attribute, which machine-dependent
! # "chipsets" supply,
! # (2) a MI "eisa" device, which attaches to devices which
! # supply the "eisabus" attribute.
! #
! # The 'eisabus' attribute may have to be defined in files.isa, so
! # that ISA devices can properly attach to an EISA bus (depending
! # on how configuration is done.) Another possibility involves
! # setting things up so that 'eisa' attaches 'isa,' or so that
! # whenever 'eisa' is attached, 'isa' is also attached. (This needs
! # to be done since EISA is supposed to be backward compatible with
! # ISA, so wherever you have an EISA bus you should also have an
! # ISA bus.)
! #
! #define eisabus { }
! #
! #device eisa at eisabus {[slot = -1]}
! file dev/eisa/eisa.c eisa
# Adaptec AHA-174x EISA SCSI Host Adapter family
! device ahb at eisa: scsi
! file dev/eisa/aha1742.c ahb
Index: arch/i386/conf/BOAT_ANCHOR
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/BOAT_ANCHOR,v
retrieving revision 1.51
diff -c -r1.51 BOAT_ANCHOR
*** BOAT_ANCHOR 1995/12/12 01:52:39 1.51
--- BOAT_ANCHOR 1996/01/19 03:17:56
***************
*** 76,81 ****
--- 76,82 ----
#options GENERIC
isa0 at root
+ #eisa0 at root
#pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
***************
*** 107,113 ****
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! #ahb0 at isa? port ? irq ? # Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
#aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
#scsibus* at aic?
--- 108,114 ----
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! #ahb* at eisa? slot ? # Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
#aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
#scsibus* at aic?
Index: arch/i386/conf/DISKLESS
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/DISKLESS,v
retrieving revision 1.13
diff -c -r1.13 DISKLESS
*** DISKLESS 1995/08/22 19:43:11 1.13
--- DISKLESS 1996/01/19 03:17:56
***************
*** 74,79 ****
--- 74,80 ----
#options GENERIC
isa0 at root
+ #eisa0 at root
#pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
***************
*** 105,111 ****
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! #ahb0 at isa? port ? irq ? # Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
#aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
#scsibus* at aic?
--- 106,112 ----
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! #ahb* at eisa? slot ? # Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
#aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
#scsibus* at aic?
Index: arch/i386/conf/GENERIC
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/GENERIC,v
retrieving revision 1.28
diff -c -r1.28 GENERIC
*** GENERIC 1996/01/13 02:05:24 1.28
--- GENERIC 1996/01/19 03:17:56
***************
*** 77,82 ****
--- 77,83 ----
options GENERIC
isa0 at root
+ eisa0 at root
pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
***************
*** 110,116 ****
aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
scsibus* at aha?
! ahb0 at isa? port ? irq ? # Adaptec 174[024] SCSI controllers
scsibus* at ahb?
ahc* at pci? bus ? dev ? # Adaptec 2940 SCSI controllers
scsibus* at ahc?
--- 111,117 ----
aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
scsibus* at aha?
! ahb* at eisa? slot ? # Adaptec 174[024] SCSI controllers
scsibus* at ahb?
ahc* at pci? bus ? dev ? # Adaptec 2940 SCSI controllers
scsibus* at ahc?
Index: arch/i386/conf/GENERICADP
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/GENERICADP,v
retrieving revision 1.5
diff -c -r1.5 GENERICADP
*** GENERICADP 1996/01/13 02:05:26 1.5
--- GENERICADP 1996/01/19 03:17:56
***************
*** 78,83 ****
--- 78,84 ----
options GENERIC
isa0 at root
+ eisa0 at root
pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
***************
*** 111,117 ****
aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
scsibus* at aha?
! ahb0 at isa? port ? irq ? # Adaptec 174[024] SCSI controllers
scsibus* at ahb?
ahc* at pci? bus ? dev ? # Adaptec 2940 SCSI controllers
scsibus* at ahc?
--- 112,118 ----
aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
scsibus* at aha?
! ahb* at eisa? slot ? # Adaptec 174[024] SCSI controllers
scsibus* at ahb?
ahc* at pci? bus ? dev ? # Adaptec 2940 SCSI controllers
scsibus* at ahc?
Index: arch/i386/conf/GENERICOTHER
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/GENERICOTHER,v
retrieving revision 1.4
diff -c -r1.4 GENERICOTHER
*** GENERICOTHER 1995/12/24 00:22:56 1.4
--- GENERICOTHER 1996/01/19 03:17:56
***************
*** 78,83 ****
--- 78,84 ----
options GENERIC
isa0 at root
+ eisa0 at root
pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
Index: arch/i386/conf/INSTADP
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/INSTADP,v
retrieving revision 1.4
diff -c -r1.4 INSTADP
*** INSTADP 1996/01/13 02:05:27 1.4
--- INSTADP 1996/01/19 03:17:56
***************
*** 49,54 ****
--- 49,55 ----
options GENERIC
isa0 at root
+ eisa0 at root
pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
***************
*** 76,82 ****
aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
scsibus* at aha?
! ahb0 at isa? port ? irq ? # Adaptec 174[024] SCSI controllers
scsibus* at ahb?
ahc* at pci? bus ? dev ? # Adaptec 2940 SCSI controllers
scsibus* at ahc?
--- 77,83 ----
aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
scsibus* at aha?
! ahb* at eisa? slot ? # Adaptec 174[024] SCSI controllers
scsibus* at ahb?
ahc* at pci? bus ? dev ? # Adaptec 2940 SCSI controllers
scsibus* at ahc?
Index: arch/i386/conf/INSTOTHER
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/INSTOTHER,v
retrieving revision 1.3
diff -c -r1.3 INSTOTHER
*** INSTOTHER 1995/12/14 01:10:15 1.3
--- INSTOTHER 1996/01/19 03:17:56
***************
*** 49,54 ****
--- 49,55 ----
options GENERIC
isa0 at root
+ eisa0 at root
pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
Index: arch/i386/conf/PAIN
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/PAIN,v
retrieving revision 1.54
diff -c -r1.54 PAIN
*** PAIN 1995/08/22 19:43:21 1.54
--- PAIN 1996/01/19 03:17:56
***************
*** 73,78 ****
--- 73,79 ----
options GENERIC
isa0 at root
+ eisa0 at root
#pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
***************
*** 107,113 ****
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! ahb0 at isa? port ? irq ? # Adaptec 174[024] SCSI controllers
scsibus* at ahb?
aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
scsibus* at aic?
--- 108,114 ----
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! ahb* at eisa? slot ? # Adaptec 174[024] SCSI controllers
scsibus* at ahb?
aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
scsibus* at aic?
Index: arch/i386/conf/PATEK
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/PATEK,v
retrieving revision 1.26
diff -c -r1.26 PATEK
*** PATEK 1995/08/22 19:43:23 1.26
--- PATEK 1996/01/19 03:17:56
***************
*** 72,77 ****
--- 72,78 ----
options GENERIC
isa0 at root
+ #eisa0 at root
#pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
***************
*** 103,109 ****
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! #ahb0 at isa? port ? irq ? # Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
aic0 at isa? port 0x340 irq 11 # Adaptec 152[02] SCSI controllers
scsibus* at aic?
--- 104,110 ----
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! #ahb* at eisa? slot ? # Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
aic0 at isa? port 0x340 irq 11 # Adaptec 152[02] SCSI controllers
scsibus* at aic?
Index: arch/i386/conf/SUN_LAMP
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/SUN_LAMP,v
retrieving revision 1.61
diff -c -r1.61 SUN_LAMP
*** SUN_LAMP 1995/08/22 19:43:25 1.61
--- SUN_LAMP 1996/01/19 03:17:57
***************
*** 72,77 ****
--- 72,78 ----
#options GENERIC
isa0 at root
+ eisa0 at root
#pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
***************
*** 103,109 ****
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! ahb0 at isa? port ? irq ? # Adaptec 174[024] SCSI controllers
scsibus* at ahb?
#aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
#scsibus* at aic?
--- 104,110 ----
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! ahb* at eisa? slot ? # Adaptec 174[024] SCSI controllers
scsibus* at ahb?
#aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
#scsibus* at aic?
Index: arch/i386/conf/TDR
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/TDR,v
retrieving revision 1.54
diff -c -r1.54 TDR
*** TDR 1995/08/22 19:43:28 1.54
--- TDR 1996/01/19 03:17:57
***************
*** 72,77 ****
--- 72,78 ----
#options GENERIC
isa0 at root
+ #eisa0 at root
#pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
***************
*** 104,110 ****
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! #ahb0 at isa? port ? irq ? # Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
#aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
#scsibus* at aic?
--- 105,111 ----
#aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
#scsibus* at aha?
! #ahb* at eisa? slot ? # Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
#aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
#scsibus* at aic?
Index: arch/i386/conf/TRINITY
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/TRINITY,v
retrieving revision 1.59
diff -c -r1.59 TRINITY
*** TRINITY 1995/08/22 19:43:30 1.59
--- TRINITY 1996/01/19 03:17:57
***************
*** 74,79 ****
--- 74,80 ----
#options GENERIC
isa0 at root
+ #eisa0 at root
#pci0 at root
npx0 at isa? port 0xf0 irq 13 # math coprocessor
***************
*** 105,111 ****
aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
scsibus* at aha?
! #ahb0 at isa? port ? irq ? # Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
#aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
#scsibus* at aic?
--- 106,112 ----
aha0 at isa? port 0x330 irq ? drq ? # Adaptec 154[02] SCSI controllers
#aha1 at isa? port 0x334 irq ? drq ? # Adaptec 154[02] SCSI controllers
scsibus* at aha?
! #ahb* at eisa? slot ? # Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
#aic0 at isa? port 0x340 irq 12 # Adaptec 152[02] SCSI controllers
#scsibus* at aic?
Index: arch/i386/conf/files.i386
===================================================================
RCS file: /a/cvsroot/src/sys/arch/i386/conf/files.i386,v
retrieving revision 1.61
diff -c -r1.61 files.i386
*** files.i386 1996/01/08 13:51:30 1.61
--- files.i386 1996/01/19 03:17:57
***************
*** 47,53 ****
device isa at root {[port = -1], [size = 0],
[iomem = -1], [iosiz = 0],
[irq = -1], [drq = -1]}
! #device eisa at root {...}
device pci at root {[bus = -1], [dev = -1]}
#device mca at root {...}
--- 47,53 ----
device isa at root {[port = -1], [size = 0],
[iomem = -1], [iosiz = 0],
[irq = -1], [drq = -1]}
! device eisa at root {[slot = -1]}
device pci at root {[bus = -1], [dev = -1]}
#device mca at root {...}
***************
*** 112,119 ****
#
include "../../../dev/eisa/files.eisa"
- # XXX not yet:
- # file arch/i386/eisa/eisa_machdep.c eisa
#
# PCI-only drivers
--- 112,117 ----
>Audit-Trail:
>Unformatted: