[BACK]Return to uvm_pmap.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / uvm

Annotation of src/sys/uvm/uvm_pmap.h, Revision 1.21.32.3

1.21.32.3! yamt        1: /*     $NetBSD: uvm_pmap.h,v 1.21.32.2 2009/08/19 18:48:36 yamt Exp $  */
1.1       mrg         2:
1.7       chs         3: /*
1.1       mrg         4:  * Copyright (c) 1991, 1993
                      5:  *     The Regents of the University of California.  All rights reserved.
                      6:  *
                      7:  * This code is derived from software contributed to Berkeley by
                      8:  * The Mach Operating System project at Carnegie-Mellon University.
                      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.
1.15      agc        18:  * 3. Neither the name of the University nor the names of its contributors
1.1       mrg        19:  *    may be used to endorse or promote products derived from this software
                     20:  *    without specific prior written permission.
                     21:  *
                     22:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     23:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     24:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     25:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     26:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     27:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     28:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     29:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     30:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     31:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     32:  * SUCH DAMAGE.
                     33:  *
                     34:  *     @(#)pmap.h      8.1 (Berkeley) 6/11/93
                     35:  *
                     36:  *
                     37:  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
                     38:  * All rights reserved.
                     39:  *
                     40:  * Author: Avadis Tevanian, Jr.
1.7       chs        41:  *
1.1       mrg        42:  * Permission to use, copy, modify and distribute this software and
                     43:  * its documentation is hereby granted, provided that both the copyright
                     44:  * notice and this permission notice appear in all copies of the
                     45:  * software, derivative works or modified versions, and any portions
                     46:  * thereof, and that both notices appear in supporting documentation.
1.7       chs        47:  *
                     48:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     49:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
1.1       mrg        50:  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
1.7       chs        51:  *
1.1       mrg        52:  * Carnegie Mellon requests users of this software to return to
                     53:  *
                     54:  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
                     55:  *  School of Computer Science
                     56:  *  Carnegie Mellon University
                     57:  *  Pittsburgh PA 15213-3890
                     58:  *
                     59:  * any improvements or extensions that they make and grant Carnegie the
                     60:  * rights to redistribute these changes.
                     61:  */
                     62:
                     63: /*
                     64:  *     Machine address mapping definitions -- machine-independent
                     65:  *     section.  [For machine-dependent section, see "machine/pmap.h".]
                     66:  */
                     67:
                     68: #ifndef        _PMAP_VM_
                     69: #define        _PMAP_VM_
                     70:
1.12      thorpej    71: struct lwp;            /* for pmap_activate()/pmap_deactivate() proto */
1.1       mrg        72:
1.21.32.1  yamt       73: struct pmap;
                     74: typedef struct pmap *pmap_t;
                     75:
                     76: extern struct pmap     *const kernel_pmap_ptr;
                     77: #define pmap_kernel()  kernel_pmap_ptr
                     78:
1.1       mrg        79: /*
                     80:  * Each machine dependent implementation is expected to
                     81:  * keep certain statistics.  They may do this anyway they
                     82:  * so choose, but are expected to return the statistics
                     83:  * in the following structure.
                     84:  */
                     85: struct pmap_statistics {
                     86:        long            resident_count; /* # of pages mapped (total)*/
                     87:        long            wired_count;    /* # of pages wired */
                     88: };
                     89: typedef struct pmap_statistics *pmap_statistics_t;
                     90:
1.8       matt       91: #ifdef _KERNEL
1.1       mrg        92: #include <machine/pmap.h>
1.8       matt       93: #endif
1.1       mrg        94:
                     95: /*
                     96:  * Flags passed to pmap_enter().  Note the bottom 3 bits are VM_PROT_*
                     97:  * bits, used to indicate the access type that was made (to seed modified
                     98:  * and referenced information).
1.21.32.2  yamt       99:  *
                    100:  * Flags marked [PA] are for pmap_kenter_pa() only.  Flags marked [BOTH]
                    101:  * apply to pmap_kenter_pa() and pmap_enter().  All other flags are valid
                    102:  * for pmap_enter() only.
1.1       mrg       103:  */
                    104: #define        PMAP_WIRED      0x00000010      /* wired mapping */
                    105: #define        PMAP_CANFAIL    0x00000020      /* can fail if resource shortage */
1.21.32.3! yamt      106: #if defined(PMAP_ENABLE_PMAP_KMPAGE)
1.21.32.2  yamt      107: #define        PMAP_KMPAGE     0x00000040      /* [PA] page used for kernel memory */
1.21.32.3! yamt      108: #else
        !           109: #define        PMAP_KMPAGE     0x00000000
        !           110: #endif /* PMAP_ENABLE_PMAP_KMPAGE */
1.1       mrg       111:
1.21.32.1  yamt      112: #define        PMAP_MD_MASK    0xff000000      /* Machine-dependent bits */
                    113:
