|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: * ! 6: * @(#)swapgeneric.c 7.5 (Berkeley) 4/6/90 ! 7: */ ! 8: ! 9: #include "param.h" ! 10: #include "conf.h" ! 11: #include "buf.h" ! 12: #include "vm.h" ! 13: #include "systm.h" ! 14: #include "reboot.h" ! 15: ! 16: #include "pte.h" ! 17: #include "cpu.h" ! 18: #include "cp.h" ! 19: #include "mtpr.h" ! 20: ! 21: #include "../tahoevba/vbavar.h" ! 22: ! 23: /* ! 24: * Generic configuration; all in one ! 25: */ ! 26: dev_t rootdev = NODEV; ! 27: dev_t argdev = NODEV; ! 28: dev_t dumpdev = NODEV; ! 29: int nswap; ! 30: struct swdevt swdevt[] = { ! 31: { -1, 1, 0 }, ! 32: { 0, 0, 0 }, ! 33: }; ! 34: long dumplo; ! 35: int dmmin, dmmax, dmtext; ! 36: ! 37: extern struct vba_driver vddriver; ! 38: extern struct vba_driver hdcdriver; ! 39: ! 40: struct genericconf { ! 41: caddr_t gc_driver; ! 42: char *gc_name; ! 43: dev_t gc_root; ! 44: } genericconf[] = { ! 45: { (caddr_t)&vddriver, "dk", makedev(1, 0), }, ! 46: { (caddr_t)&hdcdriver, "hd", makedev(2, 0), }, ! 47: { 0 }, ! 48: }; ! 49: ! 50: setconf() ! 51: { ! 52: register struct vba_device *ui; ! 53: register struct genericconf *gc; ! 54: register char *cp, *gp; ! 55: int unit, swaponroot = 0; ! 56: ! 57: if (rootdev != NODEV) ! 58: goto doswap; ! 59: unit = 0; ! 60: if (boothowto & RB_ASKNAME) { ! 61: char name[128]; ! 62: retry: ! 63: printf("root device? "); ! 64: gets(name); ! 65: for (gc = genericconf; gc->gc_driver; gc++) ! 66: for (cp = name, gp = gc->gc_name; *cp == *gp; cp++) ! 67: if (!*++gp) ! 68: goto gotit; ! 69: printf("use"); ! 70: for (gc = genericconf; gc->gc_driver; gc++) ! 71: printf(" %s%%d", gc->gc_name); ! 72: printf("\n"); ! 73: goto retry; ! 74: gotit: ! 75: cp = name + 2; ! 76: if (*cp < '0' || *cp > '9') { ! 77: printf("bad/missing unit number\n"); ! 78: goto retry; ! 79: } ! 80: while (*cp >= '0' && *cp <= '9') ! 81: unit = 10 * unit + *cp++ - '0'; ! 82: if (*cp == '*') ! 83: swaponroot++; ! 84: } ! 85: for (gc = genericconf; gc->gc_driver; gc++) { ! 86: for (ui = vbdinit; ui->ui_driver; ui++) { ! 87: if (ui->ui_alive == 0) ! 88: continue; ! 89: if (ui->ui_unit == 0 && ui->ui_driver == ! 90: (struct vba_driver *)gc->gc_driver) { ! 91: printf("root on %s0\n", ! 92: ui->ui_driver->ud_dname); ! 93: goto found; ! 94: } ! 95: } ! 96: } ! 97: printf("no suitable root\n"); ! 98: asm("halt"); ! 99: found: ! 100: gc->gc_root = makedev(major(gc->gc_root), unit*8); ! 101: rootdev = gc->gc_root; ! 102: doswap: ! 103: swdevt[0].sw_dev = argdev = dumpdev = ! 104: makedev(major(rootdev), minor(rootdev)+1); ! 105: /* swap size and dumplo set during autoconfigure */ ! 106: if (swaponroot) ! 107: rootdev = dumpdev; ! 108: } ! 109: ! 110: gets(buf) ! 111: char *buf; ! 112: { ! 113: register int c; ! 114: register char *lp; ! 115: ! 116: for (lp = buf;;) { ! 117: printf("%c", c = cngetc()&0177); ! 118: switch (c) { ! 119: case '\n': ! 120: case '\r': ! 121: *lp = '\0'; ! 122: return; ! 123: case '\b': ! 124: case '\177': ! 125: if (lp > buf) { ! 126: --lp; ! 127: printf("\b \b"); ! 128: } ! 129: break; ! 130: case '#': ! 131: if (lp > buf) ! 132: --lp; ! 133: break; ! 134: case 'r'&037: ! 135: *lp = 0; ! 136: printf("\n"); ! 137: printf("%s", buf); ! 138: break; ! 139: case '@': ! 140: case 'u'&037: ! 141: case 'w'&037: ! 142: lp = buf; ! 143: printf("%c", '\n'); ! 144: break; ! 145: default: ! 146: *lp++ = c; ! 147: } ! 148: } ! 149: /* NOTREACHED */ ! 150: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.