Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/sparc64/sparc64 GC dead code. add support for PCI ...



details:   https://anonhg.NetBSD.org/src/rev/2cc0da793dd7
branches:  trunk
changeset: 473444:2cc0da793dd7
user:      mrg <mrg%NetBSD.org@localhost>
date:      Fri Jun 04 13:55:37 1999 +0000

description:
GC dead code.  add support for PCI and IDE boot device detection, plus hme ethernet.
should probably deal with be and qe, etc.

diffstat:

 sys/arch/sparc64/sparc64/autoconf.c |  93 ++++++++++++++++--------------------
 1 files changed, 41 insertions(+), 52 deletions(-)

diffs (206 lines):

diff -r 5fb154feb1aa -r 2cc0da793dd7 sys/arch/sparc64/sparc64/autoconf.c
--- a/sys/arch/sparc64/sparc64/autoconf.c       Fri Jun 04 13:51:57 1999 +0000
+++ b/sys/arch/sparc64/sparc64/autoconf.c       Fri Jun 04 13:55:37 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: autoconf.c,v 1.17 1999/05/30 19:13:34 eeh Exp $ */
+/*     $NetBSD: autoconf.c,v 1.18 1999/06/04 13:55:37 mrg Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -80,6 +80,10 @@
 #include <machine/pmap.h>
 #include <sparc64/sparc64/timerreg.h>
 
+#include <dev/ata/atavar.h>
+#include <dev/pci/pcivar.h>
+#include <dev/sbus/sbusvar.h>
+
 #ifdef DDB
 #include <machine/db_machdep.h>
 #include <ddb/db_sym.h>
@@ -252,6 +256,7 @@
  *     [sbus device] val[0] is a sbus slot, and val[1] is an sbus offset
  *     [scsi disk] val[0] is target, val[1] is lun, val[2] is partition
  *     [scsi tape] val[0] is target, val[1] is lun, val[2] is file #
+ *     [pci device] val[0] is device, val[1] is function, val[2] might be partition
  * }
  *
  */
@@ -372,7 +377,6 @@
  * device, so we can't set boot device there.   we patch in with
  * dk_establish(), and use this to recover the bootpath.
  */
-
 struct bootpath *
 bootpath_store(storep, bp)
        int storep;
@@ -387,6 +391,7 @@
 
        return (retval);
 }
+
 /* TEMP: */
 struct bootpath *altbootpath_store(int, struct bootpath *);
 struct bootpath *
@@ -625,9 +630,6 @@
        int node0, node;
 
        static const char *const openboot_special[] = {
-               /* find these first */
-               "",
-
                /* ignore these (end with NULL) */
                /*
                 * These are _root_ devices to ignore. Others must be handled
@@ -689,49 +691,8 @@
        if (optionsnode == 0)
                panic("no options in OPENPROM");
 
-       for (ssp = openboot_special; *(sp = *ssp) != 0; ssp++) {
-
-               if ((node = findnode(node0, sp)) == 0) {
-                       printf("could not find %s in OPENPROM\n", sp);
-                       panic(sp);
-               }
-
-               bzero(&ma, sizeof ma);
-               ma.ma_bustag = &mainbus_space_tag;
-               ma.ma_dmatag = &mainbus_dma_tag;
-               ma.ma_name = getpropstringA(node, "name", namebuf);
-               ma.ma_node = node;
-               if (getprop(node, "reg", sizeof(ma.ma_reg[0]), 
-                            &ma.ma_nreg, (void**)&ma.ma_reg) != 0)
-{
-panic("mainbus_attach(): %s has no \"reg\"\n", sp);
-                       continue;
-}
-               if (getprop(node, "interrupts", sizeof(ma.ma_interrupts[0]), 
-                            &ma.ma_ninterrupts, (void**)&ma.ma_interrupts) != 0) {
-                       free(ma.ma_reg, M_DEVBUF);
-panic("mainbus_attach(): %s has no \"interrupts\"\n", sp);
-                       continue;
-               }
-               if (getprop(node, "address", sizeof(*ma.ma_address), 
-                            &ma.ma_naddress, (void**)&ma.ma_address) != 0) {
-                       free(ma.ma_reg, M_DEVBUF);
-                       free(ma.ma_interrupts, M_DEVBUF);
-panic("mainbus_attach(): %s has no \"address\"\n", sp);
-                       continue;
-               }
-               /* Start at the beginning of the bootpath */
-               ma.ma_bp = bootpath;
-
-               if (config_found(dev, (void *)&ma, mbprint) == NULL)
-                       panic(sp);
-               free(ma.ma_reg, M_DEVBUF);
-               free(ma.ma_interrupts, M_DEVBUF);
-               free(ma.ma_address, M_DEVBUF);
-       }
-
        /*
-        * Configure the rest of the devices, in PROM order.  Skip
+        * Configure the devices, in PROM order.  Skip
         * PROM entries that are not for devices, or which must be
         * done before we get here.
         */
