Home | History | Annotate | Line # | Download | only in uvm
uvm_param.h revision 1.41.20.1
      1  1.41.20.1    martin /*	$NetBSD: uvm_param.h,v 1.41.20.1 2023/08/09 17:42:01 martin Exp $	*/
      2        1.1       mrg 
      3       1.10       chs /*
      4        1.1       mrg  * Copyright (c) 1991, 1993
      5        1.1       mrg  *	The Regents of the University of California.  All rights reserved.
      6        1.1       mrg  *
      7        1.1       mrg  * This code is derived from software contributed to Berkeley by
      8        1.1       mrg  * The Mach Operating System project at Carnegie-Mellon University.
      9        1.1       mrg  *
     10        1.1       mrg  * Redistribution and use in source and binary forms, with or without
     11        1.1       mrg  * modification, are permitted provided that the following conditions
     12        1.1       mrg  * are met:
     13        1.1       mrg  * 1. Redistributions of source code must retain the above copyright
     14        1.1       mrg  *    notice, this list of conditions and the following disclaimer.
     15        1.1       mrg  * 2. Redistributions in binary form must reproduce the above copyright
     16        1.1       mrg  *    notice, this list of conditions and the following disclaimer in the
     17        1.1       mrg  *    documentation and/or other materials provided with the distribution.
     18       1.18       agc  * 3. Neither the name of the University nor the names of its contributors
     19        1.1       mrg  *    may be used to endorse or promote products derived from this software
     20        1.1       mrg  *    without specific prior written permission.
     21        1.1       mrg  *
     22        1.1       mrg  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     23        1.1       mrg  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     24        1.1       mrg  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     25        1.1       mrg  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     26        1.1       mrg  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     27        1.1       mrg  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     28        1.1       mrg  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     29        1.1       mrg  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     30        1.1       mrg  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     31        1.1       mrg  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     32        1.1       mrg  * SUCH DAMAGE.
     33        1.1       mrg  *
     34        1.1       mrg  *	@(#)vm_param.h	8.2 (Berkeley) 1/9/95
     35        1.1       mrg  *
     36        1.1       mrg  *
     37        1.1       mrg  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
     38        1.1       mrg  * All rights reserved.
     39        1.1       mrg  *
     40        1.1       mrg  * Authors: Avadis Tevanian, Jr., Michael Wayne Young
     41       1.10       chs  *
     42        1.1       mrg  * Permission to use, copy, modify and distribute this software and
     43        1.1       mrg  * its documentation is hereby granted, provided that both the copyright
     44        1.1       mrg  * notice and this permission notice appear in all copies of the
     45        1.1       mrg  * software, derivative works or modified versions, and any portions
     46        1.1       mrg  * thereof, and that both notices appear in supporting documentation.
     47       1.10       chs  *
     48       1.10       chs  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
     49       1.10       chs  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
     50        1.1       mrg  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
     51       1.10       chs  *
     52        1.1       mrg  * Carnegie Mellon requests users of this software to return to
     53        1.1       mrg  *
     54        1.1       mrg  *  Software Distribution Coordinator  or  Software.Distribution (at) CS.CMU.EDU
     55        1.1       mrg  *  School of Computer Science
     56        1.1       mrg  *  Carnegie Mellon University
     57        1.1       mrg  *  Pittsburgh PA 15213-3890
     58        1.1       mrg  *
     59        1.1       mrg  * any improvements or extensions that they make and grant Carnegie the
     60        1.1       mrg  * rights to redistribute these changes.
     61        1.1       mrg  */
     62        1.1       mrg 
     63        1.1       mrg /*
     64        1.1       mrg  *	Machine independent virtual memory parameters.
     65        1.1       mrg  */
     66        1.1       mrg 
     67        1.1       mrg #ifndef	_VM_PARAM_
     68        1.1       mrg #define	_VM_PARAM_
     69        1.1       mrg 
     70       1.14    atatat #ifdef _KERNEL_OPT
     71       1.28      matt #include "opt_modular.h"
     72       1.14    atatat #include "opt_uvm.h"
     73       1.14    atatat #endif
     74       1.12      matt #ifdef _KERNEL
     75       1.21        he #include <sys/types.h>
     76        1.1       mrg #include <machine/vmparam.h>
     77        1.1       mrg #endif
     78        1.1       mrg 
     79       1.16   thorpej #if defined(_KERNEL)
     80       1.16   thorpej 
     81       1.16   thorpej #if defined(PAGE_SIZE)
     82       1.16   thorpej 
     83        1.1       mrg /*
     84       1.16   thorpej  * If PAGE_SIZE is defined at this stage, it must be a constant.
     85        1.1       mrg  */
     86        1.1       mrg 
     87       1.16   thorpej #if PAGE_SIZE == 0
     88       1.16   thorpej #error Invalid PAGE_SIZE definition
     89       1.16   thorpej #endif
     90       1.16   thorpej 
     91        1.1       mrg /*
     92       1.16   thorpej  * If the platform does not need to support a variable PAGE_SIZE,
     93       1.16   thorpej  * then provide default values for MIN_PAGE_SIZE and MAX_PAGE_SIZE.
     94        1.1       mrg  */
     95       1.16   thorpej 
     96       1.16   thorpej #if !defined(MIN_PAGE_SIZE)
     97       1.16   thorpej #define	MIN_PAGE_SIZE	PAGE_SIZE
     98       1.16   thorpej #endif /* ! MIN_PAGE_SIZE */
     99       1.16   thorpej 
    100       1.16   thorpej #if !defined(MAX_PAGE_SIZE)
    101       1.16   thorpej #define	MAX_PAGE_SIZE	PAGE_SIZE
    102       1.16   thorpej #endif /* ! MAX_PAGE_SIZE */
    103       1.16   thorpej 
    104       1.16   thorpej #else /* ! PAGE_SIZE */
    105       1.16   thorpej 
    106       1.16   thorpej /*
    107       1.16   thorpej  * PAGE_SIZE is not a constant; MIN_PAGE_SIZE and MAX_PAGE_SIZE must
    108       1.16   thorpej  * be defined.
    109       1.16   thorpej  */
    110       1.16   thorpej 
    111       1.16   thorpej #if !defined(MIN_PAGE_SIZE)
    112       1.16   thorpej #error MIN_PAGE_SIZE not defined
    113       1.16   thorpej #endif
    114       1.16   thorpej 
    115       1.16   thorpej #if !defined(MAX_PAGE_SIZE)
    116       1.16   thorpej #error MAX_PAGE_SIZE not defined
    117       1.16   thorpej #endif
    118       1.16   thorpej 
    119       1.16   thorpej #endif /* PAGE_SIZE */
    120       1.16   thorpej 
    121       1.16   thorpej /*
    122       1.16   thorpej  * MIN_PAGE_SIZE and MAX_PAGE_SIZE must be constants.
    123       1.16   thorpej  */
    124       1.16   thorpej 
    125       1.16   thorpej #if MIN_PAGE_SIZE == 0
    126       1.16   thorpej #error Invalid MIN_PAGE_SIZE definition
    127       1.16   thorpej #endif
    128       1.16   thorpej 
    129       1.16   thorpej #if MAX_PAGE_SIZE == 0
    130       1.16   thorpej #error Invalid MAX_PAGE_SIZE definition
    131       1.16   thorpej #endif
    132       1.16   thorpej 
    133       1.16   thorpej /*
    134       1.16   thorpej  * If MIN_PAGE_SIZE and MAX_PAGE_SIZE are not equal, then we must use
    135       1.41     skrll  * non-constant PAGE_SIZE, et al for modules.
    136       1.16   thorpej  */
    137       1.28      matt #if (MIN_PAGE_SIZE != MAX_PAGE_SIZE)
    138       1.28      matt #define	__uvmexp_pagesize
    139       1.41     skrll #if defined(_MODULE)
    140       1.16   thorpej #undef PAGE_SIZE
    141       1.16   thorpej #undef PAGE_MASK
    142       1.16   thorpej #undef PAGE_SHIFT
    143       1.16   thorpej #endif
    144       1.28      matt #endif
    145       1.16   thorpej 
    146       1.16   thorpej /*
    147       1.16   thorpej  * Now provide PAGE_SIZE, PAGE_MASK, and PAGE_SHIFT if we do not
    148       1.16   thorpej  * have ones that are compile-time constants.
    149       1.16   thorpej  */
    150       1.16   thorpej #if !defined(PAGE_SIZE)
    151       1.27      matt extern const int *const uvmexp_pagesize;
    152       1.27      matt extern const int *const uvmexp_pagemask;
    153       1.27      matt extern const int *const uvmexp_pageshift;
    154       1.24  uebayasi #define	PAGE_SIZE	(*uvmexp_pagesize)	/* size of page */
    155       1.24  uebayasi #define	PAGE_MASK	(*uvmexp_pagemask)	/* size of page - 1 */
    156       1.24  uebayasi #define	PAGE_SHIFT	(*uvmexp_pageshift)	/* bits to shift for pages */
    157       1.16   thorpej #endif /* PAGE_SIZE */
    158       1.16   thorpej 
    159        1.1       mrg #endif /* _KERNEL */
    160        1.1       mrg 
    161        1.1       mrg /*
    162        1.1       mrg  * CTL_VM identifiers
    163        1.1       mrg  */
    164        1.1       mrg #define	VM_METER	1		/* struct vmmeter */
    165        1.1       mrg #define	VM_LOADAVG	2		/* struct loadavg */
    166        1.2    simonb #define	VM_UVMEXP	3		/* struct uvmexp */
    167        1.1       mrg #define	VM_NKMEMPAGES	4		/* kmem_map pages */
    168        1.2    simonb #define	VM_UVMEXP2	5		/* struct uvmexp_sysctl */
    169        1.5       chs #define	VM_ANONMIN	6
    170       1.13       chs #define	VM_EXECMIN	7
    171       1.13       chs #define	VM_FILEMIN	8
    172       1.11      matt #define	VM_MAXSLP	9
    173       1.11      matt #define	VM_USPACE	10
    174       1.13       chs #define	VM_ANONMAX	11
    175       1.13       chs #define	VM_EXECMAX	12
    176       1.13       chs #define	VM_FILEMAX	13
    177       1.34      matt #define	VM_MINADDRESS	14
    178       1.34      matt #define	VM_MAXADDRESS	15
    179       1.35  christos #define	VM_PROC		16		/* process information */
    180       1.37     joerg #define	VM_GUARD_SIZE	17		/* guard size for main thread */
    181       1.37     joerg #define	VM_THREAD_GUARD_SIZE	18	/* default guard size for new threads */
    182        1.5       chs 
    183       1.35  christos #define VM_PROC_MAP	1		/* struct kinfo_vmentry */
    184        1.1       mrg 
    185        1.1       mrg #ifndef ASSEMBLER
    186        1.1       mrg /*
    187        1.1       mrg  *	Convert addresses to pages and vice versa.
    188        1.1       mrg  *	No rounding is used.
    189        1.1       mrg  */
    190        1.1       mrg #ifdef _KERNEL
    191        1.4        pk #define	atop(x)		(((paddr_t)(x)) >> PAGE_SHIFT)
    192       1.26      matt #define	ptoa(x)		(((paddr_t)(x)) << PAGE_SHIFT)
    193        1.1       mrg 
    194        1.1       mrg /*
    195        1.1       mrg  * Round off or truncate to the nearest page.  These will work
    196        1.1       mrg  * for either addresses or counts (i.e., 1 byte rounds to 1 page).
    197        1.1       mrg  */
    198        1.1       mrg #define	round_page(x)	(((x) + PAGE_MASK) & ~PAGE_MASK)
    199        1.1       mrg #define	trunc_page(x)	((x) & ~PAGE_MASK)
    200       1.14    atatat 
    201       1.32  christos #ifndef VM_DEFAULT_ADDRESS_BOTTOMUP
    202       1.32  christos #define VM_DEFAULT_ADDRESS_BOTTOMUP(da, sz) \
    203       1.32  christos     round_page((vaddr_t)(da) + (vsize_t)maxdmap)
    204       1.32  christos #endif
    205       1.33  christos 
    206       1.37     joerg extern unsigned int user_stack_guard_size;
    207       1.37     joerg extern unsigned int user_thread_stack_guard_size;
    208       1.32  christos #ifndef VM_DEFAULT_ADDRESS_TOPDOWN
    209       1.32  christos #define VM_DEFAULT_ADDRESS_TOPDOWN(da, sz) \
    210       1.36     joerg     trunc_page(VM_MAXUSER_ADDRESS - MAXSSIZ - (sz) - user_stack_guard_size)
    211       1.32  christos #endif
    212       1.32  christos 
    213        1.3       chs extern int		ubc_nwins;	/* number of UBC mapping windows */
    214       1.39   mlelstv extern const int	ubc_winshift;	/* shift for a UBC mapping window */
    215        1.1       mrg 
    216        1.1       mrg #else
    217        1.1       mrg /* out-of-kernel versions of round_page and trunc_page */
    218        1.1       mrg #define	round_page(x) \
    219        1.1       mrg 	((((vaddr_t)(x) + (vm_page_size - 1)) / vm_page_size) * \
    220        1.1       mrg 	    vm_page_size)
    221        1.1       mrg #define	trunc_page(x) \
    222        1.1       mrg 	((((vaddr_t)(x)) / vm_page_size) * vm_page_size)
    223        1.1       mrg 
    224        1.1       mrg #endif /* _KERNEL */
    225       1.31  uebayasi 
    226       1.31  uebayasi /*
    227       1.31  uebayasi  * typedefs, necessary for standard UVM headers.
    228       1.31  uebayasi  */
    229       1.31  uebayasi 
    230       1.31  uebayasi typedef unsigned int uvm_flag_t;
    231       1.31  uebayasi 
    232       1.31  uebayasi typedef int vm_inherit_t;	/* XXX: inheritance codes */
    233       1.31  uebayasi typedef off_t voff_t;		/* XXX: offset within a uvm_object */
    234       1.31  uebayasi typedef voff_t pgoff_t;		/* XXX: number of pages within a uvm object */
    235       1.31  uebayasi 
    236        1.1       mrg #endif /* ASSEMBLER */
    237        1.1       mrg #endif /* _VM_PARAM_ */
    238