|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 1986 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution is only permitted until one year after the first shipment
6: * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and
7: * binary forms are permitted provided that: (1) source distributions retain
8: * this entire copyright notice and comment, and (2) distributions including
9: * binaries display the following acknowledgement: This product includes
10: * software developed by the University of California, Berkeley and its
11: * contributors'' in the documentation or other materials provided with the
12: * distribution and in all advertising materials mentioning features or use
13: * of this software. Neither the name of the University nor the names of
14: * its contributors may be used to endorse or promote products derived from
15: * this software without specific prior written permission.
16: * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
17: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
18: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
19: *
20: * @(#)swapgeneric.c 7.1 (Berkeley) 5/8/90
21: */
22:
23: #include "pte.h"
24:
25: #include "param.h"
26: #include "conf.h"
27: #include "buf.h"
28: #include "vm.h"
29: #include "systm.h"
30: #include "reboot.h"
31:
32: #include "../hpdev/device.h"
33:
34: /*
35: * Generic configuration; all in one
36: */
37: dev_t rootdev = NODEV;
38: dev_t argdev = NODEV;
39: dev_t dumpdev = NODEV;
40: int nswap;
41: struct swdevt swdevt[] = {
42: { -1, 1, 0 },
43: { 0, 0, 0 },
44: };
45: long dumplo;
46: int dmmin, dmmax, dmtext;
47:
48: extern struct driver rddriver;
49: extern struct driver sddriver;
50: extern struct hp_ctlr hp_cinit[];
51: extern struct hp_device hp_dinit[];
52:
53: struct genericconf {
54: caddr_t gc_driver;
55: char *gc_name;
56: dev_t gc_root;
57: } genericconf[] = {
58: { (caddr_t)&rddriver, "rd", makedev(2, 0), },
59: { (caddr_t)&sddriver, "sd", makedev(4, 0), },
60: { 0 },
61: };
62:
63: setconf()
64: {
65: register struct hp_ctlr *hc;
66: register struct hp_device *hd;
67: register struct genericconf *gc;
68: register char *cp;
69: int unit, swaponroot = 0;
70:
71: if (rootdev != NODEV)
72: goto doswap;
73: unit = 0;
74: if (boothowto & RB_ASKNAME) {
75: char name[128];
76: retry:
77: printf("root device? ");
78: gets(name);
79: for (gc = genericconf; gc->gc_driver; gc++)
80: if (gc->gc_name[0] == name[0] &&
81: gc->gc_name[1] == name[1])
82: goto gotit;
83: printf("use one of:");
84: for (gc = genericconf; gc->gc_driver; gc++)
85: printf(" %s%%d", gc->gc_name);
86: printf("\n");
87: goto retry;
88: gotit:
89: if (*++cp < '0' || *cp > '9') {
90: printf("bad/missing unit number\n");
91: goto retry;
92: }
93: while (*cp >= '0' && *cp <= '9')
94: unit = 10 * unit + *cp++ - '0';
95: if (*cp == '*')
96: swaponroot++;
97: goto found;
98: }
99: for (gc = genericconf; gc->gc_driver; gc++) {
100: for (hd = hp_dinit; hd->hp_driver; hd++) {
101: if (hd->hp_alive == 0)
102: continue;
103: if (hd->hp_unit == 0 && hd->hp_driver ==
104: (struct driver *)gc->gc_driver) {
105: printf("root on %s0\n", hd->hp_driver->d_name);
106: goto found;
107: }
108: }
109: }
110: printf("no suitable root\n");
111: asm("stop #0x2700");
112: found:
113: gc->gc_root = makedev(major(gc->gc_root), unit*8);
114: rootdev = gc->gc_root;
115: doswap:
116: swdevt[0].sw_dev = argdev = dumpdev =
117: makedev(major(rootdev), minor(rootdev)+1);
118: /* swap size and dumplo set during autoconfigure */
119: if (swaponroot)
120: rootdev = dumpdev;
121: }
122:
123: gets(cp)
124: char *cp;
125: {
126: register char *lp;
127: register c;
128:
129: lp = cp;
130: for (;;) {
131: cnputc(c = cngetc());
132: switch (c) {
133: case '\n':
134: case '\r':
135: *lp++ = '\0';
136: return;
137: case '\b':
138: case '\177':
139: if (lp > cp) {
140: lp--;
141: cnputc(' ');
142: cnputc('\b');
143: }
144: continue;
145: case '#':
146: lp--;
147: if (lp < cp)
148: lp = cp;
149: continue;
150: case '@':
151: case 'u'&037:
152: lp = cp;
153: cnputc('\n');
154: continue;
155: default:
156: *lp++ = c;
157: }
158: }
159: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.