@@ -1058,6 +1019,7 @@
 #define BUSCLASS_OBIO          3
 #define BUSCLASS_SBUS          4
 #define BUSCLASS_VME           5
+#define BUSCLASS_PCI           6
 
 static int bus_class __P((struct device *));
 static int instance_match __P((struct device *, void *, struct bootpath *));
@@ -1076,6 +1038,9 @@
        { "dma",        BUSCLASS_SBUS },
        { "espdma",     BUSCLASS_SBUS },
        { "ledma",      BUSCLASS_SBUS },
+       { "psycho",     BUSCLASS_MAINBUS },
+       { "simba",      BUSCLASS_PCI },
+       { "pciide",     BUSCLASS_PCI },
        { "vme",        BUSCLASS_VME }
 };
 
@@ -1110,7 +1075,7 @@
 {
        struct mainbus_attach_args *ma;
        struct sbus_attach_args *sa;
-       struct iommu_attach_args *iom;
+       struct pci_attach_args *pa;
 
        /*
         * Several Sbus devices are represented on bootpaths in one of
@@ -1120,6 +1085,9 @@
         *
         * hence we fall back on a `unit number' check if the Sbus-specific
         * instance parameter check does not produce a match.
+        *
+        * For PCI devices, we get:
+        *      ../pci@../xxx@<dev>,<fn>/...
         */
 
        switch (bus_class(dev)) {
@@ -1133,6 +1101,12 @@
                if (bp->val[0] == sa->sa_slot && bp->val[1] == sa->sa_offset)
                        return (1);
                break;
+       case BUSCLASS_PCI:
+               pa = aux;
+               if (bp->val[0] == pa->pa_device &&
+                   bp->val[1] == pa->pa_function)
+                       return (1);
+               break;
        default:
                break;
        }
@@ -1193,8 +1167,12 @@
            strcmp(dvname, "ledma") == 0 ||
            strcmp(dvname, "espdma") == 0 ||
            strcmp(dvname, "esp") == 0 ||
+           strcmp(dvname, "pci") == 0 ||
+           strcmp(dvname, "pciide") == 0 ||
+           strcmp(dvname, "psycho") == 0 ||
+           strcmp(dvname, "simba") == 0 ||
            strcmp(dvname, "xdc") == 0 ||
-           strcmp(dvname, "xyc") == 0 ) {
+           strcmp(dvname, "xyc") == 0) {
                /*
                 * A bus or controller device of sorts. Check instance
                 * parameters and advance boot path on match.
@@ -1203,9 +1181,10 @@
                        altbootpath_store(1, bp + 1);
                        return;
                }
-       } else if (strcmp(dvname, "le") == 0) {
+       } else if (strcmp(dvname, "le") == 0 ||
+                  strcmp(dvname, "hme") == 0) {
                /*
-                * LANCE ethernet device
+                * ethernet devices: LANCE, Happy Meal Ethernet.
                 */
                if (instance_match(dev, aux, bp) != 0) {
                        nail_bootdev(dev, bp);
@@ -1265,6 +1244,17 @@
                        nail_bootdev(dev, bp);
                        return;
                }
+       } else if (strcmp("wd", dvname) == 0) {
+               /*
+                * IDE disks.
+                * ?XXX?
+                */
+               struct ata_atapi_attach *aa = aux;
+
+               if (aa->aa_channel == bp->val[0]) {
+                       nail_bootdev(dev, bp);
+                       return;
+               }
        } else {
                /*
                 * Generic match procedure.
@@ -1274,5 +1264,4 @@
                        return;
                }
        }
-
 }



Home | Main Index | Thread Index | Old Index