FreeBSD/Linux Kernel Cross Reference
sys/i386at/conf.c
1 /*
2 * Mach Operating System
3 * Copyright (c) 1993-1989 Carnegie Mellon University
4 * All Rights Reserved.
5 *
6 * Permission to use, copy, modify and distribute this software and its
7 * documentation is hereby granted, provided that both the copyright
8 * notice and this permission notice appear in all copies of the
9 * software, derivative works or modified versions, and any portions
10 * thereof, and that both notices appear in supporting documentation.
11 *
12 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
13 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
14 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
15 *
16 * Carnegie Mellon requests users of this software to return to
17 *
18 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
19 * School of Computer Science
20 * Carnegie Mellon University
21 * Pittsburgh PA 15213-3890
22 *
23 * any improvements or extensions that they make and grant Carnegie Mellon
24 * the rights to redistribute these changes.
25 */
26 /*
27 * HISTORY
28 * $Log: conf.c,v $
29 * Revision 2.17 93/11/17 16:43:24 dbg
30 * Added "mc" and "clockpit" devices for new clocks and
31 * timers.
32 * [93/05/21 dbg]
33 *
34 * Revision 2.16 93/05/17 15:04:47 rvb
35 * Type casts, etc to quiet gcc 2.3.3 warnings
36 * [93/05/17 rvb]
37 *
38 * Revision 2.15 93/03/09 10:54:33 danner
39 * Added SCSI CD-ROM Audio. Added back SCSI processor links.
40 * [93/03/06 af]
41 *
42 * Revision 2.14 93/02/05 08:18:31 danner
43 * Added include.
44 * [93/02/04 danner]
45 *
46 * Revision 2.13 93/01/24 13:15:14 danner
47 * Add d-link "600" ethernet device "de"
48 * [92/08/13 rvb]
49 *
50 * Revision 2.12 92/02/19 16:29:40 elf
51 * Add lpr and par devices. (taken from 2.5)
52 * [92/02/13 rvb]
53 *
54 * Revision 2.11 92/01/03 20:39:53 dbg
55 * Added devinfo routine to scsi to accomodate MI change
56 * that screwed up extra large writes.
57 * [91/12/26 11:06:54 af]
58 *
59 * Revision 2.10 91/08/28 11:11:37 jsb
60 * Fixed field-describing comment in dev_name_list definition.
61 * [91/08/27 17:52:06 jsb]
62 *
63 * Convert bsize entries to devinfo entries. Add nodev entries for
64 * devices that don't support devinfo.
65 * [91/08/15 18:43:13 jsb]
66 *
67 * Add block size entries for hd and fd.
68 * [91/08/12 17:32:55 dlb]
69 *
70 * Revision 2.9 91/08/24 11:57:26 af
71 * Added SCSI disks, tapes, and cpus.
72 * [91/08/02 02:56:08 af]
73 *
74 * Revision 2.8 91/05/14 16:22:01 mrt
75 * Correcting copyright
76 *
77 * Revision 2.7 91/02/14 14:42:13 mrt
78 * Allow com driver and distinguish EtherLinkII from wd8003
79 * [91/01/28 15:27:02 rvb]
80 *
81 * Revision 2.6 91/02/05 17:16:44 mrt
82 * Changed to new Mach copyright
83 * [91/02/01 17:42:38 mrt]
84 *
85 * Revision 2.5 91/01/08 17:32:42 rpd
86 * Support for get/set status on hd and fd.
87 * Also fd has 64 minor devices per unit.
88 * Switch wd8003 -> ns8390
89 * [91/01/04 12:17:15 rvb]
90 *
91 * Revision 2.4 90/10/01 14:23:02 jeffreyh
92 * added wd8003 ethernet driver
93 * [90/09/27 18:23:53 jeffreyh]
94 *
95 * Revision 2.3 90/05/21 13:26:53 dbg
96 * Add mouse, keyboard, IOPL devices.
97 * [90/05/17 dbg]
98 *
99 * Revision 2.2 90/05/03 15:41:34 dbg
100 * Add 3c501 under name 'et'.
101 * [90/04/27 dbg]
102 *
103 * Created.
104 * [90/02/20 dbg]
105 *
106 */
107
108 /*
109 * Device switch for i386 AT bus.
110 */
111
112 #include <mach/machine/vm_types.h>
113 #include <kern/assert.h>
114 #include <device/conf.h>
115
116 extern vm_offset_t block_io_mmap();
117
118 extern int timeopen(), timeclose();
119 extern vm_offset_t timemmap();
120 #define timename "time"
121
122 #include <hd.h>
123 #if NHD > 0
124 extern int hdopen(), hdclose(), hdread(), hdwrite();
125 extern int hdgetstat(), hdsetstat(), hddevinfo();
126 #define hdname "hd"
127 #endif /* NHD > 0 */
128
129 #include <aha.h>
130 #if NAHA > 0
131 int rz_open(), rz_close(), rz_read(), rz_write();
132 int rz_get_status(), rz_set_status(), rz_devinfo();
133 int cd_open(), cd_close(), cd_read(), cd_write();
134 #define rzname "sd"
135 #define tzname "st"
136 #define scname "sc" /* processors */
137 #define cdname "cd_audio" /* CD-ROM DA */
138
139 #endif /* NAHA > 0 */
140
141 #include <fd.h>
142 #if NFD > 0
143 extern int fdopen(), fdclose(), fdread(), fdwrite();
144 extern int fdgetstat(), fdsetstat(), fddevinfo();
145 #define fdname "fd"
146 #endif /* NFD > 0 */
147
148 #include <wt.h>
149 #if NWT > 0
150 extern int wtopen(), wtread(), wtwrite(), wtclose();
151 #define wtname "wt"
152 #endif /* NWT > 0 */
153
154 #include <pc586.h>
155 #if NPC586 > 0
156 extern int pc586open(), pc586output(), pc586getstat(), pc586setstat(),
157 pc586setinput();
158 #define pc586name "pc"
159 #endif /* NPC586 > 0 */
160
161 #include <ns8390.h>
162 #if NNS8390 > 0
163 extern int wd8003open(), eliiopen();
164 extern int ns8390output(), ns8390getstat(), ns8390setstat(),
165 ns8390setinput();
166 #define ns8390wdname "wd"
167 #define ns8390elname "el"
168 #endif /* NNS8390 > 0 */
169
170 #include <at3c501.h>
171 #if NAT3C501 > 0
172 extern int at3c501open(), at3c501output(),
173 at3c501getstat(), at3c501setstat(),
174 at3c501setinput();
175 #define at3c501name "et"
176 #endif /* NAT3C501 > 0 */
177
178 #include <par.h>
179 #if NPAR > 0
180 extern int paropen(), paroutput(), pargetstat(), parsetstat(),
181 parsetinput();
182 #define parname "par"
183 #endif /* NPAR > 0 */
184
185 #include <de6c.h>
186 #if NDE6C > 0
187 extern int de6copen(), de6coutput(), de6cgetstat(), de6csetstat(),
188 de6csetinput();
189 #define de6cname "de"
190 #endif /* NDE6C > 0 */
191
192 extern int kdopen(), kdclose(), kdread(), kdwrite();
193 extern int kdgetstat(), kdsetstat(), kdportdeath();
194 extern vm_offset_t kdmmap();
195 #define kdname "kd"
196
197 #include <com.h>
198 #if NCOM > 0
199 extern int comopen(), comclose(), comread(), comwrite();
200 extern int comgetstat(), comsetstat(), comportdeath();
201 #define comname "com"
202 #endif /* NCOM > 0 */
203
204 #include <lpr.h>
205 #if NLPR > 0
206 extern int lpropen(), lprclose(), lprread(), lprwrite();
207 extern int lprgetstat(), lprsetstat(), lprportdeath();
208 #define lprname "lpr"
209 #endif /* NLPR > 0 */
210
211 #include <blit.h>
212 #if NBLIT > 0
213 extern int blitopen(), blitclose(), blit_get_stat();
214 extern vm_offset_t blitmmap();
215 #define blitname "blit"
216
217 extern int mouseinit(), mouseopen(), mouseclose();
218 extern int mouseioctl(), mouseselect(), mouseread();
219 #endif
220
221 extern int kbdopen(), kbdclose(), kbdread();
222 extern int kbdgetstat(), kbdsetstat();
223 #define kbdname "kbd"
224
225 extern int mouseopen(), mouseclose(), mouseread();
226 #define mousename "mouse"
227
228 extern int ioplopen(), ioplclose();
229 extern vm_offset_t ioplmmap();
230 #define ioplname "iopl"
231
232 #include <mc.h>
233 #if NMC > 0
234 extern int mc_open(), mc_close(), mc_getstat();
235 extern int mc_setstat(), mc_devinfo();
236 extern vm_offset_t mc_mmap();
237 #define mc_name "mc"
238 #endif /* NMC > 0 */
239
240 #include <clockpit.h>
241 #if NCLOCKPIT > 0
242 extern int clockpitopen(), clockpitclose(), clockpitgetstat();
243 extern int clockpitsetstat(), clockpitinfo();
244 extern vm_offset_t clockpitmmap();
245 #define clockpitname "clockpit"
246 #endif /* NCLOCKPIT > 0 */
247
248 /*
249 * List of devices - console must be at slot 0
250 */
251 struct dev_ops dev_name_list[] =
252 {
253 /*name, open, close, read,
254 write, getstat, setstat, mmap,
255 async_in, reset, port_death, subdev,
256 dev_info */
257
258 { kdname, kdopen, kdclose, kdread,
259 kdwrite, kdgetstat, kdsetstat, kdmmap,
260 nodev, nulldev, kdportdeath, 0,
261 nodev },
262
263 { timename, timeopen, timeclose, nulldev,
264 nulldev, nulldev, nulldev, timemmap,
265 nodev, nulldev, nulldev, 0,
266 nodev },
267
268 #if NHD > 0
269 { hdname, hdopen, hdclose, hdread,
270 hdwrite, hdgetstat, hdsetstat, nomap,
271 nodev, nulldev, nulldev, 16,
272 hddevinfo },
273 #endif NHD > 0
274
275 #if NAHA > 0
276 { rzname, rz_open, rz_close, rz_read,
277 rz_write, rz_get_status, rz_set_status, nomap,
278 nodev, nulldev, nulldev, 8,
279 rz_devinfo },
280
281 { tzname, rz_open, rz_close, rz_read,
282 rz_write, rz_get_status, rz_set_status, nomap,
283 nodev, nulldev, nulldev, 8,
284 nodev },
285
286 { cdname, cd_open, cd_close, cd_read,
287 cd_write, nodev, nodev, nomap,
288 nodev, nulldev, nulldev, 8,
289 nodev },
290
291 { scname, rz_open, rz_close, rz_read,
292 rz_write, rz_get_status, rz_set_status, nomap,
293 nodev, nulldev, nulldev, 8,
294 nodev },
295
296 #endif /* NAHA > 0 */
297
298 #if NFD > 0
299 { fdname, fdopen, fdclose, fdread,
300 fdwrite, fdgetstat, fdsetstat, nomap,
301 nodev, nulldev, nulldev, 64,
302 fddevinfo },
303 #endif NFD > 0
304
305 #if NWT > 0
306 { wtname, wtopen, wtclose, wtread,
307 wtwrite, nulldev, nulldev, nomap,
308 nodev, nulldev, nulldev, 0,
309 nodev },
310 #endif NWT > 0
311
312 #if NPC586 > 0
313 { pc586name, pc586open, nulldev, nulldev,
314 pc586output, pc586getstat, pc586setstat, nomap,
315 pc586setinput,nulldev, nulldev, 0,
316 nodev },
317 #endif
318
319 #if NAT3C501 > 0
320 { at3c501name, at3c501open, nulldev, nulldev,
321 at3c501output,at3c501getstat, at3c501setstat, nomap,
322 at3c501setinput, nulldev, nulldev, 0,
323 nodev },
324 #endif
325
326 #if NNS8390 > 0
327 { ns8390wdname, wd8003open, nulldev, nulldev,
328 ns8390output, ns8390getstat, ns8390setstat, nomap,
329 ns8390setinput, nulldev, nulldev, 0,
330 nodev },
331
332 { ns8390elname, eliiopen, nulldev, nulldev,
333 ns8390output, ns8390getstat, ns8390setstat, nomap,
334 ns8390setinput, nulldev, nulldev, 0,
335 nodev },
336 #endif
337
338 #if NPAR > 0
339 { parname, paropen, nulldev, nulldev,
340 paroutput, pargetstat, parsetstat, nomap,
341 parsetinput, nulldev, nulldev, 0,
342 nodev },
343 #endif
344
345 #if NDE6C > 0
346 { de6cname, de6copen, nulldev, nulldev,
347 de6coutput, de6cgetstat, de6csetstat, nomap,
348 de6csetinput, nulldev, nulldev, 0,
349 nodev },
350 #endif
351
352 #if NCOM > 0
353 { comname, comopen, comclose, comread,
354 comwrite, comgetstat, comsetstat, nomap,
355 nodev, nulldev, comportdeath, 0,
356 nodev },
357 #endif
358
359 #if NLPR > 0
360 { lprname, lpropen, lprclose, lprread,
361 lprwrite, lprgetstat, lprsetstat, nomap,
362 nodev, nulldev, lprportdeath, 0,
363 nodev },
364 #endif
365
366 #if NBLIT > 0
367 { blitname, blitopen, blitclose, nodev,
368 nodev, blit_get_stat, nodev, blitmmap,
369 nodev, nodev, nodev, 0,
370 nodev },
371 #endif
372
373 { mousename, mouseopen, mouseclose, mouseread,
374 nodev, nulldev, nulldev, nomap,
375 nodev, nulldev, nulldev, 0,
376 nodev },
377
378 { kbdname, kbdopen, kbdclose, kbdread,
379 nodev, kbdgetstat, kbdsetstat, nomap,
380 nodev, nulldev, nulldev, 0,
381 nodev },
382
383 { ioplname, ioplopen, ioplclose, nodev,
384 nodev, nodev, nodev, ioplmmap,
385 nodev, nulldev, nulldev, 0,
386 nodev },
387
388 #if NMC > 0
389 { mc_name, mc_open, mc_close, nodev,
390 nodev, mc_getstat, mc_setstat, mc_mmap,
391 nodev, nulldev, nulldev, 0,
392 mc_devinfo },
393 #endif
394
395 #if NCLOCKPIT > 0
396 { clockpitname, clockpitopen, clockpitclose, nodev,
397 nodev, clockpitgetstat,clockpitsetstat,clockpitmmap,
398 nodev, nulldev, nulldev, 0,
399 clockpitinfo },
400 #endif
401 };
402 int dev_name_count = sizeof(dev_name_list)/sizeof(dev_name_list[0]);
403
404 /*
405 * Indirect list.
406 */
407 struct dev_indirect dev_indirect_list[] = {
408
409 /* console */
410 { "console", &dev_name_list[0], 0 },
411 { "clock_priv", 0, 0 },
412 { "clock", 0, 0 }
413 };
414 int dev_indirect_count = sizeof(dev_indirect_list)
415 / sizeof(dev_indirect_list[0]);
416
417 /*
418 * Operations vector for non-privileged clock operations
419 * on system clock.
420 */
421 struct dev_ops clock_unpriv_ops =
422 { "", nodev, nodev, nodev,
423 nodev, nodev, nodev, nomap,
424 nodev, nodev, nodev, 0,
425 nodev };
426
427 /*
428 * Set unprivileged clock device from clock device
429 * (system clock).
430 */
431 void set_clock_unpriv(void)
432 {
433 struct dev_ops *ops;
434 int unit;
435
436 /*
437 * Find the privileged clock vector
438 */
439 if (!dev_name_lookup("clock_priv", &ops, &unit))
440 panic("no clock device");
441
442 /*
443 * Copy the operations vector to the unprivileged ops
444 * vector.
445 */
446 clock_unpriv_ops = *ops;
447 clock_unpriv_ops.d_setstat = nodev; /* privileged op */
448
449 /*
450 * Fill in the aliases.
451 */
452 dev_set_indirection("clock", &clock_unpriv_ops, 0);
453 }
Cache object: d8e0800e53c804e2f34b24e75fc458f3
|