rev 7
[unix-history] / usr / src / sys / vax / vax / swapgeneric.c
CommitLineData
da7c5cc6
KM
1/*
2 * Copyright (c) 1982 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 *
0880b18e 6 * @(#)swapgeneric.c 7.1 (Berkeley) %G%
da7c5cc6 7 */
2c4a4e47
SL
8
9#include "mba.h"
10
1884f3f6 11#include "pte.h"
961945a8 12
1884f3f6
JB
13#include "param.h"
14#include "conf.h"
15#include "buf.h"
16#include "vm.h"
17#include "systm.h"
18#include "reboot.h"
e8a9f30f 19
1884f3f6
JB
20#include "cons.h"
21#include "mtpr.h"
e8a9f30f
BJ
22#include "../vaxmba/mbareg.h"
23#include "../vaxmba/mbavar.h"
24#include "../vaxuba/ubareg.h"
25#include "../vaxuba/ubavar.h"
26
2c4a4e47
SL
27/*
28 * Generic configuration; all in one
29 */
80688ea3
MK
30dev_t rootdev;
31dev_t argdev = NODEV;
32dev_t dumpdev = NODEV;
2c4a4e47 33int nswap;
9f0281aa
SL
34struct swdevt swdevt[] = {
35 { -1, 1, 0 },
36 { 0, 0, 0 },
2c4a4e47
SL
37};
38long dumplo;
da1b4b92 39int dmmin, dmmax, dmtext;
9f0281aa 40
2c4a4e47
SL
41extern struct mba_driver hpdriver;
42extern struct uba_driver scdriver;
43extern struct uba_driver hkdriver;
c859d954 44extern struct uba_driver idcdriver;
96b24bab 45extern struct uba_driver hldriver;
2c4a4e47
SL
46extern struct uba_driver udadriver;
47
48struct genericconf {
49 caddr_t gc_driver;
50 char *gc_name;
51 dev_t gc_root;
2c4a4e47 52} genericconf[] = {
da1b4b92
SL
53 { (caddr_t)&hpdriver, "hp", makedev(0, 0), },
54 { (caddr_t)&scdriver, "up", makedev(2, 0), },
55 { (caddr_t)&udadriver, "ra", makedev(9, 0), },
56 { (caddr_t)&idcdriver, "rb", makedev(11, 0), },
96b24bab 57 { (caddr_t)&hldriver, "rl", makedev(14, 0), },
da1b4b92 58 { (caddr_t)&hkdriver, "hk", makedev(3, 0), },
80688ea3 59 { (caddr_t)&hkdriver, "rk", makedev(3, 0), },
9f0281aa 60 { 0 },
2c4a4e47
SL
61};
62
63setconf()
64{
65 register struct mba_device *mi;
66 register struct uba_device *ui;
67 register struct genericconf *gc;
830dc1ae 68 int unit, swaponroot = 0;
2c4a4e47
SL
69
70 if (boothowto & RB_ASKNAME) {
71 char name[128];
72retry:
73 printf("root device? ");
74 gets(name);
75 for (gc = genericconf; gc->gc_driver; gc++)
76 if (gc->gc_name[0] == name[0] &&
77 gc->gc_name[1] == name[1])
78 goto gotit;
79 goto bad;
80gotit:
830dc1ae
BJ
81 if (name[3] == '*') {
82 name[3] = name[4];
83 swaponroot++;
84 }
2c4a4e47
SL
85 if (name[2] >= '0' && name[2] <= '7' && name[3] == 0) {
86 unit = name[2] - '0';
87 goto found;
88 }
89 printf("bad/missing unit number\n");
90bad:
c859d954 91 printf("use hp%%d, up%%d, ra%%d, rb%%d, rl%%d or hk%%d\n");
2c4a4e47
SL
92 goto retry;
93 }
94 unit = 0;
95 for (gc = genericconf; gc->gc_driver; gc++) {
96 for (mi = mbdinit; mi->mi_driver; mi++) {
97 if (mi->mi_alive == 0)
98 continue;
99 if (mi->mi_unit == 0 && mi->mi_driver ==
100 (struct mba_driver *)gc->gc_driver) {
9f0281aa
SL
101 printf("root on %s0\n",
102 mi->mi_driver->md_dname);
2c4a4e47
SL
103 goto found;
104 }
105 }
106 for (ui = ubdinit; ui->ui_driver; ui++) {
107 if (ui->ui_alive == 0)
108 continue;
109 if (ui->ui_unit == 0 && ui->ui_driver ==
110 (struct uba_driver *)gc->gc_driver) {
111 printf("root on %s0\n",
112 ui->ui_driver->ud_dname);
113 goto found;
114 }
115 }
116 }
117 printf("no suitable root\n");
118 asm("halt");
119found:
120 gc->gc_root = makedev(major(gc->gc_root), unit*8);
830dc1ae 121 rootdev = gc->gc_root;
2c4a4e47
SL
122 swdevt[0].sw_dev = argdev = dumpdev =
123 makedev(major(rootdev), minor(rootdev)+1);
da1b4b92 124 /* swap size and dumplo set during autoconfigure */
830dc1ae
BJ
125 if (swaponroot)
126 rootdev = dumpdev;
2c4a4e47
SL
127}
128
129getchar()
130{
131 register c;
132
9f0281aa 133 while ((mfpr(RXCS)&RXCS_DONE) == 0)
2c4a4e47
SL
134 ;
135 c = mfpr(RXDB)&0177;
9f0281aa 136 if (c == '\r')
2c4a4e47
SL
137 c = '\n';
138 cnputc(c);
9f0281aa 139 return (c);
2c4a4e47
SL
140}
141
142gets(cp)
143 char *cp;
144{
145 register char *lp;
146 register c;
147
148 lp = cp;
149 for (;;) {
150 c = getchar() & 0177;
9f0281aa 151 switch (c) {
2c4a4e47
SL
152 case '\n':
153 case '\r':
154 *lp++ = '\0';
155 return;
156 case '\b':
157 case '#':
80688ea3 158 case '\177':
2c4a4e47
SL
159 lp--;
160 if (lp < cp)
161 lp = cp;
162 continue;
163 case '@':
164 case 'u'&037:
165 lp = cp;
166 cnputc('\n');
167 continue;
168 default:
169 *lp++ = c;
170 }
171 }
172}