Deleted Added
full compact
mem.c (12662) mem.c (12675)
1/*-
2 * Copyright (c) 1988 University of Utah.
3 * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
4 * All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * the Systems Programming Group of the University of Utah Computer
8 * Science Department, and code derived from software contributed to

--- 24 unchanged lines hidden (view full) ---

33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37 * SUCH DAMAGE.
38 *
39 * from: Utah $Hdr: mem.c 1.13 89/10/08$
40 * from: @(#)mem.c 7.2 (Berkeley) 5/9/91
1/*-
2 * Copyright (c) 1988 University of Utah.
3 * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
4 * All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * the Systems Programming Group of the University of Utah Computer
8 * Science Department, and code derived from software contributed to

--- 24 unchanged lines hidden (view full) ---

33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37 * SUCH DAMAGE.
38 *
39 * from: Utah $Hdr: mem.c 1.13 89/10/08$
40 * from: @(#)mem.c 7.2 (Berkeley) 5/9/91
41 * $Id: mem.c,v 1.21 1995/11/29 14:39:26 julian Exp $
41 * $Id: mem.c,v 1.22 1995/12/07 12:45:34 davidg Exp $
42 */
43
44/*
45 * Memory special file
46 */
47
48#include <sys/param.h>
49#include <sys/conf.h>
50#include <sys/buf.h>
42 */
43
44/*
45 * Memory special file
46 */
47
48#include <sys/param.h>
49#include <sys/conf.h>
50#include <sys/buf.h>
51#ifdef DEVFS
52#include <sys/devfsext.h>
53#endif /* DEVFS */
54#include <sys/kernel.h>
51#include <sys/systm.h>
52#include <sys/uio.h>
53#include <sys/malloc.h>
54#include <sys/proc.h>
55
56#include <machine/cpu.h>
57#include <machine/random.h>
58#include <machine/psl.h>
59
60#include <vm/vm.h>
61#include <vm/vm_param.h>
62#include <vm/lock.h>
63#include <vm/vm_prot.h>
64#include <vm/pmap.h>
65#include <vm/vm_extern.h>
66
55#include <sys/systm.h>
56#include <sys/uio.h>
57#include <sys/malloc.h>
58#include <sys/proc.h>
59
60#include <machine/cpu.h>
61#include <machine/random.h>
62#include <machine/psl.h>
63
64#include <vm/vm.h>
65#include <vm/vm_param.h>
66#include <vm/lock.h>
67#include <vm/vm_prot.h>
68#include <vm/pmap.h>
69#include <vm/vm_extern.h>
70
67#ifdef JREMOD
68#include <sys/kernel.h>
71
72
73static d_open_t mmopen;
74static d_close_t mmclose;
75static d_rdwr_t mmrw;
76static d_ioctl_t mmioctl;
77static d_mmap_t memmmap;
78
69#define CDEV_MAJOR 2
79#define CDEV_MAJOR 2
70#endif /*JREMOD*/
80struct cdevsw mem_cdevsw =
81 { mmopen, mmclose, mmrw, mmrw, /*2*/
82 mmioctl, nullstop, nullreset, nodevtotty,/* memory */
83 seltrue, memmmap, NULL, "mem", NULL, -1 };
71
72#ifdef DEVFS
84
85#ifdef DEVFS
73#include <sys/devfsext.h>
86static void *mem_devfs_token;
87static void *kmem_devfs_token;
88static void *null_devfs_token;
89static void *random_devfs_token;
90static void *urandom_devfs_token;
91static void *zero_devfs_token;
92static void *io_devfs_token;
74
93
75static void
76memdevfs_init(dev_t dev)
94static void
95memdevfs_init()
77{
96{
78 void * x;
79 int maj = major(dev);
80/* path name major minor type uid gid perm*/
81 x=devfs_add_devsw("/misc", "mem", maj, 0, DV_CHR, 0, 2, 0640);
82 x=devfs_add_devsw("/misc", "kmem", maj, 1, DV_CHR, 0, 2, 0640);
83 x=devfs_add_devsw("/misc", "null", maj, 2, DV_CHR, 0, 0, 0666);
84 x=devfs_add_devsw("/misc", "random", maj, 3, DV_CHR, 0, 0, 0666);
85 x=devfs_add_devsw("/misc", "urandom", maj, 4, DV_CHR, 0, 0, 0666);
86 x=devfs_add_devsw("/misc", "zero", maj, 12, DV_CHR, 0, 0, 0666);
87 x=devfs_add_devsw("/misc", "io", maj, 14, DV_CHR, 0, 2, 0640);
97/* path name cdevsw minor type uid gid perm*/
98 mem_devfs_token = devfs_add_devsw(
99 "/", "mem", &mem_cdevsw, 0, DV_CHR, 0, 2, 0640);
100 kmem_devfs_token = devfs_add_devsw(
101 "/", "kmem", &mem_cdevsw, 1, DV_CHR, 0, 2, 0640);
102 null_devfs_token = devfs_add_devsw(
103 "/", "null", &mem_cdevsw, 2, DV_CHR, 0, 0, 0666);
104 random_devfs_token = devfs_add_devsw(
105 "/", "random", &mem_cdevsw, 3, DV_CHR, 0, 0, 0666);
106 urandom_devfs_token = devfs_add_devsw(
107 "/", "urandom", &mem_cdevsw, 4, DV_CHR, 0, 0, 0666);
108 zero_devfs_token = devfs_add_devsw(
109 "/", "zero", &mem_cdevsw, 12, DV_CHR, 0, 0, 0666);
110 io_devfs_token = devfs_add_devsw(
111 "/", "io", &mem_cdevsw, 14, DV_CHR, 0, 2, 0640);
88}
89#endif /* DEVFS */
90
91extern char *ptvmmap; /* poor name! */
92
112}
113#endif /* DEVFS */
114
115extern char *ptvmmap; /* poor name! */
116
93int
117static int
94mmclose(dev, flags, fmt, p)
95 dev_t dev;
96 int flags;
97 int fmt;
98 struct proc *p;
99{
100 struct trapframe *fp;
101
102 switch (minor(dev)) {
103 case 14:
104 fp = (struct trapframe *)curproc->p_md.md_regs;
105 fp->tf_eflags &= ~PSL_IOPL;
106 break;
107 default:
108 break;
109 }
110 return(0);
111}
112
118mmclose(dev, flags, fmt, p)
119 dev_t dev;
120 int flags;
121 int fmt;
122 struct proc *p;
123{
124 struct trapframe *fp;
125
126 switch (minor(dev)) {
127 case 14:
128 fp = (struct trapframe *)curproc->p_md.md_regs;
129 fp->tf_eflags &= ~PSL_IOPL;
130 break;
131 default:
132 break;
133 }
134 return(0);
135}
136
113int
137static int
114mmopen(dev, flags, fmt, p)
115 dev_t dev;
116 int flags;
117 int fmt;
118 struct proc *p;
119{
120 struct trapframe *fp;
121
122 switch (minor(dev)) {
123 case 14:
124 fp = (struct trapframe *)curproc->p_md.md_regs;
125 fp->tf_eflags |= PSL_IOPL;
126 break;
127 default:
128 break;
129 }
130 return(0);
131}
132
138mmopen(dev, flags, fmt, p)
139 dev_t dev;
140 int flags;
141 int fmt;
142 struct proc *p;
143{
144 struct trapframe *fp;
145
146 switch (minor(dev)) {
147 case 14:
148 fp = (struct trapframe *)curproc->p_md.md_regs;
149 fp->tf_eflags |= PSL_IOPL;
150 break;
151 default:
152 break;
153 }
154 return(0);
155}
156
133int
157static int
134mmrw(dev, uio, flags)
135 dev_t dev;
136 struct uio *uio;
137 int flags;
138{
139 register int o;
140 register u_int c, v;
141 u_int poolsize;

--- 170 unchanged lines hidden (view full) ---

312
313
314
315
316/*******************************************************\
317* allow user processes to MMAP some memory sections *
318* instead of going through read/write *
319\*******************************************************/
158mmrw(dev, uio, flags)
159 dev_t dev;
160 struct uio *uio;
161 int flags;
162{
163 register int o;
164 register u_int c, v;
165 u_int poolsize;

--- 170 unchanged lines hidden (view full) ---

336
337
338
339
340/*******************************************************\
341* allow user processes to MMAP some memory sections *
342* instead of going through read/write *
343\*******************************************************/
320int memmmap(dev_t dev, int offset, int nprot)
344static int
345memmmap(dev_t dev, int offset, int nprot)
321{
322 switch (minor(dev))
323 {
324
325/* minor device 0 is physical memory */
326 case 0:
327 return i386_btop(offset);
328

--- 5 unchanged lines hidden (view full) ---

334 return -1;
335 }
336}
337
338/*
339 * Allow userland to select which interrupts will be used in the muck
340 * gathering business.
341 */
346{
347 switch (minor(dev))
348 {
349
350/* minor device 0 is physical memory */
351 case 0:
352 return i386_btop(offset);
353

--- 5 unchanged lines hidden (view full) ---

359 return -1;
360 }
361}
362
363/*
364 * Allow userland to select which interrupts will be used in the muck
365 * gathering business.
366 */
342int
367static int
343mmioctl(dev, cmd, cmdarg, flags, p)
344 dev_t dev;
345 int cmd;
346 caddr_t cmdarg;
347 int flags;
348 struct proc *p;
349{
350 int error;

--- 27 unchanged lines hidden (view full) ---

378 default:
379 return (ENOTTY);
380 }
381 return (0);
382}
383
384
385
368mmioctl(dev, cmd, cmdarg, flags, p)
369 dev_t dev;
370 int cmd;
371 caddr_t cmdarg;
372 int flags;
373 struct proc *p;
374{
375 int error;

--- 27 unchanged lines hidden (view full) ---

403 default:
404 return (ENOTTY);
405 }
406 return (0);
407}
408
409
410
386#ifdef JREMOD
387struct cdevsw mem_cdevsw =
388 { mmopen, mmclose, mmrw, mmrw, /*2*/
389 mmioctl, nullstop, nullreset, nodevtotty,/* memory */
390 seltrue, memmmap, NULL };
391
392static mem_devsw_installed = 0;
393
411static mem_devsw_installed = 0;
412
394static void mem_drvinit(void *unused)
413static void
414mem_drvinit(void *unused)
395{
396 dev_t dev;
397
398 if( ! mem_devsw_installed ) {
415{
416 dev_t dev;
417
418 if( ! mem_devsw_installed ) {
399 dev = makedev(CDEV_MAJOR,0);
400 cdevsw_add(&dev,&mem_cdevsw,NULL);
419 dev = makedev(CDEV_MAJOR, 0);
420 cdevsw_add(&dev,&mem_cdevsw, NULL);
401 mem_devsw_installed = 1;
402#ifdef DEVFS
421 mem_devsw_installed = 1;
422#ifdef DEVFS
403 memdevfs_init(dev);
423 memdevfs_init();
404#endif
405 }
406}
407
408SYSINIT(memdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,mem_drvinit,NULL)
409
424#endif
425 }
426}
427
428SYSINIT(memdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,mem_drvinit,NULL)
429
410#endif /* JREMOD */
411