|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1982, 1986 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.8 (Berkeley) 2/7/89 ! 7: */ ! 8: ! 9: #include "mba.h" ! 10: ! 11: #include "pte.h" ! 12: ! 13: #include "param.h" ! 14: #include "conf.h" ! 15: #include "buf.h" ! 16: #include "vm.h" ! 17: #include "systm.h" ! 18: #include "reboot.h" ! 19: ! 20: #include "cons.h" ! 21: #include "mtpr.h" ! 22: #include "../vaxmba/mbareg.h" ! 23: #include "../vaxmba/mbavar.h" ! 24: #include "../vaxuba/ubareg.h" ! 25: #include "../vaxuba/ubavar.h" ! 26: ! 27: /* ! 28: * Generic configuration; all in one ! 29: */ ! 30: dev_t rootdev = NODEV; ! 31: dev_t argdev = NODEV; ! 32: dev_t dumpdev = NODEV; ! 33: int nswap; ! 34: struct swdevt swdevt[] = { ! 35: { -1, 1, 0 }, ! 36: { 0, 0, 0 }, ! 37: }; ! 38: long dumplo; ! 39: int dmmin, dmmax, dmtext; ! 40: ! 41: extern struct mba_driver hpdriver; ! 42: extern struct uba_driver scdriver; ! 43: extern struct uba_driver hkdriver; ! 44: extern struct uba_driver idcdriver; ! 45: extern struct uba_driver hldriver; ! 46: extern struct uba_driver udadriver; ! 47: extern struct uba_driver kdbdriver; ! 48: ! 49: struct genericconf { ! 50: caddr_t gc_driver; ! 51: char *gc_name; ! 52: dev_t gc_root; ! 53: } genericconf[] = { ! 54: { (caddr_t)&hpdriver, "hp", makedev(0, 0), }, ! 55: { (caddr_t)&scdriver, "up", makedev(2, 0), }, ! 56: { (caddr_t)&udadriver, "ra", makedev(9, 0), }, ! 57: { (caddr_t)&idcdriver, "rb", makedev(11, 0), }, ! 58: { (caddr_t)&hldriver, "rl", makedev(14, 0), }, ! 59: { (caddr_t)&hkdriver, "hk", makedev(3, 0), }, ! 60: { (caddr_t)&hkdriver, "rk", makedev(3, 0), }, ! 61: { (caddr_t)&kdbdriver, "kra", makedev(16, 0), }, ! 62: { 0 }, ! 63: }; ! 64: ! 65: setconf() ! 66: { ! 67: #if NMBA > 0 ! 68: register struct mba_device *mi; ! 69: #endif ! 70: register struct uba_device *ui; ! 71: register struct genericconf *gc; ! 72: register char *cp, *gp; ! 73: int unit, swaponroot = 0; ! 74: ! 75: if (rootdev != NODEV) ! 76: goto doswap; ! 77: unit = 0; ! 78: if (boothowto & RB_ASKNAME) { ! 79: char name[128]; ! 80: retry: ! 81: printf("root device? "); ! 82: gets(name); ! 83: for (gc = genericconf; gc->gc_driver; gc++) ! 84: for (cp = name, gp = gc->gc_name; *cp == *gp; cp++) ! 85: if (*++gp == 0) ! 86: goto gotit; ! 87: printf( ! 88: "use hp%%d, up%%d, ra%%d, rb%%d, rl%%d, hk%%d or kra%%d\n"); ! 89: goto retry; ! 90: gotit: ! 91: if (*++cp < '0' || *cp > '9') { ! 92: printf("bad/missing unit number\n"); ! 93: goto retry; ! 94: } ! 95: while (*cp >= '0' && *cp <= '9') ! 96: unit = 10 * unit + *cp++ - '0'; ! 97: if (*cp == '*') ! 98: swaponroot++; ! 99: goto found; ! 100: } ! 101: for (gc = genericconf; gc->gc_driver; gc++) { ! 102: #if NMBA > 0 ! 103: for (mi = mbdinit; mi->mi_driver; mi++) { ! 104: if (mi->mi_alive == 0) ! 105: continue; ! 106: if (mi->mi_unit == 0 && mi->mi_driver == ! 107: (struct mba_driver *)gc->gc_driver) { ! 108: printf("root on %s0\n", ! 109: mi->mi_driver->md_dname); ! 110: goto found; ! 111: } ! 112: } ! 113: #endif ! 114: for (ui = ubdinit; ui->ui_driver; ui++) { ! 115: if (ui->ui_alive == 0) ! 116: continue; ! 117: if (ui->ui_unit == 0 && ui->ui_driver == ! 118: (struct uba_driver *)gc->gc_driver) { ! 119: printf("root on %s0\n", ! 120: ui->ui_driver->ud_dname); ! 121: goto found; ! 122: } ! 123: } ! 124: } ! 125: printf("no suitable root\n"); ! 126: asm("halt"); ! 127: found: ! 128: gc->gc_root = makedev(major(gc->gc_root), unit*8); ! 129: rootdev = gc->gc_root; ! 130: doswap: ! 131: swdevt[0].sw_dev = argdev = dumpdev = ! 132: makedev(major(rootdev), minor(rootdev)+1); ! 133: /* swap size and dumplo set during autoconfigure */ ! 134: if (swaponroot) ! 135: rootdev = dumpdev; ! 136: } ! 137: ! 138: gets(cp) ! 139: char *cp; ! 140: { ! 141: register char *lp; ! 142: register c; ! 143: ! 144: lp = cp; ! 145: for (;;) { ! 146: cnputc(c = cngetc()); ! 147: switch (c) { ! 148: case '\n': ! 149: case '\r': ! 150: *lp++ = '\0'; ! 151: return; ! 152: case '\b': ! 153: case '#': ! 154: case '\177': ! 155: lp--; ! 156: if (lp < cp) ! 157: lp = cp; ! 158: continue; ! 159: case '@': ! 160: case 'u'&037: ! 161: lp = cp; ! 162: cnputc('\n'); ! 163: continue; ! 164: default: ! 165: *lp++ = c; ! 166: } ! 167: } ! 168: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.