|
|
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.