1 /* $OpenBSD: vmparam.h,v 1.8 2006/06/04 17:20:39 miod Exp $ */ 2 /* 3 * Mach Operating System 4 * Copyright (c) 1992 Carnegie Mellon University 5 * All Rights Reserved. 6 * 7 * Permission to use, copy, modify and distribute this software and its 8 * documentation is hereby granted, provided that both the copyright 9 * notice and this permission notice appear in all copies of the 10 * software, derivative works or modified versions, and any portions 11 * thereof, and that both notices appear in supporting documentation. 12 * 13 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 14 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 15 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 16 * 17 * Carnegie Mellon requests users of this software to return to 18 * 19 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 20 * School of Computer Science 21 * Carnegie Mellon University 22 * Pittsburgh PA 15213-3890 23 * 24 * any improvements or extensions that they make and grant Carnegie Mellon 25 * the rights to redistribute these changes. 26 */ 27 28 /* 29 * machine dependent virtual memory parameters. 30 */ 31 32 33 #ifndef _MACHINE_VM_PARAM_ 34 #define _MACHINE_VM_PARAM_ 35 36 /* 37 * USRTEXT is the start of the user text/data space, while USRSTACK 38 * is the top (end) of the user stack. 39 */ 40 #define USRTEXT 0x1000 /* Start of user text */ 41 #define USRSTACK VM_MAXUSER_ADDRESS /* Start of user stack */ 42 43 /* 44 * Virtual memory related constants, all in bytes 45 */ 46 #ifndef MAXTSIZ 47 #define MAXTSIZ (8*1024*1024) /* max text size */ 48 #endif 49 #ifndef DFLDSIZ 50 #define DFLDSIZ (32*1024*1024) /* initial data size limit */ 51 #endif 52 #ifndef MAXDSIZ 53 #define MAXDSIZ (64*1024*1024) /* max data size */ 54 #endif 55 #ifndef DFLSSIZ 56 #define DFLSSIZ (2*1024*1024) /* initial stack size limit */ 57 #endif 58 #ifndef MAXSSIZ 59 #define MAXSSIZ MAXDSIZ /* max stack size */ 60 #endif 61 62 #define STACKGAP_RANDOM 256*1024 63 64 /* 65 * Size of shared memory map 66 */ 67 #ifndef SHMMAXPGS 68 #define SHMMAXPGS 1024 69 #endif 70 71 #define VM_MIN_ADDRESS ((vaddr_t)0) 72 #define VM_MAX_ADDRESS ((vaddr_t)0xfffff000) 73 #define VM_MAXUSER_ADDRESS VM_MAX_ADDRESS 74 75 /* 76 * Although user and supervisor address spaces are separate, we limit 77 * ourselves to 512KB KVM because the kernel page table is statically 78 * allocated. 79 */ 80 #define VM_MIN_KERNEL_ADDRESS ((vaddr_t)0) 81 #define VM_MAX_KERNEL_ADDRESS ((vaddr_t)0x20000000) 82 83 /* virtual sizes (bytes) for various kernel submaps */ 84 #define VM_PHYS_SIZE (1 * NPTEPG * PAGE_SIZE) 85 86 /* 87 * Constants which control the way the VM system deals with memory segments. 88 * The mvme88k only has one physical memory segment. 89 */ 90 #define VM_PHYSSEG_MAX 1 91 #define VM_PHYSSEG_STRAT VM_PSTRAT_RANDOM 92 #define VM_PHYSSEG_NOADD 93 94 #define VM_NFREELIST 1 95 #define VM_FREELIST_DEFAULT 0 96 97 #ifndef _LOCORE 98 /* 99 * pmap-specific data stored in the vm_physmem[] array. 100 */ 101 102 /* XXX - belongs in pmap.h, but put here because of ordering issues */ 103 struct pv_entry { 104 struct pv_entry *pv_next; /* next pv_entry */ 105 struct pmap *pv_pmap; /* pmap where mapping lies */ 106 vaddr_t pv_va; /* virtual address for mapping */ 107 int pv_flags; 108 }; 109 110 #define __HAVE_VM_PAGE_MD 111 struct vm_page_md { 112 struct pv_entry pvent; 113 }; 114 115 #define VM_MDPAGE_INIT(pg) do { \ 116 (pg)->mdpage.pvent.pv_next = NULL; \ 117 (pg)->mdpage.pvent.pv_pmap = NULL; \ 118 (pg)->mdpage.pvent.pv_va = 0; \ 119 (pg)->mdpage.pvent.pv_flags = 0; \ 120 } while (0) 121 122 #endif /* _LOCORE */ 123 124 #endif /* _MACHINE_VM_PARAM_ */ 125