1.1       mrg       114: #ifndef PMAP_EXCLUDE_DECLS     /* Used in Sparc port to virtualize pmap mod */
                    115: #ifdef _KERNEL
                    116: __BEGIN_DECLS
1.17      junyoung  117: void           pmap_activate(struct lwp *);
                    118: void           pmap_deactivate(struct lwp *);
                    119: void           pmap_unwire(pmap_t, vaddr_t);
1.1       mrg       120:
                    121: #if !defined(pmap_clear_modify)
1.20      thorpej   122: bool           pmap_clear_modify(struct vm_page *);
1.1       mrg       123: #endif
                    124: #if !defined(pmap_clear_reference)
1.20      thorpej   125: bool           pmap_clear_reference(struct vm_page *);
1.1       mrg       126: #endif
                    127:
1.18      he        128: #if !defined(pmap_collect)
1.17      junyoung  129: void           pmap_collect(pmap_t);
1.18      he        130: #endif
1.16      junyoung  131: #if !defined(pmap_copy)
1.17      junyoung  132: void           pmap_copy(pmap_t, pmap_t, vaddr_t, vsize_t, vaddr_t);
1.16      junyoung  133: #endif
1.10      thorpej   134: #if !defined(pmap_copy_page)
1.17      junyoung  135: void           pmap_copy_page(paddr_t, paddr_t);
1.10      thorpej   136: #endif
1.17      junyoung  137: struct pmap    *pmap_create(void);
                    138: void           pmap_destroy(pmap_t);
1.21.32.1  yamt      139: int            pmap_enter(pmap_t, vaddr_t, paddr_t, vm_prot_t, u_int);
1.20      thorpej   140: bool           pmap_extract(pmap_t, vaddr_t, paddr_t *);
1.1       mrg       141: #if defined(PMAP_GROWKERNEL)
1.17      junyoung  142: vaddr_t                pmap_growkernel(vaddr_t);
1.1       mrg       143: #endif
                    144:
1.17      junyoung  145: void           pmap_init(void);
1.1       mrg       146:
1.17      junyoung  147: void           pmap_kenter_pa(vaddr_t, paddr_t, vm_prot_t);
                    148: void           pmap_kremove(vaddr_t, vsize_t);
1.1       mrg       149: #if !defined(pmap_is_modified)
1.20      thorpej   150: bool           pmap_is_modified(struct vm_page *);
1.1       mrg       151: #endif
                    152: #if !defined(pmap_is_referenced)
1.20      thorpej   153: bool           pmap_is_referenced(struct vm_page *);
1.1       mrg       154: #endif
                    155:
1.17      junyoung  156: void           pmap_page_protect(struct vm_page *, vm_prot_t);
1.1       mrg       157:
                    158: #if !defined(pmap_phys_address)
1.21      macallan  159: paddr_t                pmap_phys_address(paddr_t);
1.1       mrg       160: #endif
1.17      junyoung  161: void           pmap_protect(pmap_t, vaddr_t, vaddr_t, vm_prot_t);
1.18      he        162: #if !defined(pmap_reference)
1.17      junyoung  163: void           pmap_reference(pmap_t);
1.18      he        164: #endif
                    165: #if !defined(pmap_remove)
1.17      junyoung  166: void           pmap_remove(pmap_t, vaddr_t, vaddr_t);
1.18      he        167: #endif
1.17      junyoung  168: void           pmap_remove_all(struct pmap *);
1.16      junyoung  169: #if !defined(pmap_update)
1.17      junyoung  170: void           pmap_update(pmap_t);
1.16      junyoung  171: #endif
1.6       thorpej   172: #if !defined(pmap_resident_count)
1.17      junyoung  173: long           pmap_resident_count(pmap_t);
1.6       thorpej   174: #endif
                    175: #if !defined(pmap_wired_count)
1.17      junyoung  176: long           pmap_wired_count(pmap_t);
1.6       thorpej   177: #endif
1.10      thorpej   178: #if !defined(pmap_zero_page)
1.17      junyoung  179: void           pmap_zero_page(paddr_t);
1.10      thorpej   180: #endif
1.1       mrg       181:
1.17      junyoung  182: void           pmap_virtual_space(vaddr_t *, vaddr_t *);
1.1       mrg       183: #if defined(PMAP_STEAL_MEMORY)
1.17      junyoung  184: vaddr_t                pmap_steal_memory(vsize_t, vaddr_t *, vaddr_t *);
1.1       mrg       185: #endif
                    186:
                    187: #if defined(PMAP_FORK)
1.17      junyoung  188: void           pmap_fork(pmap_t, pmap_t);
1.1       mrg       189: #endif
                    190: __END_DECLS
                    191: #endif /* kernel*/
                    192: #endif  /* PMAP_EXCLUDE_DECLS */
                    193:
                    194: #endif /* _PMAP_VM_ */

CVSweb <webmaster@jp.NetBSD.org>