|
|
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.5 (Berkeley) 6/7/88
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++, gp++)
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: }
100: for (gc = genericconf; gc->gc_driver; gc++) {
101: #if NMBA > 0
102: for (mi = mbdinit; mi->mi_driver; mi++) {
103: if (mi->mi_alive == 0)
104: continue;
105: if (mi->mi_unit == 0 && mi->mi_driver ==
106: (struct mba_driver *)gc->gc_driver) {
107: printf("root on %s0\n",
108: mi->mi_driver->md_dname);
109: goto found;
110: }
111: }
112: #endif
113: for (ui = ubdinit; ui->ui_driver; ui++) {
114: if (ui->ui_alive == 0)
115: continue;
116: if (ui->ui_unit == 0 && ui->ui_driver ==
117: (struct uba_driver *)gc->gc_driver) {
118: printf("root on %s0\n",
119: ui->ui_driver->ud_dname);
120: goto found;
121: }
122: }
123: }
124: printf("no suitable root\n");
125: asm("halt");
126: found:
127: gc->gc_root = makedev(major(gc->gc_root), unit*8);
128: rootdev = gc->gc_root;
129: doswap:
130: swdevt[0].sw_dev = argdev = dumpdev =
131: makedev(major(rootdev), minor(rootdev)+1);
132: /* swap size and dumplo set during autoconfigure */
133: if (swaponroot)
134: rootdev = dumpdev;
135: }
136:
137: gets(cp)
138: char *cp;
139: {
140: register char *lp;
141: register c;
142:
143: lp = cp;
144: for (;;) {
145: cnputc(c = cngetc());
146: switch (c) {
147: case '\n':
148: case '\r':
149: *lp++ = '\0';
150: return;
151: case '\b':
152: case '#':
153: case '\177':
154: lp--;
155: if (lp < cp)
156: lp = cp;
157: continue;
158: case '@':
159: case 'u'&037:
160: lp = cp;
161: cnputc('\n');
162: continue;
163: default:
164: *lp++ = c;
165: }
166: }
167: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.