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