Source-Changes-HG archive

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

[src/trunk]: src/sys/arch/arc/arc Moved from /cvsroot/syssrc/sys/arch/pica/pi...



details:   https://anonhg.NetBSD.org/src/rev/65cfc9fdb07e
branches:  trunk
changeset: 481090:65cfc9fdb07e
user:      soda <soda%NetBSD.org@localhost>
date:      Sun Jan 23 20:09:00 2000 +0000

description:
Moved from /cvsroot/syssrc/sys/arch/pica/pica/autoconf.c,v

diffstat:

 sys/arch/arc/arc/autoconf.c |  201 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 201 insertions(+), 0 deletions(-)

diffs (205 lines):

diff -r de0ff3b4896f -r 65cfc9fdb07e sys/arch/arc/arc/autoconf.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/arc/arc/autoconf.c       Sun Jan 23 20:09:00 2000 +0000
@@ -0,0 +1,201 @@
+/*     $NetBSD: autoconf.c,v 1.12 2000/01/23 20:09:01 soda Exp $       */
+
+/*
+ * Copyright (c) 1988 University of Utah.
+ * Copyright (c) 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * the Systems Programming Group of the University of Utah Computer
+ * Science Department and Ralph Campbell.
+ *
+ * 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 the University of
+ *     California, Berkeley and its contributors.
+ * 4. 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.
+ *
+ * from: Utah Hdr: autoconf.c 1.31 91/01/21
+ *
+ *     from: @(#)autoconf.c    8.1 (Berkeley) 6/10/93
+ */
+
+/*
+ * Setup the system to run on the current machine.
+ *
+ * Configure() is called at boot time.  Available
+ * devices are determined (from possibilities mentioned in ioconf.c),
+ * and the drivers are initialized.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/buf.h>
+#include <sys/disklabel.h>
+#include <sys/conf.h>
+#include <sys/reboot.h>
+#include <sys/device.h>
+
+#include <machine/autoconf.h>
+
+/*
+ * The following several variables are related to
+ * the configuration process, and are used in initializing
+ * the machine.
+ */
+int    cpuspeed = 150; /* approx # instr per usec. */
+extern int pica_boardtype;
+
+void   findroot __P((struct device **devpp, int *partp));
+int    getpno __P((char **cp));
+
+
+/*
+ *  Configure all devices found that we know about.
+ *  This is done at boot time.
+ */
+void
+cpu_configure()
+{
+
+       (void)splhigh();        /* To be really shure.. */
+       if(config_rootfound("mainbus", "mainbus") == NULL)
+               panic("no mainbus found");
+       (void)spl0();
+}
+
+void
+cpu_rootconf()
+{
+       struct device *booted_device;
+       int booted_partition;
+
+       findroot(&booted_device, &booted_partition);
+
+       printf("boot device: %s\n",
+           booted_device ? booted_device->dv_xname : "<unknown>");
+
+       setroot(booted_device, booted_partition);
+}
+
+u_long bootdev;                /* should be dev_t, but not until 32 bits */
+
+/*
+ * Attempt to find the device from which we were booted.
+ * If we can do so, and not instructed not to do so,
+ * change rootdev to correspond to the load device.
+ */
+void
+findroot(devpp, partp)
+       struct device **devpp;
+       int *partp;
+{
+       int i, majdev, unit, part;
+       struct device *dv;
+       char buf[32];
+
+       /*
+        * Default to "not found."
+        */
+       *devpp = NULL;
+       *partp = 0;
+
+#if 0
+       printf("howto %x bootdev %x ", boothowto, bootdev);
+#endif
+
+       if ((bootdev & B_MAGICMASK) != (u_long)B_DEVMAGIC)
+               return;
+
+       majdev = B_TYPE(bootdev);
+       for (i = 0; dev_name2blk[i].d_name != NULL; i++)
+               if (majdev == dev_name2blk[i].d_maj)
+                       break;
+       if (dev_name2blk[i].d_name == NULL)
+               return;
+
+       part = B_PARTITION(bootdev);
+       unit = B_UNIT(bootdev);
+
+       sprintf(buf, "%s%d", dev_name2blk[i].d_name, unit);
+       for (dv = alldevs.tqh_first; dv != NULL;
+           dv = dv->dv_list.tqe_next) {
+               if (strcmp(buf, dv->dv_xname) == 0) {
+                       *devpp = dv;
+                       *partp = part;
+                       return;
+               }
+       }
+}
+
+
+
+/*
+ * Look at the string 'cp' and decode the boot device.
+ * Boot names look like: scsi()disk(n)rdisk()partition(1)\bsd
+ */
+void
+makebootdev(cp)
+       char *cp;
+{
+       int majdev, unit, ctrl;
+       char dv[8];
+
+       bootdev = B_DEVMAGIC;
+
+       dv[0] = *cp;
+       ctrl = getpno(&cp);
+       if(*cp++ == ')') {
+               dv[1] = *cp;
+               unit = getpno(&cp);
+
+               for (majdev = 0; majdev < sizeof(dev_name2blk)/sizeof(dev_name2blk[0]); majdev++)
+                       if (dv[0] == dev_name2blk[majdev].d_name[0] &&
+                           dv[1] == dev_name2blk[majdev].d_name[1] &&
+                           cp[0] == ')')
+                               bootdev = MAKEBOOTDEV(majdev, 0, ctrl, unit,0);
+       }
+}
+
+
+int
+getpno(cp)
+       char **cp;
+{
+       int val = 0;
+       char *cx = *cp;
+
+       while(*cx && *cx != '(')
+               cx++;
+       if(*cx == '(') {
+               cx++;
+               while(*cx && *cx != ')') {
+                       val = val * 10 + *cx - '0';
+                       cx++;
+               }
+       }
+       *cp = cx;
+       return val;
+}



Home | Main Index | Thread Index | Old Index