1 /* $OpenBSD: vmparam.h,v 1.1 2004/02/01 05:09:49 drahn Exp $ */ 2 /* $NetBSD: vmparam.h,v 1.18 2003/05/21 18:04:44 thorpej Exp $ */ 3 4 /* 5 * Copyright (c) 2001, 2002 Wasabi Systems, Inc. 6 * All rights reserved. 7 * 8 * Written by Jason R. Thorpe for Wasabi Systems, Inc. 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 for the NetBSD Project by 21 * Wasabi Systems, Inc. 22 * 4. The name of Wasabi Systems, Inc. may not be used to endorse 23 * or promote products derived from this software without specific prior 24 * written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND 27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC 30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 * POSSIBILITY OF SUCH DAMAGE. 37 */ 38 39 #ifndef _ARM_ARM_VMPARAM_H_ 40 #define _ARM_ARM_VMPARAM_H_ 41 42 #ifdef _KERNEL 43 44 /* 45 * Virtual Memory parameters common to all arm32 platforms. 46 */ 47 48 #include <sys/lock.h> /* struct simplelock */ 49 #include <arm/pte.h> /* pt_entry_t */ 50 #endif /* _KERNEL */ 51 52 #define USRTEXT VM_MIN_ADDRESS 53 #define USRSTACK VM_MAXUSER_ADDRESS 54 #define KERNBASE VM_MAXUSER_ADDRESS 55 56 /* 57 * The time for a process to be blocked before being very swappable. 58 * This is a number of seconds which the system takes as being a non-trivial 59 * amount of real time. You probably shouldn't change this; 60 * it is used in subtle ways (fractions and multiples of it are, that is, like 61 * half of a ``long time'', almost a long time, etc.) 62 * It is related to human patience and other factors which don't really 63 * change over time. 64 */ 65 #define MAXSLP 20 66 67 /* 68 * Note that MAXTSIZ can't be larger than 32M, otherwise the compiler 69 * would have to be changed to not generate "bl" instructions. 70 */ 71 #define MAXTSIZ (16*1024*1024) /* max text size */ 72 #ifndef DFLDSIZ 73 #define DFLDSIZ (128*1024*1024) /* initial data size limit */ 74 #endif 75 #ifndef MAXDSIZ 76 #define MAXDSIZ (512*1024*1024) /* max data size */ 77 #endif 78 #ifndef DFLSSIZ 79 #define DFLSSIZ (2*1024*1024) /* initial stack size limit */ 80 #endif 81 #ifndef MAXSSIZ 82 #define MAXSSIZ (8*1024*1024) /* max stack size */ 83 #endif 84 85 /* 86 * Size of SysV shared memory map 87 */ 88 #ifndef SHMMAXPGS 89 #define SHMMAXPGS 1024 90 #endif 91 92 /* 93 * While the ARM architecture defines Section mappings, large pages, 94 * and small pages, the standard page size is (and will always be) 4K. 95 */ 96 #define PAGE_SHIFT 12 97 #define PAGE_SIZE (1 << PAGE_SHIFT) /* bytes/page */ 98 #define PAGE_MASK (PAGE_SIZE - 1) 99 100 /* 101 * Mach derived constants 102 */ 103 #define VM_MIN_ADDRESS ((vaddr_t) 0x00001000) 104 #define VM_MAXUSER_ADDRESS ((vaddr_t) ARM_KERNEL_BASE) 105 #define VM_MAX_ADDRESS VM_MAXUSER_ADDRESS 106 107 #define VM_MIN_KERNEL_ADDRESS ((vaddr_t) ARM_KERNEL_BASE) 108 #define VM_MAX_KERNEL_ADDRESS ((vaddr_t) 0xffffffff) 109 110 #ifdef _KERNEL 111 112 /* XXX max. amount of KVM to be used by buffers. */ 113 #ifndef VM_MAX_KERNEL_BUF 114 extern vaddr_t virtual_avail; 115 extern vaddr_t virtual_end; 116 117 #define VM_MAX_KERNEL_BUF \ 118 ((virtual_end - virtual_avail) * 4 / 10) 119 #endif 120 121 /* 122 * pmap-specific data store in the vm_page structure. 123 */ 124 #define __HAVE_VM_PAGE_MD 125 struct vm_page_md { 126 struct pv_entry *pvh_list; /* pv_entry list */ 127 struct simplelock pvh_slock; /* lock on this head */ 128 int pvh_attrs; /* page attributes */ 129 u_int uro_mappings; 130 u_int urw_mappings; 131 union { 132 u_short s_mappings[2]; /* Assume kernel count <= 65535 */ 133 u_int i_mappings; 134 } k_u; 135 #define kro_mappings k_u.s_mappings[0] 136 #define krw_mappings k_u.s_mappings[1] 137 #define k_mappings k_u.i_mappings 138 }; 139 140 #define VM_MDPAGE_INIT(pg) \ 141 do { \ 142 (pg)->mdpage.pvh_list = NULL; \ 143 simple_lock_init(&(pg)->mdpage.pvh_slock); \ 144 (pg)->mdpage.pvh_attrs = 0; \ 145 (pg)->mdpage.uro_mappings = 0; \ 146 (pg)->mdpage.urw_mappings = 0; \ 147 (pg)->mdpage.k_mappings = 0; \ 148 } while (/*CONSTCOND*/0) 149 150 #endif /* _KERNEL */ 151 152 #endif /* _ARM_ARM_VMPARAM_H_ */ 153