BSD 4_4_Lite1 release
[unix-history] / usr / src / sys / luna68k / luna68k / swapgeneric.c
index 68d349d..0e572c4 100644 (file)
@@ -1,22 +1,48 @@
 /*
  * Copyright (c) 1992 OMRON Corporation.
 /*
  * Copyright (c) 1992 OMRON Corporation.
- * Copyright (c) 1982, 1986, 1992 Regents of the University of California.
- * All rights reserved.
+ * Copyright (c) 1982, 1986, 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
  *
  *
- * %sccs.include.redist.c%
+ * 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.
  *
  *
- * from: hp300/hp300/swapgeneric.c     7.1 (Berkeley) 6/4/92
+ * 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.
  *
  *
- *     @(#)swapgeneric.c       7.1 (Berkeley) %G%
+ * from: hp300/hp300/swapgeneric.c     7.9 (Berkeley) 6/16/93
+ *
+ *     @(#)swapgeneric.c       8.2 (Berkeley) 12/6/93
  */
 
  */
 
-#include "sys/param.h"
-#include "sys/conf.h"
-#include "sys/buf.h"
-#include "sys/systm.h"
-#include "sys/reboot.h"
+#include <sys/param.h>
+#include <sys/conf.h>
+#include <sys/buf.h>
+#include <sys/systm.h>
+#include <sys/reboot.h>
 
 
-#include "../dev/device.h"
+#include <luna68k/dev/device.h>
 
 /*
  * Generic configuration;  all in one
 
 /*
  * Generic configuration;  all in one
@@ -30,7 +56,7 @@ int   nswap;
 
 struct swdevt swdevt[] = {
        { -1,   1,      0 },
 
 struct swdevt swdevt[] = {
        { -1,   1,      0 },
-       { 0,    0,      0 },
+       { NODEV,0,      0 },
 };
 
 int    dmmin, dmmax, dmtext;
 };
 
 int    dmmin, dmmax, dmtext;
@@ -54,11 +80,12 @@ setconf()
        register struct hp_device *hd;
        register struct genericconf *gc;
        register char *cp;
        register struct hp_device *hd;
        register struct genericconf *gc;
        register char *cp;
-       int unit, swaponroot = 0;
+       int unit, part, swaponroot = 0;
 
        if (rootdev != NODEV)
                goto doswap;
        unit = 0;
 
        if (rootdev != NODEV)
                goto doswap;
        unit = 0;
+       part = 0;
        if (boothowto & RB_ASKNAME) {
                char name[128];
 retry:
        if (boothowto & RB_ASKNAME) {
                char name[128];
 retry:
@@ -81,8 +108,15 @@ gotit:
                }
                while (*cp >= '0' && *cp <= '9')
                        unit = 10 * unit + *cp++ - '0';
                }
                while (*cp >= '0' && *cp <= '9')
                        unit = 10 * unit + *cp++ - '0';
+               if (*cp < 'a' || *cp > 'h') {
+                       printf("bad/missing partiiton number\n");
+                       goto retry;
+               }
+               part = *cp++ - 'a';
+/*
                if (*cp == '*')
                        swaponroot++;
                if (*cp == '*')
                        swaponroot++;
+ */
                goto found;
        }
 
                goto found;
        }
 
@@ -100,13 +134,18 @@ gotit:
        printf("no suitable root\n");
        asm("stop #0x2700");
 found:
        printf("no suitable root\n");
        asm("stop #0x2700");
 found:
-       gc->gc_root = makedev(major(gc->gc_root), unit*8);
+       gc->gc_root = makedev(major(gc->gc_root), (unit * 8) + part );
        rootdev = gc->gc_root;
        rootdev = gc->gc_root;
-       printf("using root device: %s%d%c\n", gc->gc_name, unit, 'a');
-
+/*
+       printf("using root device: %s%d%c\n", gc->gc_name, unit, 'a' + part);
+ */
 doswap:
        swdevt[0].sw_dev = argdev = dumpdev =
 doswap:
        swdevt[0].sw_dev = argdev = dumpdev =
-           makedev(major(rootdev), minor(rootdev)+1);
+           makedev(major(rootdev), (minor(rootdev) & ~0x7) + 1);
+/*
+       printf("using swap device: %s%d%c\n",
+              gc->gc_name, unit, 'a' + (minor(swdevt[0].sw_dev) & 0x7));
+ */
        /* swap size and dumplo set during autoconfigure */
        if (swaponroot)
                rootdev = dumpdev;
        /* swap size and dumplo set during autoconfigure */
        if (swaponroot)
                rootdev = dumpdev;