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