|
|
1.1 root 1: /* $Header: /kernel/kersrc/coh.286/RCS/null.c,v 1.1 92/07/17 15:18:09 bin Exp Locker: bin $ */
2: /* (lgl-
3: * The information contained herein is a trade secret of Mark Williams
4: * Company, and is confidential information. It is provided under a
5: * license agreement, and may be copied or disclosed only under the
6: * terms of that agreement. Any reproduction or disclosure of this
7: * material without the express written authorization of Mark Williams
8: * Company or persuant to the license agreement is unlawful.
9: *
10: * COHERENT Version 2.3.37
11: * Copyright (c) 1982, 1983, 1984.
12: * An unpublished work by Mark Williams Company, Chicago.
13: * All rights reserved.
14: -lgl) */
15: /*
16: * Null and memory driver.
17: * Minor device 0 is /dev/null
18: * Minor device 1 is physical memory
19: * Minor device 2 is kernel data
20: *
21: * $Log: null.c,v $
22: * Revision 1.1 92/07/17 15:18:09 bin
23: * Initial revision
24: *
25: * Revision 1.1 88/03/24 16:14:04 src
26: * Initial revision
27: *
28: */
29: #include <sys/coherent.h>
30: #include <sys/con.h>
31: #include <errno.h>
32: #include <sys/stat.h>
33:
34: /*
35: * Functions for configuration.
36: */
37: int nlread();
38: int nlwrite();
39: int nulldev();
40: int nonedev();
41:
42: /*
43: * Configuration table.
44: */
45: CON nlcon ={
46: DFCHR, /* Flags */
47: 0, /* Major index */
48: nulldev, /* Open */
49: nulldev, /* Close */
50: nulldev, /* Block */
51: nlread, /* Read */
52: nlwrite, /* Write */
53: nonedev, /* Ioctl */
54: nulldev, /* Powerfail */
55: nulldev, /* Timeout */
56: nulldev, /* Load */
57: nulldev /* Unload */
58: };
59:
60: /*
61: * Null/memory read routine.
62: */
63: nlread(dev, iop)
64: dev_t dev;
65: register IO *iop;
66: {
67: register unsigned n;
68:
69: switch (minor(dev)) {
70: case 0:
71: n = 0;
72: break;
73:
74: case 1:
75: n = pucopy((long)iop->io_seek, iop->io_base, iop->io_ioc);
76: break;
77:
78: case 2:
79: n = kucopy((vaddr_t)iop->io_seek, iop->io_base, iop->io_ioc);
80: break;
81:
82: default:
83: u.u_error = ENXIO;
84: return;
85: }
86: iop->io_ioc -= n;
87: if (u.u_error == EFAULT)
88: u.u_error = 0;
89: }
90:
91: /*
92: * Null/memory write routine.
93: */
94: nlwrite(dev, iop)
95: dev_t dev;
96: register IO *iop;
97: {
98: register unsigned n;
99:
100: switch (minor(dev)) {
101: case 0:
102: n = iop->io_ioc;
103: break;
104:
105: case 1:
106: n = upcopy(iop->io_base, (long)iop->io_seek, iop->io_ioc);
107: break;
108:
109: case 2:
110: n = ukcopy(iop->io_base, (vaddr_t)iop->io_seek, iop->io_ioc);
111: break;
112:
113: default:
114: u.u_error = ENXIO;
115: return;
116: }
117: iop->io_ioc -= n;
118: if (u.u_error == EFAULT)
119: u.u_error = 0;
120: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.