changed setconf() which could be allowed partition specification
authorAkito Fujita <akito@ucbvax.Berkeley.EDU>
Wed, 13 Jan 1993 02:55:51 +0000 (18:55 -0800)
committerAkito Fujita <akito@ucbvax.Berkeley.EDU>
Wed, 13 Jan 1993 02:55:51 +0000 (18:55 -0800)
SCCS-vsn: sys/luna68k/luna68k/swapgeneric.c 7.4

usr/src/sys/luna68k/luna68k/swapgeneric.c

index 1ad9ac7..d5aa3ab 100644 (file)
@@ -7,7 +7,7 @@
  *
  * from: hp300/hp300/swapgeneric.c     7.8 (Berkeley) 10/11/92
  *
  *
  * from: hp300/hp300/swapgeneric.c     7.8 (Berkeley) 10/11/92
  *
- *     @(#)swapgeneric.c       7.3 (Berkeley) %G%
+ *     @(#)swapgeneric.c       7.4 (Berkeley) %G%
  */
 
 #include <sys/param.h>
  */
 
 #include <sys/param.h>
@@ -54,11 +54,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 +82,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 +108,17 @@ 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;