SCCS-vsn: sys/luna68k/luna68k/swapgeneric.c 7.4
*
* 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>
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;
if (boothowto & RB_ASKNAME) {
char name[128];
retry:
if (boothowto & RB_ASKNAME) {
char name[128];
retry:
}
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++;
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 );
- 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;