|
|
1.1 root 1: /*
2: * Copyright (c) 1988 University of Utah.
3: * Copyright (c) 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.
9: *
10: * Redistribution and use in source and binary forms, with or without
11: * modification, are permitted provided that the following conditions
12: * are met:
13: * 1. Redistributions of source code must retain the above copyright
14: * notice, this list of conditions and the following disclaimer.
15: * 2. Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
18: * 3. All advertising materials mentioning features or use of this software
19: * must display the following acknowledgement:
20: * This product includes software developed by the University of
21: * California, Berkeley and its contributors.
22: * 4. Neither the name of the University nor the names of its contributors
23: * may be used to endorse or promote products derived from this software
24: * without specific prior written permission.
25: *
26: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36: * SUCH DAMAGE.
37: *
38: * from: Utah $Hdr: mmap.h 1.4 89/08/14$
39: *
40: * @(#)mapmem.h 7.2 (Berkeley) 6/6/90
41: */
42:
43: /*
44: * Mapped memory descriptors.
45: *
46: * A process has one of these for every "mapped" memory region.
47: * Mapped memory is characterized by:
48: * - Corresponding physical memory is neither paged nor swapped.
49: * - User PTEs have both pg_v and pg_fod set.
50: * - Has no backing swap space unless mapped over existing data.
51: * - If mapped over existing data, original data is lost when
52: * segment is unmapped. (i.e. pages are reinitialized to ZFOD)
53: * Operations:
54: * (*mm_fork)(mp, ischild) struct mapmem *mp; int ischild;
55: * Called during fork in both parent and child. Parent
56: * call can be used for maintaining reference counts and
57: * should NEVER destroy the region. Child call should be
58: * used for unmapping regions not inherited across forks.
59: * (*mm_vfork)(mp, fup, tup) struct mapmem *mp; struct user *fup, *tup;
60: * Called twice during vfork (always in parent context)
61: * after exchanging resources (including u_mmap chains).
62: * `fup' is the donor and `tup' the recipient of the
63: * "parent" (full) context. Needed for maintaining
64: * reference counts or if the underlying object contains
65: * references to owning process. Routine should NEVER
66: * destroy the region.
67: * (*mm_exec)(mp) struct mapmem *mp;
68: * Called during exec before releasing old address space.
69: * Used for graceful cleanup of underlying object. Resources
70: * will be freed regardless of what this routine does.
71: * Need to add a post-exec call to re-establish mappings
72: * in the new address space for regions inherited across execs.
73: * (*mm_exit)(mp) struct mapmem *mp;
74: * Called during exit just before releasing address space.
75: * Used for graceful cleanup of underlying object. Resources
76: * will be freed regardless of what this routine does.
77: * The default semantics for a region with routine addresses of zero are
78: * that it is inherited across forks, stays with the "active" process during
79: * vforks, and is destroyed by execs and exit.
80: */
81:
82: struct mapmem {
83: struct mapmem *mm_next; /* next descriptor */
84: int mm_id; /* identifier (e.g. fd, shmid) */
85: caddr_t mm_uva; /* user VA at which region is mapped */
86: int mm_size; /* size of mapped region */
87: int mm_prot; /* attributes of region */
88: struct mapmemops { /* operations */
89: int (*mm_fork)();
90: int (*mm_vfork)();
91: int (*mm_exec)();
92: int (*mm_exit)();
93: } *mm_ops;
94: };
95:
96: #define MMNIL ((struct mapmem *)0)
97:
98: /* attributes */
99: #define MM_RW 0x00 /* region is read-write */
100: #define MM_RO 0x01 /* region is read-only */
101: #define MM_CI 0x02 /* caching is inhibited on region */
102: #define MM_NOCORE 0x04 /* cannot write region to core file;
103: e.g. mapped framebuffer hardware */
104:
105: #ifdef KERNEL
106: #define MMALLOC(mp) \
107: (mp) = (struct mapmem *)malloc((u_long)sizeof(struct mapmem), \
108: M_MAPMEM, M_WAITOK)
109:
110: #define MMFREE(mp) \
111: free((caddr_t)(mp), M_MAPMEM)
112: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.