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