Annotation of sys/arch/sparc64/include/vmparam.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: vmparam.h,v 1.16 2007/04/21 13:43:38 art Exp $ */
! 2: /* $NetBSD: vmparam.h,v 1.18 2001/05/01 02:19:19 thorpej Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 1992, 1993
! 6: * The Regents of the University of California. All rights reserved.
! 7: *
! 8: * This software was developed by the Computer Systems Engineering group
! 9: * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
! 10: * contributed to Berkeley.
! 11: *
! 12: * All advertising materials mentioning features or use of this software
! 13: * must display the following acknowledgement:
! 14: * This product includes software developed by the University of
! 15: * California, Lawrence Berkeley Laboratory.
! 16: *
! 17: * Redistribution and use in source and binary forms, with or without
! 18: * modification, are permitted provided that the following conditions
! 19: * are met:
! 20: * 1. Redistributions of source code must retain the above copyright
! 21: * notice, this list of conditions and the following disclaimer.
! 22: * 2. Redistributions in binary form must reproduce the above copyright
! 23: * notice, this list of conditions and the following disclaimer in the
! 24: * documentation and/or other materials provided with the distribution.
! 25: * 3. Neither the name of the University nor the names of its contributors
! 26: * may be used to endorse or promote products derived from this software
! 27: * without specific prior written permission.
! 28: *
! 29: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 30: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 31: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 32: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 33: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 34: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 35: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 36: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 37: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 38: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 39: * SUCH DAMAGE.
! 40: *
! 41: * @(#)vmparam.h 8.1 (Berkeley) 6/11/93
! 42: */
! 43:
! 44: /*
! 45: * Machine dependent constants for Sun-4c SPARC
! 46: */
! 47:
! 48: #ifndef VMPARAM_H
! 49: #define VMPARAM_H
! 50:
! 51: /*
! 52: * USRTEXT is the start of the user text/data space, while USRSTACK
! 53: * is the top (end) of the user stack.
! 54: */
! 55: #define USRTEXT 0x2000 /* Start of user text */
! 56: #define USRSTACK 0xffffffffffffe000L
! 57:
! 58: /*
! 59: * Virtual memory related constants, all in bytes
! 60: */
! 61: /* #ifdef __arch64__ */
! 62: #if 0
! 63: /*
! 64: * 64-bit limits:
! 65: *
! 66: * Since the compiler generates `call' instructions we can't
! 67: * have more than 4GB in a single text segment.
! 68: *
! 69: * And since we only have a 40-bit adderss space, allow half
! 70: * of that for data and the other half for stack.
! 71: */
! 72: #ifndef MAXTSIZ
! 73: #define MAXTSIZ (4L*1024*1024*1024) /* max text size */
! 74: #endif
! 75: #ifndef DFLDSIZ
! 76: #define DFLDSIZ (128L*1024*1024) /* initial data size limit */
! 77: #endif
! 78: #ifndef MAXDSIZ
! 79: #define MAXDSIZ (512L*1024*1024*1024) /* max data size */
! 80: #endif
! 81: #ifndef DFLSSIZ
! 82: #define DFLSSIZ (1024*1024) /* initial stack size limit */
! 83: #endif
! 84: #ifndef MAXSSIZ
! 85: #define MAXSSIZ MAXDSIZ /* max stack size */
! 86: #endif
! 87: #else
! 88: /*
! 89: * 32-bit limits:
! 90: *
! 91: * We only have 4GB to play with. Limit stack, data, and text
! 92: * each to half of that.
! 93: *
! 94: * This is silly. Apparently if we go above these numbers
! 95: * integer overflows in other parts of the kernel cause hangs.
! 96: */
! 97: #ifndef MAXTSIZ
! 98: #define MAXTSIZ (1*1024*1024*1024) /* max text size */
! 99: #endif
! 100: #ifndef DFLDSIZ
! 101: #define DFLDSIZ (128*1024*1024) /* initial data size limit */
! 102: #endif
! 103: #ifndef MAXDSIZ
! 104: #define MAXDSIZ (1*1024*1024*1024) /* max data size */
! 105: #endif
! 106: #ifndef DFLSSIZ
! 107: #define DFLSSIZ (1024*1024) /* initial stack size limit */
! 108: #endif
! 109: #ifndef MAXSSIZ
! 110: #define MAXSSIZ (8*1024*1024) /* max stack size */
! 111: #endif
! 112: #endif
! 113:
! 114: #define STACKGAP_RANDOM 256*1024
! 115:
! 116: /*
! 117: * Size of shared memory map
! 118: */
! 119: #ifndef SHMMAXPGS
! 120: #define SHMMAXPGS 4096 /* 32mb */
! 121: #endif
! 122:
! 123: /*
! 124: * Mach derived constants
! 125: */
! 126:
! 127: /*
! 128: * User/kernel map constants.
! 129: */
! 130: #define VM_MIN_ADDRESS ((vaddr_t)0)
! 131: #define VM_MAX_ADDRESS ((vaddr_t)-1)
! 132: #define VM_MAXUSER_ADDRESS ((vaddr_t)-1)
! 133:
! 134: #define VM_MIN_KERNEL_ADDRESS ((vaddr_t)KERNBASE)
! 135: #define VM_MAX_KERNEL_ADDRESS ((vaddr_t)0x000007ffffffffffL)
! 136:
! 137: #define VM_PHYSSEG_MAX 32 /* up to 32 segments */
! 138: #define VM_PHYSSEG_STRAT VM_PSTRAT_BSEARCH
! 139: #define VM_PHYSSEG_NOADD /* can't add RAM after vm_mem_init */
! 140:
! 141: #define VM_NFREELIST 1
! 142: #define VM_FREELIST_DEFAULT 0
! 143:
! 144: #define __HAVE_VM_PAGE_MD
! 145: /*
! 146: * For each struct vm_page, there is a list of all currently valid virtual
! 147: * mappings of that page. An entry is a pv_entry_t, the list is pv_table.
! 148: *
! 149: * XXX - this doesn't belong here, but for now we have to keep it here
! 150: * because of include ordering issues.
! 151: */
! 152: typedef struct pv_entry {
! 153: struct pv_entry *pv_next; /* next pv_entry */
! 154: struct pmap *pv_pmap; /* pmap where mapping lies */
! 155: vaddr_t pv_va; /* virtual address for mapping */
! 156: } *pv_entry_t;
! 157: /* PV flags encoded in the low bits of the VA of the first pv_entry */
! 158:
! 159: struct vm_page_md {
! 160: struct pv_entry pvent;
! 161: };
! 162:
! 163: #define VM_MDPAGE_INIT(pg) do { \
! 164: (pg)->mdpage.pvent.pv_next = NULL; \
! 165: (pg)->mdpage.pvent.pv_pmap = NULL; \
! 166: (pg)->mdpage.pvent.pv_va = 0; \
! 167: } while (0)
! 168:
! 169: #if defined (_KERNEL) && !defined(_LOCORE)
! 170: struct vm_map;
! 171: vaddr_t dvma_mapin(struct vm_map *, vaddr_t, int, int);
! 172: void dvma_mapout(vaddr_t, vaddr_t, int);
! 173: #endif
! 174: #endif
CVSweb